没有合适的资源?快使用搜索试试~ 我知道了~
HIT-CSAPP大作业


试读
45页
需积分: 0 0 下载量 19 浏览量
更新于2025-05-15
收藏 1.88MB DOCX 举报
HIT-CSAPP大作业是一份来自哈尔滨工业大学计算机科学与技术学院2025年春季学期的计算机系统课程报告。报告的撰写者为工科试验班(计算机与电子通信)的学生董馨玥,指导教师是史先俊。本篇报告详细探讨了计算机系统中程序的完整生命周期过程,从C语言源程序hello.c到可执行文件hello的转化,涉及编译、链接和执行等多个环节。
报告首先介绍了hello程序的P2P转化过程和生命周期,即程序从无到有再到无的020生命周期。紧接着,报告概述了开发环境以及不同阶段生成的中间结果文件。
主体部分详细分析了预处理阶段的宏定义和头文件处理,编译阶段将高级语言转换为汇编指令的过程,汇编阶段生成可重定位目标文件的机制,以及链接阶段合并目标文件和解析符号引用的关键技术。
在程序运行分析方面,报告深入探讨了进程创建的fork机制,程序加载的execve过程,操作系统的进程调度策略,虚拟地址空间管理方法,以及动态链接的实现原理。使用了readelf、objdump、gdb等多种工具进行了实践验证。
报告最后总结了程序在计算机系统中的完整执行流程,详细描述了从源代码编译、链接生成可执行文件,到进程创建、内存映射、指令执行,直至进程终止的全过程,并揭示了计算机系统各层次协同工作的内在机制。报告通过理论分析与实践验证相结合的方式,系统性地阐述了程序在Linux系统下的完整生命周期,提供了一个全面而深入的案例研究。
关键词包括计算机系统、程序生命周期、编译、汇编等。

计算机系统
大作业
题 目 程序人生-Hello’s P2P
专 业 工科试验班(计算机与电子通信)
学 号 2023111013
班 级 23L0515
学 生 董馨玥
指 导 教 师
史先俊
计算机科学与技术学院
2025 年 5 月

计算机系统课程报告
- 1 -
摘 要
本篇论文全面系统地分析了从 C 语言源程序 hello.c 到可执行文件 hello 的完
整生命周期过程,深入探讨了程序在计算机系统中的编译、链接和执行机制。报
告首先概述了 hello 程序从源代码到进程的 P2P 转化过程以及从无到有再到无的
020 生命周期,介绍了开发环境和各阶段生成的中间结果文件。在主体部分,报告
详细研究了预处理阶段对宏定义和头文件的处理、编译阶段将高级语言转换为汇
编指令的过程、汇编阶段生成可重定位目标文件的机制,以及链接阶段合并目标
文件和解析符号引用的关键技术。在程序运行分析方面,报告深入剖析了进程创
建时的 fork 机制、程序加载的 execve 过程、操作系统的进程调度策略、虚拟地
址空间管理方法以及动态链接的实现原理,并通过 readelf、objdump、gdb 等工
具进行了实践验证。最后,报告总结了程序在计算机系统中的完整执行流程,从
源代码编译、链接生成可执行文件,到进程创建、内存映射、指令执行,直至进
程终止的全过程,展示了计算机系统各层次协同工作的内在机制。这份报告将理
论分析与实践验证相结合,系统性地阐述了程序在 Linux 系统下的完整生命周期,
为理解计算机系统的工作原理提供了全面而深入的案例研究。
关键词:计算机系统;程序生命周期;编译;汇编;

计算机系统课程报告
- 2 -
目 录
第 1 章 概述 ................................................................................................................- 4 -
1.1 HELLO 简介 .........................................................................................................- 4 -
1.2 环境与工具 ........................................................................................................- 4 -
1.3 中间结果 ............................................................................................................- 4 -
1.4 本章小结 ............................................................................................................- 4 -
第 2 章 预处理 ............................................................................................................- 5 -
2.1 预处理的概念与作用 ........................................................................................- 5 -
2.2 在 UBUNTU 下预处理的命令 .............................................................................- 5 -
2.3 HELLO 的预处理结果解析 .................................................................................- 5 -
2.4 本章小结 ............................................................................................................- 5 -
第 3 章 编译 ................................................................................................................- 6 -
3.1 编译的概念与作用 ............................................................................................- 6 -
3.2 在 UBUNTU 下编译的命令.................................................................................- 6 -
3.3 HELLO 的编译结果解析 .....................................................................................- 6 -
3.4 本章小结 ............................................................................................................- 6 -
第 4 章 汇编 ................................................................................................................- 7 -
4.1 汇编的概念与作用 ............................................................................................- 7 -
4.2 在 UBUNTU 下汇编的命令.................................................................................- 7 -
4.3 可重定位目标 ELF 格式.....................................................................................- 7 -
4.4 HELLO.O 的结果解析 ..........................................................................................- 7 -
4.5 本章小结 ............................................................................................................- 7 -
第 5 章 链接 ................................................................................................................- 8 -
5.1 链接的概念与作用 ............................................................................................- 8 -
5.2 在 UBUNTU 下链接的命令.................................................................................- 8 -
5.3 可执行目标文件 HELLO 的格式 ........................................................................- 8 -
5.4 HELLO 的虚拟地址空间......................................................................................- 8 -
5.5 链接的重定位过程分析 ....................................................................................- 8 -
5.6 HELLO 的执行流程..............................................................................................- 8 -
5.7 HELLO 的动态链接分析 .....................................................................................- 8 -
5.8 本章小结 ............................................................................................................- 9 -
第 6 章 HELLO 进程管理 .......................................................................................- 10 -
6.1 进程的概念与作用 ..........................................................................................- 10 -
6.2 简述壳 SHELL-BASH 的作用与处理流程 ........................................................- 10 -
6.3 HELLO 的 FORK 进程创建过程 .........................................................................- 10 -

