

题 目 程序人生-Hello’s P2P
学 号 2023113180
姓 名 李显龙
班 级 23L0514
指导教师 史先俊
计算机科学与技术学院
2025年5月
本论文围绕 “Hello’s P2P” 展开,深入研究从程序(program)到进程(process)的全过程。首先介绍了在 Ubuntu 环境下,利用 GCC 等工具将hello.c依次进行预处理、编译、汇编和链接,生成可执行文件的详细过程,并对各阶段的概念、作用、命令及结果进行解析。接着探讨了hello进程管理,涵盖进程概念、Shell 创建进程流程、fork和execve系统调用,以及进程执行中的异常与信号处理。在存储管理方面,阐述了hello程序运行时的存储器地址空间、地址变换机制、Cache 对物理内存访问的优化,以及进程fork和execve时的内存映射。最后分析了 Linux 的 IO 管理。通过对hello程序的研究,系统的展示了计算机系统各组件的协同工作,对理解计算机系统设计与实现具有重要意义。
关键词:Hello程序;预处理;编译;汇编;链接;进程管理;存储管理;IO管理;
(摘要0分,缺失1分,根据内容精彩称都酌情加分0-1分)
目录
目 录
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简介
1. P2P过程:从program到process
首先需要生成program,经过四个步骤。
先进行预处理(Preprocessing)用户编写的hello.c首先经过预处理器(cpp)处理,展开头文件、宏定义,删除注释,生成预处理文件hello.i。
然后将程序进行编译(Compilation)。编译器(gcc)将hello.i转换为汇编语言hello.s,完成词法分析、语法分析、语义检查及中间代码生成。此阶段将 C 语言的控制结构(如if/else)、数据类型(如int、char)映射为底层汇编指令,体现了高级语言到低级语言的抽象转换。
下一步是汇编(Assembly)。汇编器(as)将hello.s转换为可重定位目标文件hello.o,生成二进制机器码并保留符号表和重定位信息。此时程序以 ELF 格式的可重定位文件存在,包含代码段(.text)、数据段(.data)和未初始化数据段(.bss)。
最后进行链接(Linking)。链接器(ld)将hello.o与标准库(如printf所在的 C 运行时库)链接,解析外部符号引用(如main函数入口),生成最终的可执行文件hello。静态链接完成地址重定位,使程序具备在内存中独立运行的能力。
2. 020过程:进程的生命周期
程序的初始状态处于Zero。此时操作系统中无任何进程与hello.c关联,内存中无其地址空间,CPU 未分配资源。然后程序在运行过程中进行资源申请,进程创建时申请虚拟地址空间、文件描述符(如标准输出stdout)、CPU 时间片等。进程终止后进行资源回收。main函数返回或调用exit,触发进程清理:关闭文件描述符、释放堆内存(通过free或 C 库自动回收)、销毁线程栈,回归Zero状态。
1.2 环境与工具
硬件环境:X86-64 Intel i5 13th 16 GB RAM 512 GHD Disk
软件环境:Windows 11 VMware 17Pro Ubuntu 22.04.5 LTS
开发调试工具:GDB,EDB,Visual Studio Code,Vim,gcc
1.3 中间结果
| 文件名 |
说明 |
| hello.c |
源代码文件 |
| hello.i |
预处理后的文本文件 |
| hello.s |
编译后的汇编文件 |
| hello.o |
汇编后的可重定位文件 |
| hello |
链接后的可执行文件 |
| ds_hello.s |
反汇编hello.o的汇编代码 |
| ds_hello_2.s |
反汇编hello的汇编代码 |
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_67952355/article/details/147902084




