HITICS大作业

计算机系统

大作业

题     目  程序人生-Hello’s P2P 

专       业  计算机类               

学     号  120L020121             

班     级  2003003                

学       生  刘旭                 

指 导 教 师  史先俊                 

计算机科学与技术学院

2022年5月

摘  要

本文通过gcc、edb、gdb、objdump研究hello程序从生成运行到结束的过程,这包括预处理、编译、汇编、链接,涉及内存、cache、I/O输出,然后结束进程,被回收。以对计算机系统相关知识有深入的理解。

关键词:计算机系统;编译;链接;进程;

目  录

第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 本章小结... - 6 -

第3章 编译... - 7 -

3.1 编译的概念与作用... - 7 -

3.2 在Ubuntu下编译的命令... - 7 -

3.3 Hello的编译结果解析... - 7 -

3.4 本章小结... - 11 -

第4章 汇编... - 12 -

4.1 汇编的概念与作用... - 12 -

4.2 在Ubuntu下汇编的命令... - 12 -

4.3 可重定位目标elf格式... - 12 -

4.4 Hello.o的结果解析... - 15 -

4.5 本章小结... - 16 -

第5章 链接... - 17 -

5.1 链接的概念与作用... - 17 -

5.2 在Ubuntu下链接的命令... - 17 -

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

5.4 hello的虚拟地址空间... - 21 -

5.5 链接的重定位过程分析... - 21 -

5.6 hello的执行流程... - 23 -

5.7 Hello的动态链接分析... - 23 -

5.8 本章小结... - 24 -

第6章 hello进程管理... - 24 -

6.1 进程的概念与作用... - 24 -

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

6.3 Hello的fork进程创建过程... - 25 -

6.4 Hello的execve过程... - 25 -

6.5 Hello的进程执行... - 25 -

6.6 hello的异常与信号处理... - 26 -

6.7本章小结... - 28 -

第7章 hello的存储管理... - 29 -

7.1 hello的存储器地址空间... - 29 -

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

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

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

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

7.6 hello进程fork时的内存映射... - 33 -

7.7 hello进程execve时的内存映射... - 33 -

7.8 缺页故障与缺页中断处理... - 33 -

7.9动态存储分配管理... - 34 -

7.10本章小结... - 34 -

第8章 hello的IO管理... - 35 -

8.1 Linux的IO设备管理方法... - 35 -

8.2 简述Unix IO接口及其函数... - 35 -

8.3 printf的实现分析... - 35 -

8.4 getchar的实现分析... - 36 -

8.5本章小结... - 37 -

结论... - 37 -

附件... - 38 -

参考文献... - 39 -

第1章 概述

1.1 Hello简介

P2P: From Program to Process,从程序到进程。具体步骤包括预处理、编译、汇编、链接,才可形成可执行文件并由操作系统执行。

在Bash里,由OS新fork一个进程,调用execve,利用mmap将hello可执行文件映射到虚拟内存,然后通过页面换入换出加载至物理内存,此时hello才拥有了自己的进程。

O2O: From Zero-0 to Zero-0,即从0开始从0结束。Hello执行完毕之后,变成了僵死进程,shell会将其回收,即释放其占用的系统资源,最终形成的效果是hello通过I/O留在屏幕上的一行字。

1.2 环境与工具

X64 CPU;2GHz;2G RAM;256GHD Disk

Windows10 64位;VirtualBox/Vmware 11;Ubuntu 16.04 LTS 64位;

Visual Studio 2010 64位;CodeBlocks 64位;vi/vim/gedit+gcc

1.3 中间结果

hello.c    hello源程序

hello.i    预处理后文本文件

hello.s    编译后的汇编文件

hello.o    汇编后的可重定位目标文件

hello      链接后可执行文件

1.4 本章小结

本章简单介绍了hello程序从编写到执行完毕的整个过程,并介绍了实验所需软硬件环境和开发工具,并简单给出了hello程序的中间结果。

第2章 预处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值