操作系统2.0
内存
寄存器
寄存器的材质和CPU一样,所以和CPU一样快,但是程序必须在软件中自行管理这些寄存器。
高速缓存
高速缓存多数由硬件控制,主存被分割为高速缓存行为64个字节,内存地址的0-63对应高速缓存行0,64-127对应1。使用频率高的关键词会存储在靠近CPU的高速缓存行中,便于及时调用,高速缓存命中一般花费两个时钟周期,未命中则读取内存,这会花费大量的时间 。高速缓存行的造价昂贵所以容量有限制,可能分为多级,每一级缓存行都比前一级慢且大。
随机存储器(RAM):内存中最重要的一种,表示既可以从中读取数据,也可以写入数据。当机器关闭时,内存中的信息会 丢失
。
第一级缓存称为L1 cache,用来将已解码的指令调入CPU的执行引擎,大小一般为16KB。第二级缓存成为L2 cache,一般用来存放最近使用过的关键字,一般大小为兆字节为单位。访问L1 cache几乎无延迟,然而访问L2 cache一般由1-2个周期的延后。
主存
主存即RAM,任何高速缓存中无法满足的内存请求均会转移到主存。除了主存,计算机内部还有少量的 非易失性随机存取存储器。 与 RAM 不同,在电源断电后,非易失性随机访问存储器并不会丢失内容。ROM(Read Only Memory)
中的内容一旦存储后就不会再被修改。它非常快而且便宜。
在计算机中,用于启动计算机的引导加载模块(也就是 bootstrap )就存放在 ROM 中。另外,一些 I/O 卡也采用 ROM 处理底层设备控制。
**EEPROM(Electrically Erasable PROM,)
和 闪存(flash memory)
**也是非易失性的,但是与 ROM 相反,它们可以擦除和重写。不过重写它们需要比写入 RAM 更多的时间,所以它们的使用方式与 ROM 相同,但是与 ROM 不同的是他们可以通过重写字段来纠正程序中出现的错误。
还有一类是CMOS,它是易失性的。许多计算机都会使用 CMOS 存储器保持当前时间和日期。
磁盘
下一个层次是磁盘(硬盘)
,磁盘同 RAM 相比,每个二进制位的成本低了两个数量级,而且经常也有两个数量级大的容量。磁盘唯一的问题是随机访问数据时间大约慢了三个数量级。
**固态硬盘(Solid State Disk, SSD)不是磁盘,固态硬盘并没有可以移动的部分,外形也不像唱片,并且数据是存储在存储器(闪存)**中,与磁盘唯一的相似之处就是它也存储了大量即使在电源关闭也不会丢失的数据。
虚拟内存
许多计算机支持一种著名的虚拟内存机制,这种机制使得期望运行的存储空间大于实际的物理存储空间。其方法是将程序放在磁盘上,而将主存作为一部分缓存,用来保存最频繁使用的部分程序,这种机制需要快速映像内存地址,用来把程序生成的地址转换为有关字节在 RAM 中的物理地址。这种映像由 CPU 中的一个称为 存储器管理单元(Memory Management Unit, MMU) 的部件来完成。
I/O设备
CPU 和存储器不是操作系统需要管理的全部,I/O设备也与操作系统关系密切。
I/O 设备一般包括两个部分:设备控制器和设备本身。控制器本身是一块芯片或者一组芯片,它能够控制物理设备。它能够接收操作系统的指令 。
I/O 设备另一部分是设备本身,设备本身有一个相对简单的接口,这是因为接口既不能做很多工作,而且也已经被标准化了。
总线
单个总线处理所有请求的方式随着处理器核内存的速度越来越快 ,也需要改变。也就导致了其他总线的出现。x86 系统包含很多总线,高速缓存、内存、PCIe、PCI、USB、SATA 和 DMI,每条总线都有不同的传输速率和功能。操作系统必须了解所有的总线配置和管理。其中最主要的总线是 PCIe(Peripheral Component Interconnect Express)
总线。
Intel 发明的 PCIe 总线也是作为之前古老的 PCI 总线的继承者,而古老的 PCI 总线也是为了取代古董级别的 ISA(Industry Standard Architecture)
总线而设立的。数十 Gb/s 的传输能力使得 PCIe 比它的前身快很多,而且它们本质上也十分不同。直到发明 PCIe 的 2004 年,大多数总线都是并行且共享的。共享总线架构(shared bus architeture)
表示多个设备使用一些相同的电线传输数据。因此,当多个设备同时发送数据时,此时你需要一个决策者来决定谁能够使用总线。而 PCIe 则不一样,它使用专门的端到端链路。传统 PCI 中使用的并行总线架构(parallel bus architecture)
表示通过多条电线发送相同的数据字。 而 PCIe 则不同,它选用了串行总线架构(serial bus architecture)
,并通过单个连接(称为通道)发送消息中的所有比特数据,就像网络数据包一样。这样做会简化很多,因为不再确保所有 32 位数据在同一时刻准确到达相同的目的地。通过将多个数据通路并行起来,并行性仍可以有效利用。