处理器读并解释存储在内存中的指令
系统的硬件组成
- 总线:携带信息字节并负责在各个部件间传递。
- I/O设备:系统与外界设备的联系通道。例如:鼠标、键盘、显示器、磁盘
- 主存:一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
- 处理器(CPU):执行存储在主存中指令的引擎。处理器的核心是一个大小为一字节的存储设备,称为程序计数器(PC),在任何时候,PC都指向主存中的某条机器语言指令。
处理器从程序计数器指向的内存储读取指令,解释指令中的位,执行该指令只是的简单操作,然后更新PC,使其指向下一条指令。
它们围绕着主存、寄存器文件、和算术单元(ALU)进行。寄存器文件是一个小的存储设备,ALU计算新的数值和地址值。
下面是一些简单操作的例子,CPU在指令的要求下可能会执行这些操作:
- 加载:从主存复制一个字节到寄存器
- 存储:从寄存器复制一个字节到主存
- 操作:把两个寄存器的内容复制到ALU,ALU对中和两个字做算术运算,并将结果存放到一个寄存器中。
- 跳转:从指令本身抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值。
运行hello程序
shell程序将字符逐一读入寄存器,再把它存放到内存中。
shell执行一系列指令来加载可执行的hello文件,这些指令将hello目标文件中的代码和数据从磁盘复制到主存。
一旦目标文件中的代码和数据被加载到主存,处理器就开始执行hello程序的main程序中的机器语言指令,这些指令将"hello world"字符串从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示在屏幕上。
高速缓存至关重要
hello程序最初是存放在磁盘上,当程序加载时,他们被复制到主存;当处理器开始运行程序是,指令又被从主存复制到处理器。
相似的,程序中的字符串"hello world",开始时在磁盘上,然后被复制到主存,最后从主存上复制到显示设备上。
这些复制就是开销,程序设计者一个主要目标就是使这些复制操作尽快完成。
因此:设计了高速缓存寄存器(cache),作为暂时的集结区域,存放处理器近期可能会需要的信息。
处理器上一般有三级高速缓存:L1、L2、L3。利用了高速缓存的局部性原理。
存储设备形成层次结构
存储层次结构示例:寄存器 > L1高速缓存 > L2高速缓存 > L3 高速缓存 > 主存 > 本地磁盘 > 远程二级存储(分布式文件系统)
操作系统的管理硬件
可以把操作系统看成是应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作都必须通过操作系统。
操作系统有两个基本功能:
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
操作系统通过几个基本的抽象概念来实现这两个功能:进程、虚拟内存和文件
- 文件是对I/O设备的抽象
- 虚拟内存是对主存和磁盘I/O设备程序存储器的抽象
- 进程则是对处理器、主存、I/O设备正在运行程序的抽象
- 虚拟机是对整个计算机的抽象
进程
进程是操作系统对一个正在运行的程序的一种抽象。
操作系统实现交错执行多个程序的机制称为"上下文切换"。
操作系统保持跟踪进程运行所需的所有状态信息,这种状态,称为"上下文":包括PC、寄存器文件的当前值、主存的内容。
切换时:保存当前进程的上下文,恢复新进程的上下文。
线程
一个进程实际可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,共享同样的代码和全局数据。
多线程比多进程的那个之间更容易共享数据,
虚拟内存
虚拟内存是一个抽象概念,为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟内存空间。
每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能。从低地址向高介绍:
- 程序代码和数据:对所有进程来说,代码是从同一固定地址开始。在进程一开始就被指定大小
- 堆:堆可以在运行时动态地扩展和收缩
- 共享库:地址空间的中间部分存放标准库和数学库这样的共享库的代码和数据的区域。
- 栈:用户栈位于用户虚拟地址空间顶部,编译器用它实现函数的调用,可以动态扩展和收缩。每调用一个函数栈就会增长,函数返回时,栈就会收缩。
- 内核虚拟内存:地址空间的顶部区域是为内核保留的。不允许应用程序读写这个区域的内容或直接调用内核代码定义的函数。
文件
文件就是字节序列,每个I/O设备都可以看成是文件
系统之间利用网络通信
网络可以视为一个I/O设备
重要主题
Amdahl定律
Amadahl定律:当对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程序,
想要显著加速整个系统,必须提升全系统中相当大的部分的速度。
并发和并行
- 并发:同时具有多个活动的系统
- 并行:用并发来使一个系统运行得更快
线程级并发:多处理器系统:多核、超线程
- 多核处理器:将多个CPU(核)集成到一个集成电路芯片上。
- 超线程:也称同时多线程,是一项允许一个CPU执行多个控制流的技术。超线程的处理器可以在单个周期的基础上决定要执行拿一个线程,这使得CPU能够更好地利用它的处理资源。
比如,一个线程必须等到某些数据被装载到高速缓存中,那CPU就可以继续去执行另一个线程。
多处理器的使用可以从两方面提高系统性能:
- 减少了在执行多个任务时模拟并发的需要
- 可以使应用程序运行的更快
指令级并行:处理器可以同时执行多条指令的属性。
单指令、多数据并行:允许一条指令残生多个可以并行执行的操作,称为单指令、多数据,即SIMD并行。