计算机系统大作业
题 目 程序人生-Hello’s P2P
专 业 计算机科学与技术
学 号
班 级
学 生 江水为竭
指导教师 刘宏伟
计算机科学与技术学院
2022年5月
摘 要
HelloWorld是几乎全世界程序员编写的第一个程序,我们缓慢地输入HelloWorld 的几行代码,点击运行,惊喜地看到输出栏中的“Hello,World!”。但是很快我们就不再理会这个程序,去学习其他的语法。然而,在这个简单的hello中,囊括一个程序运行的所有过程,蕴含着无数计算机科学家的思想精华。
本文通过跟踪hello的一生,介绍了hello从代码编辑器到运行最后结束的过程,对计算机底层进行了较深的分析。
关键词:计算机系统;Linux;C语言;
目 录
6.2 简述壳Shell-bash的作用与处理流程 - 10 -
第1章 概述
1.1 Hello简介
根据Hello的自白,利用计算机系统的术语,简述Hello的P2P,020的整个过程。
P2P:在文本编辑器中将hello的代码输入,并保存为.c格式的文件,形成hello.c文件。这就是程序(Program),这是hello程序的生命周期的开始。在OS(例如Linux)中,通过交互式应用程序Shell,输入命令实现对hello.c从源文件到目标文件的转化。源程序通过cpp(预处理器)预处理,ccl(编译器)编译,as(汇编器)汇编,最后通过ld(链接器)链接生成hello可执行目标程序并将其保存到磁盘中。
020:在Shell运行该hello程序时,Shell调用fork函数创建子进程,并通过execve函数将hello程序载入并创建运行环境,比如分配虚拟内存,运行完成后,Shell回收该进程,释放内存空间。
1.2 环境与工具
硬件环境:X86-64 Intel i7 10 16 GB RAM 512 GHD Disk
软件环境:Windows 10 VMware 16 Ubuntu 20.04 LTS
开发调试工具:GDB,EDB,Visual Studio Code,Vim,gcc
1.3 中间结果
- hello.c:源代码文件。
- hello.i:预处理后的文本文件。
- hello.s:编译后的汇编文件。
- hello.o:汇编后的可重定位文件。
- hello:链接后的可执行文件。
- disa_hello.s:反汇编hello.o的汇编代码。
- disa_hello_2.s:反汇编hello的汇编代码。
1.4 本章小结
本章对hello程序运行的P2P和020过程进行了简单的介绍,列出了此次大作业所使用的相关工具和软硬件环境,最后介绍了文中所用到的文件和作用。
第2章 预处理
2.1 预处理的概念与作用
概念:在预处理时,预处理器需要根据以字符#开头的命令,修改原始的C程序。其实,就是在对源程序做文本替换的操作。比如hello.c第一行的“#include<stdio.h>” 预处理时预处理器会读取stdio.h并把它插入到Hello程序中。
作用:在代码编写的过程是为了方便程序员而设计这些#开头的命令,而为了后续编译器的方便,需要对代码进行替换。
2.2在Ubuntu下预处理的命令
预处理命令:gcc -E hello.c -o hello.i