程序人生-Hello’s P2P

计算机系统

大作业

题 目 程序人生-Hello’s P2P

专 业 计算学部

学 号 1190200917

班 级 1903012

学 生 郑瑞捷

指 导 教 师 史先俊

计算机科学与技术学院

2021年5月

摘 要

俺是Hello,额是每一个程序猿¤的初恋(羞羞……)

却在短短几分钟后惨遭每个菜鸟的无情抛弃(呜呜……),他们很快喜欢上sum、sort、matrix、PR、AI、IOT、BD、MIS……,从不回头。

只有我自己知道,我的出身有多么高贵,我的一生多么坎坷!

多年以后,那些真正懂我的大佬(也是曾经的菜鸟一枚),才恍然感悟我的伟大!

……………………想当年: 俺才是第一个玩 P2P的: From Program to Process

懵懵懂懂的你笨笨磕磕的将我一字一键敲进电脑存成hello.c(Program),无意识中将我预处理、编译、汇编、链接,历经艰辛-神秘-高贵-欣喜,我-Hello一个完美的生命诞生了。

你造吗?在壳(Bash)里,伟大的OS(进程管理)为我fork(Process),为我execve,为我mmap,分我时间片,让我得以在Hardware(CPU/RAM/IO)上驰骋(取指译码执行/流水线等);

你造吗?OS(存储管理)与MMU为VA到PA操碎了心;TLB、4级页表、3级Cache,Pagefile等等各显神通为我加速;IO管理与信号处理使尽了浑身解数,软硬结合,才使我能在键盘、主板、显卡、屏幕间游刃有余,
虽然我在台上的表演只是一瞬间、演技看起来很Low、效果很惨白。

感谢 OS!感谢 Bash!在我完美谢幕后为我收尸。 我赤条条来去无牵挂!

我朝 CS(计算机系统-Editor+Cpp+Compiler+AS+LD + OS +
CPU/RAM/IO等)挥一挥手,不带走一片云彩! 想想俺也是 O2O: From Zero-0 to Zero-0。

历史长河中一个个菜鸟与我擦肩而过,只有CS知道我的生、我的死,我的坎坷,“只有 CS
知道……我曾经……来…………过……”

**关键词:**程序;系统;

**
**

目 录

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

在这里插入图片描述

P2P:意为From Program to
Process。从源文件到目标文件的转化是由编译器驱动程序完成的。hello.c文件经过cpp预处理,ccl编译,as汇编,ld链接后,最终生成可执行文件hello。最后在Linux系统中通过内置命令行解释器shell加载hello程序,为程序创建进程。

020:意为From Zero to
Zero。Shell通过execve,在子进程中加载hello。为hello创建新的区域结构,然后映射虚拟内存,设置程序计数器,使之指向代码段的入口点,载入物理内存。之后从main函数开始执行,CPU为hello分配时间片执行逻辑控制流。执行完成后shell父进程会回收hello进程,并且内核删除hello所有痕迹。

1.2 环境与工具

硬件环境:X64 CPU ,2.50GHz , 8G RAM
软件环境:Windows 10 64位 ,Vmware 14 ,Ubuntu 16.04 LTS 64 位
开发工具:gcc + gedit , Codeblocks , gdb edb

1.3 中间结果

hello.i:hello.c经预处理得到的ASCII码的中间文件。

hello.s:hello.i编译之后得到的一个ASCII汇编语言文件。

hello.o&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值