操作系统⾯试题及答案
  许多⾯试操作系统⽅⾯的⽤户经常在⾯试的时候遇到很多问题,下⾯由店铺为⼤家整理了操作系统⾯试题及答案,希望对⼤家有帮助。
  操作系统⾯试题及答案⼀
  1、什么是进程(Process)和线程(Thread)?有何区别?
  进程是具有⼀定独⽴功能的程序关于某个数据集合上的⼀次运⾏活动,进程是系统进⾏资源分配和调度的⼀个独⽴单位。线程是进程的⼀个实体,是CPU调度和分派的基本单位,它是⽐进程更⼩的能独⽴运⾏的基本单位。线程⾃⼰基本上不拥有系统资源,只拥有⼀点在运⾏中必不可少的资源(如程序计数器,⼀组寄存器和栈),但是它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源。⼀个线程可以创建和撤销另⼀个线程,同⼀个进程中的多个线程之间可以并发执⾏。
  进程与应⽤程序的区别在于应⽤程序作为⼀个静态⽂件存储在计算机系统的硬盘等存储空间中,⽽进程则是处于动态条件下由操作系统维护的系统资源管理实体。
  2、Windows下的内存是如何管理的?
  Windows提供了3种⽅法来进⾏内存管理:虚拟内存,最适合⽤来管理⼤型对象或者结构数组;内存映射⽂件,最适合⽤来管理⼤型数据流(通常来⾃⽂件)以及在单个计算机上运⾏多个进程之间共享数据;内存堆栈,最适合⽤来管理⼤量的⼩对象。
  Windows操纵内存可以分两个层⾯:物理内存和虚拟内存。
  其中物理内存由系统管理,不允许应⽤程序直接访问,应⽤程序可见的只有⼀个2G地址空间,⽽内存分配是通过堆进⾏的。对于每个进程都有⾃⼰的默认堆,当⼀个堆创建后,就通过虚拟内存操作保留了相应⼤⼩的地址块(不占有实际的内存,系统消耗很⼩)。当在堆上分配⼀块内存时,系统在堆的地址表⾥到⼀个空闲块(如果不到,且堆创建属性是可扩充的,则扩充堆⼤⼩),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换⽂件上),这时就可以访问这部分地址。提交时,系统将对所有进程的内存统⼀调配,如果物理内存不够,系统试图把⼀部分进程暂时不访问的页放⼊交换⽂件,以腾出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。
  如果要知道某个地址是否被占⽤/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产⽣⼀个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产⽣软件异常。
  3、Windows消息调度机制是?
  A)指令队列;B)指令堆栈;C)消息队列;D)消息堆栈
  答案:C
  处理消息队列的顺序。⾸先Windows绝对不是按队列先进先出的次序来处理的,⽽是有⼀定优先级的。优先级通过消息队列的状态标志来实现的。⾸先,最⾼优先级的是别的线程发过来的消息(通过sendmessage);其次,处理登记消息队列消息;再次处理QS_QUIT标志,处理虚拟输⼊队列,处理wm_paint;最后是wm_timer。
  4、描述实时系统的基本特性
  在特定时间内完成特定的任务,实时性与可靠性。
  所谓“实时操作系统”,实际上是指操作系统⼯作时,其各种资源可以根据需要随时进⾏动态分配。由于各种资源可以进⾏动态分配,因此,其处理事务的能⼒较强、速度较快。
  5、中断和轮询的特点
  对I/O设备的程序轮询的⽅式,是早期的计算机系统对I/O设备的⼀种管理⽅式。它定时对各种设备轮流询问⼀遍有⽆处理要求。轮流询问之后,有要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续⼯作。尽管轮询需要时间,但轮询要⽐I/O设备的速度要快得多,所以⼀般不会发⽣不能及时处理的问题。当然,再快的处理机,能处理的输⼊输出设备的数量也是有⼀定限度的。⽽且,程序轮询毕竟占据了CPU相当⼀部分处理时间,因此,程序轮询是⼀种效率较低的⽅式,在现代计算机系统中已很少应⽤。
  程序中断通常简称中断,是指CPU在正常运⾏程序的过程中,由于预先安排或发⽣了各种随机的内部或外部事件,使CPU中断正在运⾏的程序,⽽转到为响应的服务程序去处理。
  轮询——效率低,等待时间很长,CPU利⽤率不⾼。
  中断——容易遗漏⼀些问题,CPU利⽤率⾼。
  6、什么是临界区?如何解决冲突?
  每个进程中访问临界资源的那段程序称为临界区,每次只准许⼀个进程进⼊临界区,进⼊后不允许其他进程进⼊。
  (1)如果有若⼲进程要求进⼊空闲的临界区,⼀次仅允许⼀个进程进⼊;
  (2)任何时候,处于临界区内的进程不可多于⼀个。如已有进程进⼊⾃⼰的临界区,则其它所有试图进⼊临界区的进程必须等待;
  (3)进⼊临界区的进程要在有限时间内退出,以便其它进程能及时进⼊⾃⼰的临界区;
  (4)如果进程不能进⼊⾃⼰的临界区,则应让出CPU,避免进程出现“忙等”现象。
  7、说说分段和分页
  页是信息的物理单位,分页是为实现离散分配⽅式,以消减内存的外零头,提⾼内存的利⽤率;或者说,分页仅仅是由于系统管理的需要,⽽不是⽤户的需要。
  段是信息的逻辑单位,它含有⼀组其意义相对完整的信息。分段的⽬的是为了能更好的满⾜⽤户的需要。
  页的⼤⼩固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因⽽⼀个系统只能有⼀种⼤⼩的页⾯。段的长度却不固定,决定于⽤户所编写的程序,通常由编辑程序在对源程序进⾏编辑时,根据信息的性质来划分。
  分页的作业地址空间是⼀维的,即单⼀的线性空间,程序员只须利⽤⼀个记忆符,即可表⽰⼀地址。分段的作业地址空间是⼆维的,程序员在标识⼀个地址时,既需给出段名,⼜需给出段内地址。
  8、说出你所知道的保持进程同步的⽅法?
  进程间同步的主要⽅法有原⼦操作、信号量机制、⾃旋锁、管程、会合、分布式系统等。
  9、Linux中常⽤到的命令
  显⽰⽂件⽬录命令ls 如ls
  改变当前⽬录命令cd 如cd /home
  建⽴⼦⽬录mkdir 如mkdir xiong
  删除⼦⽬录命令rmdir 如rmdir /mnt/cdrom
  删除⽂件命令rm 如rm /ucdos.bat
  ⽂件复制命令cp 如cp /ucdos /fox
  获取帮助信息命令man 如man ls
  显⽰⽂件的内容less 如less mwm.lx
  重定向与管道type 如type readme>>direct,将⽂件readme的内容追加到⽂direct中
  10、linux⽂件属性有哪些?(共⼗位)
  -rw-r--r--那个是权限符号,总共是- --- --- ---这⼏个位。
  第⼀个短横处是⽂件类型识别符:-表⽰普通⽂件;c表⽰字符设备(character);b表⽰块设备(block);d表⽰⽬录(directory);l表⽰链接⽂件(link);后⾯第⼀个三个连续的短横是⽤户权限位(User),第⼆个三个连续短横是组权限位(Group),第三个三个连续短横是其他权限位(Other)。每个权限位有三个权限,r(读权限),w(写权限),x(执⾏权限)。如果每个权限位都有权限存在,那么满权限的情况就是:-rwxrwxrwx;权限为空的情况就是- --- --- ---。
  权限的设定可以⽤chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:
  ⼀个⽂件aaa具有完全空的权限- --- --- ---。
  chmod u+rw aaa(给⽤户权限位设置读写权限,其权限表⽰为:- rw- --- ---)
  chmod g+r aaa(给组设置权限为可读,其权限表⽰为:- --- r-- ---)
  chmod ugo+rw aaa(给⽤户,组,其它⽤户或组设置权限为读写,权限表⽰为:- rw- rw- rw-)
  如果aaa具有满权限- rwx rwx rwx。
  chmod u-x aaa(去掉⽤户可执⾏权限,权限表⽰为:- rw- rwx rwx)
  如果要给aaa赋予制定权限- rwx r-x r-x,命令为:
  chmod u=rwx,Go=rx aaa
  11、makefile⽂件的作⽤是什么?
  ⼀个⼯程中的源⽂件不计其数,其按类型、功能、模块分别放在若⼲个⽬录中。makefile定义了⼀系列的规则来指定哪些⽂件需要先编译,哪些⽂件需要后编译,哪些⽂件需要重新编译,甚⾄于进⾏更复杂的功能操作。因为makefile就像⼀个Shell脚本⼀样,其中也可以执⾏操作系统的命令。makefile带来的好处就是——“⾃动化编译”。⼀旦写好,只需要⼀个make命令,整个⼯程完全⾃动编译,极⼤地提⾼了软件开发的效率。make是⼀个命令⼯具,是⼀个解释makefile中指令的命令⼯具。⼀般来说,⼤多数的IDE都有这个命令,⽐如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了⼀种在⼯程⽅⾯的编译⽅法。
  12、简术OSI的物理层Layer1,链路层Layer2,⽹络层Layer3的任务。
  ⽹络层:通过路由选择算法,为报⽂或分组通过通信⼦⽹选择最适当的路径。
  链路层:通过各种控制协议,将有差错的物理信道变为⽆差错的、能可靠传输数据帧的数据链路。
  物理层:利⽤传输介质为数据链路层提供物理连接,实现⽐特流的透明传输。
  13、什么是中断?中断时CPU做什么⼯作?
  中断是指在计算机执⾏期间,系统内发⽣任何⾮寻常的或⾮预期的急需处理事件,使得CPU暂时中断当前正在执⾏的程序⽽转去执⾏相应的事件处理程序。待处理完毕后⼜返回原来被中断处继续执⾏或调度新的进程执⾏的过程。
  14、你知道操作系统的内容分为⼏块吗?什么叫做虚拟内存?他和主存的关系如何?内存管理属于操作系统的内容吗?
  操作系统的主要组成部分:进程和线程的管理,存储管理,设备管理,⽂件管理。虚拟内存是⼀些系统页⽂件,存放在磁盘上,每个系统页⽂件⼤⼩为4K,物理内存也被分页,每个页⼤⼩也为4K,这样虚拟页⽂件和物理内存页就可以对应,实际上虚拟内存就是⽤于物理内存的临时存放的磁盘空间。页⽂件就是内存页,物理内存中每页叫物理页,磁盘上的页⽂件叫虚拟页,物理页+虚拟页就是系统所有使⽤的页⽂件的总和。
  15、线程是否具有相同的堆栈?dll是否有独⽴的堆栈?
  每个线程有⾃⼰的堆栈。
  dll是否有独⽴的堆栈?这个问题不好回答,或者说这个问题本⾝是否有问题。因为dll中的代码是被某些线程所执⾏,只有线程拥有堆栈。如果dll中的代码是exe中的线程所调⽤,那么这个时候是不是说这个dll没有独⽴的堆栈?如果dll中的代码是由dll⾃⼰创建的线程所执⾏,那么是不是说dll有独⽴的堆栈?
  以上讲的是堆栈,如果对于堆来说,每个dll有⾃⼰的堆,所以如果是从dll中动态分配的内存,最好是从dll中删除;如果你从dll中分配内存,然后在exe中,或者另外⼀个dll中删除,很有可能导致程序崩溃。
  16、什么是缓冲区溢出?有什么危害?其原因是什么?
  缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区本⾝的容量,溢出的数据覆盖在合法数据上。
  危害:在当前⽹络与分布式系统安全中,被⼴泛利⽤的50%以上都是缓冲区溢出,其中最著名的例⼦是1988年利⽤fingerd漏洞的蠕⾍。⽽缓冲区溢出中,最为危险的是堆栈溢出,因为⼊侵者可以利⽤堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害⼀种是程序崩溃导致拒绝服务,另外⼀种就是跳转并且执⾏⼀段恶意代码,⽐如得到shell,然后为所欲为。通过往程序的缓冲区
写超出其长度的内容,造成缓冲区的溢出,从⽽破坏程序的堆栈,使程序转⽽执⾏其它指令,以达到攻击的⽬的。
  造成缓冲区溢出的主原因是程序中没有仔细检查⽤户输⼊的参数。
  17、什么是死锁?其条件是什么?怎样避免死锁?
  死锁的概念:在两个或多个并发进程中,如果每个进程持有某种资源⽽⼜都等待别的进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这⼀组进程产⽣了死锁。通俗地讲,就是两个或多个进程被⽆限期地阻塞、相互等待的⼀种状态。
  死锁产⽣的原因主要是:? 系统资源不⾜;? 进程推进顺序⾮法。
  产⽣死锁的必要条件:
  (1)互斥(mutualexclusion),⼀个资源每次只能被⼀个进程使⽤;
  (2)不可抢占(nopreemption),进程已获得的资源,在未使⽤完之前,不能强⾏剥夺;
  (3)占有并等待(hold andwait),⼀个进程因请求资源⽽阻塞时,对已获得的资源保持不放;
  (4)环形等待(circularwait),若⼲进程之间形成⼀种⾸尾相接的循环等待资源关系。
  这四个条件是死锁的必要条件,只要系统发⽣死锁,这些条件必然成⽴,⽽只要上述条件之⼀不满⾜,就不会发⽣死锁。
  死锁的解除与预防:理解了死锁的原因,尤其是产⽣死锁的四个必要条件,就可以最⼤可能地避免、预防和解除死锁。所以,在系统设计、进程调度等⽅⾯注意如何不让这四个必要条件成⽴,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防⽌进程在处于等待状态的情况下占⽤资源。因此,对资源的分配要给予合理的规划。
  死锁的处理策略:鸵鸟策略、预防策略、避免策略、检测与恢复策略。
  操作系统⾯试题及答案⼆
  1、程序和进程
  进程由两个部分组成:1)操作系统⽤来管理进程的内核对象。内核对象也是系统⽤来存放关于进程的统计信息的地⽅。2)地址空间。它包含所有可执⾏模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。
