当前位置: 首页 > web >正文

【OS】真题 2015

23.处理外部中断时,应该由操作系统保存的是( )

A.程序计数器(PC)的内容

B.通用寄存器的内容

C.快表(TLB)中的内容

D.Cache中的内容

B

外部中断处理过程,PC值由中断隐指令自动保存,而通用寄存器内容由操作系统保存


A:程序计数器PC的内容由中断隐指令保存,中断隐指令并不是指令系统中的一条真正的指令,它没有操作码,不允许也不可能为用户使用的特殊指令;

B:通用寄存器的内容由中断服务程序保存,中断服务程序属于操作系统

C、D:快表TLB以及Cache中内容在处理外部中断时不需要保存

24.假定下列指令已装入指令寄存器,则执行时不可能导致CPU从用户态变为内核态(系统态)的是( )

A.DIV R0,R1;                (R0)/(R1)\rightarrowR0

B.INT n;                        产生软中断

C.NOT R0;                寄存器R0的内容取非

D.MOV R0,addr        把地址addr处的内容数据放入寄存器R0中

C

当一些指令通过发生一些异常(中断)会出现CPU从内核态转到内核态

当CPU在用户态(User Mode) 执行时,以下事件会触发切换到内核态(Kernel Mode)

硬件中断(Interrupt)

  • 外部设备触发(如定时器、键盘、网络包到达)
  • 例如:时钟中断触发任务调度。

异常(Exception)

  • 故障(Fault):可修复错误(如缺页异常),返回后重试指令。
  • 陷阱(Trap):主动触发(如系统调用 syscall),返回后执行下条指令。
  • 中止(Abort):不可恢复错误(如硬件故障),终止进程。

系统调用(Syscall)

  • 用户程序主动通过指令(如x86的 int 0x80/syscall)请求内核服务、
触发原因具体示例
硬件中断定时器中断、磁盘I/O完成中断
程序异常除零错误、缺页异常、非法指令
系统调用调用 read()write() 等API
调试事件断点触发(INT3)

NOT R0;不会发生异常

DIV有除零异常的可能

INT为中断指令

MOV R0,addr有缺页异常的可能


指令MOV R0,addr将内存数据加载到寄存器中。虚拟地址空间包括内核与用户空间,如果addr所指向的内存地址是内核空间的地址,或者是特定的内存映射区域(例如I/O地址空间),那么执行MOV R0,addr需要切换到内核态

25.下列选项中,会导致进程从执行态变为就绪态的事件是( )。

A. 执行 P (wait) 操作

B. 申请内存失败

C. 启动I/O设备

D. 被高优先级进程抢占

D

  • D. 被高优先级进程抢占:正在运行的进程被更高优先级进程抢占时,操作系统会将其移出CPU,放入就绪队列等待调度

  • 错误选项分析

    • A. 执行P操作:若资源不可用,进程会从执行态→阻塞态

    • B. 申请内存失败:进程等待资源,进入阻塞态

    • C. 启动I/O设备:进程需等待I/O完成,进入阻塞态


D项被剥夺了处理机资源,进入了就绪态,一旦得到处理机即可运行

其他三项因为请求某一资源会进入阻塞态

关于进程三态(运行态、就绪态、阻塞态)的一些易混知识点 - wkxnk - 博客园

转换方向触发事件说明
执行态 → 就绪态1. 时间片用完CPU时间片耗尽,暂停执行
2. 被高优先级进程抢占更高优先级进程就绪,剥夺当前进程CPU
执行态 → 阻塞态1. 执行P(wait)操作申请资源(如信号量)失败
2. 启动I/O设备等待I/O操作完成
3. 申请内存失败等待内存资源分配
4. 主动等待事件(如sleep)进程主动暂停执行
阻塞态 → 就绪态1. I/O操作完成等待的事件结束(如磁盘读写完成)
2. 资源可用(如内存分配成功)此前申请的资源被释放
就绪态 → 执行态进程调度选中调度程序分配CPU时间片
创建 → 就绪态fork()成功创建子进程新进程加入就绪队列
执行态 → 终止态exit()系统调用进程运行结束或被终止

