第01章 计算机系统漫游
计算机系统是由硬件和系统软件组成的
以hello程序来学习系统
1 . 1 信息就是位+上下文
hello.c 源程序实际是一个由值0 和 1 组成的位(又称为比特)序列,8个位被组织成一组,称为字节。每个字节表示程序中的某些文本字符。
大部分计算机用ASCII标准来表示文本字符 hello.c一一对应
hello.c这样只由 ASCII 字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
在计算机系统看到的数据都是由一串比特表示
数字在机器的表示方式是对真值的有限近似值
1.2 程序被其他程序翻译成不同的格式
如果要运行.c程序➡C语句被其它程序转换为低级机器语言指令➡指令按照一种称为可执行目标程序的格式打包
在 Unix 系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:
1. 3 了解编译系统如何工作是大有益处的
- 优化程序性能
- 理解链接时出现的错误
- 避免安全漏洞
1. 4 处理器读并解释储存在内存中的指令
shell:一个命令行解释器
1.4.1 系统的硬件组成
- 总线
- I/O 设备——外设:键盘鼠标显示器磁盘
- 主存——Main Memory/Memory/RAM
- 处理器——CPU
1.4.2 运行 hello 程序
1. 5 高速缓存至关重要
高速缓存存储器(cache memory, 简称为 cache 或高速缓存) 待学......
1. 6 存储设备形成层次结构
待学......
1. 7 操作系统管理硬件
所有应用程序对硬件的操作尝试都必须通过操作系统
操作系统有两个基本功能 1. 防止硬件被失控的应用程序滥用。比如内存溢出 2. 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备
文件、虚拟内存、进程为抽象表示
1. 7. 1 进程
进程是操作系统对一个正在运行的程序的一种抽象。
游戏是一个程序,玩这个游戏时变成了一个进程
并发运行,是说一个进程的指令和另一个进程的指令是交错执行的。
玩多个游戏,但不是同时玩,而是快速地再不同游戏之间切换
单核:一个时刻只能执行一个程序 多核处理器:同时执行多个程序
CPU如何并发执行多个进程?交错执行——上下文切换
搭积木的时候记住搭成什么样,这个时候去玩另一个拼图游戏,再回来时根据积木的状态继续玩
上下文:操作系统保持跟踪进程运行所需的所有状态信息
玩游戏时所有状态信息
1. 7. 2 线程
一个进程由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
比如说浏览器是一个进程,而线程是这个程序的不同任务,浏览器能加载多个网页,每个网页加载任务就是一个线程
1. 7. 3 虚拟内存
虚拟内存是一个抽象概念,它为每个进程提供了一个假象,使得每个进程都认为自己在独占地使用主存(RAM)。实际上,操作系统在后台管理和分配这些内存资源。
- 图书馆(物理内存RAM)
- 书桌:虚拟地址空间;坐在上面的每个人一位自己独占了整个书桌,实际是图书馆管理员在后台管理。
- 每个人借的书:进程的代码和数据。
虚拟内存的好处: - 内存保护:进程之间不会互相干扰
1. 7. 4 文件
文件就是字节序列。每个 I/0设备都可以看成是文件。
每个I/O设备都有一个对应的设备文件,操作系统通过读写这个设备文件来与设备进行通信
1. 8 系统之间利用网络通信
网络可视为一个 I/0 设备
1. 9. 1 Amdahl 定律
待学..... 还有练习题
1. 9. 2 并发和并行
待学.....
1. 9. 3 计算机系统中抽象的重要性
API就是java的类 类可以抽象定义名称和方法