定义使⽤系统运⾏资源情况
程序计算机指令的集合,它以⽂件的形式存储在磁盘上。程序是静
态实体(passive Entity),在多道程序系统中,它是不能独⽴运⾏的,更不能与其他程序并发执⾏。
不使⽤【程序不能申请系统资源,不能被系统调度,也不能作为独⽴运⾏的单位,因此,它不占⽤系统的运⾏资源】。
进程通常被定义为⼀个正在运⾏的程序的实例,是⼀个程序在其⾃
⾝的地址空间中的⼀次执⾏活动。
定义:进程是进程实体(包括:程序段、相关的数据段、进程控制块PCB)的运⾏过程,是系统进⾏资源分配和调度的⼀个独⽴单位。
使⽤【进程是资源申请、调度和独⽴运⾏的单位,因此,它使⽤系统中的运⾏资源。】
  2、进程与线程
  如果说操作系统引⼊进程的⽬的是为了提⾼程序并发执⾏,以提⾼资源利⽤率和系统吞吐量。那么操作系统中引⼊线程的⽬的,则是为了减少进程并发执⾏过程中所付出的时空开销,使操作系统能很好的并发执⾏。
  进程process定义了⼀个执⾏环境,包括它⾃⼰私有的地址空间、⼀个句柄表,以及⼀个安全环境;线程则是⼀个控制流,有他⾃⼰的调⽤栈call stack,记录了它的执⾏历史。
  线程由两个部分组成:1)线程的内核对象,操作系统⽤它来对线程实施管理。内核对象也是系统⽤来存放线程统计信息的地⽅。2)线程堆栈,它⽤于维护线程在执⾏代码时需要的所有参数和局部变量。当创建线程时,系统创建⼀个线程内核对象。该线程内核对象不是线程本⾝,⽽是操作系统⽤来管理线程的较⼩的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的⼀个⼩型数据结构。
  进程与线程的⽐较如下:
