计算机系统大作业

 

 

 

计算机系统

 

大作业

 

 

题     目  程序人生-Hello’s P2P 

专       业        计算机类       

学     号        1190400614     

班     级        1903003        

学       生        李海涵       

指 导 教 师         郑贵滨         

 

 

 

 

 

 

计算机科学与技术学院

2021年6月

摘  要

文章主要内容是利用计算机系统本学期的学习内容,通过以hello.c为例的程序,从编写代码的编写经过诸多处理(如汇编,连接,重定位)到可执行程序,到展现在我们眼中等,对一个程序在计算机系统的全部过程进行顺序性的解读。整个过程展现个人对于所学知识的理解和掌握,并帮助总结这门课程的收获和进步。不仅仅是回顾对课程的学习过程,更是回顾自己与计算机的恩怨情仇,回忆那一点一滴的成长。

 

关键词:计算机系统;大作业论文;程序处理;成长;一生;                           

 

 

 

 

 

 

 


 

目  录

 

第1章 概述... - 5 -

1.1 Hello简介... - 5 -

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

1.2.1 硬件环境... - 6 -

X64 CPU; 1.80GHz; 12G RAM; 512GHD SSD; - 6 -

1.2.2 软件环境... - 6 -

windows10 家庭中文版;Vmware 15; Ubuntu 20.04LTS 64位... - 6 -

1.2.3 开发工具... - 6 -

codeblocks; vim+gcc; gdb; objdump; readelf; edb; - 6 -

1.3 中间结果... - 6 -

1.4 本章小结... - 6 -

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

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

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

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

2.4 本章小结... - 8 -

第3章 编译... - 9 -

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

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

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

3.3.1        数据... - 9 -

3.3.2        赋值... - 11 -

3.3.3        类型转换和sizeof,未出现... - 11 -

3.3.4        算数操作... - 12 -

3.3.5        关系操作... - 12 -

3.3.6        数组:char *argv[]. - 13 -

3.3.7        控制转移... - 13 -

3.3.8        函数操作... - 13 -

3.4 本章小结... - 14 -

第4章 汇编... - 15 -

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

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

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

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

4.5 本章小结... - 21 -

第5章 链接... - 22 -

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

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

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

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

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

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

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

5.8 本章小结... - 30 -

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

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

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

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

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

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

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

6.7本章小结... - 36 -

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

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

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

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

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

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

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

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

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

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

7.10本章小结... - 47 -

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

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

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

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

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

8.5本章小结... - 52 -

结论... - 53 -

附件... - 55 -

参考文献... - 56 -

 

 


第1章 概述

1.1 Hello简介

P2P:from program to process即从项目到进程

在Linux中,hello.c经过cpp的预处理成hello.i、ccl的编译——hello.s、as的汇编->hello.o、ld的链接最终成为可执行目标程序hello,在shell(bash)中键入启动命令(./hello或绝对路径下的hello)后,shell为其fork产生一个子进程,在程序中运行execve类函数,导入数据段,代码段,用户栈等,形成一个程序,访问程序接口,从磁盘等位置导入,然后hello便从程序变为了进程。

O2O:From Zero-0 to Zero-0即从为加载,经过运行后,被覆盖。

进程的概念:让程序有独享CPU的错觉,独立的地址和内存空间。

shell在fork之后,在子程序里运行execve函数,execve函数调用加载器,将hello文件代码和数据从磁盘复制到内存,hello程序加载,。

复制完代码段和数据段之后,加载器跳转到程序的入口点,即_start函数地址,是一个系统的目标文件定义,_start调用___libc_start_main函数,初始化执行环境,调用用户层面的main函数。

运行过程中,由操作系统,协调分配对各个程序的资源分配,为hello分配主存,时间片等。程序可以接受信号,若内核运行中遇到异常,会向用户级程序返回信号,根据信号的不同类型,和程序的信号的处理模式,可以选择忽略处理信号,默认处理信号,或按照指定程序处理信号等,有的信号等不能被修改。

运行结束的情况:程序运行至正常返回,运行exit()函数,与程序异步的操作端输入,诸如Ctrl-C,Ctrl-Z等。

hello程序状态由运行变为终止后,由它的父进程进行回收,父进程shell,若父进程回收之前终止,由所有程序的父进程init进行回收僵死进程。内核会对相关的数据页进行回收,但数据还在缓存中,等待之后的程序覆盖,从回收的那刻起,hello变为0。

全过程从无到有到无。

1.2 环境与工具

1.2.1 硬件环境

X64 CPU; 1.80GHz; 12G RAM; 512GHD SSD;

1.2.2 软件环境

windows10 家庭中文版;Vmware 15; Ubuntu 20.04LTS 64位

1.2.3 开发工具

codeblocks; vim+g

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值