26.若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中,正确的是( )。

Ⅰ. S1会限制用户申请资源的顺序,而S2不会

Ⅱ. S1需要进程运行所需资源总量信息,而S2不需要

Ⅲ. S1不会给可能导致死锁的进程分配资源,而S2会

A. 仅Ⅰ、Ⅱ

B. 仅Ⅱ、Ⅲ

C. 仅Ⅰ、Ⅲ

D. Ⅰ、Ⅱ、Ⅲ

B

死锁的处理共采取三种策略:死锁预防、死锁避免、死锁检测和结束

“限制用户申请资源的顺序”属于死锁预防的范畴

死锁预防:采用破坏死锁的四个必要条件(资源互斥、占有等待、不可剥夺、循环等待)中的一个或几个,以防止发生死锁,其中之一的“破坏循环等待条件”,一般采用顺序资源分配法,首先给系统的资源编号,规定每个进程必须按编号递增的顺序请求资源,也就是限制了用户申请资源的顺序

银行家算法是最著名的死锁避免算法,其中的最大需求矩阵MAX定义了每一个进程对m类资源的最大需求量,系统在执行安全性算法中都会检查此次资源试分配后,系统是否处于安全状态,若不安全则将本次的试探分配作废。

在死锁的检测和解除中,在系统为进程分配资源时不采取任何措施,但提供死锁的检测和解除的手段


限制用户申请资源的顺序属于死锁预防方法。死锁预防是指在设计系统时,通过确定资源分配算法,排除发生死锁的可能性,具体做法是破坏产生死锁的四个必要条件之一

1.破坏“互斥”条件:通过资源转换技术把独占资源变为共享资源;SPOOLing技术

2.破坏“请求和保持”条件:第一种协议(要求每个进程在运行前必须一次性申请它所需要的所有资源);第二种协议(允许一个进程只获得运行初期所需资源,便开始运行,进程运行过程中在逐步释放已分配给自己的且无需使用的全部资源,然后再请去新的所需资源)

3.破坏“不可抢占”条件:当一个进程申请的资源被其他进程占用时,可以通过操作系统抢占这一资源

4.破坏“循环等待”条件:静态资源分配法(把系统中所有的资源编号,进程在申请资源时必须严格按照资源编号的递增次序进行)

I前半句错误,后半句正确。

II正确。S1 采用死锁避免方法,需要获取进程运行所需资源的总量信息,以便进行安全性检查和资源分配的决策,这是为了避免将资源分配给可能导致死锁的进程,经典算法如银行家算法。而 S2 采用死锁检测方法,不需要知道进程运行所需资源的总量信息。它只需要跟踪系统中的资源分配情况和进程之间的资源请求关系,以判断是否存在死锁。

Ⅲ正确。S1 采用死锁避免方法,会避免给可能导致死锁的进程分配资源,以确保系统的安全性。而 S2 采用死锁检测方法,不会阻止资源的分配。它会周期性地检测系统中是否存在死锁,并采取适当的措施来解决已经发生的死锁情况

27.系统为某进程分配了4个页框,该进程已访问的页号序列为2, 0, 2, 9, 3, 4, 2, 8, 2, 4, 8, 4, 5。若进程要访问的下一页的页号为7,依据LRU算法,应淘汰页的页号是( )。

A. 2

B. 3

C. 4

D. 8

A

由题目可知已分配了4个页框,采用LRU算法,即对页号序列从后往前计数,直到数到4(页框数)个不同的数字位置,这个停止的数字就是要淘汰的页号(最近最长时间未使用的页)

5 4 8 4 2

  • RU算法:当发生页面未命中(缺页)且所有页框已满时,淘汰最近最少使用的页面(即最久未被访问的页面)。

  • 未命中(红色):访问的页面不在任何页框中,需要加载新页面,可能触发页面淘汰。

  • 命中(绿色):访问的页面已在某个页框中,无需加载,只需更新页面的使用顺序(将该页面移到最近使用位置)

访问页号20293428248457
页框022222222222227
页框1-0000444444444
页框2---99998888888
页框3----3333333355

27.在系统内存中设置磁盘缓冲区的主要目的是()

A.减少磁盘I/O次数

B.减少平均寻道时间

C.提高磁盘数据可靠性

D.实现设备无关性

A

系统内存读取数据速度较快,磁盘读取数据速度较慢,为了减少读取文件花费的时间,设置磁盘缓冲区,减少磁盘I/O次数


磁盘缓冲区是一块内存区域,用于临时存储从磁盘读取的数据或待写入磁盘的数据;当系统需要读取或写入磁盘上的数据时,它可以首先将这些数据加载到磁盘缓冲区中进行处理,这样如果需要再次访问同样的数据,可以直接从缓冲区中获取,而无需再次进行磁盘I/O操作

29.在文件的索引节点中存放直接索引指针10个,一级和二级索引指针各1个。磁盘块大小为1KB,每个索引指针占4个字节。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为1234和307400处所在的磁盘块读入内存,需访问的磁盘块个数分别是( )

A.1、2

B.1、3

C.2、3

D.2、4

B

10个直接索引指针指向的数据块大小为10*1KB=10KB

每个索引指针占4B,则每个磁盘块可存放1KB/4B=256个索引指针,一级索引指针指向的数据块大小为:256*1KB=256KB

二级索引指针指向的数据块大小为:256*256*1KB=2^16KB=64MB

按字节编址,当偏移量为1234时,因为10KB>1234B,则由直接索引指针可得到其所在的磁盘块地址。文件的索引地点已在内存中,则地址可直接得到,故仅需1次访盘即可。排除C、D选项

当偏移地址为307400时,因为256KB+10KB<307400B<64MB,可知该偏移量的内容在二级索引指针所指向的某个磁盘块中,索引结点已在内存中,故先访盘2次得到文件所在的磁盘块地址,再访盘1次即可读出内容,故共需3次访盘


磁盘块大小为1KB,每个索引指针占4B,一个磁盘块可以装载1KB/4B=256个索引指针

ni 个 i 级索引指向数据块大小为 ni×256i×1KB 。

访问 i 级索引指向数据块需要读 i 次索引,1次数据块,总计 i+1 次磁盘

10个直接索引指向数据块大小为10×1KB=10240B。首地址偏移量为0,按字节编址,直接索引指向数据块偏移量范围为[0, 10239]。

1个一级索引指向数据块大小为1×256×1KB=262144B。首地址偏移量为0,按字节编址,前面有直接索引指向数据块,一级索引指向数据块偏移量范围为[10240, 10240+262143],即[10240, 272383]。

1个二级索引指向数据块大小为1× 2562 ×1KB=67108864B。首地址偏移量为0,按字节编址,前面有直接索引和一级索引指向数据块,二级索引指向数据块偏移量范围为[10240+262144, 10240+262144+67108863],即[272384, 67381247]。

因为偏移量为1234∈[0, 10239],所以该偏移量位于直接索引指向数据块范围内,访问该数据块需要读1次磁盘。

因为偏移量为307400∈[272384, 67381247],所以该偏移量位于二级索引指向数据块范围内,访问该数据块需要读3次磁盘。

30.在请求分页系统中,页面分配策略与页面置换策略不能组合使用的是( )。

A. 可变分配,全局置换

B. 可变分配,局部置换

C. 固定分配,全局置换

D. 固定分配,局部置换

C

可变分配,全局置换

可变分配,局部置换

固定分配,局部置换

是常见的三种策略,可以组合在一起使用

对各进程进行固定分配时页面数不变,不可能出现全局置换


固定分配:指为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。

可变分配:指先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。

局部置换:指如果进程在运行中发现缺页,则只能从分配给该进程的n个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。

