计算机考研408 - 操作系统 - 核心知识点总结 - 第三章内存管理(23考研408大纲)

操作系统 - 核心知识点总结 - 第三章内存管理

1.基本概念

1)高级语言程序翻译为机器代码的过程
(1)预处理:处理程序中的宏定义,头文件等
(2)编译:将高级语言程序转换为汇编代码程序(注意:编译也可以将高级语言直接转换为机器代码)
(3)汇编:将汇编代码程序转换为机器代码
(4)链接:将机器代码链接称为可装入模块

2)逻辑地址:每个进程都会拥有自己的逻辑地址空间,逻辑地址均从0开始,大小由操作系统决定(关键看逻辑地址占用多少位,并不是由内存大小决定,真题考察过),每条指令,每个数据都有自己的逻辑地址,现代计算机,程序计数器pc使用的是逻辑地址(不是物理地址),因此访问指令或数据时均需要进行虚实地址转换。(例子:逻辑地址空间为2的32次方,按字节编址,指令长度为2B,问程序计数器pc最少为多少位?答:log2(2^32/2)=31位,因为pc指示的是有所少个逻辑地址单元)

3)物理地址:也称为实地址,即内存单元的地址,现代计算机多数以字节为编址单位(除非题目特别说明)

4)内存共享
(1)基于分页存储管理共享:多个进程通过各自的页表项,指向共享页表中的同一个表项,从而实现共享,但是需要由用户自行维护对共享数据的互斥访问
(2)基于分段存储管理共享:多个进程通过各自的段表项,指向共享段表中的同一个表项,从而实现共享
(3)内存映射文件:进程将其逻辑地址空间中的一部分,映射到内存的共享区域,该区域的数据对所有进程都可见,进程通过对映射文件的读写,实现对磁盘数据的操作且无序访问磁盘,操作系统会不时的将共享区域的数据回写磁盘
在这里插入图片描述

5)内存保护(主要是为了防止进程之间非法越界访问)
(1)基于上、下限地址寄存器的内存保护:在上限地址寄存器保存程序的上限物理地址,下限地址寄存器同理,在程序通过地址访问指令或数据时,与寄存器中的值比较,判断是否越界,若越界则会发生异常(即故障类异常中的越界访问,关于异常/中断的总结,可以看这篇文章https://blog.csdn.net/AKA_SUPERROSE/article/details/128473457

(2)基于重定位寄存器,界地址寄存器的内存保护:重定位寄存器保存程序的起址,界地址寄存器保存程序偏移最大值,只需要相加再与需要访问的物理地址进行比较,即可知道是否发生越界访问
在这里插入图片描述

2.内存的连续分配

(主要指操作系统如何为进程分配内存,连续分配方式是指为进程分配连续的内存空间)

(1)单一连续分配:在这种分配方式下,内存划分为系统区和用户区,当需要为进程分配内存时,则从用户区为其划分连续的一片内存空间。这种分配方式,只适用于单用户,单进程的操作系统,一般较少使用
(2)固定分区分配:将内存划分为若干个分区,每个分区大小并不是必须要相等,然后创建一个分区表,通过分区表指明每个分区的起址与大小,在为进程分配内存时,可以通过搜索适合的分区进行分配
在这里插入图片描述(3)动态分区分配:内存未划分为分区时,则为进程按需分配,并形成分区。若分区已划分完成,则按照分区分配策略为进程分配内存(选择好分区后将分区的一部分划分给进程)。常用的分区分配策略有:
1.首次适应:将分区按地址从小到大的方式,在分区表中排序,每次为进程分配表项中第一个能满足要求的分区。一般来说性能最好
2.临近适应:从上一次分配的分区后面,继续开始检索分配
3.最佳适应:将分区按容量递增的方式,在分区表中进行排序,每次为进程分配容量恰好能满足需求且最小的分区。对比起其他分配策略会产生最多的外部碎片(即内存中因为容量太小而无法分配的内存空间)
4.最差适应:将分区按容量递减的方式,在分区表中进行排序,每次都将最大分区的一部分划分给进程

3.内存的非连续分配

(非连续分配方式是指为进程分配内存时,内存空间可以不连续)

1)分页存储管理
(1)地址结构:
在这里插入图片描述

