- 一、阅读目的
- 二、编译系统的过程简介
- 1)预处理
- 2)编译
- 3)汇编
- 4)链接
- 三、简单介绍hello程序在CPU中的运行
- 四、内存速度和容量对比
- 五、硬件和软件简略介绍图
- 六、虚拟机、进程、虚拟内存和文件的抽象关系
- 七、linux系统中进程的虚拟地址空间
- 八、如何获得更高的计算能力
- 1)线程级并发Thread-Level Concurrency
- 2)指令级并发Instruction-Level Parallelism
- 3)单指令多数据并行Single-Instruction Multiple-Data Parallelism
1)通过研究"hello,wolrd“ 这个简单程序的生命周期,介绍计算机系统的主要概念和主题
二、编译系统的过程简介 1)预处理hello.c 经过预处理 ->得到hello.i ,hello.i任然是一个文本文件
2)编译编译器将hello.i文件翻译成hello.s文件,编译这一阶段包括词法分析、语法分析、语义分析、中间代码生成以及优化等等一系列中间操作
3)汇编汇编器根据CPU指令集将汇编程序hello.s翻译成机器指令,并且按照固定的规则把这一系列的机器指令打包,得到可重定位目标文件hello.o(二进制文件)
4)链接链接器(ld)负责将各种.o文件按照一定的规则合并(正是因为链接器要对hello.o和printf.o文件进行调整合并,所以hello.o才会被称之为可重定位文件),最终经过链接阶段可以得到可执行目标文件,此时得到的helllo就可以被加载到内存中执行了
三、简单介绍hello程序在CPU中的运行-
PC
PC在电脑CPU中是以一个字word来存储,在32位中,一个字是4个字节;在64位中,一个字是8个字节;里面存放的是某一条指令的地址, -
寄存器文件(register file)
可以理解为临时存放数据的空间
-
空间地址:
从0到2的48次方-1 -
数据段和代码段
分别为:只读的数据段和代码段 和 数据段和代码段
来源:从可执行目标文件中加载而来的
补充:①读写数据的区别在C语言中就是存放一些例如全局变量的数据
-
堆空间heap
malloc申请时就会申请这里的空间
-
共享库的存放空间
作用:主要存放像C语言的标准库和数学库这种共享库的代码和数据
-
用户栈空间
函数调用的本质就是压栈,栈就会增长,从高地址到低地址
-
内核保护区域
应用程序代码不能读写这个区域的数据
-
总体概念图



