本论文的目的是,通过hello程序了解计算机系统概念的实现。其内容为分析预处理、编译、汇编和链接等的概念和结果。了解进程相关的概念以及进程是如何管理的。类似的分析了解存储管理和IO管理方面。本文的研究的方法是,首先引入它们概念的定义,其次自己虚拟系统上实验测试,然后分析其结果,如果需要,引用图标和运行结果的截图。所以深入理解计算机系统概念部分对一个实际程序中的运用。虽然hello是一个简单些的代码组成的程序,但是通过它的分析,提示很多的系统的思想。它的思想就将一切软硬件设备组织到好处,程序运行的背后是代码的流动,充满的思想。
关键词:程序;存储;进程;编译;计算机系统;
目 录
第1章 概述........................................................................................ - 4 -
1.1 Hello简介................................................................................. - 4 -
1.2 环境与工具................................................................................ - 4 -
1.3 中间结果.................................................................................... - 4 -
1.4 本章小结.................................................................................... - 5 -
第2章 预处理.................................................................................... - 6 -
2.1 预处理的概念与作用................................................................ - 6 -
2.2在Ubuntu下预处理的命令..................................................... - 6 -
2.3 Hello的预处理结果解析......................................................... - 6 -
2.4 本章小结.................................................................................... - 7 -
第3章 编译........................................................................................ - 8 -
3.1 编译的概念与作用.................................................................... - 8 -
3.2 在Ubuntu下编译的命令......................................................... - 8 -
3.3 Hello的编译结果解析............................................................. - 8 -
3.4 本章小结.................................................................................. - 12 -
第4章 汇编...................................................................................... - 13 -
4.1 汇编的概念与作用.................................................................. - 13 -
4.2 在Ubuntu下汇编的命令....................................................... - 13 -
4.3 可重定位目标elf格式........................................................... - 13 -
4.4 Hello.o的结果解析................................................................ - 15 -
4.5 本章小结.................................................................................. - 16 -
第5章 链接...................................................................................... - 17 -
5.1 链接的概念与作用.................................................................. - 17 -
5.2 在Ubuntu下链接的命令....................................................... - 17 -
5.3 可执行目标文件hello的格式.............................................. - 17 -
5.4 hello的虚拟地址空间............................................................ - 18 -
5.5 链接的重定位过程分析........................................................... -19 -
5.6 hello的执行流程.................................................................... - 20 -
5.7 Hello的动态链接分析........................................................... - 20 -
5.8 本章小结.................................................................................. - 20 -
第6章 hello进程管理............................................................... - 21 -
6.1 进程的概念与作用.................................................................. - 21 -
6.2 简述壳Shell-bash的作用与处理流程................................ - 21 -
6.3 Hello的fork进程创建过程................................................. - 21 -
6.4 Hello的execve过程............................................................. - 21 -
6.5 Hello的进程执行................................................................... - 22 -
6.6 hello的异常与信号处理........................................................ - 22 -
6.7本章小结................................................................................... - 24 -
第7章 hello的存储管理........................................................... - 26 -
7.1 hello的存储器地址空间........................................................ - 26 -
7.2 Intel逻辑地址到线性地址的变换-段式管理....................... - 26 -
7.3 Hello的线性地址到物理地址的变换-页式管理.................. - 26 -
7.4 TLB与四级页表支持下的VA到PA的变换........................ - 28 -
7.5 三级Cache支持下的物理内存访问..................................... - 28 -
7.6 hello进程fork时的内存映射.............................................. - 29 -
7.7 hello进程execve时的内存映射.......................................... - 29 -
7.8 缺页故障与缺页中断处理...................................................... - 30 -
7.9动态存储分配管理................................................................... - 30 -
7.10本章小结................................................................................. - 31 -
第8章 hello的IO管理............................................................ - 32 -
8.1 Linux的IO设备管理方法...................................................... - 32 -
8.2 简述Unix IO接口及其函数................................................... - 32 -
8.3 printf的实现分析................................................................... - 33 -
8.4 getchar的实现分析............................................................... - 35 -
8.5本章小结................................................................................... - 35 -
第1章 概述
1.1 Hello简介
hello程序键盘输入代码,得到.c文件首先进行预处理。编译得到汇编语言的代码,其次进行汇编处理生成目标文件。与库函数进行链接和重定位之后形成可执行文件。它在shell中运行和转入命令参数。shell通过fork函数,把hello变成一个进程。再通过execve执行此进程。CPU让hello运行跟其他程序,执行逻辑控制流。当程序终止后,父进程shell回收其进程,释放相关数据结构及占用内存空间。
1.2 环境与工具
处理器 Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz,2304 Mhz,2 个内核,4 个逻辑处理器,已安装的物理内存(RAM) 4.00 GB。
操作