摘 要
本次大作业深入的探讨了hello.c的源代码文件怎么一步步变成一个可执行文件hello,又是怎么一步步进入内存称为一个运行中的进程,以及被回收的过程。具体介绍了预处理,编译,链接,进程,虚拟内存等概念,并在ubuntu下具体实现的过程。本文将从计算机的底层实现展示操作系统是怎样通过各种硬件和软件的合作完成这一系列过程的。
关键词:预处理,编译,汇编,链接,进程,shell,异常处理和信号,虚拟内存,地址翻译,内存映射,I/O
目 录
第1章 概述
1.1 Hello简介
P2P(program to process)
- 先在或其他编辑器上写好hello程序的代码,保存得到hello.c的源程序文件。
- 运行C语言预处理器(cpp),将hello.c文件预处理成为hello.i文件。
- 运行c语言编译器(ccl)它将hello.i翻译成一个ASCLL汇编语言文件hello.s。
- 驱动程序运行汇编器(as),它将hello.s翻译成一个可重定位目标文件hello.o。
- 最后运行链接器程序(ld),将hello.o和其他的可重定位目标文件以及一些必要的系统目标文件组合起来,创建一个可执行的目标文件hello。
- 在shell里输入对应的命令.\hello,shell调用fork函数创建一个新的子进程,子进程调用execve执行hello中处在磁盘中的的相应代码和数据内存映射到新创建的子进程的虚拟内存对应段中。
以上就是一个源程序(program)到一个进程(process)的过程
020(zero to zero)
- 当控制流执行hello的代码时,发现物理内存中没有对应的虚拟页,便触发缺页故障,系统调用缺页处理程序选取牺牲页,将磁盘上的数据调入内存,然后执行。
- 为了让hello正常执行,还要为它分配时间片、逻辑控制流。
3.当执行完毕后,子进程终止,等待父进程回收,或者等待init进程回收。
1.2 环境与工具
列出你为编写本论文,折腾Hello的整个过程中,使用的软硬件环境,以及开发与调试工具。
X64 CPU;2GHz;2G RAM;256GHD Disk
Windows10 64位;VirtualBox/Vmware 11;Ubuntu 16.04 LTS 64位;
Visual Studio 2010 64位;CodeBlocks 64位;vi/vim/gedit+gcc
1.3 中间结果
列出你为编写本论文,生成的中间结果文件的名字&#