程序人生-Hello’s P2P(2025哈工大计统实验报告)

(想要命令行操作的同志可以一键三连凭截图私信领取喵~)

题     目  程序人生-Hellos P2P  

专       业         计算学部       

学     号              

班          级               

学       生          王婧瑜        

指 导 教 师          史先俊         

计算机科学与技术学院

20255

摘  要

本文以 “hello” 程序的自述 为视角,在 Linux 环境 下,通过分析 hello.c 文件的完整生命周期,深入探讨了其在计算机系统中的实现机制。从 源代码 到 可执行程序,hello.c 经历了 预处理、编译、汇编、链接 四个关键阶段,最终成为一个可运行的二进制文件。随后,本文进一步剖析了 hello 程序在运行时的计算机系统行为,包括 进程管理(创建、调度、终止)、存储管理(内存分配、虚拟地址映射)以及 I/O 管理(标准输入/输出、系统调用)。

通过这一系列分析,本文不仅揭示了 hello.c 如何在底层与计算机系统交互,也展现了它从 “平平无奇” 的 C 代码 到 “波澜壮阔” 的系统级执行 的完整历程。这一过程不仅是理解 程序如何运行 的典型案例,也为深入探索 计算机系统原理 提供了实践基础。

关键词:hello.c,计算机系统,编译,进程管理,存储管理,I/O 管理

       

(摘要0分,缺失-1分,根据内容精彩称都酌情加分0-1分

目  录

第1章 概述

1.1 Hello简介

1.2 环境与工具

1.3 中间结果

1.4 本章小结

第2章 预处理

2.1 预处理的概念与作用

2.2在Ubuntu下预处理的命令

2.3 Hello的预处理结果解析

2.4 本章小结

第3章 编译

3.1 编译的概念与作用

3.2 在Ubuntu下编译的命令

3.3 Hello的编译结果解析

3.4 本章小结

第4章 汇编

4.1 汇编的概念与作用

4.2 在Ubuntu下汇编的命令

4.3 可重定位目标elf格式

4.4 Hello.o的结果解析

4.5 本章小结

第5章 链接

5.1 链接的概念与作用

5.2 在Ubuntu下链接的命令

5.3 可执行目标文件hello的格式

5.4 hello的虚拟地址空间

5.5 链接的重定位过程分析

5.6 hello的执行流程

5.7 Hello的动态链接分析

5.8 本章小结

第6章 hello进程管理

6.1 进程的概念与作用

6.2 简述壳Shell-bash的作用与处理流程

6.3 Hello的fork进程创建过程

6.4 Hello的execve过程

6.5 Hello的进程执行

6.6 hello的异常与信号处理

6.7本章小结

第7章 hello的存储管理

7.1 hello的存储器地址空间

7.2 Intel逻辑地址到线性地址的变换-段式管理

7.3 Hello的线性地址到物理地址的变换-页式管理

7.4 TLB与四级页表支持下的VA到PA的变换

7.5 三级Cache支持下的物理内存访问

7.6 hello进程fork时的内存映射

7.7 hello进程execve时的内存映射

7.8 缺页故障与缺页中断处理

7.9动态存储分配管理

7.10本章小结

第8章 hello的IO管理

8.1 Linux的IO设备管理方法

8.2 简述Unix IO接口及其函数

8.3 printf的实现分析

8.4 getchar的实现分析

8.5本章小结

结论

附件

参考文献


第1章 概述

1.1 Hello简介

在计算机系统的世界里,一个简单的Hello程序从源代码到运行结束,经历了一场精密而优雅的蜕变。这个看似平凡的C语言程序,在GCC编译工具链和Linux操作系统的共同作用下,完成了一次从静态文本到动态进程的华丽转身。

旅程始于GCC编译器驱动程序对hello.c源文件的处理。预处理器首先登场,它像一位细心的编辑,处理所有以#开头的指令,展开宏定义和头文件,生成一个纯净的hello.i中间文件。接着,编译器接过接力棒,将这个预处理后的文件转化为汇编语言形式的hello.s,为机器执行铺平道路。

当程序以汇编语言呈现后,汇编器便开始施展魔法,将这些人类可读的指令转换为机器能够直接理解的二进制代码,并按照可重定位目标文件的格式封装成hello.o文件。此时的程序虽然已经具备机器指令的形态,但还需要链接器的最后加工。链接器如同一位熟练的装配工,将多个目标模块和系统库完美拼接,最终生成可以直接执行的可执行文件hello。

当用户在终端输入"./hello"时,一场精妙的系统交响乐随即奏响。Shell解释器首先解析命令,然后通过fork系统调用复制自身创建子进程。这个新生进程随即调用execve,将自身完全蜕变成hello程序。操作系统为这个新生命分配资源,建立内存映射,设置运行环境。当main函数开始执行时,printf的调用触发系统调用,将问候语呈现在终端上。最终,随着return语句的执行,这个短暂而精彩的生命周期画上圆满的句号。

从文本到二进制,从静态到动态,Hello程序在计算机系统中的这段旅程,完美诠释了现代计算系统各组件如何协同工作,将人类的思想转化为机器的行动。这既是一个程序运行的微观过程,也是整个计算机系统运作的生动缩影。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值