2020哈工大计算机系统辅修

计算机系统 大作业  题     目  程序人生-Hello’s P2P  专       业  飞行器设计与工程        学     号      1180910112       班     级      1818201           学       生      徐范杰           指 导 教 师      史先俊                   计算机科学与技术学院2020年3月摘  要本论文通过本学期计算机系统基础课程知识,分别在windows和linux环境下分析hello从源文件hello.c到hello.c程序的执行过程进行讨论,通过对于其执行过程的分析,加深了对计算机系统执行过程原理的探究,并依次探究hello.c程序执行过程中的中间文件。在此基础上,总结了关于hello的管理和运行方式,加深对于计算机系统基础课程的理解,以便于在以后的学习生活中可以更加熟练的运用和编程,并结合本专业知识进行升华。关键词:hello;计算机系统;Linux;执行步骤;编译;汇编;C语言                                    
目  录 第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.c源程序经历预处理器、编译、汇编、链接四个过程,得到可执行目标文件hello。1.2 环境与工具1.硬件环境:Intel(R)Core(TM)i5-8250U CPU @ 1.60GHz 1.80GHzRAM:8.0GB(7.88GB可用)2.软件环境:Windows10 专业版 64位;Ubuntu 64-2019ICS;3.开发与调试工具:CodeBlocks 64位;Ubuntu readelf 1.3 中间结果hello.i:对hello.c源代码进行预处理后的文本文件;hello.s:对hello.s程序编译之后生成的汇编语言程序;hello.o:对hello.s进行编译时产生的可重定位目标程序。hello:对hello.o链接生成的可执行目标文件。1.4 本章小结第一章简要介绍了大作业需完成和中间过程内容的介绍,并针对hello程序进行探究。并介绍了P2P和020两种过程和大作业应用的环境和工具。  
第2章 预处理2.1 预处理的概念与作用预处理概念:预处理命令是将C语言程序从源代码变成可执行程序的第一步,它属于C语言编译器,但不是C语言的组成部分。预处理作用:通过预处理命令可以扩展C语言程序设计的环境。预处理中会展开以#起始的行,该指令将在编译器进行编译之前对源代码做某些转换。hello.c源程序经预处理就得到中间结果hello.i。2.2在Ubuntu下预处理的命令对hello.c文件进行预处理的命令是:gcc -E -o hello.i hello.c 2.3 Hello的预处理结果解析预处理文件hello.i源于hello.c源文件,hello.c源文件中的内容如下图。通过比较hello.c和hello.i中的main函数段,发现源文件中的中的注释被删除2.4 本章小结通过观察hello.c的预处理至hello.i过程,初步了解程序运行所需要的前期处理,并对hello.i进行解析。 
第3章 编译3.1 编译的概念与作用编译的概念1、利用编译程序从源语言编写的源程序产生目标程序的过程。 2、用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。编译的作用将预处理后的文件经过词法、语法和语义分析后并进行相关的优化。注意:这儿的编译是指从 .i 到 .s 即预处理后的文件到生成汇编语言程序3.2 在Ubuntu下编译的命令编译的命令gcc -S -o hello.s hello.i 3.3 Hello的编译结果解析通过与源程序比较,可以发现局部变量argc被储存在M[-20(%rbp)]中,而%rbp指向栈顶,故局部变量被储存在栈帧里。局部变量放在了寄存器-4(%rbp)中。  此部分是重点,说明编译器是怎么处理C语言的各个数据类型以及各类操作的。应分3.3.1~ 3.3.x等按照类型和操作进行分析,只要hello.s中出现的属于大作业PPT中P4给出的参考C数据与操作,都应解析。 3.4 本章小结在本章中,学习了从hello.i编译至hello.s的过程,并对hello.s中的内容进行了解读。进一步理解了机器级编程和编译器的优化能力,以及机器、数据类型和指令集。当编写能有效映射到机器上的程序时,了解编译器的特性会有所帮助。
第4章 汇编4.1 汇编的概念与作用汇编是指把汇编语言翻译成机器语言的过程,在这里还包括把这些机器语言指令打包成为可重定位目标程序的过程。使用汇编语言编写的源代码,然后通过相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程。其作用便是将汇编语言一一对应翻译成机器指令,机器可直接运行。4.2 在Ubuntu下汇编的命令命令为:gcc -c -o hello.o hello.s 4.3 可重定位目标elf格式    在Linux下生成hello.o文件的elf格式的命令为:readelf -a hello.o>hello.elf分析hello.o的ELF格式,用readelf等列出其各节的基本信息,特别是重定位项目分析。 4.4 Hello.o的结果解析objdump -d -r hello.o  分析hello.o的反汇编,并请与第3章的 hello.s进行对照分析。说明机器语言的构成,与汇编语言的映射关系。特别是机器语言中的操作数与汇编语言不一致,特别是分支转移函数调用等。4.5 本章小结本章节对hello.s汇编至hello.o的过程进行了研究和讨论。
第5章 链接5.1 链接的概念与作用链接是将各种代码和数据片段收集并合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时,也就是在源代码被翻译成机器代码时;也可以执行于加载时,也就是在程序被加载器加载到内存并执行时;甚至执行于运行时),也就是在由应用程序来执行。作用是它将一个大型的应用程序分解为更小、更好管理的模块。5.2 在Ubuntu下链接的命令5.3 可执行目标文件hello的格式5.4 hello的虚拟地址空间5.5 链接的重定位过程分析5.6 hello的执行流程5.7 Hello的动态链接分析5.8 本章小结在本章节中进行了由hello.o链接生成为hello可执行文件的过程。重点分析了hello程序的虚拟地址空间。 
第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设备管理方法设备的模型化:文件设备管理:unix io接口8.2 简述Unix IO接口及其函数8.3 printf的实现分析从vsprintf生成显示信息,到write系统函数,到陷阱-系统调用 int 0x80或syscall.字符显示驱动子程序:从ASCII到字模库到显示vram(存储每一个点的RGB颜色信息)。显示芯片按照刷新频率逐行读取vram,并通过信号线向液晶显示器传输每一个点(RGB分量)。8.4 getchar的实现分析异步异常-键盘中断的处理:键盘中断处理子程序。接受按键扫描码转成ascii码,保存到系统的键盘缓冲区。getchar等调用read系统函数,通过系统调用读取按键ascii码,直到接受到回车键才返回。8.5本章小结   结论源程序hello.c经过预处理成为hello.i,再通过编译成为hello.s即为汇编语言文本文件,然后经过汇编生成二进制文件hello.o,汇编语言逐条转换为机器语言。再经过链接生成了可执行二进制文件。 hello在运行时通过shell,我们通过分析进程管理、存储管理才真正了解其中的奥秘。通过这学期的学习,了解到了hello的一生,并不是一开始接触编程时简简单单的一行代码,其中的过程非常奥妙。通过这门课,在日后的学习生活中一定会更加具有探索本质的思维。
附件
参考文献1https://blog.csdn.net/dong_daxia/article/details/95328479编译的基本概念

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值