哈工大计算机系统大作业 程序人生-Hello’s P2P

 

 

计算机系统

 

大作业

 

 

题     目  程序人生-Hello’s P2P 

专       业     计算机科学与技术     

学     号         1190201103       

班     级          1903006         

学       生           王志贤         

指 导 教 师            史先俊          

 

 

 

 

 

 

计算机科学与技术学院

2021年5月

摘  要

本文主要阐述hello程序在Linux系统的生命周期,探讨hello程序从hello.c经过预处理、编译、汇编、链接生成可执行文件并运行以及如何对hello进行进程管理、存储管理和I/O管理,深入理解虚拟内存、异常信号等相关内容,通过对hello一生周期的探索,更全面的了解计算机系统。

 

关键词:预处理;编译;汇编;链接;进程管理;虚拟内存;异常信号;shell;I/O

 

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

 

 

 

 

 

 

 

 

 

目  录

 

第1章 概述............................................................................................................. - 4 -

1.1 Hello简介...................................................................................................... - 4 -

1.2 环境与工具..................................................................................................... - 4 -

1.3 中间结果......................................................................................................... - 4 -

1.4 本章小结......................................................................................................... - 5 -

第2章 预处理......................................................................................................... - 6 -

2.1 预处理的概念与作用..................................................................................... - 6 -

2.2在Ubuntu下预处理的命令.......................................................................... - 6 -

2.3 Hello的预处理结果解析.............................................................................. - 8 -

2.4 本章小结......................................................................................................... - 8 -

第3章 编译............................................................................................................. - 9 -

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

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

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

3.4 本章小结....................................................................................................... - 20 -

第4章 汇编........................................................................................................... - 21 -

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

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

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

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

4.5 本章小结....................................................................................................... - 26 -

第5章 链接........................................................................................................... - 28 -

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

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

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

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

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

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

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

5.8 本章小结....................................................................................................... - 40 -

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

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

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

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

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

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

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

6.7本章小结....................................................................................................... - 46 -

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

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

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

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

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

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

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

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

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

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

7.10本章小结..................................................................................................... - 55 -

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

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

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

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

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

8.5本章小结....................................................................................................... - 59 -

结论......................................................................................................................... - 59 -

附件......................................................................................................................... - 61 -

参考文献................................................................................................................. - 62 -

 

 

 

第1章 概述

1.1 Hello简介

P2P:From Program to Process

       即从程序到进程.

       用高级语言编写得到hello.c经过预处理,  编译,  汇编,  链接得到可执行文件hello,  如下所示.

 

图1.1.1

       在shell中键入./hello\n后,  shell程序就知道我们已经结束了命令的输入,  然后shell fork一个与它具有相同上下文的子进程,  在子进程中通过调用execve函数从主存中加载可执行的hello文件, 将hello目标文件中的代码和数据从磁盘复制到主存. 一旦目标文件hello中的代码和数据被加载到主存,  处理器就开始执行hello程序.

020:From Zero-0 to Zero-0

       即从0到0.

       一开始主存中并没有hello的的代码和数据,  即0. 在调用execve函数后在主存中寻找对应的页表,  因为是第一次调用所以调用缺页程序,  将hello装入主存,  开始执行hello.

       在执行完hello的所有代码后,  父进程回收hello进程,  内核删除相关数据结构,  hello从主存中消失,  即0.

1.2 环境与工具

(1)硬件环境:Intel(R) Core(TM) i5-9300H CPU;  2.40GHz;  16G RAM;  512G SSD

(2)软件环境:Windows10 64位;  VMware Workstation 16;  Ubuntu 20.04 LTS 64位

(3)使用工具:Visual Studio Code;  gcc;  objdump;  gdb;  hexedit

1.3 中间结果

hello.c:源代码

hell

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值