(2)实现说明:每个进程有一张页表,页表通常存放在内存的系统区,在cpu运行某个进程时,会将其页表加载到页表寄存器。操作系统为每个进程按页为大小进行内存分配,分页存储管理地址为一维(即给出一个地址,页号与页内偏移由操作系统算出)

(3)虚实地址转换:页号p=逻辑地址/页大小,页内偏移w=逻辑地址%页大小。虚实地址转换时,根据页号与页表寄存器(存放表长,页表起址)中的页表长度进行比较,判断页号是否越界,若没有越界则由 页表起址+页号=数据或指令在内存中的块号(相当于随机访问页表,定位到对应表项,取出所在的块号),可得数据/指令的有效物理地址=块号*页面大小+页内偏移w。(实际上,在计算机组成原理中,逻辑地址中的页号应该称为虚页号;而页表中的块号称为实页号,也称页框号,王道书块号这种叫法不太准确,很容易与磁盘的盘块号混淆,注意区分)(延伸:虚页号实际上相当于页表中的一个下标,用于定位块号所在的页表项;而实页号(页框号)则是内存中某个页面的真实物理起址)
在这里插入图片描述

2)分段存储管理
(1)地址结构
在这里插入图片描述

(2)实现说明:程序按逻辑分段(写过汇编程序的应该都知道,汇编程序中可以定义数据段,代码段等),操作系统按段分配内存(段所占的内存空间连续,不同段可以不连续分配),逻辑地址为二维(即用户需要分别给出段号,段内偏移,且操作系统在虚实地址转换时会进行两次越界判断)

(3)虚实地址转换:根据段号与段表寄存器中的段表长度进行比较(第一次越界判断,段号是否大于段的数量),然后根据段号在段表中(随机访问定位)找到对应的段表项,再用段内偏移与段表项中的段长比较(第二次越界判断)
在这里插入图片描述

然后取出段表起址+段内偏移=有效物理地址
在这里插入图片描述

3)段页式存储管理(段页式存储管理真题没出过大题,小题为主简单了解)
(1)地址结构
在这里插入图片描述

(2)实现说明:程序仍然由用户(编程人员)按逻辑分段,但与分段存储管理不同,段页式不再按段连续分配内存,而是为每个段按页大小进行分配内存。逻辑地址为二维
(3)虚实地址转换:每个程序(进程)一张段表,每个段表项对应多个页面(因此也对应多个页表项)。访问一次数据/指令,至少需要三次访存

在这里插入图片描述
4)TLB快表:也称为相联存储器,一般由SRAM制作而成。其作用主要是缓存页表中的部分内容,以便加速虚实地址转换(因为TLB集成在cpu内,且命中TLB时不需要再访问内存中的页表,能减少访存次数,因此能加快地址转换过程)。(拓展:TLB快表与页表的映射关系,同样有类似于cache与内存的映射方式,如直接映射,全相联映射,组相联映射)
(1)全相联映射的TLB快表结构如下:(全相联映射需要各个表项逐一比较)
在这里插入图片描述(2)四路组相联映射(共8组)TLB快表结构如下:(需要根据逻辑地址中的虚页号的后log2(8)=3位确定组号,然后虚页号前面剩余的若干位作为TLB标记,与该组中的表项逐一比较(组内相当于全相联映射),判断是否命中TLB)
在这里插入图片描述

4.虚拟存储器(以请求分页存储管理为例)

1)定义:具有请求调入,且具有置换功能,并从逻辑上扩充了内存容量的存储系统。实际上是非连续分配的进一步改进。允许程序不用装入全部的页面即可运行,但是当需要访问的页面不在内存时,会发生缺页异常,调入需要的页面之后,再重新访问对应的数据/指令。注意:一条指令的执行过程中可能会发生多次缺页(比如访问指令时缺页,访问若干个数据又缺页)

2)驻留集:即操作系统分配给进程的页框的集合

3)驻留集(页框)的分配策略
(1)固定分配局部替换:固定分配即操作系统分配给进程的页框个数是固定的;局部替换的是指操作系统在进程发生缺页时,不会再给进程追加分配页框,进程只能选择淘汰自己驻留集中的一个页面。因此不会出现固定分配全局替换这种分配策略(真题考察过,因为固定了就不能再追加)(这块王道书写得十分难懂,我是自己查资料结合个人理解总结而来)
(2)可变分配全局替换:可变分配是指进程的驻留集大小可以发生变化;全局替换是指当进程发生缺页时,由操作系统将其维护的空闲页框队列中,取出一个空闲页框追加分配给所需进程
(3)可变分配局部替换:这个策略比较特别,虽然是局部替换,操作系统在进程发生缺页时确实不会马上给进程追加分配页框,而是在进程缺页率较高时(这个“较高”是多少要看算法具体实现)才会给进程追加空闲的页框,而当进程的缺页率降低到某个值时,则会回收页框

