操作系统复习强化笔试(一)

原创
2016/10/09 10:11
阅读数 219

1:一个进程从执行状态转换为阻塞状态的可能原因是 (B,D):

     a:时间片用完      b:需要等待其他进程的执行结果       c:执行了V操作        d:执行了P操作
 
 解析:a时间片用完了,进程会从运行状态转换为就绪状态,继续等待时间片轮转
           c:V操作,释放资源
           d:P操作,申请资源,当资源不足时,可能处于阻塞状态
           就绪态:进程已经具备运行条件,但是CPU还没有分配过来。  运行态:进程占用CPU,并在CPU上运行。    阻塞态:进程因等待某个事情的发生而暂时不能运行。

P原语:为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞; V原语:为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。

2:下面关于通道、设备控制器、设备的关系正确的是:通道控制设备控制器,设备控制器控制设备

3:同步和异步的区别 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程就会一直等待下去,直到收到返回信息才继续执行下去。 异步是指这个进程不需要一直等待下去,二手继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行状态。

其他解释:同步就是在一个主线程里,你要做三件事情,A做完了做B,B完了再做C,是顺序执行的;

异步就是在一个主线程里,你开了三个线程来分别处理ABC这三件事,这三个子线程在代码调用的时候可能你是先调A再调B和C,但是在执行子线程的时候即使A线程没执行完,线程B和C也会往下执行,让我们看起来好像ABC三个线程是互不干扰的分别在执行。

很多时候我们会用异步多线程来处理同一业务里的大量数据,好比有一千个订单要处理,如果你用一个线程顺序执行,你就要循环这批订单,一个个处理,消耗非常多时间;但是用多线程你就可以开十几二十个线程异步处理,让效率提高很多。

另外,异步虽然我们看起来是很多个线程同时在跑,其实对同一CPU来说它在同一时间还是只能处理一个线程的,只是在一个线程里遇到有IO操作等等需要CPU等待的时候,就会切换到另一个线程去执行,加强了使CPU使用率,所以并不是什么时候都适合使用多线程的。

4:设内存的分配情况如下表所示。若要申请一块40KB字节的内存空间,采用最佳适应算法,则所得到的分区首地址为:(330KB) 分区表 分区首址/KB 状态 000K 占用 100K
180K 占用 190K
280K 占用 330k 390k 占用 410K

解释:最佳适应算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。 所以 空闲容量 首地址 60KB 330KB 80KB 100KB 90KB 190KB 而容量需要是40KB, 因此选择首地址是330

5:下列关于虚拟实际容量的说法正确的是:(D) 内存与外存容量之和 <=X<= CPU逻辑地址给出的空间大小

6:关于new/delete与malloc/free的区别 malloc/free是C++/C语言的标准库函数,new/delete是C++的运算符。他们都用于动态申请内存与释放内存。 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存

7:银行家算法 银行家算法的基本思想就是分配资源之前,判断系统是否是安全的;如果是,则分配。它是最具有代表性的避免死锁的算法。 ![ 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。 2)最大需求矩阵Max 这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。 3)分配矩阵Allocation 这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。 4)需求矩阵Need。 这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。 Need[i,j]=Max[i,j]-Allocation[i,j]

输入链接说明

8:为解决碎片问题,以及使程序可浮动的最好方法是采用(D)技术 D:内存动态分配 解析:静态重定位:即程序装入内存内存的过程中完成,是指程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常在装入时一次性完成,以后不再改变。 动态重定位:即在程序运行过程中要访问数据时再进行逻辑地址与物理地址的变换(即在逐条指令执行时完成地址映射)。 动态内存分配:指在程序运行的过程中动态的分配或回收存储空间的分配内存方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需求即时分配,且分配的大小就是程序要求的大小。 内存静态分配:静态分配发生在程序编译和连接的时候

9:在请求分页系统中,页面的改变位是供(C)参考的 C:页面换出

10:分区、分页、分段、段页 分页:在内存中分配一个区,将整个进程放入这个区。缺点是会产生外碎片,即时间长了会在分区之间产生难以被利用的小空间。 分页:将内存分成固定大小的页,分配若干个页将整个进程载入。页面可以不连续是它的优点,不会产生外碎片,更有效的利用了内存,不过会产生一些内碎片,即分配给进程的最后一个页不能正好用完,不过在页面大小不是很大的情况下可以被接受。 分段:将程序分成若干段,如数据段和代码段,加以不同保护,各段之间连续分配。 段页:将程序分为若干段,加以不同保护,但各段之间不再连续分配,而是采用分页式离散分配