全局置换:指如果进程在运行中发现缺页,则将操作系统保留的空闲物理块(一般组织为一个空闲无论块队列)取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块换出,然后将所缺页调入。

A. 可变分配,全局置换:因为可变分配允许页面在不同的进程之间转移,全局置换允许在不同的进程之间置换页面。所以这两种策略可以组合使用。

B. 可变分配,局部置换:因为可变分配允许在不同的进程之间转移页面,局部置换允许在一个进程的地址空间内置换页面。所以这两种策略可以组合使用。

C. 固定分配,全局置换:因为固定分配限制了页面的分配,不允许页面在进程之间转移,而全局置换需要在不同的进程之间置换页面。所以这两种策略不能组合使用。

D. 固定分配,局部置换:固定分配将每个页面固定地分配给某个进程地址空间,局部置换允许在一个进程的地址空间内置换页面。所以这两种策略可以组合使用

31.文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的32~127号块中,每个盘块占1024个字节,盘块和块内字节均从0开始编号。假设要释放的盘块号为409612,则位图中要修改的位所在的盘块号和块内字节序号分别是( )。

A. 81、1

B. 81、2

C. 82、1

D. 82、2

C

盘块号=起始块号+ ⌊ 盘块号/(1024*8)⌋ =32+ ⌊ 409612/(8*1024)⌋=32+50=82,余下12位,需要占两字节,从序号0开始,0,1

 

32.某硬盘有200个磁道(最外侧磁道号为0),磁道访问请求序列为:130,42,180,15,199,当前磁头位于第58号磁道并从外侧向内侧移动。按照SCAN调度方法处理完上述请求后,磁头移过的磁道数是( )。

A. 208

B. 287

C. 325

D. 382

SCAN算法就是电梯调度算法。当前磁头位于58号并从外侧向内侧移动,依次访问130、180、199,然后再返回向外侧移动,再依次访问42和15,故磁头移过的磁盘道数是:(199-58)+(199-15)=325


对于SCAN调度(电梯调度)算法,磁臂从磁盘的一端开始,向另一端移动;在移过每个柱面时,处理请求。当到达磁盘的另一端时,磁头移动方向反转,并继续处理。磁头连续来回扫描磁盘。磁头的行为就像大楼里面的电梯,先处理所有正在移动的方向的请求,然后再处理相反方向的请求

45.有A、B两人通过信箱进行辩论,每个人都从自己的信箱中取得对方的问题,将答案和向对方提出的新问题组成一个邮件放入对方的信箱中。假设A的信箱最多放M个邮件,B的信箱最多放N的邮件。初始时A的信箱中有x个邮件(0<x<M),B的的信箱中有y个邮件(0<y<N)。辩论者每取出一个邮件,邮件数减1。A和B两人的操作过程描述如下:

CoBegin
A {while (true) {从A的信箱中取出一个邮件;回答问题并提出一个新问题;将新邮件放入B的信箱;}
}
B {while (true) {从B的信箱中取出一个邮件;回答问题并提出一个新问题;将新邮件放入A的信箱;}
}
CoEnd

当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。请添加必要的信号量和P、V(或wait、signal)操作,以实现上述过程的同步。要求写出完整的过程,并说明信号量的含义和初值

semaphore Full_A=x;                //Full_A表示A的信箱中的邮件数量

semaphore Empty_A=M-x;       //Empty_A表示A的信箱中还可存放的邮件数量

semaphore Full_B=y;                //Full_B表示B的信箱中的邮件数量

semaphore Empty_B=N-y;        //Empty_B表示B的信箱中还可存放的邮件数量

semaphore mutex_A=1;             //mutex_A用于A的信箱互斥

semaphore mutex_B=1;             //mutex_B用于B的信箱互斥

A{

        whille(TRUE){

        P(Full_A);

        P(mutex_A);

        从A的信箱中取出一个邮件;

        V(mutex_A);

        V(Empty_A);

        回答问题并提出一个新问题;

        P(Empty_B);

        P(mutex_B);

        将新邮件放入B的信箱;

        V(mutex_B);

        V(Full_B);

        }

}

