计算机系统漫游
程序员文章站
2023-12-31 14:57:28
...
CSAPP 1.计算机系统漫游
个人博客,想要搭建个人博客的可以进来看看: http://www.ioqian.top/
1.信息就是 (位+上下文)
#-------> hello.c
#include<stdio.h>
int mian(){
printf("hello , world\n");
return 0;
}
/* 这个源程序实际上由0和1组成的序列,每8位为一组,称为字节
* 每个字节表示程序中的某个文本字符,现在用ASCII码来表示文本字符,就是用一个唯一的单字节大小整数值来表示1个字符
* 有ASCII字符组成的字符称为文本字符,其他的文件称为二进制文件
*/
hello.c说明了一个基本思想,系统中的所有信息(包括磁盘文件,程序,用户数据及网络上的数据)都是由一串位表示的,区分这些数字对象的唯一方法就是我们读到这些对象的上下文。在不同的上下文中,一个相同的字节可能表示一个整数或者浮点数或字符串等
2.gcc hello.c -o hello
- 预处理 预处理器cpp把宏定义展开,得到了另一个源程序 *.c—->*.i
- 编译 编译器ccl编译成汇编程序,汇编程序是通用的输出语言(fortra和c都生成相同的.s) *.i—>*.S
- 汇编器 as汇编器生成可重定位二进制程序, *.s—->*.o
- 链接生成可执行文件
3.处理器读取并解释存储在存储器中的指令
linux中的shell是一个外壳,等待输入命令然后执行,执行完毕后输出一个提示符等待下一个命令
DMA,不需要处理器直接把数据从硬盘拷贝到主存
3.1总线
负责携带信息在各个部件之间传递,通过总线被设计成定长的字节块,也就是字,字长有4个字节或者8个字节就是32位或64位
3.2I/O设备
3.3主存
在处理器执行程序中,存储程序的代码和数据,主存是由一组动态随机存取存储器(DRAM)芯片组成
3.4处理器
解释或执行存储在指令中的引擎,核心是一个字长的存储设备(程序计数器,PC)任何时候,PC都指向主存中某条指令的存储地址
4.存储设备结构
- L1的访问速度可以达到和寄存器一样快
- SRAM (static random access memory), 静态随机访问存储器
- 高效缓存的数据时从下一级缓存获取的
5.操作系统管理硬件
文件是I/O设备的抽象表示
虚拟存储器是对主存和磁盘I/O的抽象表示
进程则是对处理器,主存和I/o设备的抽象表示
5.1进程
进程是操作系统对一个正在运行的程序的一种抽象,一个cpu可以并发的执行多个进程,操作系统实现这种交错执行的机制称为上下文切换
5.2虚拟存储器
虚拟存储器是一个抽象的感念,他问每一个进程提供一个假象,每个进程好像独占主存,每个进程看到的是一致的存储器,称为虚拟地址空间。
- 栈区—由编译器自动分配释放,存放函数形参,局部变量和自动变量
- 堆区—用于分配由malloc、realloc、calloc分配的空间
- 数据区—该区又分为bss段,rodata段和data段:
- bss段—保存未初始化或者初始化为0的全局变量
- rodata段—用于保存常量
- data段(静态数据区)—保存初始化不为0的全局变量或者static修饰的变量
- 代码区—存放函数体的二进制代码
5.3文件就是字节序列,每个I/o设备都可以视为文件
6总结
- linux下全部都是文件体现了文件是I/O设备的抽象
- 虚拟内存是主存和I/O的抽象
- 进程是处理器,主存,I/o设备的抽象
- 虚拟机是操作系统,处理器,主存,I/O的抽象