计算机系统
大作业
题 目 程序人生-Hello’s P2P
专 业 计算机
学 号 120L020212
班 级 2003003
学 生 曾正维
指 导 教 师 史先俊
计算机科学与技术学院
2022年5月
-本文对hello的整个生命周期进行了整体严密的分析,按步骤从预处理,编译,汇编,链接每一步的过程与作用都做出详细的说明。最终得到了可执行目标文件hello。接着在终端输入”./hello 120L020212 曾正维 1”,针对程序的执行过程,现象,以及如何执行,其底层实现都进行了分析。最后结束进程,由父进程进行回收,hello的生命终止。
关键词:预处理;编译;汇编;链接;进程;存储;I/O管理。
(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分)
目 录
第1章 概述
1.1 Hello简介
根据Hello的自白,利用计算机系统的术语,简述Hello的P2P,020的整个过程。
P2P:From Program to Process,在Linux系统上,GCC编译器驱动程序读取源程序hello.c,经过预处理器进行预处理,生成hello.i文件,编译器将hello.i翻译成hello.s,接下来汇编器将hello.s翻译成机器语言指令,结果保存在hello.o文件中,然后经链接器链接得到可执行目标文件,最后OS为其fork一个子进程,调用execve将程序加载到内存中,由系统执行。
O2P:From Zero-0 to Zero-0,可执行文件hello执行后,shell通过execve函数进行虚拟内存映射,分配空间,调用_start函数,初始化执行环境,调用用户层的main函数,CPU流水线式读取并执行指令,通过TLB、4级页表、3级Cache,Pagefile等方式加速程序运行,程序进程终止后,通过信号处理机制,hello的父进程对hello进行回收,释放内存删除有关进程上下文。进程由0开始,由0结束。
1.2 环境与工具
列出你为编写本论文,折腾Hello的整个过程中,使用的软硬件环境,以及开发与调试工具。
1.2.1 硬件环境
1.2.2 软件环境
Windows10 64位;Vmware 15.5.6;Ubuntu 16.04 LTS 64位
1.2.3 开发工具
Visual Studio 2022 64位;CodeBlocks 64位;vi/vim/gedit+gcc
1.3 中间结果
列出你为编写本论文,生成的中间结果文件的名字,文件的作用等。
文件名 |
作用 |
hello.i |
预处理后的文件,用于分析预处理过程 |
hello.s |
经过编译生成的汇编文件,用于分析编译的过程 |
hello.o |
汇编生成的可重定位目标文件,用于分析汇编的过程。 |
hello |
链接生成的可执行文件,用于分析链接的过程。 |
hello.elf |
hello.o的elf文件,分析可重定位目标文件hello.o |
hello_asm.txt |
将hello.o反汇编生成的文件,分析可重定位目标文件hello.o |
hello1.elf |
hello的elf文件,分析可执行目标文件hello |
hello_asm1.txt |
将hello反汇编生成的文件,分析可执行目标文件hello |
1.4 本章小结
简述了Hello的P2P,020的整个过程。介绍了编写论文过程中使用的软硬件环境,以及开发与调试工具。列出为编写论文生成的中间结果文件的名字和文件的作用。
(第1章0.5分)
第2章 预处理
2.1 预处理的概念与作用
-概念:在编译之前进行的处理。C语言的预处理主要有以下三个方面的内容:1. 宏定义;2. 文件包含;3. 条件编译,预处理命令以符号#开头,如#if, #endif, #define, #include等。
作用:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中。结果就得到了另一个C程序,通常以.i作为文件扩展名。
2.2在Ubuntu下预处理的命令
命令: gcc -E hello.c -o hello.i
2.3 Hello的预处理结果解析
打开.i文件可以发现总共有3060行,且从3047行开始是hello.c函数的main函数
预处理器对源文件进行了宏展开,读取系统头文件stdio.h的内容,并把它直接插入程序文本中,而对main函数进行了保留,没有改变。