HIT深入理解计算机系统大作业
计算机系统
大作业
题 目 程序人生-Hello’s P2P
专 业 计算机
学 号 120L021909
班 级 2003006
学 生 邢俊文
指 导 教 师 吴锐
计算机科学与技术学院
2021年5月
关键词:Hello;预处理;编译;汇编;链接;进程管理;存储管理;IO管理
第1章 概述................................................................................... - 4 -
1.1 Hello简介............................................................................ - 4 -
1.2 环境与工具........................................................................... - 4 -
1.3 中间结果............................................................................... - 4 -
1.4 本章小结............................................................................... - 4 -
第2章 预处理............................................................................... - 5 -
2.1 预处理的概念与作用........................................................... - 5 -
2.2在Ubuntu下预处理的命令................................................ - 5 -
2.3 Hello的预处理结果解析.................................................... - 5 -
2.4 本章小结............................................................................... - 5 -
第3章 编译................................................................................... - 6 -
3.1 编译的概念与作用............................................................... - 6 -
3.2 在Ubuntu下编译的命令.................................................... - 6 -
3.3 Hello的编译结果解析........................................................ - 6 -
3.4 本章小结............................................................................... - 6 -
第4章 汇编................................................................................... - 7 -
4.1 汇编的概念与作用............................................................... - 7 -
4.2 在Ubuntu下汇编的命令.................................................... - 7 -
4.3 可重定位目标elf格式........................................................ - 7 -
4.4 Hello.o的结果解析............................................................. - 7 -
4.5 本章小结............................................................................... - 7 -
第5章 链接................................................................................... - 8 -
5.1 链接的概念与作用............................................................... - 8 -
5.2 在Ubuntu下链接的命令.................................................... - 8 -
5.3 可执行目标文件hello的格式........................................... - 8 -
5.4 hello的虚拟地址空间......................................................... - 8 -
5.5 链接的重定位过程分析....................................................... - 8 -
5.6 hello的执行流程................................................................. - 8 -
5.7 Hello的动态链接分析........................................................ - 8 -
5.8 本章小结............................................................................... - 9 -
第6章 hello进程管理.......................................................... - 10 -
6.1 进程的概念与作用............................................................. - 10 -
6.2 简述壳Shell-bash的作用与处理流程........................... - 10 -
6.3 Hello的fork进程创建过程............................................ - 10 -
6.4 Hello的execve过程........................................................ - 10 -
6.5 Hello的进程执行.............................................................. - 10 -
6.6 hello的异常与信号处理................................................... - 10 -
6.7本章小结.............................................................................. - 10 -
第7章 hello的存储管理...................................................... - 11 -
7.1 hello的存储器地址空间................................................... - 11 -
7.2 Intel逻辑地址到线性地址的变换-段式管理................... - 11 -
7.3 Hello的线性地址到物理地址的变换-页式管理............. - 11 -
7.4 TLB与四级页表支持下的VA到PA的变换.................... - 11 -
7.5 三级Cache支持下的物理内存访问................................ - 11 -
7.6 hello进程fork时的内存映射......................................... - 11 -
7.7 hello进程execve时的内存映射..................................... - 11 -
7.8 缺页故障与缺页中断处理................................................. - 11 -
7.9动态存储分配管理.............................................................. - 11 -
7.10本章小结............................................................................ - 12 -
第8章 hello的IO管理....................................................... - 13 -
8.1 Linux的IO设备管理方法................................................. - 13 -
8.2 简述Unix IO接口及其函数.............................................. - 13 -
8.3 printf的实现分析.............................................................. - 13 -
8.4 getchar的实现分析.......................................................... - 13 -
8.5本章小结.............................................................................. - 13 -
参考文献....................................................................................... - 16 -
第1章 概述
1.1 Hello简介
根据Hello的自白,利用计算机系统的术语,简述Hello的P2P,020的整个过程。
1.2 环境与工具
列出你为编写本论文,折腾Hello的整个过程中,使用的软硬件环境,以及开发与调试工具。
X64 CPU;2GHz;2G RAM;256GHD Disk 以上
Windows10 64 位;Vmware14.1.3;Ubuntu 18.04.1 LTS 64 位
1.3 中间结果
列出你为编写本论文,生成的中间结果文件的名字,文件的作用等。
hello.i |
预处理得到的文件 |
hello.s |
编译得到的文件 |
hello.o |
汇编得到的文件 |
hello.asm |
hello.o反汇编得到的文本文件 |
hello.elf |
hello.o的elf文件 |
hello |
链接得到的可执行目标文件 |
hello.asm2 |
hello反汇编得到文本文件 |
5.3helloelf.txt |
可执行hello的elf格式,作用是重定位过程分析 |
1.4 本章小结
本章介绍了hello.c的P2P和O2O,然后介绍了本次实验的环境和工具,最后展示的所有的中间文件。
第2章 预处理
2.1 预处理的概念与作用
预处理指令包括条件编译、源文件包含、宏替换、行控制、抛错、杂注和空指令。
条件编译的功能是根据条件有选择的保留或者放弃源文件中的内容。常见的条件包含#if、#ifdef、#ifndef指令开始,以#endif结束。用#undef定义的标识符取消定义。
源文件包含指令的功能是搜索指定的文件,并将它的内容包含进来,放在当前所在的位置,源文件包含有两种,包含系统文件和用户自定义文件。
宏的作用是把一个标识符指定为其他一些成为替换列表的预处理记号,当这些标识符出现在后面的文本中时,将用对应的预处理记号把它替换掉,宏的本质是替换。
#define MAX(a,b) ((a)>(b)?(a):(b))
行控制指令以”#”和”line”引导,后面是行号和可选的字面串。它用于改变预定义宏”_LINE_”的值,如果后面的字面串存在,则改变”_FILE_”的值。
抛错指令是以”#”和”error”引导,抛错指令用于在预处理期间发出一个诊断信息,在停止转换。抛错是人为的动作。
杂注指令用于向C实现传递额外的信息(编译选项),对程序的某些方面进行控制。
杂注指令以”#”开始,跟着”pragma”,后面是其他预处理记号,即所谓的选项。下面这个杂注用于指示C实现将结构成员对齐到字节边界。
2.2在Ubuntu下预处理的命令
2.3 Hello的预处理结果解析
查看hello.i文件,可以看到hello.i的篇幅较hello.c有了大幅度增加,有3000+行。这是因为在预处理的过程中,实现了条件编译、源文件包含、宏替换等工作。
而前面的3000行就是.c文件中包含的头文件,这里体现的就是预处理器根据以字符#开头的命令,修改原始的C程序。最后则是程序主体。
2.4 本章小结
第3章 编译
3.1 编译的概念与作用
编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序.该程序包含函数main的定义,这个过程称为编译.
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0。
编译程序把一个源程序翻译成目标程序的工作过程分为四个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化。
词法分析是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。
代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。所谓等价,是指不改变程序的运行结果。所谓有效,主要指目标代码运行时间较短,以及占用的存储空间较小。这种变换称为优化。
3.2 在Ubuntu下编译的命令
编译的命令:gcc -S hello.i -o hello.s
3.3 Hello的编译结果解析
.file |
源文件 |
.text |
代码段 |
.globl |
全局变量 |
.data |
数据段 |
.align |
存放地址的对齐方式 |
.type |
声明是函数类型还是对象类型 |
.size |
大小 |
.long |
long类型 |
.section.rodata |
rodata节 |
.string |
string类型 |
局部变量保存在栈中,i保存在了-4(%rbp)中,如图3.2.2.1.2
main函数的第二个参数,是指针数组,保存着终端输入的命令行。
argv[0] |
可执行目标文件的名字 |
argv[1] |
命令行参数“学号” |
argv[2] |
命令行参数“姓名” |
argv[3] |
命令行参数“秒数” |
在.rodata节中,声明两个string类型的字符串。如下图3.2.2.3.1。
计算-4(%rbp)-7,设置条件码,随后jle根据这些条件码,进行跳转。如图3.3.6.1
计算-20(%rbp)-3,设置条件码,随后用je根据这些条件码,进行跳转。如图3.3.6.2
计算-20(%rbp)-4,设置条件码,随后用je根据这些条件码,跳转到.L2段,如图3.3.8.1。
计算-4(%rbp)-7,设置条件码,随后jle根据这些条件码,跳转到.L4段,如图3.3.8.2
第一个参数是argv,指明argv[]数组中非空指针的数量。由%edi保存并传递给%rbp-20。
printf函数被优化成为puts函数,首先将%rdi赋值给字符串“Usage:Hello 学号 姓名 秒数!\n”的首地址,然后调用puts函数,如图3.3.9.2.1。
设置%rsi为argv[1],%rdx为argv[2],然后调用printf函数,如图3.3.9.2.2。
3.4 本章小结
本章介绍了编译的概念和作用,Ubuntu下编译的指令,最后对hello.s文件中的数据(整型、字符、数组)和操作(赋值、类型转换、算术、数组、函数)进行了分析。
第4章 汇编
4.1 汇编的概念与作用
4.2 在Ubuntu下汇编的命令
汇编命令:gcc -c hello.s -o hello.o
4.3 可重定位目标elf格式
ELF头:字大小、字节序、文件类型、机器类型、节头表位置、条目大小、数量等。
.rodata:只读数据:printf的格式串、开关语句跳转表……
readelf -a hello.o > hello.elf,用文本文件输出信息。
readelf -a hello.o > hello.elf
.rela.text中包含8条重定位信息,分别对应第一个字符串、puts函数、exit函数、第二个字符串、printf函数、sleepsecs、sleep函数、getchar函数。
r.offset = 0x1c,r.sympol=.rodata,r.type=R_X86_X64_PC32,r.addend=-4(如下图所示)
refaddr = ADDR(s) +r.offset = ADDR(s) + 0x18。
最后,在得到的可执行目标文件中,我们便可以得到正确的引用地址,即完成对第一个重定位条目的重定位计算。
Name:字符中表中的字节偏移,指向符号的以null结尾的字符串名字。
Value:距定义目标的节的起始位置的偏移。对可执行目标文件来说,该值是一个据对运行时的地址。
4.4 Hello.o的结果解析
objdump -d -r hello.o 分析hello.o的反汇编,并请与第3章的 hello.s进行对照分析。
说明机器语言的构成,与汇编语言的映射关系。特别是机器语言中的操作数与汇编语言不一致,特别是分支转移函数调用等。
objdump –d -r hello.o > hello.asm:
call+下一条指令,因为此时地址还不确定,所以call指令将相对地址设置为0,然后在.rela.text节为其添加重定位条目,等待下一步链接,如图4.4.1.2.2。
0+%rip,也需要重定位,在.rela.text节为其添加重定位条目,如图4.4.1.3.2
机器语言是二进制机器指令的集合。基本格式:操作码字段和地址码字段,其中操作码指明指令的功能,地址码指明操作数或者操作数的地址。
对于内存引用,反汇编基址加偏移量寻址,hello.s是伪指令。
4.5 本章小结
本章对汇编的概念和作用、Ubuntu下汇编的命令进行了介绍。还对可重定位目标elf格式进行了重点介绍,还对hello.o的反汇编文件和hello.s进行了对比。
第5章 链接
5.1 链接的概念与作用
链接是将各种代码和数据片段收集并组合为单一文件的过程,这个文件可以被加载(复制)到内存并执行。
链接可以执行于编译时,也就是源代码被翻译成机器代码时;也可以执行于加载时,即程序被加载器加载到内存并执行时;甚至执行于运行时,也就是由应用程序来执行。
5.2 在Ubuntu下链接的命令
使用ld的链接命令,应截图,展示汇编过程! 注意不只连接hello.o文件
5.3 可执行目标文件hello的格式
分析hello的ELF格式,用readelf等列出其各段的基本信息,包括各段的起始地址,大小等信息。
5.4 hello的虚拟地址空间
使用edb加载hello,查看本进程的虚拟地址空间各段信息,并与5.3对照分析说明。
5.5 链接的重定位过程分析
输入命令:objdump -d -r hello > hello.asm2
5.5.1.1hello.asm2比hello.asm多了很多文件节,如图5.5.1.1.1
5.5.1.2hello.asm是相对偏移地址,hello.asm2是虚拟地址,如图5.5.1.2.1和图5.5.1.2.2
5.5.1.3hello.asm2增加了很多共享库函数,如图5.5.1.3.1
链接器将运行时内存地址赋给新的聚合节,赋给输入模块定义的每个节,以及赋
上面两步完成后,程序中的每条指令和全局变量都有唯一的运行时内存地址了。
链接器修改代码节和数据节中对每个符号的引用,是他们指向正确的运行时地址。
5.6 hello的执行流程
使用edb执行hello,说明从加载hello到_start,到call main,以及程序终止的所有过程。请列出其调用与跳转的各个子程序名或程序地址。
5.7 Hello的动态链接分析
分析hello程序的动态链接项目,通过edb调试,分析在dl_init前后,这些项目的内容变化。要截图标识说明。
5.8 本章小结
该章介绍了链接的概念和作用、在Ubuntu下链接的命令行,对helllo的elf格式进行了分析,对hello和hello.o的反汇编文件进行了对比,对hello的执行流程和动态链接进行了分析。
第6章 hello进程管理
6.1 进程的概念与作用
进程就是一个执行中程序的实例.每次用户通过向shell 输入一个可执行目标文件的名字,运行程序时, shell 就会创建一个新的进程.
进程提供给应用程序两个关键抽象:一个独立的逻辑控制流;一个私有的地址空间。
6.2 简述壳Shell-bash的作用与处理流程
3、如果是可执行文件,在一个新的紫禁城的上下文中execve并运行文件。
6.3 Hello的fork进程创建过程
新创建的子进程几乎但不完全与父进程相同。子进程得到与父进程用户级虚
拟地址空间相同的一份副本,包括代码和数据段、堆、共享库及用户栈。子进程
6.4 Hello的execve过程
加载器删除子进程所有的虚拟地址段,并创建一组新的代码、数据、堆段。
通过将虚拟地址空间中的页映射到可执行文件的页大小的片,新的代码和数据段被初始化为可执行文件中的内容。最后加载器跳到_start地址,它最终调用hello的main 函数。
6.5 Hello的进程执行
结合进程上下文信息、进程时间片,阐述进程调度的过程,用户态与核心态转换等等。
进程上下文信息:内核为每个进程维持一个上下文。上下文包括通用目的寄存器、浮点寄存器、程序计数器、用户栈、状态寄存器、内核栈和各种内核数据结构等。
开始时,运行hello程序时处于用户模式,直到调用sleep让hello进入内核模式,内核模式中的陷阱处理程序让调用进程休眠。
进程休眠时间很长,内核进行hello进程到进程B的上下文切换,切换的前一部分,内核代表进程 hello 在内核模式下执行指令,然后在后半部分,代表进程 B
6.6 hello的异常与信号处理
hello执行过程中会出现哪几类异常,会产生哪些信号,又怎么处理的。
hello执行过程中会出现哪几类异常,会产生哪些信号,又怎么处理的。
键入Ctrl+C,内核会发送一个 SIGINT 信号给前台进程 组中的每个进程,终止前台作业。然后 shell 会回收该进程。
键入 Ctrl+Z,会发送一个 SIGTSTP 信号到前台进程组中的每个进程,挂起前台作业,即挂起进程 hello。使用 ps 命令,发现进程还在。
使用 kill 命令杀死 hello进程,shell 回收该进程
6.7本章小结
第7章 hello的存储管理
7.1 hello的存储器地址空间
程序代码经过编译后出现在 汇编程序中地址.逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址.
目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终地址。如果启用了分页基址,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就是物理地址。
7.2 Intel逻辑地址到线性地址的变换-段式管理
保护模式下:以段描述符作为下表,到GDT/LDT表查表获得段地址,段地址+偏移地址=线性地址。
15 14 |
32 |
10 |
索引 |
TI |
RPL |
高13位-8K个索引用来确定当前使用的段描述符在描述符表中的位置
RPL=11,为第3级,位于最低级的用户态,第0级高于第3级。
被选中的段描述符先被送至描述符cache,每次从描述符cache中取32位段基址,与32位段内偏移量(有效地址)相加得到线性地址
7.3 Hello的线性地址到物理地址的变换-页式管理
个页表映射 1GB 区域;四级页表有 128MB 个,每个页表映射 2MB 区域。四级页表每个页表项映射 4KB 区域
7.4 TLB与四级页表支持下的VA到PA的变换
2、MMU从虚拟地址得到36位的VPN,并检查PTE。TLE从VPN中抽取TLB索引和TLB标记,TLB索引选择一个组,TLB标记匹配标记位,找到匹配。命中将PPN返回给MMU.
4、如果得到PTE是无效的,就产生一个缺页,内核调入页面,再次运行刚才的指令。
7.5 三级Cache支持下的物理内存访问
1、得到物理地址VA后,首先使用物理地址的CI进行组索引,对8路的块分别匹配 CT进行标志位匹配。如果匹配成功且块的valid标志位为1,则命中hit。然后根据数据偏移量 CO取出数据并返回。
2、若没有相匹配或者标志位为0,就miss。那么cache向下一级cache,这里向二级cache或者三级cache中查找,然后写入cache
3、再更新cache的之后,判断是否有空闲块。如果有空闲块,就写入,没有就驱逐(LRU策略)。
7.6 hello进程fork时的内存映射
7.7 hello进程execve时的内存映射
execve函数调用驻留在内核区域的启动加载器代码,在当前进程中加载并运行包含在可执行目标文件hello中的程序,用hello程序有效地替代了当前程序.加载并运行hello需要以下几个步骤:
1.删除已存在的用户区域,删除当前进程虚拟地址的用户部分中的已存在的区域结构.
3.映射共享区域, hello程序与共享对象libc.so链接,libc.so是动态链接到这个程序中的,然后再映射到用户虚拟地址空间中的共享区域内.
4.设置程序计数器(PC),execve做的最后一件事情就是设置当前进程上下文的程序计数器,使之指向代码区域的入口点.
7.8 缺页故障与缺页中断处理
第2步: MMU生成PTE地址,并从高速缓存/主存请求得到它.
第4步:PTE中的有效位是零,所以MMU触发了一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序.
第5步:缺页处理程序确定出物理内存中的牺牲页,如果这个页面已经被修改了,则把它换出到磁盘.
第6步:缺页处理程序页面调人新的页面,并更新内存中的PTE.
第7步:缺页处理程序返回到原来的进程,再次执行导致缺页的指令,CPU将地址重新发送给MMU.因为虚拟页面现在已经缓存在物理内存中,所以会命中,主存将所请求字返回给处理器.
7.9动态存储分配管理
Printf会调用malloc,请简述动态内存管理的基本方法与策略。
分配器有两种基本风格. 两种风格都要求应用显式地分配块.它们的不同之处在于由哪个实体来负责释放已分配的块
7.10本章小结
熟悉这一章节的内容,可以帮助我们以后编写一些对高速缓存友好的代码,或者说运行速度更快的代码,十分重要.
第8章 hello的IO管理
8.1 Linux的IO设备管理方法
8.2 简述Unix IO接口及其函数
3.改变当前的文件位置.对于每个打开的文件,内核保持着一个文件位置k, 初始为0.这个文件位置是从文件开头起始的字节偏移量.应用程序能够通过执行seek 操作,显式地设置文件的当前位置为K .
1.进程是通过调用open 函数来打开一个已存在的文件或者创建一个新文件的:int open(char *filename, int flags, mode_t mode);
2.进程通过调用close 函数关闭一个打开的文件.int close(int fd);
3.应用程序是通过分别调用read 和write 函数来执行输入和输出的.
ssize_t read(int fd, void *buf, size_t n);
read 函数从描述符为fd 的当前文件位置复制最多n 个字节到内存位置buf .返回值-1表示一个错误,而返回值0 表示EOF.否则,返回值表示的是实际传送的字节数量.
返回:若成功则为读的字节数,若EOF 则为0, 若出错为-1.
ssize_t write(int fd, const void *buf, size_t n);
8.3 printf的实现分析
从vsprintf生成显示信息,到write系统函数,到陷阱-系统调用 int 0x80或syscall等.
字符显示驱动子程序:从ASCII到字模库到显示vram(存储每一个点的RGB颜色信息)。
显示芯片按照刷新频率逐行读取vram,并通过信号线向液晶显示器传输每一个点(RGB分量)。
8.4 getchar的实现分析
异步异常-键盘中断的处理:键盘中断处理子程序。接受按键扫描码转成ascii码,保存到系统的键盘缓冲区。
getchar等调用read系统函数,通过系统调用读取按键ascii码,直到接受到回车键才返回。
8.5本章小结
结论
你对计算机系统的设计与实现的深切感悟,你的创新理念,如新的设计与实现方法。
hello.c经过预处理,变成hello.i文件,预处理器将hello.c include的外部的库取出合并到hello.i文件中.
hello.s经过汇编,汇编程序翻译成机器语言指令,变成hello.o可重定位目标文件。
hello.o经过链接,,将hello.o与可重定位目标文件和动态链接库链接成为可执行目标程序hello.
运行:在shell中输入./hello 并跟上三个参数120L021909 xjw 1
运行程序:shell进程调用fork创建子进程,shell调用execve,execve调用启动加载器,加映射虚拟内存,创建新的内存区域,并创建一组新的代码、数据、堆和栈段.程序开始运行.
执行指令:CPU为其分配时间片,在一个时间片中,hello有对CPU的控制权,顺序执行自己的代码
访问内存:MMU将程序中使用的虚拟内存地址通过页表映射成物理地址.
动态申请内存:printf会调用malloc向动态内存分配器申请堆中的内存.
信号:如果运行途中键入ctr-c则停止,如果运行途中键入ctr-z则挂起.
同时,也让我对前人的智慧感到惊叹,如此难以理解的东西,他们发现出来,并用于造福人类,这让我感到十分的敬仰。
附件
hello.i |
预处理得到的文件 |
hello.s |
编译得到的文件 |
hello.o |
汇编得到的文件 |
hello.asm |
hello.o反汇编得到的文本文件 |
hello.elf |
hello.o的elf文件 |
hello |
链接得到的可执行目标文件 |
hello.asm2 |
hello反汇编得到文本文件 |
5.3helloelf.txt |
可执行hello的elf格式,作用是重定位过程分析 |
参考文献
[1] 深入了解计算机系统(第三版)2016 Bryant,R.E. 机械工业出版社
[2] 深藏功名丿小志 程序预处理阶段,在做什么?[电子文献]: 404 - 知乎
[4] 逻辑地址到线性地址的转换https://blog.csdn.net/xuwq2015/article/details/48572421
HIT深入理解计算机系统大作业相关推荐
- HIT 深入理解计算机系统 大作业 程序人生-Hello’s P2P
HIT 深入理解计算机系统 大作业 程序人生-Hello's P2P 本论文旨在研究 hello 在 linux 系统下的整个生命周期.结合 CSAPP 课本, 通过 gcc 等工具进行实验,从而将课 ...
- 2021春深入理解计算机系统大作业---hello的一生
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 120L021725 班 级 2003006 学 生 杨楠 指 导 ...
- 2021春深入理解计算机系统大作业——程序人生
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 1190200608 班 级 1903004 学 生 琚晓龙 指 导 ...
- 【程序人生-Hello‘s P2P】哈尔滨工业大学深入理解计算机系统大作业
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 xxxx 学 号 2021xxxx 班 级 210xxxx 学 生 xx 指 导 教 师 xxx 计算机科学与技术学院 2023年 ...
- HIT CS:APP 计算机系统大作业 《程序人生-Hello’s P2P》
HIT CS:APP 计算机系统大作业 程序人生-Hello's P2P Hello的自白 我是Hello,我是每一个程序猿¤的初恋(羞羞--) l却在短短几分钟后惨遭每个菜鸟的无情抛弃(呜呜--), ...
- 2022计算机系统大作业————hit
-/************************************************************************************************** ...
- HIT计算机系统大作业2022
计算机系统 大作业 计算机科学与技术学院 2021年5月 摘 要 学习计算机系统后,从底层对一个简单的Hello.c如何一步步编译,链接,加载,执行等进行浅层的描述. 关键词:计算机系统,底层. 目 ...
- HIT 计算机系统大作业 Hello程序人生P2P
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 人工智能(未来技术模块) 学 号 7203610725 班 级 2036014 学 生 黄鸿睿 指 导 教 师 刘宏伟 计算机科学 ...
- HIT计算机系统大作业
计算机系统 大作业 题 目 程序人生-Hello's P2P 专 业 计算学部 学 号 120L022305 班 级 2003008 学 生 XXX 指 导 ...
最新文章
- 区块链的安全软肋是什么?
- linux网络配置命令 ifconfig 、route 、ip 、ip route
- Kerberos 协议和 KDC 实现 Apache Kerby
- 重装Windows10系统(Win10系统)
- 解读netty3.9的数据处理流程(一)
- chart控件做实时曲线显示_Spark+Kafka+WebSocket+eCharts实时分析-完全记录(5)
- java/php/net/python房产信息管理系统设计
- vsco使用教程_vsco cam怎么用?vsco cam安卓版使用教程详解
- ug齿条插件_NX9.0齿轮齿条运动仿真—齿轮工具箱巧用及渐开线制作
- docker pxc mysql_docker安装pxc集群的详细教程
- 盒图(boxplot)
- 中国远程医疗行业发展前景预测和投资规划分析报告2022-2027年
- KVM/QEMU虚拟机申请和释放内存的步骤
- 西瓜书笔记16-2:逆强化学习
- 当计算机遇上经济学:如何量化你的投资并获得第一桶金
- YOLO train.txt创建
- 0-1型整数规划—MATLAB数学建模
- 登月源码开源登顶GitHub No.1!接而又被中国程序员“玩坏”了
- 绝地求生为何显示服务器上限,绝地求生服务器为啥不给力?官方解释:人太多了...
- vivado DocNav软件打不开PDF文档的解决办法