进程线程
泼性
不活泼(只是线程的容器)活泼
地址空间
系统赋予的独⽴的虚拟地址空间(对
于32位进程来说,这个地址空间是4GB)
在进程的地址空间执⾏代码。线程只有⼀个内核对象和⼀个堆栈,保
留的记录很少,因此所需要的内存也很少。因为线程需要的开销⽐进程少
仅是资源分配的基本单位独⽴调度、分派的基本单位
发性
仅进程间并发(传统OS)进程间、线程间并发
有资
资源拥有的基本单位基本上不拥有资源
统开
创建、撤销、切换开销⼤仅保存少量寄存器内容,开销⼩。
  3、进程同步
  进程同步的主要任务:是对多个相关进程在执⾏次序上进⾏协调,以使并发执⾏的诸进程之间能有效地共享资源和相互合作,从⽽使程序的执⾏具有可再现性。
  同步机制遵循的原则:
  (1)空闲让进;
  (2)忙则等待(保证对临界区的互斥访问);
  (3)有限等待(有限代表有限的时间,避免死等);
  (4)让权等待,(当进程不能进⼊⾃⼰的临界区时,应该释放处理机,以免陷⼊忙等状态)。
  4、进程间的通信是如何实现的?
  进程通信,是指进程之间的信息交换(信息量少则⼀个状态或数值,多者则是成千上万个字节)。因此,对于⽤信号量进⾏的进程间的互斥和同步,由于其所交换的信息量少⽽被归结为低级通信。
  所谓⾼级进程通信指:⽤户可以利⽤操作系统所提供的⼀组通信命令传送⼤量数据的⼀种通信⽅式。操作系统隐藏了进程通信的实现细节。或者说,通信过程对⽤户是透明的。
  ⾼级通信机制可归结为三⼤类:
  (1)共享存储器系统(存储器中划分的共享存储区);实际操作中对应的是“剪贴板”(剪贴板实际上是系统维护管理的⼀块内存区域)的通信⽅式,⽐如举例如下:word进程按下ctrl+c,在ppt进程按下ctrl+v,即完