B{

        while(TRUE){

        P(Full_B);

        P(mutex);

        从B的信箱中取出一个邮件;

        V(mutex);

        V(Empty_B);

        回答问题并提出一个新问题;

        P(Empty_A);

        P(mutex_A);

        将新邮件放入A的信箱;

        V(mutex_A);

        V(Full_A);

        }

}


【OS】同步互斥问题-CSDN博客

 本题为多生产者多消费者多缓冲区模型,有两个单生产者单消费者单缓冲区模型组成

B向A写邮件,A收邮件:B为生产者,A为消费者,A的信箱为缓冲区

semaphore box_A_mutex = 1;    // A的信箱互斥信号量
semaphore box_A_empty = M-x;  // A的信箱空闲位置数量
semaphore box_A_full = x;     // A的信箱邮件数量CoBegin
Sender_B {while (true) {提出一个新问题;P(box_A_empty);    // 请求A的信箱一个空位P(box_A_mutex);将新邮件放入A的信箱;V(box_A_mutex);V(box_A_full);    // A的信箱邮件数量加一}
}
Receiver_A {while (true) {P(box_A_full);    // 请求A的信箱一个邮件P(box_A_mutex);从A的信箱中取出一个邮件;V(box_A_mutex);V(box_A_empty);    // A的信箱空位数量加一回答问题;}
}
CoEnd

A向B写邮件,B收邮件:A为生产者,B为消费者,B的信箱为缓冲区

semaphore box_B_mutex = 1;    // B的信箱互斥信号量
semaphore box_B_empty = N-y;  // B的信箱空闲位置数量
semaphore box_B_full = y;     // B的信箱邮件数量CoBegin
Sender_A {while (true) {提出一个新问题;P(box_B_empty);    // 请求B的信箱一个空位P(box_B_mutex);将新邮件放入B的信箱;V(box_B_mutex);V(box_B_full);    // B的信箱邮件数量加一}
}
Receiver_B {while (true) {P(box_B_full);    // 请求B的信箱一个邮件P(box_B_mutex);从B的信箱中取出一个邮件;V(box_B_mutex);V(box_B_empty);    // B的信箱空位数量加一回答问题;}
}
CoEnd

进程 Receiver_A 和进程 Sender_A 合成进程 A,进程 Receiver_B 和进程 Sender_B 合成进程 B,得到最终伪代码:

semaphore box_A_mutex = 1;    // A的信箱互斥信号量
semaphore box_A_empty = M-x;  // A的信箱空闲位置数量
semaphore box_A_full = x;     // A的信箱邮件数量
semaphore box_B_mutex = 1;    // B的信箱互斥信号量
semaphore box_B_empty = N-y;  // B的信箱空闲位置数量
semaphore box_B_full = y;     // B的信箱邮件数量CoBegin
A {while (true) {P(box_A_full);    // 请求A的信箱一个邮件P(box_A_mutex);从A的信箱中取出一个邮件;V(box_A_mutex);V(box_A_empty);    // A的信箱空位数量加一回答问题并提出一个新问题;P(box_B_empty);    // 请求B的信箱一个空位P(box_B_mutex);将新邮件放入B的信箱;V(box_B_mutex);V(box_B_full);    // B的信箱邮件数量加一}
}
B {while (true) {P(box_B_full);    // 请求B的信箱一个邮件P(box_B_mutex);从B的信箱中取出一个邮件;V(box_B_mutex);V(box_B_empty);    // B的信箱空位数量加一回答问题并提出一个新问题;P(box_A_empty);    // 请求A的信箱一个空位P(box_A_mutex);将新邮件放入A的信箱;V(box_A_mutex);V(box_A_full);    // A的信箱邮件数量加一}
}
CoEnd

(81 封私信 / 81 条消息) 408操作系统考点:生产者消费者问题 - 知乎

46.某计算机系统按字节编址,采用二级页表的分页存储管理方式,虚拟地址格式如下所示:

10位10位12位
页目录号页表索引页内偏移量

请回答下列问题。

(1) 页和页框的大小各为多少字节?进程的虚拟地址空间大小为多少页?

(2) 假定页目录项和页表项均占4个字节,则进程的页目录和页表共占多少页?要求写出计算过程。

(3) 若某指令周期内访问的虚拟地址为0100 0000H和0111 2048H,则进行地址转换时共访问多少个二级页表?要求说明理由

(1)页和页框大小均为4KB,进程的虚拟地址空间大小为2^{32}/2^{12}=2^{20}

(2)\left ( 2^{10}\times 4 \right )/2^{12}+(2^{20}\times 4)/2^{12}=1024页(页目录所占页数+页表所占页数)

(3)需要访问一个二级页表,因为虚地址0100 0000H和0111 2048H的最高10位的值都是4,访问的都是同一个二级页表


1.根据虚拟地址格式,页内偏移量占12位,计算机系统按字节编址,页大小为 212 ×1B=4KB,页框大小与页大小相同,为4KB

根据虚拟地址格式,虚拟地址占10+10+12=32位,计算机系统按字节编址,进程的虚拟地址空间大小为 232 ×1B= 232 B,页大小为 212 B,虚拟地址空间大小为 232B/212B=220 页。或者页目录号占10位,有 210 个页目录项,又页表索引占10位,每个页目录号下有 210 个页表索引,总共有 210×210=220 个页表索引,所以进程的虚拟地址空间大小为 220 页

2.根据虚拟地址格式,页目录号占10位,有 210 个页目录项,页目录项占4B,页大小为4KB,进程的页目录占 210 ×4B/4KB=1页。又页表索引占10位,每个页目录号下有 210 个页表索引,总共有 210×210=220 个页表索引,页表项占4B,页大小为4KB,进程的页表占 220 ×4B/4KB=1024页。综上,进程的页目录和页表共占1+1024=1025页

3.

访问的虚拟地址为0100 0000H和0111 2048H共访问1个二级页表

http://www.xdnf.cn/news/16601.html

相关文章:

  • 架构实战——互联网架构模板(“开发层”和“服务层”技术)
  • JavaWeb 入门:HTML 基础与实战详解(Java 开发者视角)
  • python对象的__dict__属性详解
  • 5G MBS(组播广播服务)深度解析:从标准架构到商用实践
  • Linux 题目总结参考
  • 低速信号设计之 SMBUS 篇
  • 零基础学习性能测试第六章:性能难点-Jmeter文件上传场景压测
  • 网络虚拟化:veth,bridge,network namespace与docker网络
  • Word和WPS文字如何制作分栏试卷?想分几栏分几栏
  • Java面试实战:安全框架与大数据技术深度解析
  • 【模电笔记】—— 波形发生电路(波形振荡器)
  • ArKTS:List 数组
  • 每日算法刷题Day55:7.27:leetcode 复习完第K小/大+栈4道题,用时1h50min
  • Python初学OpenCV:图像预处理进阶指南(二)
  • 数据结构 堆(4)---TOP-K问题
  • Android Framework知识点
  • Linux文件理解,基础IO理解
  • 「mysql」Mac osx彻底删除mysql
  • 数据赋能(340)——技术平台——共享平台
  • Process Monitor学习
  • C语言——关于指针(逐渐清晰版)
  • 2.安装CUDA详细步骤(含安装截图)
  • Spring 容器注入时查找 Bean 的完整规则
  • 动手学深度学习笔记04(上)
  • SPSC无锁环形队列技术(C++)
  • 深入解析MIPI C-PHY (四)C-PHY物理层对应的上层协议的深度解析
  • 电商平台中,订单未支付过期,如何实现自动关单?
  • C++ - 继承【下】
  • 将 JsonArray 类型的数据导出到Excel文件里的两种方式
  • 基于黑马教程——微服务架构解析(一)