第1章 概述
1.1 Hello简介
首先,使用高级语言(C语言)编写得到hello.c源程序文本文件。然后对其进行预处理,形成hello.i文本文件。接着对其进行编译,形成hello.s汇编语言文本文件。接下来经过汇编程序处理,将其转化为hello.o可重定位目标程序二进制文件。最后将程序与函数库中需要使用的二进制文件进行链接,形成可执行目标程序ELF二进制文件。
执行该目标文件,操作系统会使用fork函数形成一个子进程,分配相应的内存资源,包括CPU的使用权限和虚拟内存等。然后使用execve函数加载进程。至此完成了从程序到进程的转变P2P(From Program to
Process)。在CPU工作时,通过取指、译码、执行等微程序,逐步执行目标文件中的程序。同时,CPU使用流水线、进程切换等工作方式实现多进程作业。
在程序的执行过程中会使用到内存中的数据。这些数据通过各级存储,包括磁盘、主存、Cache等,并使用页表等辅助存储,实现访存的加速。在这个过程中还涉及操作系统的信号处理,控制进程,使得系统资源得到充分利用。而IO管理与信号处理通过软硬结合,完成程序从键盘、主板、显卡,再到屏幕的工作。当进程执行结束后,操作系统进行进程回收,实现O2O:From Zero-0 to Zero-0。
1.2 环境与工具
列出你为编写本论文,折腾Hello的整个过程中,使用的软硬件环境,以及开发与调试工具。
硬件环境:X64 CPU;2GHz;2G RAM;256SSD
软件环境:Windows 10 64位;Vmware 14;Ubuntu 16.04
开发及调试工具:gcc;edb
1.3 中间结果
1.4 本章小结
hello.c程序从编写、预处理、编译、汇编、链接再到执行,体现了计算机系统系统各部分的具体功能,以及它们之间的的协同合作。
第2章 预处理
2.1 预处理的概念与作用
预处理又称预编译,根据以#开头的命令,修改源程序。
源程序hello.c经过预处理后,得到一个ASCII码的中间文件hello.i。
2.2在Ubuntu下预处理的命令
命令:
cpp hello.c hello.i 或
gcc -E -o hello.i hello.c
处理之后文件目录中会出现一个hello,i文件
2.3 Hello的预处理结果解析
将源程序hello.c翻译成一个ASCII码的中间文件hello.i。
打开hello.i: