决战408:OS大题我拿拿拿(非PV)

一、引言

最近几年的大题这块真的是梦到那块出那块(开玩笑),真的很难保证自己OS大题能够拿到不错的分数,只可能尽可能理解多拣点分。

| | 进程管理 | 内存管理 | 磁盘管理 | 文件管理 |
| 2009 | | 页表、多级页表、快表 | | |
| 2010 | | 虚拟内存 | 磁盘的基本结构、调度算法、读取时间 | |
| 2011 | | | | 文件物理结构 |
| 2012 | | 虚拟内存 | | 文件物理结构 |
| 2013 | | 页表、多级页表、快表 | | 文件物理结构 |
| 2014 | | | | |
| 2015 | | 页表、多级页表、快表 | | |
| 2016 | 进程调度算法 | | 文件与目录 | |
| 2017 | | 页表、多级页表、快表 | | |
| 2018 | | 页表、多级页表、快表 | | 文件物理结构 |
| 2019 | | | 磁盘的基本结构、调度算法、读取时间 | |
| 2020 | | | | |
| 2021 | | | | |
| 2022 | | | 文件与目录 | |
| 2023 | PCB、内核、进程的状态转换、系统调用 | | | |
| 2024 | | 页表、多级页表、快表 | | |

2025 PCB、内核、进程的状态转换、系统调用

二、历年真题

2009

请求分页管理系统中,假设某进程的页表内容如下表所示:

页号 页框(Page Frame)号 有效位(存在位)
0 101H 1
1 0
2 254H 1

页面大小为 4KB,一次内存的访问时间是 100ns,一次快表(TLB)的访问时间是 10ns,处理一次缺页的平均时间 10⁸ ns(已含更新 TLB 和页表的时间),进程的驻留集大小固定为 2,采用最近最少使用置换算法 (LRU) 和局部淘汰策略。假设

① TLB 初始为空;

② 地址转换时先访问 TLB,若 TLB 未命中,再访问页表(忽略访问页表之后的 TLB 更新时间);

③ 有效位为 0 表示页面不在内存,产生缺页中断,缺页中断处理后,返回到产生缺页中断的指令处重新执行。

设有虚地址访问序列 2362H、1565H、25A5H,请问:

(1) 依次访问上述三个虚地址,各需多少时间?给出计算过程。

(2) 基于上述访问序列,虚地址 1565H 的物理地址是多少?请说明理由。

分析:由页面大小为 4KB, 即 2^12B,则得到页内位移占虚地址的低 12 位,页号占剩余高4位。然后最开始为空所以第一次访问TLB未命中,故而去访问页表,最后合成物理地址后去访问主存(第一遍写的时候太轻敌了)第二个也是一样的,先TLB,落空,Page,落空,故而缺页中断,中断处理完还是要写回TLB,所以这里还有访问TLB的时间,最后合成物理地址后去访问主存。而最后一个地址因为先前已经将该页号放入TLB,故直接访问完拼物理地址,访问主存;驻留集只有22222,然后又是LRU,所以访问虚拟地址1565H是要将0号页淘汰,那其相对应的页框就自然分给了1号页。

2010

假设计算机系统采用 CSCAN(循环扫描)磁盘调度策略,使用 2KB 的内存空间记录 16384 个磁盘块的空闲状态。

(1)请说明在上述条件如何进行磁盘块空闲状态的管理。

(2)设某单面磁盘的旋转速度为 6000rpm,每个磁道有 100 个扇区,相邻磁道间的平均移动的时间为 1ms。若在某时刻,磁头位于 100 号磁道处,并沿着磁道号增大的方向移动(见下图),磁道号的请求队列为 50, 90, 30, 120,对请求队列中的每个磁道需读取 1 个随机分布的扇区,则读完这个扇区点共需要多少时间?需要给出计算过程。

(3)如果将磁盘替换为随机访问的 Flash 半导体存储器(如 U 盘、SSD 等),是否有比 CSCAN 更高效的磁盘调度策略?若有,给出磁盘调度策略的名称并说明理由;若无,说明理由。

分析:这种题一定要注意转速的单位噢,无特殊说明CSCAN就是CLOOK(只要磁头移动方向上不再有请求,就立即让磁头返回)顺带复习一下LOOK是只要磁头移动方向上不再有请求,就立即改变磁头方向,一个是不再处理路途中间的请求一个是就这么处理回去,这个早年这样结合起来算时间感觉更合理

分析:根据 FIFO 算法,需要替换装入时间最早的页,故需要置换装入时间最早的 0 号页,即将 5 号页装入 7 号页框中,所以物理地址为 0001 1111 1100 1010B = 1FCAH;Clock就是看访问位,如果为1就没事,但是我走了要给你摁掉,直到遇到第一个0,那第一轮是不是轮空,第二次指向2号页的时候就发现这里的访问位为0将其替换(顺带复习一下,改进型的Clock就是二改访00010001 先访问后修改)

2011

某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。请回答如下问题∶

(1)在连续、链式、索引二种文件的数据块组织方式中。哪种更合适?要求说明理由。为定位文件数据块,需要在 FCB 中设计哪些相关描述字段?

(2)为快速找到文件,对于 FCB,是集中存储好,还是与对应的文件数据块连续存储好?要求说明理由。

分析:首先一次性写入且不可修改,那连续除了修改麻烦那那都是优点啊,相比之下,链式分配需要额外的指针空间,随机访问效率低;索引分配需要单独读写索引块,增加了一次磁盘I/O,且索引块本身可能带来管理复杂度

(1)在磁盘中连续存放(采取连续结构),磁盘寻道时间更短,文件随机访问效率更高;

在FCB中加入的字段为:<起始块号,块数>或者<起始块号,结束块号>。

(2)将所有的FCB集中存放,文件数据集中存放。这样在随机查找文件名时,只需访问FCB

对应的块,可减少磁头移动和磁盘IO访问次数。

2012

某请求分页系统的局部页面置换策略如下:系统从 0 时刻开始扫描,每隔 5 个时间单位扫描一轮驻留集(扫描时间忽略不计),本轮没有被访问过的页框将被系统回收,并放入到空闲页框链尾,其中内容在下一次被分配之前不被清空。当发生缺页时,如果该页曾被使用过且还在空闲页框链表中,则重新放回进程的驻留集中;否则,从空闲页框链表头部取出一个页框。

假设不考虑其他进程的影响和系统开销,初始时进程驻留集为空。目前系统空闲页框链表中页框号依次为 32、15、21、41。进程 P 依次访问的 <虚拟页号,访问时刻> 是:

<1, 1>、<3, 2>、<0, 4>、<0, 6>、<1, 11>、<0, 13>、<2, 14>。请回答下列问题。

(1)访问<0, 4>时,对应的页框号是什么?

(2)访问<1, 11>时,对应的页框号是什么?说明理由。

(3)访问<2, 14>时,对应的页框号是什么?说明理由。

(4)该策略是否适合于时间局部性好的程序?说明理由。

分析:这种题最难的一步就在于搞懂它在问啥子和做啥子(关键点:当发生缺页时,如果该页曾被使用过还在空闲链表中,那么重新放回进程的驻留集)

(1)页框号为21

理由:因为起始驻留集为空,因此0页对应的页框为空闲链表中的第三个空闲页框21,其对应的页框号为21。

(2)页框号为32

理由:因11>10故发生第三轮扫描,页号为1的页框在第二轮已处于空闲页框链表中,此刻该页又被重新访问,因此应被重新放回驻留集中,其页框号为32。

(3)页框号为41

理由:因为第2页从来没有被访问过,它不在驻留集中,因此从空闲页框链表中取出链表头的页框41,页框号为41。

(4)合适。

理由:如果程序的时间局部性越好,那么从空闲页框链表中重新取回的机会越大,该策略的优势越明显。

某文件系统空间的最大容量为 4TB(1TB= 2^40 B),以磁盘块为基本分配单位。磁盘块大小为 1KB。文件控制块 (FCB) 包含一个 512B 的索引表区。请回答下列问题。

(1)假设索引表区仅采用直接索引结构,索引表区存放文件占用的磁盘块号,索引表项中块号最少占多少字节?可支持的单个文件最大长度是多少字节?

(2)假设索引表区采用如下结构:第 0~7 字节采用 <起始块号,块数> 格式表示文件创建时预分配的连续存储空间,其中起始块号占 6B,块数占 2B;剩余 504 字节采用直接索引结构,一个索引项占 6B,那么可支持的单个文件最大长度是多少字节?为了使单个文件的长度达到最大,请指出起始块号和块数分别所占字节数的合理值并说明理由。

分析:套娃题目的伊始是吗?先得知道有多少块,再得出块号所占的位数,又因为是直接索引,所以还要先求一下索引表区有多少个索引项就可以知道最大长度了;混合索引问题后来很经常在小题中出现,连续区块数占 2B,共可以表示 2^16个磁盘块,即 2^26B。直接索引区共 504B/6B=84 个索引项。所以该系统可支持的单个文件最大长度是 2^26B+84KB,为了使单个文件的长度达到最大,应使连续区的块数字段表示的空间大小尽可能接近系统最大容量 4TB

2013(⭐⭐)

分析:OS里头但凡考物理地址和逻辑地址,它就是想串你、把你搞晕,在草稿纸规规矩矩写好已知讯息,由页表项数乘上大小即可得页表占用多少字节;代码页面 1 的逻辑地址为 00008000H,表明其位于第 8 个页的位置,对应页表中的第 8 个页表项,所以第 8 个页表项的物理地址 = 页表起始地址 + 8×页表项的字节数 = 00200000H + 8×4 = 00200020H

注:00900H+1H(0001 0000 0000 0000B=2^12=4K(8KB分成两个页面,一个页框的大小是4K))就是要根据逻辑地址划分和物理地址划分去找页号、页框。正着要会算,反着也要会。

2014

文件 F 由 200 条记录组成,记录从 1 开始编号。用户打开文件后,欲将内存中的一条记录插入文件 F 中,作为其第 30 条记录。请回答下列问题,并说明理由。

(1)若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件 F 存储区域前后均有足够的空闲磁盘空间,则完成上述插入操作最少需要访问多少次磁盘块?F 的文件控制块内容会发生哪些改变?

(2)若文件系统采用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要访问多少次磁盘块?若每个存储块大小为 1KB,其中 4B 存放链接指针,则该文件系统支持的文件最大长度是多少?

分析:还是一样的理论,老头不会讲废话,就是前后都有空间;最后写回还需要访存一次!

(1)采用顺序分配方式时,插入记录需要移动其他的记录块,整个文件共有200条记录,要插入新记录作为第30条,而存储区前后均有足够的磁盘空间,且要求最少的访问存储块数,则要把文件前29条记录前移,若算访盘次数移动一条记录读出和存回磁盘各是一次访盘(访问磁盘块),29条记录共访盘58次,存回第30条记录访盘1次,共访盘59次。

F的文件控制区的起始块号和文件长度的内容会因此改变。(连续分配方式中的内容)

(2)文件系统采用链接分配方式时,插入记录并不用移动其他记录,只需找到相应的记录,修改指针即可。插入的记录为其第30条记录,那么需要找到文件系统的第29块,一共需要访盘29次,然后把第29块的下块地址部分赋给新块,把新块存回内存会访盘1次,然后修改内存中第29块的下块地址字段,再存回磁盘,一共访盘29+1+1=31次。

4字节共32位,可以寻址2^32=4G块存储块,每块的大小为1KB,即1024B,其中下块地址部分占4B,数据部分占1020B,那么该系统的文件最大长度是4G×1020B=4080GB。(hin坑)

2015

分析:但是有的时候,老头就是要考察你到底懂不懂比如相对的有"分别""各";然后就是这个世界就是一个巨大的套娃,依旧套娃一共多少页×页表项大小÷页,但我第一遍还是比较笨,这都没有做对,再次复习一下多级页表,页表基址寄存器存的是一级页表的物理地址;看清楚问题,人家问的是页目录多少页,页表多少页,真的坑;还有自己理解的概念不够清晰,问的是要访问多少个二级页表,不是问你访问多少个页,因为高10位是一样的,所以其实访问的是同一个二级页表

用一下B站发哥的图

2016

某进程调度程序采用基于优先数 (priority) 的调度策略,即选择优先数最小的进程运行,进程创建时由用户指定一个 nice 作为静态优先数。为了动态调整优先数,引入运行时间 cpuTime 和等待时间 waitTime,初值均为 0。进程处于执行态时,cpuTime 定时加 1,且 waitTime 置 0;进程处于就绪态时,cpuTime 置 0,waitTime 定时加 1。请回答下列问题。

(1)若调度程序只将 nice 的值作为进程的优先数,即 priority=nice,则可能会出现饥饿现象,为什么?

(2) 使用 nice、cpuTime 和 waitTime 设计一种动态优先数计算方法,以避免产生饥饿现象,并说明 waitTime 的作用。

分析:我自己第一遍写的时候是没有写k1k2的,但是很明显写的版本更优

(1)由于采用了静态优先数,当就绪队列中总有优先数较小的进程时,优先数较大的进程一直没有机会运行,因而会出现饥饿现象。

(2)优先数priority的计算公式为 priority = nice + k1 x cpuTime - k2 x waitTime,其中k1>0,k2>0,用来分别调整cpuTime和waitTime在priority中所占的比例(权重)。waitTime可使长时间等待的进程优先数减少,从而避免出现饥饿现象。

分析:跟着题目的意思来;这个又是常规的套娃题(本身的长度×这个长度所能表示的个数)+一个文件最大长度;FAT就类似静态页表似的;这种我觉得就是文件长度的变体,首先得把dir读入对吧,然后根据长度算一下在第几个簇

2017

假定题 44 给出的计算机 M 采用二级分页虚拟存储管理方式,虚拟地址格式如下:

|------------|------------|-------------|
| 页目录号(10 位) | 页表索引(10 位) | 页内偏移量(12 位) |

请针对题 43 的函数 f1 和题 44 中的机器指令代码,回答下列问题。

(1)函数 f1 的机器指令代码占多少页?

(2)取第 1 条指令(push ebp)时,若在进行地址变换的过程中需要访问内存中的页目录和页表,则会分别访问它们各自的第几个表项(编号从 0 开始)?

(3) M 的 I/O 采用中断控制方式。若进程 P 在调用 f1 之前通过 scanf() 获取 n 的值,则在执行 scanf() 的过程中,进程 P 的状态会如何变化?CPU 是否会进入内核态?

分析:结合2015那道是不是就清晰多了,就看高20位一不一样;这个第几个别给自己绕晕了;关于scanf我记得还有一道题目就是说它这个数据最终会被加载到内核缓冲区

2018

(1)某虚拟地址对应的页目录号为 6,在相应的页表中对应的页号为 6,页内偏移量为 8,该虚拟地址的十六进制表示是什么?

(2)寄存器 PDBR 用于保存当前进程的页目录起始地址,该地址是物理地址还是虚拟地址?进程切换时,PDBR 的内容是否会变化?说明理由。同一进程的线程切换时,PDBR 的内容是否会变化?说明理由。

(3)为了支持改进型 CLOCK 置换算法,需要在页表项中设置哪些字段?

分析:真希望都出这种题,至少不会一分拿不上,由图可知,地址总长度为 32 位,高 20 位为虚页号,低 12 位为页内地址,且虚页号高 10 位为页目录号,低 10 位为页号;原来是这块就出现了,这个存的的是物理地址,进程才是资源分配的单位所以进程切换是会的;再次复习改进型的Clock就是二改访00010001 先访问后修改

某文件系统采用索引节点存放文件的属性和地址信息,簇大小为 4KB。每个文件索引节点占 64B,有 11 个地址项,其中直接地址项 8 个,一级、二级和三级间接地址项各 1 个,每个地址项长度为 4B。请回答下列问题。

(1)该文件系统能支持的最大文件长度是多少?(给出计算表达式即可)

(2)文件系统用 1M(1M= 2^20 )个簇存放文件索引节点,用 512M 个簇存放文件数据。若一个图像文件的大小为 5600B,则该文件系统最多能存放多少个这样的图像文件?

(3)若文件 F1 的大小为 6KB,文件 F2 的大小为 40KB,则该文件系统获取 F1 和 F2 最后一个簇的簇号需要的时间是否相同?为什么?

分析:标准版最大文件长度问题,我第一遍是在抽什么风,簇大小为 4KB,每个地址项长度为 4B,故每簇有 4KB/4B = 1024 个地址项;就比比谁更小(不能光有纸没坑位,同样不能光有坑位没纸),同时引出一个考点,当有簇的时候要以这个为单位划分5600B 的文件占 2 个簇;这个算是一个很简单的变体吧,就是算算那个范围能够圈住这个,换句话说就是是否超出了直接、一级、二级和三级所能表示的范围

2019

某计算机系统中的磁盘有 300 个柱面,每个柱面有 10 个磁道,每个磁道有 200 个扇区,扇区大小为 512B。文件系统的每个簇包含 2 个扇区。请回答下列问题:

(1)磁盘的容量是多少?

(2)假设磁头在 85 号柱面上,此时有 4 个磁盘访问请求,簇号分别为 100260、60005、101660 和 110560。若采用最短寻道时间优先 (SSTF) 调度算法,则系统访问簇的先后次序是什么?

(3)第 100530 簇在磁盘上的物理地址是什么?将簇号转换成磁盘物理地址的过程是由 I/O 系统的什么程序完成的?

分析:我记得自己最犹豫的就是到底是向上取整还是向下呢,但其实就是写晕了,这个地址结构也不是第一次出现了,另一次好像是在某年计组大题第一小问,物理地址由其所在的柱面号、磁道号、扇区号构成

2020

某 32 位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录项和页表项长度均为 4 字节,虚拟地址结构如下所示。

|------------|----------|---------------|
| 页目录号(10 位) | 页号(10 位) | 页内偏移量(12 hb位) |

某 C 程序中数组 a[1024][1024]的起始虚拟地址为 1080 0000H,数组元素占 4 字节,该程序运行时,其进程的页目录起始物理地址为 0020 1000H,请回答下列问题。

(1)数组元素 a[1][2]的虚拟地址是什么?对应的页目录号和页号分别是什么?对应的页目录项的物理地址是什么?若该目录项中存放的页框号为 00301H,则 a[1][2]所在页对应的页表项的物理地址是什么?

(2)数组 a 在虚拟地址空间中所占区域是否必须连续?在物理地址空间中所占区域是否必须连续?

(3)已知数组 a 按行优先方式存放,若对数组 a 分别按行遍历和按列遍历,则哪一种遍历方式的局部性更好?

分析:嘞个对二级页表的考察还是比较深入的,可以考前再看看,依旧是套娃套到爽,根据数组的随机存取特点,数组 a 在虚拟地址空间中所占的区域必须连续,由于数组 a 不止占用一页,相邻逻辑页在物理上不一定相邻,因此数组 a 在物理地址空间中所占的 区域可以不连续;送分,做过那么多年了

2021

某计算机用硬盘作为启动盘,硬盘第一个扇区存放主引导记录,其中包含磁盘引导程序和分区表。磁盘引导程序用于选择要引导哪个分区的操作系统,分区表记录硬盘上各分区的位置等描述信息。硬盘被划分成若干个分区,每个分区的第一个扇区存放分区引导程序,用于引导该分区中的操作系统。系统采用多阶段引导方式,除了执行磁盘引导程序和分区引导程序外,还需要执行 ROM 中的引导程序。请回答下列问题。

(1)系统启动过程中操作系统的初始化程序、分区引导程序、ROM 中的引导程序、磁盘引导程序的执行顺序是什么?

(2)把硬盘制作为启动盘时,需要完成操作系统的安装、磁盘的物理格式化、逻辑格式化、对磁盘进行分区,执行这 4 个操作的正确顺序是什么?

(3)磁盘扇区的划分和文件系统根目录的建立分别是在第 (2) 问的哪个操作中完成的?

(1)启动系统时,首先运行ROM中的引导代码(bootstrap)。为执行某个分区的操作系统的初始化程序,需要先执行磁盘引导程序以指示引导到哪个分区,然后执行该分区的引导程序,用于引导该分区的操作系统。即使这题真的不会,看题目也是能够做出来的。

  1. ROM中的引导程序
  2. 磁盘引导程序
  3. 分区引导程序
  4. 操作系统的初始化程序

(2)执行顺序:磁盘只有通过分区和逻辑格式化后才能安装系统和存储信息

  1. 磁盘的物理格式化
  2. 对磁盘进行分区
  3. 磁盘的逻辑格式化
  4. 操作系统的安装

物理格式化(又称低级格式化,通常出厂时就已完成)的作用是为每个磁道划分扇区,安排扇区在磁道中的排列顺序,并对已损坏的磁道和扇区做"坏"标记等。随后将磁盘的整体存储空间划分为相互独立的多个分区(如Windows中划分C盘、D盘等),这些分区可以用作多种用途,如安装不同的操作系统和应用程序、存储文件等。然后进行逻辑格式化(又称高级格式化),其作用是对扇区进行逻辑编号、建立逻辑盘的引导记录、文件分配表、文件目录表和数据区等。最后才是操作系统的安装。

(3)由上述解析知,磁盘扇区的划分是在磁盘的物理格式化操作中完成的,文件系统根目录的建立是在逻辑格式化操作中完成的(老头的仁慈,但我怕你说这里面再考细节呢,就比如某一年真题考过中断向量表的形成就是在1这个步骤完成的)

2022

某文件系统的磁盘块大小为 4KB,目录项由文件名和索引节点号构成,每个索引节点占 256 字节,其中包含直接地址项 10 个,一级、二级和三级间接地址项各 1 个,每个地址项占 4 字节。该文件系统中子目录 stu 的结构如题 45 (a) 图所示,stu 包含子目录 course 和文件 doc,course 子目录包含文件 course1 和 course2。各文件的文件名、索引节点号、占用磁盘块的块号如题 45(b)图所示。

请回答下列问题。

(1)目录文件 stu 中每个目录项的内容是什么?

(2)文件 doc 占用的磁盘块的块号 x 的值是多少?

(3)若目录文件 course 的内容已在内存,则打开文件 course1 并将其读入内存,需要读几个磁盘块?说明理由。

(4)若文件 course2 的大小增长到 6MB,则为了存取 course2 需要使用该文件索引节点的哪几级间接地址项? 说明理由。

分析:当年做过16年的应该这都没问题,目录项由文件名和索引节点号构成;易知doc和course1的索引节点号是一样的,那对应的磁盘块号也应该是一样的;几乎一模一样的考法,先读 course1 的索引结点所在的磁盘块,再读 course1 的内容所在的磁盘块;最大文件长度的变体吧

注:故意错的┗|`O′|┛ 嗷~~

2023

进程P通过执行系统调用从键盘接收一个字符的输入, 已知此过程中与进程P相关的操作包括:

  1. 将进程P插入就绪队列
  2. 将进程P插入阻塞队列
  3. 将字符从键盘控制器读入系统缓冲区
  4. 启动键盘中断处理程序
  5. 进程P从系统调用返回
  6. 用户在键盘上输入字符

(1)按照正确的操作顺序,操作1的前一个和后一个操作分别是上述操作中的哪一个?操作6的后一个操作是上述操作中的哪一个

(2)在上述哪个操作后CPU一定从进程P切换到其他进程?在上述哪个操作之后CPU调度程序才能选中进程P执行

(3)完成上述哪个操作的代码属于键盘驱动程序?

(4)键盘中断处理程序执行时,进程P处于什么状态?CPU处于内核态还是用户态?

分析:scanf又又又又出现啦,首先首尾是很好判断的对吧,肯定是得先把P阻塞一下才有后续,反过来看,P从系统调用返回,那是不是应该是全部事情都整完了,再倒推一步是不是就可以知道5之前应该是1吧,都准备好了才会给你拉回就绪队列。那再看回头部,为啥会阻塞呢?不就是在等待用户输数据嘛(6)最后还有个34,这俩该咋搞呢,想想这是从外部读取数据呢,那IO层次结构驱动和中断啥位置咯,至下而上先中断后驱动。那最终我们得到得序列应该是:

    1. 将进程P插入阻塞队列(等待输入)
    1. 用户在键盘上输入字符(等待处理)
    1. 启动键盘中断处理程序
    1. 将字符从键盘控制器读入系统缓冲区
    1. 将进程P插入就绪队列
    1. 进程P从系统调用返回

(1)3、5 4

(2)2 1

(3)3

(4)阻塞 内核

2024(⭐⭐⭐)

某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址和物理地址的长度均为32位,页表项的大小为4字节,页大小4MB,虚拟地址结构如下。

进程P的页表起始虚拟地址B8C00000H,被装载到从物理地65400000H开始的连续主存空间中。请回答下列问题,要求答案用十六进制表示。

(1)若CPU在执行进程P的过程中,访问虚拟地址12345678H时发生了缺页异常,经过缺页异常处理和MMU地址转换后得到的物理地址是BAB45678H,在此次缺页异常处理过程中,需要为所缺页分配页框并更新相应的页表项,则该页表项的虚拟地址和物理地址分别是什么?该页表项中的页框号更新后的值是什么?

(2)进程P的页表所在页的页号是什么?该页对应的页表项的虚拟地址是什么?该页表项中的页框号是什么?

分析:其实就是那个地址翻译的全过程,不要乱不要乱,深呼吸。这题也要对比着13、23年来做。首先还是要先找出页号吧(高10位)00 0100 1000B = 048H,也就是在这里缺页了是吧,那也给我们初始的虚拟地址了,所以这个页表项虚拟地址 = 页表起始虚拟地址 + 页号×4,同时页表项物理地址 = 页表起始物理地址 + 页号×4,最后再算一下页框号;这个就真的是看你有没有被绕晕,其实就是第一问再来一遍

2025

某进程的虚拟地址空间如图,阴影部分为未占用区域,有 C 程序:

cpp 复制代码
char * ptr;
void main() {
    int length;
    ptr=(char*) malloc(100);
    scanf("%s", ptr);
    length = strlen(ptr);
    printf("length=%d\n", length);
    free(ptr) ;
}

(1)上述程序执行时,PCB 位于哪个区域,执行 scanf () 等待键盘输入时,该进程处于什么状态?

(2)main() 函数的代码位于哪个区域?其直接调用的哪些函数的功能需要通过执行驱动程序实现?

(3)变量 ptr 被分配在哪个区域?若变量 length 没有被分配在寄存器中,则会被分配在哪个区域?ptr 指向的字符串位于哪个区域?

分析:哇,作为后来者是不是可以认为24年已经给了一个引子了,又又又有scanf是不是提醒我们应该完整理一遍scanf这个全流程啊。PCB中有进程控制信息、进程调度信息、CPU状态信息、进程标识符,这么重要的东西当然要放在内核中保护啦,等待键盘 I/O,当然处于阻塞态;mian()函数就是可执行代码段吧,所以位于只读代码段中,而那些会涉及硬件输入输出的就是驱动所实现的,显然是scanf、printf;注意区分一个是ptr本身,看代码可以知道是全局变量,所以应该位于读写代码段,而ptr所指向的字符串,是不是那个malloc所以应该是在运行时堆,length作为局部变量应该被放在用户栈中

相关推荐
Trouvaille ~3 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
_OP_CHEN4 小时前
【Linux系统编程】(二十九)深度解密静态链接:从目标文件到可执行程序的底层魔法
linux·操作系统·链接·文件系统·c/c++·静态链接
_OP_CHEN20 小时前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
元亓亓亓1 天前
考研408--数据结构--day8--遍历序列&线索二叉树
数据结构·考研·408·线索二叉树
肆忆_1 天前
手搓 VM 复盘:从我的 C++ 并发 GC 到字节 PrimJS 的架构演进
操作系统
c++逐梦人1 天前
Linux基础IO
linux·操作系统·io
凉、介1 天前
VMware 三种网络模式(桥接 / NAT / Host-Only)原理与实验解析
c语言·网络·笔记·操作系统·嵌入式·vmware
四谎真好看2 天前
JavaWeb学习笔记(Day13)
笔记·学习·学习笔记·javaweb
_OP_CHEN2 天前
【Linux系统编程】(二十七)手撕动静态库原理与实战:从底层逻辑到代码落地
linux·操作系统·动态库·静态库·c/c++·库的原理与制作
CS创新实验室3 天前
《计算机网络》深入学:从自治系统内部到全球互联
计算机网络·考研·智能路由器·协议·408