计算机系统
大作业
题 目 程序人生-Hello’s P2P
专 业 未来技术
学 号 7203610528
班 级 2036016
学 生 葛鉴鹏
指 导 教 师 史先俊
计算机科学与技术学院
2022年5月
本文对hello程序的生命周期进行了分析,首先下载hello.c源程序,之后使用C预处理器cpp对其进行预处理,生成hello.i,再运行C编译器(ccl)将其进行翻译生成汇编语言文件hello.s,然后运行汇编器(as)将其翻译成一个可重定位目标文件hello.o,最后运行链接器程序ld将hello.o和系统目标文件组合起来,创建了一个可执行目标文件hello。当shell接收到./hello的指令后开始调用fork函数创建hello进程,execve加载hello进入内存,由CPU控制程序逻辑流的运行,中断,上下文切换和异常控制流的处理,最后结束进程并由父进程进行回收,hello走向“生命”的尽头。
关键词:程序预处理,编译,汇编,链接
目 录
2.2在Ubuntu下预处理的命令.......................................................................... - 5 -
3.2 在Ubuntu下编译的命令............................................................................. - 6 -
4.2 在Ubuntu下汇编的命令............................................................................. - 7 -
5.2 在Ubuntu下链接的命令............................................................................. - 8 -
5.3 可执行目标文件hello的格式.................................................................... - 8 -
6.2 简述壳Shell-bash的作用与处理流程..................................................... - 10 -
6.3 Hello的fork进程创建过程..................................................................... - 10 -
6.6 hello的异常与信号处理............................................................................ - 10 -
7.1 hello的存储器地址空间............................................................................ - 11 -
7.2 Intel逻辑地址到线性地址的变换-段式管理............................................ - 11 -
7.3 Hello的线性地址到物理地址的变换-页式管理....................................... - 11 -
7.4 TLB与四级页表支持下的VA到PA的变换............................................. - 11 -
7.5 三级Cache支持下的物理内存访问.......................................................... - 11 -
7.6 hello进程fork时的内存映射.................................................................. - 11 -
7.7 hello进程execve时的内存映射.............................................................. - 11 -
7.8 缺页故障与缺页中断处理........................................................................... - 11 -
8.1 Linux的IO设备管理方法.......................................................................... - 13 -
8.2 简述Unix IO接口及其函数....................................................................... - 13 -
第1章 概述
1.1 Hello简介
P2P:From Program to Process
先用c语言编写hello.c文件,再用编译器(cpp)预处理得到hello.i文件,接着编译(cc1)得到hello.s汇编文件,再用汇编器(as)将文件打包为hello.o可重定位文件,再经过链接器id将文件与库函数链接得到hello可执行文件,执行hello,系统调用fork函数为其创建一个子进程,之后调用execve函数加载进程。以上就是P2P全部内容。
020:From Zero-0 to Zero-0
Execuve执行hello程序后,系统先删除当前虚拟地址的数据结构并为hello创建新的区域结构,之后将hello相关数据加载到物理内存之中,接着正式执行hello。当hello运行结束后,由shell回收hello进程,并由内核删除相关数据结构。
1.2 环境与工具
(1)硬件环境:X64 CPU;2GHz;4GRAM;256Disk
(2)软件环境:Windows10 64位;Vmware 10;Ubuntu 16.04 LTS 64位
(3)使用工具:Codeblocks;Objdump&