深入理解计算机系统读书笔记1
用系统思维分析问题
程序执行结果不仅取决于算法、程序编写而且取决于语言处理系统,操作系统,ISA,微体系结构
第一章、计算机系统漫游
1.信息就是位+上下文
系统中的所有信息—包括磁盘文件 , 存储器中的程序 ,存储器中存放的用户数据, 网络上传送的数据 都只是一串bit
表示的而已。区分 不同的数据对象的唯一方法是我们读到这些数据对象的上下文。在不同的上下文中,同样的字节序列可能表示为一个整数、浮点数、字符串或者机器指令。
只有ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
2.程序被其他程序翻译称不同格式
预处理器
,编译器
,汇编器
,链接器
一起构成了 编译系统(compliation system
)
3 计算机的主要组成
冯诺依曼结构主要思想
- 计算机应由运算器、控制器、存储器、输入设备和输出设备五个基本部件组成。
- 各基本部件的功能是:
• 存储器不仅能存放数据,而且也能存放指令,形式上两者没有区别,但计算机应能区分数据还是指令;
• 控制器应能自动取出指令来执行;
• 运算器应能进行加/减/乘/除四种基本算术运算,并且也能进行一些逻辑运算和附加运算;
• 操作人员可以通过输入设备、输出设备和主机进行通信。 - 内部以二进制表示指令和数据。每条指令由操作码和地址码两部分组成。操作码指出操作类型,地址码指出操作数的地址。由一串指令组成程序。
现代计算机结构模型
CPU:中央处理器;PC:程序计数器;MAR:存储器地址寄存器;ALU:算术逻辑部件;IR:指令寄存器;MDR:存储器数据寄存器;GPRs:通用寄存器组(由若干通用寄存器组成,早期就是累加器)。
4 操作系统管理硬件
操作系统两个基本功能
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而又大相径庭的低级硬件设备。
操作系统通过几个基本的抽象概念(进程, 虚拟存储器, 文件 )来实现这两个功能
- 文件是对I/O设备的抽象表示
- 虚拟存储器是对主存和磁盘I/O设备的抽象表示
- 进程 是对处理器,主存和I/O设备的抽象表示。
4.1 进程
-
进程是操作系统对一个正在运行的程序的一种抽象。
-
进程数都是多于可以运行他们的CPU个数的。传统系统在一个时刻只能执行一个程序,而先进的多核处理器能够执行多个程序,无论实在单核还是多核系统,一个CPU看上去都像是在并发地执行多个进程。
-
并发运行,是说一个进程的指令和另外一个进程的指令是交错执行的。
-
这是通过处理器在进程间切换来实现的。 操作系统实现这种交错执行的机制称为上下文切换
操作系统保持跟踪进程运行的所有状态信息。这种状态,也就是上下文。包含PC和寄存器文件的当前值。
-
在任何一个时刻,单处理器系统都只能执行一个进程的代码。当操作系统决定把控制权从当前进程转移到新进程时,就会进行上下文切换,即保存当前上下文,恢复新进程上下文。控制权传递到新进程。
4.2 线程
- 一个进程实际可以由多个称为线程的执行单元完成。
- 共享同样的代码和全局变量。
- 由于网络服务器对并行处理的需求,线程成为越来越重要的编程模型。
- 多线程比多进程更容易共享数据。
- 有多处理器的时候,多线程也是一种使程序更快运行的方法。
4.3 虚拟内存
虚拟内存是一个抽象的概念,它为每个进程提供了一个假象,即每个进程独占地使用主存。
- 每个进程看到的内存都是一致的,称为虚拟地址空间。
- 地址空间最上面的区域为操作系统的代码和数据保留的,这对所有进程都是一样的。
- 地址空间的底部区域存放用户进程定义的代码和数据。
程序代码和数据:对于所有进程来说,代码从一固定地址开始,紧接和C全局变量相对应的数据位置。
堆 :代码和数据区紧随着运行时堆。代码和数据区是在进程一开始就被规定了大小,与此不同,调用
malloc
和free
时堆动态的扩展和收缩。共享库:地址空间的中间部分存放C标准库和数学库这样共享库代码和数据的区域。
栈: 用户虚拟地址顶部的是用户栈,编译器用它来实现函数调用。和堆一样,在执行时动态的扩展和收缩。
内核虚拟内存。 地址空间顶部区域是为内核保留的。
5 并发和并行
并发 是一个通用概念,指一个同时具有多个活动的系统。并行 指的是用并发使一个系统运行的更快。并行可以在计算机多个抽象层次运用。
系统层次从高到低顺序:线程级并发;指令级并行;单指令,多数据并行。