导图社区 王道操作系统-内存管理
包含王道视频课,汤子瀛教材课后习题总结以及王道课后习题的细节总结,以及含若干易错点以及二级结论,干货满满!
编辑于2021-09-15 17:37:06内存管理
视频细节
页表通常在PCB中中(从0开始编号)
PCB中有指向页表的指针,常驻内存
PCB在内存中,因此页表也在内存中
页表中的页号不占用空间
内存块大小=页面大小
进程未执行,页表地址和长度在PCB中
页表在内存中的存储位置由寄存器CR3给出
运行时放在页表寄存器(PTR中) 考试则回答在寄存器中
一个进程一个页表
若不采用二级页表,则光是页表项需要连续存放在内存的大量空间中,不现实
分页是一维,分段是二维
只有当页面满了之后发生的缺页中断才叫做页面置换
博客
https://blog.csdn.net/qq_35742579/article/details/112756905?spm=1001.2014.3001.5501
教材
静态链接是在【装入程序之前】进行的;而动态链接是在【装入某段程序时】或【调用某段程序时】进行的,其中在【调用某段程序时】进行链接,可提高内存利用率;适用于动态链接的存储方式是【分段存储管理】
在伙伴系统中,一对空闲分区为伙伴是指【两个大小均为2kB的相邻空闲分区,且前一个分区的起始地址是2k+1B的倍数】
重定位寄存器是整个系统一个,而不是每个寄存器一个
其中存放的地址叫做:有效地址
对外存对换区的管理应以【提高换入换出的速度】为主要目标,对外存文件区的管理应以【提高存储空间的利用率】
分页系统中,主存分配系统的单位是【物理块】,而地址转换工作是由【硬件】完成的
MMU
【固定分区】支持多道程序设计,管理最简单,但存储碎片多,【页式】使内存碎片尽可能少,而且使内存利用率最高
内存碎片分为内部碎片和外部碎片
下述存储管理方式中,会产生内部碎片的是【页式和段页式】,会产生外部碎片的是【动态分区方式和段式】
实现进程对换应具备【对换空间的管理】,【进程换入】和【进程换出】三方面的功能
把逻辑地址分成页号和页内地址是由【机器硬件】进行的,故分页系统的作业地址空间是【一】维的;把逻辑地址分成段号和段内地址是由【程序员】进行的,故分段系统的作业地址空间是【二】维的
王道3.1.6 P163
虚拟地址空间(编制空间)的上限影响因素
内存大小
磁盘空间大小
地址线位数
覆盖与交换技术
T3:交换技术
创建进程可换出主存:创建态——>就绪挂起
处于临界段的进程也能换出主存:其他想访问该临界段的进程需要等待
死锁进程可换出主存
死锁解除的一个策略
I/O操作的进程不能被换出主存
否则进行IO的区域可能被别的进程进入,造成不必要的修改
T31:对外存对换区的目的:提高换入换出速度
T4:覆盖与交换技术属于在逻辑上扩充主存,节省了主存空间
T14
动态重定位
可变分区
会紧凑,所以不属于静态重定位
页式 T50
段式
段页式
都是执行时确定物理地址
T21
物理、逻辑地址空间
提供给用户的物理地址空间需要除去页表或者段表的长度,而这个长度一旦不确定,则物理地址空间也不能确定
T28
采用可重入程序(共享段)后,段表不用调入调出,而是直接访问内存即可
减少了对换数量
T30
静态重定位(进程数据不能移动)
固定分区
动态分区在作业装入时创建
T32
进行回收分配之后,系统会根据不同的算法进行空闲分区链的排序
做题的时候没有看到第一个分区这个细节
T35
页面的大小决定因素
操作系统在CPU架构支持的页面中选择一种
选择的时候看进程的平均大小,页表占用长度
与MMU组件有关
T36
引入段式管理,满足了用户的下面需求
方便编程
可读性更高
共享与保护
保护:设置了修改位防止别人访问 共享:共享段表则方便共享
动态链接与增长
比如程序里面的if语句,只有进去了if里面,才需要加载一个模块,加载的过程叫做动态链接,加载了之后整个程序变长了,实现了动态增长
T38
对主储存器的访问
即CPU对主存的访问:固定以字节或者字为单位
对磁盘的访问
固定以块为单位
T56
最佳适应算法最容易产生小内部碎片
王道3.2.9 P193
虚拟存储
只能基于非连续分配
请求分页/段/段页 式 三种模式
不受内存和外存的限制,而受到CPU寻址范围的限制
没扩充内存和外存
扩充了主存
T13 最大容量与实际容量
T20 覆盖和交换可实现虚拟存储
缺页
发生缺页的时候,先看内存有无空闲页框,然后通过磁盘IO将目标页读入内存,再修改页表
如果发生缺页中断则不会发生处理越界错
缺页 = 页面失效次数
页面淘汰次数=换页次数
T11
T12 FIFO不一定会导致Belady异常
T17:页表项内容
LRU算法耗费高的原因:
需要维护一个排序队列,来决定淘汰队头的元素
抖动
主要原因:页面置换算法不合理
影响因素:系统给进程分配的页框数目
T33:撤销部分进程可以减缓抖动,增加磁盘交换区的容量和提高用户进程优先级没用
T21
分段便于动态链接
分页不适用
引入快表
主要是加快 地址变换的速度
T29
T31 32
提高CPU利用率:增加内存容量,减少程序的道数(手机卡了关掉一些程序) 增大磁盘交换区的容量和速度没有关系
T34
加快虚实地址转换的方法
增大TLB容量
让页表常驻内存
多级页表中在查询二级以上的页表中不会发生缺页,减少访问内存的次数
不管是不是增大交换区,页表的换入换出都要在交换区进行
二刷王道
整体框架理解
进程开始的时候,在内存里面的系统区创建PCB
PDBR在CPU的寄存器,由PCB内信息更新,表示页表初始地址
清空快表和Cache
切换进程的时候就要完成
所以开销高
初始化PCB里面的页表(一级页表常居内存,其他可在可不在)
初始状态
物理块(大小为log2[物理内存/页面大小]) 有效位 修改位 可访问 外存位置
空 0 0 1 123
第一次访问必缺页,缺页则从123调入内存
调入内存也算一次访存
TLB
每次访存都更新
全相联和组相联有置换策略
全相联的Tag=虚拟页号
二路组相联
每组两个,有n组
VPI=log2[n]取上界
VPN=虚拟页号-VPI
跟TAG对比
找到则直接访问对应物理块
此处的物理块占的bit为物理内存位数-页内偏移位数
找不到则通过VPN+VPI到多级页表找
学会分析多少级页表
考前必看
选择题
形成逻辑地址的步骤是 链接
相当于把多个文件合起来
T4:覆盖与交换技术属于在逻辑上扩充主存,节省了主存空间
物理上没扩充主存
节省主存空间是因为把不用的挪出去了
内存保护
需要操作系统管理不能越界
需要硬件计算地址
T9
覆盖
适用于
单一连续存储管理
硬实时系统
换页的时候是确定的哪一页,效率高 而请求分页是不确定哪一页的,效率低
固定分区分配的存储
虚拟内存的前夕产物
动态分区是作业装入时动态建立的
不是创建时,因为创建的时候只是在就绪队列,还没被调度,资源位于磁盘
页面大小规定绝对不是越大越好,如果一个页面1G则极度浪费空间
跟进程平均大小,页表长度有关
T37
存储管理
方便用户
不需要管物理地址和是否访问越界,操作系统会解决
用户操作的是逻辑地址
提高内存利用率
紧凑技术
分页管理
单用户连续分配=单一连续分配,只支持一个用户,不支持多道程序
固定分区,可变分区都支持多道程序
P152
T45
分页管理中
在多个程序并发的时候,每一个进程的页表(二级分页则只要一级页表)需要常驻在内存中,不然会找不到
不执行的进程的页表也必须在内存
分段理解为,dev里面main函数相当于一个段,main函数在0-5行表示用户地址逻辑空间为0-5
虚拟内存没有一次性
Belady和抖动不同!!!
Belady只有FIFO算法会出现,LRU和OPT算法永远不会出现Belady异常
FIFO只是可能有Belady异常,不是一定有
LRU,OPT也会有抖动现象
所有页面置换算法都不可避免,比如页面太少
分页和请求分页都有
请求分页扩充了内存(√)
间接扩充,用时间换空间
王道思维导图
快表慢表同时查找,则不命中的情况为正常的两次访问内存时间
N级页表访存N+1次
注意一级页表的不同表达方式
分段
分段适合分页和保护
段页式管理的地址转换过程
细节
快表中能找到的时候,只需要修改快表的表项,不需要马上修改慢表中的表项,这是为了减少访存次数,只有当快表被删除的时候才需要覆盖慢表中的内容
当发生缺页中断的时候,先将外存的页放入慢表同时放入快表,这时候再读快表
改进CLOCK细节流程