成了word进程和ppt进程之间的通信,复制时将数据放⼊到剪贴板,粘贴时从剪贴板中取出数据,然后显⽰在ppt窗⼝上。
  (2)消息传递系统(进程间的数据交换以消息(message)为单位,当今最流⾏的微内核操作系统中,微内核与服务器之间的通信,⽆⼀例外地都采⽤了消息传递机制。应⽤举例:邮槽(MailSlot)是基于⼴播通信体系设计出来的,它采⽤⽆连接的不可靠的数据传输。邮槽是⼀种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户机进程写⼊数据。
  (3)管道通信系统(管道即:连接读写进程以实现他们之间通信的共享⽂件(pipe⽂件,类似先进先出的队列,由⼀个进程写,另⼀进程读))。实际操作中,管道分为:匿名管道、命名管道。匿名管道是⼀个未命名的、单向管道,通过⽗进程和⼀个⼦进程之间传输数据。匿名管道只能实现本地机器上两个进程之间的通信,⽽不能实现跨⽹络的通信。命名管道不仅可以在本机上实现两个进程间的通信,还可以跨⽹络实现两个进程间的通信。
同⼀机器两个进程间通信跨⽹络通信
剪贴板Clipboard可以不可以匿名管道Pipe可以不可以命名管道(点对点单⼀通信,数据量可较⼤)Namedpipe可以可以
进程间通信和线程间通信的区别
邮槽(⼀对多,数据量较⼩,424字节以下)Mailslot可以可以
  5、线程同步
  根据⽤户模式及内核模式下的同步⽅式的不同,分类及对⽐如下:
内核对象/
⾮内核对象
含义缺点适⽤
关键代码段(临界区)Critic alSection
⾮内核对象,⼯
作在⽤户⽅式下,为
⽤户模式对象
从程序代码的⾓
度来控制线程的并发
1.因为在等待进⼊关键代码段时⽆法设
定超时值,所以其很容易进⼊死锁状态。2.
不能跨进程使⽤。
单个进程中线
程间的同步(同步
速度快)
事件对象Ev ent 内核对象所有内核对象中
最基本的。
速度较慢(相⽐⽤户模式实现线程同
步)
多个进程间的
各个线程间实现同
互斥对象Mu tex 内核对象代表对⼀个资源
的独占式访问
信号量Semaphore 内核对象使⽤计数器来控
制程序对⼀个共享资
源的访问
  由于进程同步产⽣了⼀系列经典的同步问题“⽣产者-消费者”问题,“哲学家进餐”问题,“读者-写者”问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。