最底层的高速缓存的管理由硬件完成, 这一章主要介绍内存模型,和优化管理内存。 永久存储磁盘,由第四章来讲述。
操作系统中管理分层存储器体系的部分称为存储管理器。(memory manager)
最早的计算机没有存储抽象。 直接访问内存。 所以同一时间内存不能同时运行两个程序。会出现地址冲突。 即使解决了也有严重问题:1).如果程序可以寻址所有内存字节则程序可以很随意地破坏操作系统。 2). 如果运行多个程序很复杂。
地址空间:地址空间是一个进程可用于寻址内存的一套地址集合,。每个程序有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间。 由于每个程序的地址空间是相对于cpu的,所以在转化成真正的物理空间的时候需要。基地寄存器和界限寄存器。 来进行转化。 每次都需要转化,转化没有特殊电路就很麻烦。
动态分配内存的时候有两种算法,1:使用位图。2: 使用链表。 在使用链表分配的时候维护一个记录已分配内存段和空闲内存段的链表。 每一个节点都包含空闲区(H)或进程(P)的指示标志、起始地址、长度和以一个节点的指针。 需要操作系统去维护这个链表,合并小空闲区域。
虚拟内存
程序往往比内存大。所以需要把程序分块放入内存。 把每个程序的独立地址空间分割成块,每一块称为一页或者页面(page)。有必须运转的程序块就可以运转起来。没有的让操作系统去寻找。
分页
大部分虚拟内存系统种都会使用一种分页(paging)的技术。使用虚拟内存的时候,虚拟地址不会直接访问内存总线而会先痛殴内存管理单元(Memeory Management Unit, MMU)MMU把虚拟地址映射为物理内存地址。
虚拟地址空间按照固定大小划分成页面(page)的若干单元。物理内存种对应的单元叫页框(page frame)。
缺页中断: 当程序访问了一个为映射的页面:MMU注意到该页面没有被映射, 程序访问了一个不存在的页 ,程序发生中断 称为缺页中断。
页表:从数学角度来说:也表是一个函数, 他的参数是虚拟页号,结果是物理页框。
程序分页慢,,处理大的虚拟空间也很慢。但由于现实:大多数程序总是对少量的页面进行多次访问。只有少部分的页表会被重复读取。这样为计算机提供一个小型设备。将虚拟地址直接映射物理地址。而不用访问页表。这个设备叫转换检测缓冲区(Translation Looksaide Buffer, TLB)。
TLB失效:当要访问的页面在内存而不在TLB中叫软失效(soft miss)。只要几个纳秒。 而页面不在TLB也不在内存叫硬失效。过程要几毫秒。
加速内存页表:还可以使用1.多级页表(超过3级复杂性很大。)2。使用倒排页表。
页面置换算法
发生缺页中断时,操作系统必须在内存中选择一个也面将其换出内存,以便为即将调入的页面腾出空间。
有很多种算法:
好用的是老化算法和工作集时钟算法。
分页系统设计
看不懂,。。算了。。