4)工作集(区分驻留集):由时间t与工作窗口确定的一个,进程最近经常访问的页面集合。操作系统通常根据工作集的大小,确定进程的驻留集的大小(驻留集大小一般大于工作集大小,这样可以减少进程发生抖动的概率)
在这里插入图片描述

5)页面置换算法:当操作系统分配给进程的驻留集全部用完的时候,若进程再次发生缺页异常,则需要根据页面置换算法,淘汰驻留集中的一个页面,并调入新的页面
(1)最佳置换算法OPT:选择以后最少或不再访问的页面换出,因为实际上无法预测未来的页面访问情况,所以较难实现,常用于比较其他算法的性能
(2)先进先出置换算法FIFO:最先进入的页面,最先换出。仅FIFO算法存在belady异常(区分抖动现象,抖动是所有置换策略都会发生的情况,即进程频繁的换入换出页面,无法完全避免,因为你驻留集不可能无限大),即随着操作系统给进程分配的页框越多,缺页率可能不减反增的现象
(3)最近最少使用置换算法LRU:通过给页框设置一个标志位,记录上次访问以来所经历的时间(操作系统/软件层面可以这样做,但是如果在计组中,由于硬件的标志位是有限的,所以记录的是淘汰的优先级)均为选择其中的最大值进行淘汰
(4)clock(时钟)置换算法:给每个页框设置一个访问位,在需要淘汰页面时,循环遍历各个页框,若访问位为0则淘汰该页,若访问位为1则将其置为0,若第一轮遍历没有找到要淘汰的页面(即全部页框都为1且被置为0),则开始第二轮遍历,第二轮遍历一定能找到要淘汰的页面
(5)改进型clock置换算法:在clock置换算法的基础上,为每个页框增加一个修改位,在寻找淘汰页面的时候,优先淘汰访问位=0,修改位=0;其次是访问位=0,修改位=1;再其次是访问位=1,修改位=0;最后是访问位=1,修改位=1

6)页面调入/换出的位置
(1)磁盘文件区:非连续分配
(2)磁盘对换区:空间连续分配,读取速度快
在这里插入图片描述
7)结合TLB与Cache我的虚实地址转换过程:这个可以稍微等待下我后面出的计组总结。Coming soon

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一些计算机408考研中关于中断的重要知识点: 1. 中断的定义:中断是一种计算机处理器与外部设备交互的机制,当外部设备需要处理器的服务时,就通过中断来向处理器发出请求,处理器则暂停当前正在执行的任务,转而执行与中断相关的处理程序。 2. 中断的分类:中断可以分为硬件中断和软件中断。硬件中断是由硬件设备发出的,如外部设备请求处理器的服务;软件中断是由程序运行中的指令发出的,如系统调用、异常等。 3. 中断的处理过程:当中断请求发生时,处理器会保存当前的指令指针、程序状态、寄存器等信息,然后跳转到中断处理程序,执行完中断处理程序后,再恢复之前的执行状态,继续执行原来的程序。 4. 中断向量表:中断向量表是一张表格,其中每个表项对应一个中断类型,包含中断处理程序的入口地址等信息。当中断请求发生时,处理器会根据中断类型从中断向量表中查找对应的中断处理程序的入口地址。 5. 中断优先级:不同的中断请求可能同时发生,处理器需要根据中断优先级来决定先处理哪个中断请求。一般来说,硬件中断的优先级比软件中断高,同一种中断类型的优先级也可能不同。 6. 中断屏蔽:中断屏蔽是指处理器在处理一个中断请求时,暂时关闭其他中断请求的机制。这样可以避免多个中断请求同时发生造成的竞争和冲突。 7. 中断嵌套:中断嵌套是指在一个中断处理程序执行期间,又发生了另一个中断请求。处理器需要根据中断优先级和中断屏蔽的机制来处理多个中断请求之间的竞争和冲突。 希望这些知识点能够帮助到你备考计算机408考研

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值