计算机系统
大作业
题 目 程序人生-Hello’s P2P
专 业 计算学部
学 号 120L021109
班 级 2003010
学 生 柳戴鑫
指 导 教 师 郑贵滨
计算机科学与技术学院
2022年5月
本文以hello程序的生命周期为线索,对hello的预处理、编译、汇编和链接等各个阶段的实现过程进行分析。当hello成为可执行文件后,本文将继续从hello的进程管理、存储管理、IO管理等方面进行实践与探讨。通过对hello一生的追踪,体会计算机系统多方面的分工与配合,进一步深入地理解计算机系统。
关键词:hello;预处理;编译;汇编;链接;进程;存储;IO;
目 录
第1章 概述
1.1 Hello简介
(1)p2p:From Program to Process,即从程序到过程。在 linux 中,源程序到可执行文件的过程是通过编译器驱动程序完成的。
①源文件hello.c 文件经过编译器 cpp 的预处理成为 hello.i;
②再经过编译器 ccl 的编译成为 hello.s;
③接着被汇编器 as 汇编成 hello.o;
④最终经过链接器 ld 的链接成为可执行目标程序 hello;
⑤操作系统会为可执行程序运用fork函数产生子进程,再调用execve函数加载进程。至此,P2P 结束。
(2)020:From Zero-0 to Zero-0:
①shell 通过 execve 加载并执行 hello,映射虚拟内存;
②先删除当前虚拟地址的数据结构并为hello文件创建新的区域结构;
③进入程序入口后,程序开始载入物理内存,然后进入main函数执行目标代码,CPU 为运行的hello分配时间片执行逻辑控制流;
④当程序运行结束后,shell 父进程负责回收 hello 进程,内核删除相关数据结构。
1.2 环境与工具
硬件环境:X64 CPU;2.30GHz;16G RAM;C:100GB SSD;D:375GB SSD;
软件环境:Windows10 64位; Ubuntu
开发工具:gcc, CodeBlocks,edb