在硬件和环境相同的条件下,一个作业在(B)存储管理系统中运行的时间最长。 A:分区 B:分页 C:分段 D:段页

11:在虚拟存储系统中,若进程在内存中占三块(开始时为空),采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、5、1、2、3、4、5、6,将产生(10)次中断。 解析: 访问页号序列号:1、2、3、4、1、2、5、1、2、3、4、5、6 第一次(1):1 第二次(2):1 2 第三次(3):1 2 3 第四次(4):2 3 4 第五次(1):3 4 1 第六次(2):4 1 2 第七次(5):1 2 5 未改变(1) 未改变(2) 第八次(3):2 5 3 第九次(4):5 3 4 未改变(5) 第十次(6):3 4 6 总共10次,选D

12:进程上下文是进程执行全过程的静态描述。

13:一个临界资源可以对应多个临界区。 解析:临界资源是指每次仅允许一个进程访问的资源。 属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。 诸进程间应采取互斥方式,实现对这种资源的共享。 每个进程中访问临界资源的那段代码称为临界区。显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。为此,每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看它是否正被访问。如果此刻该临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正被访问的标志;如果此刻该临界资源正被某进程访问,则本进程不能进入临界区

14:饥饿与死锁的区别:

15:进程和线程是操作系统中最基本的概念,下列有关描述错误的是(B) A:进程是程序的一次执行,而线程可以理解为程序中运行的一个片段

C:线程之间的通信简单(共享内存即可,但须注意互斥访问的问题),而不同进程之间的通信更为复发,通常需要调用内核实现 D:线程有独立的虚拟地址空间,但是拥有的资源相对进程来说,只有运行所必须的堆栈,寄存器等

16:在使用锁保证线程安全时,可能会出现活跃度失败的情况,活跃度失败主要包括:死锁、活锁、饥饿 解析:在使用锁保证线程安全时可能会出现活跃度失败的情况主要包括饥饿、丢失信号、活锁、死锁等。(多线程除了死锁之外遇到最多的就是活跃度问题) 饥饿:线程需要访问的资源被永久拒绝,以至于不能再继续进行。解决饥饿需要平衡线程对资源的竞争,如线程的优先级、任务的权重、执行的周期等。 活锁:指线程虽然没有被阻塞,但是由于某种条件不满足,一直尝试重试却始终失败。解决活锁问题需要对重试机制引入一些随机性。例如如果检测到冲突,那么就暂停随机的一段时间进行重试,这回大大减小碰撞的可能性。

17:简述计算机的存储系统分为哪几个层次,为什么这样的分层能够提高程序的执行效率。 所谓存储系统的层次结构,就是把各种不同存储容量、存取速度和价格的存储器按层次结构组成多层存储器,并通过管理软件和辅助硬件有机组合成统一的整体,使所存放的程序和数据按层次分布在各种存储器中。目前,在计算机系统中通常采用三级层次结构来构成存储系统,主要由高速缓冲存储器Cache、主存储器和辅助存储器组成。 存储系统多级层次结构中,由上向下分三级,其容量逐渐增大,速度逐级降低,成本则逐次减少。整个结构又可以看成两个层次:它们分别是cache一主存层次和主存一辅存层次。这个层次系统中的每一种存储器都不再是孤立的存储器,而是一个有机的整体。它们在辅助硬件和计算机操作系统的管理下,可把主存一辅存层次作为一个存储整体,形成的可寻址存储空间比主存储器空间大得多。由于辅存容量大,价格低,使得存储系统的整体平均价格降低。由于Cache的存取速度可以和CPU的工作速度相媲美,故cache一主存层次可以缩小主存和CPU之间的速度差距,从整体上提高存储器系统的存取速度。尽管Cache成本高,但由于容量较小,故不会使存储系统的整体价格增加很多。 综上所述,一个较大的存储系统是由各种不同类型的存储设备构成,是一个具有多级层次结构的存储系统。该系统既有与CPU相近的速度,又有极大的容量,而成本又是较低的。其中高速缓存解决了存储系统的速度问题,辅助存储器则解决了存储系统的容量问题。采用多级层次结构的存储器系统可以有效的解决存储器的速度、容量和价格之间的矛盾

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部