计算机系统课程报告
- 3 -
6.4 HELLO 的 EXECVE 过程.....................................................................................- 10 -
6.5 HELLO 的进程执行 ...........................................................................................- 10 -
6.6 HELLO 的异常与信号处理................................................................................- 10 -
6.7 本章小结...........................................................................................................- 10 -
第 7 章 HELLO 的存储管理 ...................................................................................- 11 -
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 -
7.9 动态存储分配管理...........................................................................................- 11 -
7.10 本章小结.........................................................................................................- 12 -
第 8 章 HELLO 的 IO 管理 ....................................................................................- 13 -
8.1 LINUX 的 IO 设备管理方法..............................................................................- 13 -
8.2 简述 UNIX IO 接口及其函数...........................................................................- 13 -
8.3 PRINTF 的实现分析 ...........................................................................................- 13 -
8.4 GETCHAR 的实现分析 .......................................................................................- 13 -
8.5 本章小结...........................................................................................................- 13 -
结论 ............................................................................................................................- 14 -
附件 ............................................................................................................................- 15 -
参考文献 ....................................................................................................................- 16 -

计算机系统课程报告
- 4 -
第 1 章 概述
1.1Hello 简介
1.1.1 Hello 的 P2P 过程
hello 的生命周期是从一个高级 C 语言程序开始的,分为四个阶段:
首先经过预处理器 cpp 进行预处理,生成文本文件 hello.i 文件,
然后经过编译器 ccl 生成 hello.s 汇编程序,
接着经过汇编器 as 生成 hello.o 文件,
再经过链接器 ld 将其与引用到的库函数链接,生成可执行文件 hello。
最后通过系统创建一个新进程并且把程序内容加载,实现有程序到进程的转化。
1.1.2Hello 的 020 过程
当用户在 Shell 中运行可执行文件 hello 时,Shell 首先调用 fork()创建子进程,
然后通过 execve()加载并运行 hello 程序。CPU 为该进程分配内存和时间片,MMU
通过 TLB 和四级页表机制完成虚拟地址到物理地址的转换,三级缓存则加速数据
访问。操作系统负责进程调度和上下文切换,Shell 处理程序运行期间的信号。当
程序执行 return 0 或用户按下 Ctrl+C 时,进程终止,Shell 最终回收该僵尸进程。
整个过程展示了程序从加载到终止的完整生命周期,涉及进程管理、内存管理和
CPU 调度等核心系统机制。
1.1.3 环境与工具
硬件环境:intel core i5;
软件环境:Windows10 64 位;Ubuntu 22.04;
开发工具:CodeBlocks;gcc;gdb 等。
1.2 中间结果
hello.i:hello.c 经预处理得到的文件
hello.s:hello.i 经编译程序的汇编文件
hello.o:hello.s 经得到的可重定位目标文件
hello_o.elf:hello.o 经 readelf 分析得到的文件
hello_o.s:hello.o 经 objdump 反汇编得到的文件
hello:hello.o 经链接得到的可执行目标文件
hello.elf:hello 经 readelf 分析得到的文件
hello.s:hello 经 objdump 反汇编得到的文件
1.3 本章小结
本章主要介绍了程序 hello 从源代码到可执行文件的生命周期,以及其在计算
机系统中的运行过程。通过分析 hello 程序的编译与执行流程,揭示了程序在计算
机系统中的底层运行机制,为后续章节深入探讨计算机系统的工作原理奠定了基
剩余44页未读,继续阅读
资源推荐
资源评论
193 浏览量
2025-05-16 上传
199 浏览量
192 浏览量
2022-11-14 上传
2019-01-05 上传
183 浏览量
2025-05-13 上传
199 浏览量
2024-06-14 上传
159 浏览量
2024-05-31 上传
184 浏览量
2025-05-25 上传
2025-05-18 上传
2022-11-21 上传
2025-05-25 上传
2023-12-26 上传
161 浏览量
132 浏览量
186 浏览量
2024-06-02 上传
135 浏览量
175 浏览量

183 浏览量
2405 浏览量
资源评论


菜鸡还没找到工作
- 粉丝: 41
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 第七章-工艺金属结构制作安装.doc
- 日立SETFREE与大金VRV的产品比较.ppt
- 工业互联·智取未来In-Cloud工业互联网平台应用场景与实践.docx
- 环境中微生物的检测和分离纯化.docx
- 桥梁工程简支梁桥的计算讲义(PPT双语).ppt
- 耐火材料隐患排查治理2017.04.27.doc
- 福星花园二期工程监理总结.doc
- 起搏器程控随访L.ppt
- 中国名菜荆楚风味植物类.doc
- 监理工作总结报告.doc
- 某供电公司政策稽查执行员岗位职责描述.doc
- 2010年3月全国计算机等级历年考试四级软件测试工程师笔试真题.doc
- “浅谈建筑环境与暖通空调能耗”外文翻译.doc
- 区块链云算力销售话术.docx
- 数据库系统概论-第4章-数据库安全性.ppt
- 第8章-动态存储管理.doc
安全验证
文档复制为VIP权益,开通VIP直接复制
