操作系统——存储管理
操作系统速记——存储管理
文章目录
存储器的结构
- 存储器一般分为主存储器和辅助存储器两大类
主存储器简称主存,或称为内存,主存可分为系统区和用户区两个区域,系统区用于存放操作系统,用户区用于存放用户程序和数据
- 存储管理是对主存中的用户区进行管理
- 存储层次至少分为三级:cache、主存、辅存
存储管理
- 将用户源程序变为可在内存中执行的程序,通常需要经过编译、链接、装入
- 地址转换
绝对装入:装入时,程序的物理地址与逻辑地址完全相同
静态重定位:装入时,将程序中的所有逻辑地址修改成物理地址,物理地址=起始地址+相对地址
动态重定位:在程序运行时,将逻辑地址转换为物理地址
- 程序的链接分为
静态链接:在程序运行前,将所有的目标模块与库函数链接成一个可执行文件
装入时动态链接:采用边装入边链接的方式
运行时动态链接:在程序执行过程中链接模块
连续存储管理
-
单一连续分配:除了操作系统外的所有存储空间都分配给一个作业使用
-
存储保护:
判断物理地址大于等于界限地址并且物理地址小于等于主存最大地址
-
程序的装入可以采用静态重定位,也可以采用动态重定位
-
-
固定分区分配:内存分区,每一个任务占用一个分区,将主存空间划分成固定不变的分区,各分区大小不等,每个分区只能装入一个作业
-
顺序分配算法
分配时顺序查找主存分配表,选择可以容纳此作业的分区,用一个标志位表示分区是否有空,如果没有,则该作业无法运行
-
去配算法
按作业名查找主存分配表,查找到后将该分区的标志位设置为0,表示可以装入新的作业
-
存储保护
下限地址小于等于物理地址,物理地址小于等于上限地址
-
-
可变分区分配:内存分区,每一个任务占用一个分区,根据作业需要的地址空间的大小以及当时主存空间的实际使用情况决定是否为该作业分配一个一定大小的分区
-
空间分配
依据作业对主存需求分配空闲分区
-
空间去配
作业执行完毕后,回收分配的分区,判断回收分区旁边是否有空闲的分区,如果有,则合并为一个新的空闲分区
-
可变分区分配算法
- 最先适配算法:分配第一个足够大的空闲区
- 最佳适配算法:分配与作业大小最接近的空闲区,会造成内存碎片
- 最坏适配算法:分配与作业大小最不接近的空闲区
-
使用动态重定位装入作业
-
存储保护
执行时将逻辑地址与限长寄存器中的值比较
-
离散存储管理
-
移动技术:将分散的空闲区合并形成大的空闲区,系统开销大
-
小主存运行大作业的方式
1、覆盖技术(不总结)
2、交换技术:内存不足时,将部分进程移到外存,把外存中的进程切换到内存
-
页式存储管理;将主存划分为等长块,将程序划分为若干页,页大小与块大小相等,通过页表建立页与块的映射
逻辑地址=页号+页内地址
数据结构:
主存分配表:记录已分配的块,尚未分配的块
页表:记录页与块的映射关系,长度由进程的页面数决定
进程请求表:记录哪些进程请求了哪些页面
动态重定位方式装入作业
地址转换
页号=逻辑地址/页大小
位移量=逻辑地址%页大小
通过页号找到对应的块号
物理地址=块号*页大小+页内地址
问题:两次访问内存:页表与读操作,慢
解决方案:使用快表,存储常使用的页表,使用时先在高速缓存中查找,不行就访问内存中的页表,快表与一级缓存与二级缓存没有区别,都在cpu里
-
段式存储管理:将程序和数据划分为若干段,不要求等长,进程加载时,所有段被载入内存可用区域,建立段表
逻辑地址=(段号,段内地址)
数据结构:
系统段表:系统内所有的段
空闲段表:空闲段
进程段表:记录分配的段的段基地址和段长度
地址转换
进程进入运行态时,段表地址被载入CPU
根据段号查找段表获得段起始地址
物理地址=段起始地址+段内偏移
-
外碎片:不同分区都有碎片,这些内存碎片不能连续
-
内碎片:一个分区中多余的内存块
-
段页式存储管理:将用户程序分段,将每段分为大小相等的页,把主存分为与页大小相等的物理块,通过段表存放段的起始地址和段表长度,每个段创建一个页表
数据结构:
段表:
- 每个作业一张段表
- 表目指出某一段页表的始址和长度
页表
- 每一段一张页表
- 页表每一项指出逻辑页号与主存物理块号之间的对应关系
地址转换:
动态重定位
地址结构为(段号,页号,页内地址)
具体流程:
- 通过段号,查找段表,得到页表基址
- 通过页号,查找到块号
- 通过块号,得到块号:页内地址,即为物理地址
虚拟存储
- 解决问题:小内存运行大程序
- 原理:程序访问的局部性原理:一定时期只会访问一定区域的内存
- 抖动问题:交换过于频繁,导致CPU花费较多时间处理交换操作
请求分页式管理
-
分为:
预调入页式管理:一次调入该页以及相邻的几个页
请求分页式管理:只调入发生缺页中断时的页面
-
请求分页式管理的页面置换算法
最佳页面置换算法:选择置换未来一定时间内使用次数最少的页面
先进先出页面置换算法:新来的页面放在链表的尾部,每次换掉头部的页面
第二次机会页面置换算法:通过一位R表示是否被使用,每次判断链表头部的页面,如果R为0,则替换,否则置0,放置到链表尾部
时钟页面置换算法:通过循环链表实现的第二次机会页面置换算法,通过时钟指针指向当前最老的页面
最近最少使用页面置换算法:设置两位R(是否使用)与S(是否修改),发生缺页中断时,按R与S的值按00、01、10、11的优先级置换,置换完毕将所有的R为置0
驻留集与工作集 -
研究分配每个进程多少物理页面,以及如何动态调整各进程的物理页面数
-
驻留集:给进程分配的物理块
分配方式:
- 固定分配:驻留集大小固定
- 可变分配:驻留集大小可变
缺页中断发生时如何选择置换:
- 全局置换:内存中任意未使用页面均可替换,就是写入数据到该页面,原先被替换的页面被释放
- 局部置换:被替换的页面局限在缺页进程的驻留集
-
工作集:进程执行过程中访问页面的集合
评论已关闭