计算机系统
大作业
题 目 程序人生-Hello’s P2P
专 业 计算机
学 号 L190200902
班 级 1903004
学 生 崔薰化
指 导 教 师
计算机科学与技术学院
2021年5月
摘 要
摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息。摘要应包括本论文的目的、主要内容、方法、成果及其理论与实际意义。摘要中不宜使用公式、结构式、图表和非公知公用的符号与术语,不标注引用文献编号,同时避免将摘要写成目录式的内容介绍。
<第1章>
本次实验,介绍了hello程序P2P,020的过程列出了实验中生成的中间文件,列出了实验使用的硬件条件,系统版本。还有基于Hello展开从Program到Process的过程,通过对其预处理、编译、汇编、链接的过程,领会程序由.c源文件到可执行文件的细节及工作方式。进一步体会程序从存储管理中的源文件,通过IO加载到主存,再通过CPU执行,将Hello的内容显示在屏幕上的具体过程原理。本次实验将在Win10系统的VMWAare虚拟机上完成,具体工作过程见后面章节。
<第2章>
本章主要介绍了预处理的概念与作用,执行预处理的命令,并结合hello.i文件,解析了hello的预处理结果。可见预处理过程是只后所有操作的基础。预处理过程只是做些代码文本的替换工作,是为编译做的预备工作的阶段,对源程序并没有进行语法检查等操作,且程序没有大的变化。这个阶段可以比较简单地完成。
<第3章>
首先,大体上来说C语言和汇编语言是能够对应的,而汇编语言是更底层的语言,虽然对人来说更加艰涩难懂,但对计算机来说却离被接受更近了一步,从被人理解到被计算机理解,这是C程序运行的必由之路。因此我认为应该区分清楚这些概念。还有以hello为例,讲述了编译器是怎么处理C语言的各个数据类型以及各类操作的实际应用说明,像是数据:常量、变量(全局/局部/静态)的存放,通过movx的赋值 = ,算术操作:+、 - 、++,关系操作: != 、<=,数组/指针的引用:A[i]、*p 控制转移:if、for的使用,函数操作:参数传递(地址/值)、函数调用()、函数返回 return的实现等等。而且我们对C语言中的数据与操作的认识也会得到发展。
<第4章>
本章介绍了hello从hello.s到hello.o的汇编过程, 使用objdump工具得到反汇编代码,和之前得到的hello.s进行比较,通过寻找不同之处了解从汇编语言映射到机器语言这一过程。还有再通过readelf查看可重定位目标程序文件,通过对elf文件结构的分析,获得相关数据的运行时地址,以及不同节的、条目的大小、偏移量等信息。同时,通过.s文本文件与由机器语言反汇编获得的汇编代码比较,易得.s文件中,通过注记符寻址和经反汇编后,重定位表示的地址信息差异。
<第5章>
在本章中主要介绍了链接的概念与作用、hello的ELF格式,分析了hello的虚拟地址空间、重定位过程、执行流程、动态链接过程。链接器在软件开发中扮演着一个关键的角色,因为它们使得分离编译(separate compilation)成为可能.我们不用将一个大型的应用程序组织为一个巨大的源文件,而是可以把它分解为更小、更好管理的模块,可以独立地修改和编译这些模块。当我们改变这些模块中的一个时,只需简单地重新编译它,并重新链接应用,而不必重新编译其他文件。
<第6章>
本章主要是讲的hello的执行过程,从fork,execve的进程开始到return的终止,这就是hello光辉而短暂的一生。 以图文并茂的方式阐述了hello从被父进程的fork创建,再被execve加载,再到通过内核模式控制下的上下文切换,来实现hello进程以时间分片的形式并发执行的过程。最后通过hello执行过程中可能发生的异常,以及信号处理方式的实际操作实践,感受了异常处理过程。
<第7章>
首先讲述了虚拟地址、线性地址、物理地址的区别,通过虚拟地址到物理地址的转换,进一步加深了对虚拟地址空间的理解运作及其强大作用,在fork、execve过程中扮演着重要的角色,使进程的私有地址空间变成了现实。同时,还体会了动态内存管理时,申请、分割、合并、回收等具体过程,加深了我们对动态内存管理过程的理解与认识。
<第8章>
本章主要讲述了Linux的IO设备管理方法,Unix I/O接口及其函数,以及printf函数实现的分析和getchar函数的实现。在此过程中,我们对系统I/O函数和Linux中将设备映射为文件式来管理的方式有了进一步的认识。到此,hello的一生已经被叙述完毕,作为一个小小的程序被工大无数学子挥洒笔墨宣扬它那些光辉岁月,想必hello在灵魂回归bash后已经死而无憾了吧。
关键词: 概述; 预处理; 编译; 汇编; 链接; hello进程管理; hello的存储管理; hello的IO管理;
(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分)
目 录
第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 -