一些概念
1. 交换技术
将进程全部或一部分暂时移出到外存,挂起或虚拟存储。
2. 虚拟存储
只装入一部分到内存,留一部分在外存,外存虚拟作为内存使用。操作系统负责内外存切换:进程运行时需要的数据或代码从外存调入内存,内存中暂时不用的交换到外存
虚拟存储依赖交换技术。
3. 映射地址
逻辑地址
物理地址
4. 进程的地址空间
----高地址------
堆栈
数据
程序
进程控制块
----低地址------
5.地址映射
(1)静态映射
程序装入时一次性完成地址变换,线性增加偏移,程序运行时不再改变。不适合多道程序,因为必须是连续的空间,不支持碎片。
(2)动态映射
一边执行一边转换,由专门硬件地址管理部件实现
6. 内存划分与分配技术
(1)静态划分
一旦划分完毕,分区大小、数目不再改变
固定分区、分页
固定分区:等长、不等长。缺点是浪费空间,内零头
分页:大小相同的小固定分区,称为页框/帧。需要位示图或者空闲页框表等进行管理,进程支持不连续存储
(2)动态划分
7.链接
(1)静态链接
(2)动态链接
装入时动态链接:相比静态链接,只链接有引用到的。但不一定会执行到,比如分支内。
运行时动态链接:实际执行时才链接
8. 存储技术
(1)简单存储
相对虚拟存储而言,执行之前,操作系统必须将要执行的程序全部装入内存
(2)虚拟存储
允许内存只装入程序运行必须的部分,当执行部分不在内存时,则通过中断,将外存的程序调入内存
9. 非连续存储技术
(1)分页存储
将物理内存划分为大小相同的页框,将进程划分成大小相同的页面,页面=页框
逻辑地址被分为页号+页内偏移量
页表:系统为每个进程建立一张页面映射表,用于记载各页面到物理页框的映射信息
空闲页框表:空闲的物理页框,用于分配空间
地址变换:根据逻辑地址计算页号和页内偏移量,用页号检索页表得到物理地址
多级页表:以二级页表为例,假设逻辑地址空间为32位,即4GB,页面=页框=4KB,每个页表项占内存4字节。
4GB的逻辑空间,需要4MB的页表项(1M条记录*4字节),4MB是放不下一个页面的,所以需要二级页表来寻址一级页表。二级页表刚好4KB够放。
假设逻辑地址为0000 0000 0000 0000 0001 | 0000 0000 0001
一级页表中页号为0000 0000 0000 0000 0001
页内偏移量为0000 0000 0001
因此找到一级页表中页号为0000 0000 0000 0000 0001的页表项查出对应的页框地址,即可得到该逻辑地址对应的物理地址。
由于每个页表项占4字节,所以一级页表地址应为0000 0000 0000 0000 0001xx,对一级页表再用二级页表寻址
0000 0000 00 |
00 0000 0001xx
二级页表中页号为0000 0000 00
页内偏移量为00 0000 0001xx
得到一级页表项的地址
(只要是一个页面存放不下的东西,都会被离散地存放在各个页面,需要有页表进行管理映射)
快表:分页系统,每次处理机读取指令至少需要访问两次物理内存,为此创建高速缓冲存储器快表,快表可认为是快速访问的硬件。
评价:消除了外零头,只有内零头;页面存储,用户看到的是一维空间,无法将子程序模块或者函数独立,无法单独调试;不易于共享存储和动态链接。简单说就是不利于模块化
(2)分段存储
基于模块化程序设计,子任务单独成段,单独编译、链接、执行。
组成:段号+段内偏移量
看起来跟分页差不多,但是分页是由系统自己划分的,用户看到的是一维空间;分段是由用户自己划分的
动态划分,系统将内存划分为尺寸不等的分区,当一个进程装入内存,系统为该进程每个段都划分一个分区,各个段之间不必要连续。
不需要多级,因为是不等长分区
(3)段页式
基本思想:采用分段方法组织用户程序,采用分页方法分配和管理内存。即程序可以模块化,系统根据模块,装入页框
对于用户,看到的是二维的段号+段内偏移量
对于系统,是三维的地址:逻辑地址由3部分组成,段号+段内页号+页内偏移量