计算机系统基础 大作业

计算机系统基础

大作业

题 目 程序人生-Hello’s P2P
专 业 经济管理试验班
学   号 1171000317
班   级 1710003
学 生 崔津浩  
指 导 教 师 史先俊

计算机科学与技术学院
2019年3月
摘 要
本文主要讲述了Hello.c从预处理到回收的一生。运用在深入理解计算机系统这门课上所学习的知识逐步分析了用户、系统、计算机硬件在Hello的一生中进行了什么样的操作,较为详细的介绍了一个程序生命周期中基于较底层的软硬件结合的实现机制,对于研究底层软硬件结合与操作系统的实现原理以及深入理解计算机系统具有一定的帮助作用。以及对于日后更好的操控计算机,编写对计算机更友好更加有效的代码奠定了基础。

关键词:计算机系统、Linux、cpu、dram、汇编、编译、内存

目 录

第1章 概述 - 4 -
1.1 HELLO简介 - 4 -
1.2 环境与工具 - 4 -
1.2.1 硬件环境 - 4 -
X64CPU i7-8750H;2.20GHz;16G RAM;128G ROM - 4 -
1.2.2 软件环境 - 4 -
1.2.3 开发工具 - 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.3.1 常量 - 7 -
3.3.2 变量 - 8 -
3.3.3 类型 - 8 -
3.3.4 赋值 - 9 -
3.3.5 类型转换 - 9 -
3.3.6 算术操作 - 9 -
3.3.7 关系操作和控制转移 - 10 -
3.3.8 数组操作 - 10 -
3.3.9 函数操作 - 10 -
3.4 本章小结 - 11 -
第4章 汇编 - 12 -
4.1 汇编的概念与作用 - 12 -
4.2 在UBUNTU下汇编的命令 - 12 -
4.3 可重定位目标ELF格式 - 12 -
4.4 HELLO.O的结果解析 - 14 -
4.5 本章小结 - 15 -
第5章 链接 - 16 -
5.1 链接的概念与作用 - 16 -
5.2 在UBUNTU下链接的命令 - 16 -
5.3 可执行目标文件HELLO的格式 - 16 -
5.4 HELLO的虚拟地址空间 - 17 -
5.5 链接的重定位过程分析 - 18 -
5.6 HELLO的执行流程 - 19 -
5.7 HELLO的动态链接分析 - 19 -
5.8 本章小结 - 19 -
第6章 HELLO进程管理 - 20 -
6.1 进程的概念与作用 - 20 -
6.2 简述壳SHELL-BASH的作用与处理流程 - 20 -
6.3 HELLO的FORK进程创建过程 - 20 -
6.4 HELLO的EXECVE过程 - 20 -
6.5 HELLO的进程执行 - 21 -
6.6 HELLO的异常与信号处理 - 21 -
6.7本章小结 - 22 -
第7章 HELLO的存储管理 - 23 -
7.1 HELLO的存储器地址空间 - 23 -
7.2 INTEL逻辑地址到线性地址的变换-段式管理 - 23 -
7.3 HELLO的线性地址到物理地址的变换-页式管理 - 23 -
7.4 TLB与四级页表支持下的VA到PA的变换 - 23 -
7.5 三级CACHE支持下的物理内存访问 - 24 -
7.6 HELLO进程FORK时的内存映射 - 25 -
7.7 HELLO进程EXECVE时的内存映射 - 25 -
7.8 缺页故障与缺页中断处理 - 25 -
7.9动态存储分配管理 - 26 -
7.10本章小结 - 26 -
第8章 HELLO的IO管理 - 27 -
8.1 LINUX的IO设备管理方法 - 27 -
8.2 简述UNIX IO接口及其函数 - 27 -
8.3 PRINTF的实现分析 - 27 -
8.4 GETCHAR的实现分析 - 28 -
8.5本章小结 - 28 -
结论 - 28 -
附件 - 30 -
参考文献 - 30 -

第1章 概述
1.1 Hello简介
Hello这个程序首先程序员通过文本编辑器或者是ide编译器编写出来得到Hello.c(Hello.cpp),然后通过预处理器(cpp)将其预处理为Hello.i;然后通过编译器(ccl),将其中的符号,变量处理后变成Hello.s;然后通过链接器与一些动态库,静态库相链接生成Hello可执行文件;然后shell认定他不是内核程序,为其fork产生进程,然后Hello就成为了一个进程,完成了P2P: From Program to Process;
然后shell为其execve,mmap将其的代码段,数据段等加入到虚拟内存中,然后进行内存访问,在经历了缺页之后成功访问了代码段、数据段的内存,然后存储分级系统将其一步一步往上传输,在经历了缓存不命中之后成功读取了Hello,然后在Hello运行完之后,shell令其父进程回收Hello,将他的数据以及一切痕迹全部清除干净实现了O2O: From Zero-0 to Zero-0;
1.2 环境与工具
1.2.1 硬件环境
X64CPU i7-8750H;2.20GHz;16G RAM;128G ROM
1.2.2 软件环境
Windows10 64位;Vmware 14.1.1;Ubuntu 18.04.1 64位
1.2.3 开发工具
Visual Studio 2017 64位;CodeBlocks 64位;devc++ 32位;vi/vim/gedit+gcc
1.3 中间结果
列出你为编写本论文,生成的中间结果文件的名字,文件的作用等。
1.4 本章小结

第2章 预处理
2.1 预处理的概念与作用
概念:在程序编译之前通过C Preprocessor(cpp)预处理器进行处理。
作用:
1.宏定义:又称为宏替换,即将#define里的东西转换为文本,带有参数的宏还需要进行参数代换。
2.文件包含:将头文件中含有的文件复制到源代码中。
3.条件编译:对于满足if条件的代码进行筛选,只有满足的代码才进行编译
2.2在Ubuntu下预处理的命令
gcc -m64 -no-pie -fno-PIC -E hello.c -o hello.i
图2-2
2.3 Hello的预处理结果解析
图2-3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值