2024年45题:
这一题如果概念清楚就好想了:
虚拟地址空间有用户区和内核区,每个进程都会共享内核区,即使进行进程切换,内核区不变,这个不清楚可以看看:查缺补漏----程序查询,中断,DMA方式(结合设备驱动程序)_中断和查询-优快云博客
所以页表会被映射到虚拟地址空间中,所以页表也有虚拟地址,并且页表会被存放在内存中以6540 0000H开始的连续主存空间中。
页框号也就是物理地址的前10位:
进程P的页表所在的页的页号,也就是页表在虚拟地址空间的哪个位置,题目告诉了进程p的页表的起始虚拟地址,那么前10位就是页号:
A.重排I/O请求次序:某磁盘有100个磁道,当前磁头位于0号磁道,此时有磁道访问请求序列:99,1,50。若采用FCFS磁盘调度算法,则响应这些请求,磁头移动过的磁道数为(99-0)+(99-1)+(50-1)=246。若采用SSTF(最短寻道优先)算法重排/0请求次序,则按照1,50,99的顺序访问这些磁道,磁头移动过的磁道数为 99。
C.预读(提前读):如果采用的顺序访问方式对文件进行访问,便可预知下一次要读的盘块。此时可采用预读策略,即在读当前块的同时,也将下一个盘块提前读入内存缓冲区,这样在访问下一个盘块时就不需要再启动磁盘,从而提升磁盘I/O速度。
滞后写(延迟写):滞后写是指缓冲区A中的数据本应立即写回磁盘,但考虑到其中的数据在不久之后有可能再次被访问,因此并不会立即把A中的数据写回磁盘,而是将缓冲区A挂到空闲缓冲区队列。如果有别的进程申请使用该缓冲区时,才把A中的数据写回磁盘。这样做的好处是,只要缓冲区A仍在队列中,任何访问该数据的进程,都可以直接读出其中的数据而不必访问磁盘。因而这种方式也可以减少磁盘I/O次数,改善性能。
D.在采用链接组织和索引组织方式时,可以将一个文件分散在磁盘的任意位置,但如果安排的过于分散,则访问该文件时会增加磁头的移动距离。而如果把文件物理块安排在相邻的一些磁道上,就能减少磁头的移动距离。
B.假设操作系统相关的数据被存放在了C盘,而新的应用程序被安装在了D盘,磁头本来是在存放操作系统相关数据的磁道上来回移动的,若需要访问新的应用程序,则需要移动到D盘访问新的程序。
所以很多应用程序默认下载到C盘就是因为这能使应用程序运行起来更流畅,速度更快。
A:PC用于保存下一条指令,不论是中断处理还是子程序调用都需要压栈保存PC的内容,以便中断处理或调用结束后能够继续执行下一条指令。
C,D:如果中断处理或子程序调用会用到这个通用寄存器,那么就会覆盖之前的内容,那么对于这种情况,在中断处理和子程序调用前就需要保存现场。
B.中断处理和子程序的调用的区别就是:中断处理需要从用户--->内核,而子程序则是从用户--->用户,而PSW会记录这一状态,所以中断处理一定要保存PSW。
如果子程序调用中需要进行中断处理,那么也是中断处理这一过程保存PSW的值。
另一种理解:PSW不能在用户态下被修改,因此普通的子程序调用不可能改变PSW,即不必保存。
只说C,对IP分组头进行校验:
1.IP分组头之外的部分属于高层数据,有相应的校验字段。
2.每经过一个路由器,IP分组头都要改变一次,数据部分并不改变。设置首部校验和只对变化部分进行校验是合理的,可以减少路由器对每个接收分组的处理时间,提高路由器运行效率。
操作系统相关程序一定在内核态下运行:
答案:C
答案:D
阻塞进程、执行 CPU调度,唤醒进程都涉及到安全问题,所以必须要在内核态执行,执行前、执行时、执行后都是内核态。
而系统调用则是处于用户态的进程想要申请做一些超出他权限的事情,所以执行前是用户态,执行时是内核态,执行后是用户态。执行前、执行时、执行后都是内核态的原因
执行前:需要在内核态进行参数检查和权限验证等准备工作。例如,在执行 CPU 调度之前,内核需要检查当前是否是安全的调度时机(如当前中断是否处理完毕等),以及请求调度的进程是否有相应的权限(如是否是合法的系统调用触发的调度请求)。这些检查工作必须在内核态完成,以防止用户态程序绕过安全检查机制。
执行时:实际的操作(如修改进程状态、更新就绪队列、修改寄存器值等)本身就需要内核态的权限来访问和修改系统的关键资源和数据结构。这些操作直接影响系统的稳定性和进程
的正确执行,所以执行过程必须在内核态。
执行后:内核需要清理现场,如更新系统状态记录、检查是否有其他相关的进程需要被触发(如因为当前进程状态改变而可能需要唤醒其他等待的进程)等。这些后续工作也需要在内核态完成,以确保系统的一致性和安全性。例如,在唤醒一个进程后,内核可能需要重新评估当前就绪队列的状态,以确定是否需要立即进行下一轮的 CPU 调度,这些操作都依赖于内核态的权限和安全机制。
异常:
故障:返回当前指令,特殊情况,除数为零和自行中断(INT)都会自动跳过中断指令,所以不会返回到发生异常的指令继续执行。
自陷:返回下一条指令或者要跳转的指令。
终止:不返回。
中断:
返回下一条指令。例如某一年的选项:打印机缺纸,有人私信我是返回当前指令还是下一条。只要是外部中断,就返回下一条指令继续执行。
(1)采用连续数据块组织方式,由于不需要修改文件,所以使用连续数据块组织方式,能够使磁盘寻道时间更短,文件随机访问效率更高。索引结点也支持随机访问,但是速度没有连续组织方式高。
(2)将所有FCB集中存放,文件数据块集中存放,如果文件不大的话,只需要一些磁盘块就能存下所有FCB,所以只需要访问存储FCB的几个块,可以减少磁头的移动距离以及磁盘I/O次数。
与对应的文件数据集中存储,那么文件的FCB可能存储在某个文件的开头磁盘块中,需要先读入aaa的FCB,才能知道aaa的块数,才能确定bbb第一个数据块的位置。
同理,如果要读入ccc,就需要3次读磁盘操作。
所以FCB与对应的文件数据块连续存储:只能逐一读入包含各个文件FCB的磁盘块,每往后找一个文件就要读一个磁盘块。总体I/O次数更多,磁头移动距离更长。
对于第(3)问,只需要知道采用随机访问存储器只需要考虑传输时间,不需要考虑寻道时间,这样磁盘调度策略更需要注重的是公平性,那么更优的策略就是FCFS。但这里说"更高效",FCFS不能说更高效,只能说更优。
通道:通道是一个独立于CPU的专管输入/输出控制的处理机,它负责控制设备与内存直接进行数据交换。
通道有自己的通道指令,这些指令受CPU启动,并在操作结束时向CPU发中断信号。通道控制方式与DMA控制方式类似,也是一种以内存为中心,实现设备与内存直接交换数据的控制方式。
答案:D
ALU与通用寄存器的位数肯定与机器字长相同。
对于指令寄存器:某些系统支持变长指令字,如果某寄存器需要存放双指令字长数据,那么其位数是机器字长的两倍,所以指令寄存器的位数十系统能存放的最长指令的位数。
对于浮点寄存器:intel的 x86 CPU 中,浮点寄存器为80位的寄存器。无论int、float、double等进行浮点运算时,都会自动转为80位扩展精度浮点数(临时浮点数)
答案:C
唤醒就是从阻塞态到就绪态的过程:
I:I/O结束,进程由阻塞态到就绪态
Ⅱ:当一个进程正在访问临界区时,另一个进程必须阻塞等待,当当前进程退出临界区后,另一个进程就会被唤醒
Ⅲ:从运行态--->就绪态
编译程序及以上的结构对于普通程序员可见,而汇编程序员则能看到ISA及以上的结构。
指令集体系结构位于软硬件交界处,可以理解为软件可见部分。
ISA规定的内容:数据类型及格式,指令格式,寻址方式和地址空间大小,通用寄存器的个数、位数和编号,控制寄存器的定义,I/O空间的编址方式,中断结构,机器工作状态的定义和切换,输入/输出结构和数据传送方式,存储保护方式等。
每一个核都可以发出指令并进行计算,所以是多指令多数据流,A正确。
在执行向量操作时,一条指令可以同时对多个数据(组成一个向量)进行运算,即SIMD,B正确。
硬件多线程技术是在一个核中处理多个线程,可用于单核处理器,C错误。
SMP中所有核通过指令访问同一片内存空间,D正确。
现代操作系统的基本特点:并发、共享、虚拟、异步,其中最基本、一定要实现的是并发和共享,A、C正确。
多道操作系统可以在不支持虚拟存储的情况下执行,比如说实地址模式(实现虚拟存储的是保护模式),B正确。
也可以从这个方向理解:
早期的多道批处理操作系统会将所有进程的数据全部调入主存,再让多道程序并发执行,即使不支持虚拟存储管理,也能实现“多道程序并发”。
进程数和CPU利用率无必然联系,D错误。
C选项,我查了一下这里的“可能“,也就是另外两种状态的情况,随便看看:
进程在执行驱动程序时,因为可能遇到不同的设备状态和系统资源情况,除了可能进入阻塞态外,还可能处于运行态或就绪态。
运行态:
进程的运行态当进程执行驱动程序代码时,如果所需的资源(如硬件设备已经准备好,没有等待操作)立即就能满足它的需求,那么进程可以继续执行而不会被阻塞。例如,某些设备的驱动程序可能只是简单地查询设备的当前状态,这个操作非常快,设备状态可以马上返回,此时进程就可以在运行态下顺利完成这个驱动程序的执行部分。
以查询计算机电源状态的驱动程序为例,当进程调用这个驱动程序时,驱动程序直接从硬件寄存器读取电源状态信息并返回给进程,这个过程几乎是瞬间完成的,进程不会进入阻塞态,而是保持在运行态。就绪态:
进程的就绪态虽然这种情况比较少见,但也存在进程在执行驱动程序时进入就绪态的可能。这通常发生在多处理器(或多核处理器)系统中。
假设一个进程在执行驱动程序的过程中,需要等待一个比较耗时的操作(如等待某个硬件设备完成一个复杂的初始化过程),但此时系统中有其他空闲的处理器(或核心)。在这种情况下,操作系统可能会暂时挂起这个进程对驱动程序的执行,将其状态转换为就绪态,让其他可运行的进程先使用这个空闲的处理器(或核心)。当硬件设备完成初始化等耗时操作后,该进程再从就绪态转换为运行态,继续执行驱动程序未完成的部分。
对于C选项,假设进程请求使用打印机资源,打印机资源是一种临界资源,同一时刻只能为一个进程服务,所以此时进程处于临界区,但是由于打印机是一种慢速设备,所以进程在等待打印机完成任务之前会进入阻塞态,进程阻塞后会释放处理机,也可能引起处理机调度。
D,加入进程系统调用完成,并返回用户态,此时又有优先级更高的进程进入,优先级更高的进程就会抢占处理机资源,引发处理机调度。
引起进程创建的事件有:用户登录、作业调度、提供服务、应用请求等。Ⅰ用户登录成功后,系统要为此创建一个用户管理的进程,包括用户桌面、环境等。所有的用户进程会在该进程下创建和管理。Ⅱ.设备分配是通过在系统中设置相应的数据结构实现的,不需要创建进程。或者从另一个角度看,设备分配一定是分配给某个存在的进程。
当设备忙时,进程变为阻塞态,当被分配到设备后,则进程变为就绪态,等待CPU调度上处理机。
答案:A
如果系统中发生了要求终止进程的某事件,OS便调用进程终止原语,按下述过程去终止指定的进程:
(1)根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程的状态;
(2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度;
(3)若该进程还有子孙进程,还应将其所有子孙进程也都予以终止,以防它们成为不可控的进程;
(4)将被终止进程所拥有的全部资源或者归还给其父进程,或者归还给系统;(5)将被终止进程(PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。
需要注意的是在某些操作系统中,当撒销一个进程时,并不撤销其子孙进程。例如,在Linux系统中,当父进程被撒销时,其子进程过继给指定的进程。
答案:D