一、
系统的硬件组成
1.1:
总线:贯穿整个系统的是一组电子管道,称作总线,它
携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节快,也就是字,字的字节数(也就是字长)是一个基本的系统参数(对于64位机器,一个字是的字节数是8个字节64位,对于32的机器是4个字节32位)。
1.2:
I/O设备:是系统与外部世界的联系通道,比如键盘、鼠标,以及用于长期存储数据和程序的磁盘驱动器(简单说就是磁盘)。被编译后的可执行的二进制文件最开始就是存放在磁盘上。每个I/O设备通过一个控制器(主板上的芯片组)或适配器(主板插槽上的卡)和I/O总线连接。
1.3:
主存:是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存就是一组
动态随机存取存储器(DRAM)芯片组成。从逻辑上来说,存储器是一个线性的字节数组,每个字节都由其唯一的地址(数组索引),这些地址是从0开始的。一般来说,组成程序的每条机器指令都由不同数量的字节构成。
1.4:CPU(中央处理单元):简称处理器,是
解释执行存储在主存中指令的引擎。
处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC),在任何时候,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。
从系统通电开始,处理器就一直在不断的执行程序计数器指向的指令,再更新程序计算器,并指向下一条指令。这样简单的操作并不多,它围绕着
主存、CPU中的寄存器文件和CPU中的算术逻辑单元(ALU)进行。其中寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。ALU计算出新的数据和地址值。
加载:由PC指向的地址复制一个字节或一个字到寄存器文件中的寄存器,以覆盖原来存放的内容。
存储:从寄存器文件中的寄存器复制一个文件或者一个字到主存的某个位置,以复制这个位置上原来存放的值。
操作:把寄存器文件中两个寄存器的内容复制到ALU,ALU对这两个字做运算,并将运算结果存放到一个寄存器中,以覆盖该寄存器中原来的值。
跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器中,以覆盖PC原来的值。
二、
高速缓存
一个程序的运行时,一般是程序编译成可执行的二进制文件后放到磁盘上,当程序运行时,是将程序从磁盘里
复制到主存里,然后再把执行结果从主存里
复制到显示设备上去显示,这些复制都需要开销。
根据机械原理,较大的存储涉笔要比较小的存储设备运行的慢。比如对于处理器CPU来说,从主存里读取一个字的时间开销要比从主存里读取的开销大1000万倍。类似的CPU中一个典型的寄存器文件只存储几百个字节的信息,而主存里可存放几十亿字节。然而从寄存器文件里读取数据要比从主从中读取要快100倍。
针对处理器(寄存器文件)和主存之间访问的速度差异,我们采用了更快小更快的存储设备,称为
高速缓存存储器(cache memory,也称为高速缓存或cache),作为暂时的集结区域,存放处理器近期可能会需要的信息。
L1高速缓存:位于
处理器芯片上的L1高速缓存的容量可达数万字节,访问速度几乎和访问寄存器文件一样快。
L2高速缓存:一个容量为数十万到数百万字节的更大的L2高速缓存通过一条
特殊的总线连接到处理器。进程访问L2高速缓存的时间要比访问L1高速缓存的时间长5倍。但是这仍然比访问主存的快5-10倍。
L1和L2是用一种叫做
静态随机访问存储器(SRAM)的硬件实现的,比较新的、处理能力更强大的系统甚至有三级高速缓存:L1、L2、L3.系统可以获得一个很大的存储器,同时访问速度也很快,原因是利用了高速缓存的
局部性原理,即程序具有访问局部区域里的数据和代码的趋势。通过让高速缓存里存放可能经常访问的数据,大部分内存操作都能在快速的高速缓存中完成。
存储器层次结构的主要思想是上一层的存储器作为下一层存储器的高速缓存。
三、
操作系统管理硬件
操作系统具有两个基本功能:(1)防止硬件被失控的应用程序滥用;(2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。操作系统通过几个基本的抽象概念来实现这两个功能(进程、虚拟内存和文件)。
文件:是对I/O设备的抽象表示。
虚拟内存:是对主寸和磁盘I/O设备的抽象表示。
进程:是对处理器、主存和I/0设备的抽象表示。
1、
进程:是操作系统对一个正在运行的程序的一种抽象。一个系统上可以运行多个进程。在大多数系统中,需要运行的进程是多于可以运行它们的CPU个数,对于单核处理器,同一个时刻只会有一个进程在运行,对于多核处理器可以并发的执行多个进程。无论是多核还是单核系统中,一个CPU看上去是在执行多个进程是通过处理器在进程间切换来实现。这种称为上下文切换。
上下文:操作系统保持跟踪进程运行所需的状态信息,比如PC和寄存器文件的当前值,以及当前主存的内容。上下文切换就是保存当前进程的上下文,恢复新进程的上下文。
一个进程到另一个进程的切换是由操作系统内核管理的。
内核是
操作系统代码中常驻主存的部分,当应用程序需要操作系统某些操作时,应用程序就执行一条
特殊的系统调用指令,把控制权交给内核。然后
内核执行被请求的操作并返回应用程序。注意,
内核不是一个独立的线程。相反,它是系统管理全部进程所用的代码和数据结构的集合。
2、
线程:一个线程实际上可以由多个线程组成,
每个线程都运行在进程的上下文中,共享同样的代码和全局数据。因为多线程间更容易共享数据,也因为线程一般来说都比进程更高效,所以对于网络服务器中的并行处理的其你去,线程更为重要。
3、
虚拟内存:是一个抽象概念,为每个进程提供了一个假象,即每个进程都在独立的使用主存。
每个进程看到的内存都是一致的,称为虚拟地址空间。
4、
文件:就是字节序列,仅此而已。系统中所有输入和输出都是通过调用I/0的系统函数来读写文件实现的。
5、
并行和并发
线程级并发:多核处理器,每个核处理一个线程,避免处理器里出现cpu线程的切换。
多核:
超线程:也称为同时多线程,是一项允许一个CPU执行多个控制流的技术,它涉及到CPU某些硬件有多个备份,比如程序计数器和寄存器为今年,而其他的硬件部分只有一份,比如执行浮点算术运算的单元。常规的处理器需要大约2000个时钟周期做不同线程间的转换,而超线程可以在单个周期的基础上决定要执行哪个线程。
指令级并行:现代处理器每条指令从开始到结束需要比较长的时间,大概20个时间周期,但是处理器使用了非常聪明的技巧,它同时处理多达100条指令,然后将每一条指令所需要的活动划分为不同的步骤,将处理器硬件组织成一系列的阶段,然后每个阶段执行一个步骤,这些阶段可以并的操作。这样就可以保持平均每个时钟周期2-4条指令的执行速率。
单指令、多数据并行:现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式成为单指令、多数据。
抽象:
总结:系统不仅仅是硬件,它是硬件和系统软件互相交织的集合体。