哈工大计算机系统大作业论文

计算机系统

大作业

题     目  程序人生-Hello’s P2P 

专       业           网络空间安全            

学     号            2022110523           

班     级           2203901            

学       生           王悦雷          

指 导 教 师            史先俊           

计算机科学与技术学院

2024年5月

摘  要

本文通过对一个hello.c的简单的 C语言文件在linux系统下从预处理到编译、汇编、链接直到处理为一个可执行文件的过程的分析,以及对hello程序的加载,运行,异常处理,终止,回收的过程,从而了解了hello.c的一生。本论文以hello.c为主要研究对象,通过《深入理解计算机系统》以及老师的讲授,在ubuntu系统上对hello.c的“一生”进行研究,将理论和实践运用相结合。

关键词:计算机系统;linux系统;程序的生命周期。                           

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

目  录

第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 -

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 -

第1章 概述

1.1 Hello简介

根据Hello的自白,利用计算机系统的术语,简述Hello的P2P,020的整个过程。

P2P: Program to Process当我们编写好一个hello.c的C语言程序,它将作为程序一个文本存储。运行这个程序时,由编译器驱动程序启动,读取hello.c文件,然后进行预处理:修改了源程序(文本),得到另一个C语言程序,hello.i文件;之后由编译器对hello.i进行编译:得到一个汇编语言程序(文本),即hello.s。之后将汇编程序交由汇编器进行汇编:得到一系列机器语言指令,并将这些机器语言指令打包成一种“可重定位目标程序”,并将其存入到hello.o(二进制)文件中。最后由链接器进行链接,需要对prinf.o等程序进行链接:结果就得到了可执行目标文件:hello。接下来计算机就可以运行这个hello文件了。之后在计算机的Bash(shell)中,OS会为hello创建子进程(fork),这样,在计算机系统中,hello就有了自己独一无二的进程(Process),在这个进程中hello便可以运行。

020: from Zero-0 to Zero-0 程序并不是一开始就在内存空间中的,也就是一开始为0。OS为hello fork一个子进程,然后在execve执行hello程序,OS会为他开辟一个块虚拟内存,并将程序加载到虚拟内存映射到的物理内存中。当程序执行完,OS回收这一程序,同时为该程序的开辟的内存空间也会被回收,此时又变为0。

1.2 环境与工具

  1. 硬件信息:

处理器:13th Gen Intel® Core(TM) i9-13900HX(32 CPUs)

内存:32GB RAM

磁盘:1T HDD + 1T SSD

  1. 软件:

Window11 64位

Ubuntu 20.04 LTS 64位

  1. 调试工具:

Visual Studio 2016 64-bit;

gedit,gcc,notepad++,readelf, objdump, hexedit, edb

1.3 中间结果

以下是对hello从hello.c到可执行目标程序过程中的各种程序以及调试,查看汇编代码等用到的各种程序。

文件名

功能

hello.i

预处理后得到的文本文件

hello.s

编译后得到的汇编语言文件

hello.o

汇编后得到的可重定位目标文件

hello.elf

用readelf读取hello.o得到的ELF格式信息

hello.asm

反汇编hello.o得到的反汇编文件

hello2.elf

由hello可执行文件生成的.elf文件

hello2.asm

反汇编hello可执行文件得到的反汇编文件

1.4 本章小结

       本章主要从整体上介绍了hello的P2P,020的具体含义,同时简要介绍了hello从编辑好代码到运行的过程中经历的不同阶段,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值