《爆肝操作系统面试题.docx》由会员分享,可在线阅读,更多相关《爆肝操作系统面试题.docx(65页珍藏版)》请在第一文库网上搜索。
1、爆肝操作系统面试题面试季到了,希望这份操作系统面试题大集合能发挥作用。这份面试题包含四十多道,涉及操作系统简介篇、进程和线程篇、内存管理篇、文件系统篇、10篇、死锁篇,囊括了校招面试和社招而试,希望能对彼此有帮助!提离文件累蜕性能的方式文件系筑管磁盘臂调度算法RAID的不同级别多处理系级的优势什么是遇程知遇程袅什么是tMT域程和进相的区别设控制B的主要功傕什么是上下文切接中断处理过程便用赛01程的好效是什么什么墨设备18动程序进程终止的方式什么是DMA迸程向的通信方式用内存访问的转点进8间状态-的什么是按II分贝什么是dl界内存交互式祟统中的调度虚欲内存的实现方式彭,度程的搭标是什么内存为什么
2、要分股什么是RR调度法物理地址、江地域、啊效地址、蛆性地址、虚拟地域的区别I每一下什么是操作系蜕空闺内存理的方式柞累蟆的主要功能页投算法郭有基钦件访问硬件的几抑方式什么是尸进程冏一下一作累蜿的主襄目的是什么死铀产生的原因作系统的押交帮或死镇产生的必要条件死顿胃死81的像震方式如何破坏死微振作系姚德介作系蜕结构死植奥也为什么稀为陷入内横什么是用户本10内模态用户恋和内梗岩是如何切拱的什么是内犊什么最裳的系统Linux操作系貌的启动过程为什么Linux系俄下的应用程序不IC宜接在Window*下运行内存理操作系统面试题话不多说,下面我们直接进入面试题。操作系统简介篇解释一下什么是操作系统操作系统是
3、管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层,使应用软件和硬件进行分离,让我们无需关注硬件的实现,把关注点更多放在软件应用上。用户态web浏览器电子邮件阅读器音乐播放器软件内核态操作系统硬件通常情况下,计算机上会运行着许多应用程序,它们都需要对内存和CPU进行交互,操作系统的目的就是为了保证这些访问和交互能够准确无误的进行。累作系统的主要功能,般来说,现代操作系统主要提供卜面几种功能进程管理:进程管理的主要作用就是任务调度,在单核处理器下,操作系统会为每个进程分配一个任务,进程管理的工
4、作十分简单;而在多核处理器下,操作系统除了耍为进程分配任务外,还耍解决处理器的调度、分配和回收等问题内存管理:内存管理主要是操作系统负责管理内存的分配、回收,在进程需要时分配内存以及在进程完成时回收内存,协调内存资源,通过合理的页面置换算法进行页面的换入换出设备管理:根据确定的设备分配原则对设备进行分配,使设备与主机能够并行工作,为用户提供良好的设备使用界面。文件管理:有效地管理文件的存储空间,合理地组织和管理文件系统,为文件访问和文件保护提供更有效的方法及手段。提供用户接口:操作系统提供了访问应用程序和硬件的接口,使用户能够通过应用程序发起系统调用从而操纵硬件,实现想要的功能。软件访问硬件的
5、几种方式软件访问硬件其实就是一种10操作,软件访问硬件的方式,也就是I/O操作的方式有哪些。硬件在I/O上大致分为并行和串行,同时也对应串行接口和并行接口。随着计算机技术的发展,I/O控制方式也在不断发展。选择和衡量I/O控制方式有如下三条原则(1)数据传送速度足够快,能满足用户的需求但又不丢失数据;(2)系统开销小,所需的处理控制程序少;(3)能充分发挥硬件资源的能力,使I/O设备尽可能忙,而CPU等待时间尽可能少。根据以上控制原则,I/O操作可以分为四类直接访问:直接访问由用户进程直接控制主存或CPU和外围设备之间的信息传送。直接程序控制方式又称为忙/等待方式。中断驱动:为了减少程序直接控
6、制方式下CPU的等待时间以及提高系统的并行程度,系统引入了中断机制。中断机制引入后,外围设备仅当操作正常结束或异常结束时才向CPU发出中断请求。在I/O设备输入每个数据的过程中,由于无需CPU的干预,一定程度上实现了 CPU与I/O设备的并行工作。上述两种方法的特点都是以CPU为中心,数据传送通过一段程序来实现,软件的传送手段限制了数据传送的速度。接下来介绍的这两种1/0控制方式采用硬件的方法来显示I/O的控制DMA直接内存访问:为了进一步减少CPU对I/O操作的干预,防止因并行操作设备过多使CPU来不及处理或因速度不匹配而造成的数据丢失现象,引入了 DMA控制方式。通道控制方式:通道,独立于
7、CPL.的专门负责输入输出控制的处理机,它控制设备与内存直接进行数据交换。有自己的通道指令,这些指令由CPU启动,并在操作结束时向CPU发出中断信号。解释一下操作系统的主要目的是什么操作系统是一种软件,它的主要目的有三种管理计算机资源,这些资源包括CPU、内存、磁盘驱动器、打印机等。提供一种图形界面,就像我们前面描述的那样,它提供了用户和计算机之间的桥梁。为其他软件提供服务,操作系统与软件进行交互,以便为其分配运行所需的任何必要资源。操作系统的种类有哪些操作系统通常预装在你购买计算机之前。大部分用户都会使用默认的操作系统,但是你也可以升级甚至更改操作系统。但是一般常见的操作系统只有三种:Win
8、dows、macOS 和 Linuxo为什么Linux系统下的应用程序不能直接在Windows下运行这是一个老生常谈的问题了,在这里给出具体的回答。其中一点是因为Linux系统和Windows系统的格式不同,格式就是协议,就是在固定位置有意义的数据。Linux下的可执行程序文件格式是elf,可以使用 readelf 命令查看elf文件头。ELF Header.text.data.bssother sectionsSection header tableString TablesSymbol Tables而Windows下的可执行程序是PE格式,它是一种可移植的可执行文件。还有一点是因为Linu
9、x系统和Windows系统的 API不同,这个API指的就是操作系统的API, Linux中的API被称为系统调用,是通过int 0x80这个软中断实现的。而Windows中的API是放在动态链接库文件中的,也就是Windows开发人员所说的DLL ,这是一个库,里面包含代码和数据。Linux中的可执行程序获得系统资源的方法和Windows不一样,所以显然是不能在Windows中运行的。操作系统结构单体系统在大多数系统中,整个系统在内核态以单一程序的方式运行。整个操作系统是以程序集合来编写的,链接在一块形成一个大的二进制可执行程序,这种系统称为单体系统。在单体系统中构造实际目标程序时,会首先编
10、译所有单个过程(或包含这些过程的文件),然后使用系统链接器将它们全部绑定到一个可执行文件中在单体系统中,对于每个系统调用都会有一个服务程序来保障和运行。需要一组实用程序来弥补服务程序需要的功能,例如从用户程序中获取数据。可将各种过程划分为一个三层模型除了在计算机初启动时所装载的核心操作系统外,许多操作系统还支持额外的扩展。比如I/O设备驱动和文件系统。这些部件可以按需装载。在UNIX中把它们叫做 共享库(shared library),在Windows中则被称为 动态链接库(DynamicLink Library, DLL) 0 他们的扩展名为.dll,在 C: Windowssys tem3
11、2 目录下存在1000多个DLL文件,所以不要轻易删除C盘文件,否则可能就炸了哦。分层系统分层系统使用层来分隔不同的功能单元。每一层只与该层的上层和下层通信。每一层都使用下面的层来执行其功能。层之间的通信通过预定义的固定接口通信。微内核为了实现高可靠性,将操作系统划分成小的、层级之间能够更好定义的模块是很有必要的,只有一个模块-一微内核-运行在内核态,其余模块可以作为普通用户进程运行。由于把每个设备驱动和文件系统分别作为普通用户进程,这些模块中的错误虽然会使这些模块崩溃,但是不会使整个系统死机。MINIX 3是微内核的代表作,它的具体结构如下在内核的外部,系统的构造有三层,它们都在用户态下运行
12、,最底层是设备驱动器。由于它们都在用户态下运行,所以不能物理的访问I/O端口空间,也不能直接发出I/O命令。相反,为了能够对I/O设备编程,驱动器构建一个结构,指明哪个参数值写到哪个I/O端口,并声称一个内核调用,这样就完成了一次调用过程。客户-服务器模式微内核思想的策略是把进程划分为两类:服务器,每个服务器用来提供服务;客户端,使用这些服务。这个模式就是所谓的 客户-服务器模式。客户-服务器模式会有两种载体,一种情况是一台计算机既是客户又是服务器,在这种方式下,操作系统会有某种优化;但是普遍情况下是客户端和服务器在不同的机器上,它们通过局域网或广域网连接。客户通过发送消息与服务器通信,客户端
13、并不需要知道这些消息是在本地机器上处理,还是通过网络被送到远程机器上处理。对于客户端而言,这两种情形是一样的:都是发送请求并得到回应。为什么称为陷入内核如果把软件结构进行分层说明的话,应该是这个样子的,最外层是应用程序,里面是操作系统内核。应用程序处于特权级3,操作系统内核处于特权级0。如果用户程序想要访问操作系统资源时,会发起系统调用,陷入内核,这样CPU就进入了内核态,执行内核代码。至于为什么是陷入,我们看图,内核是一个凹陷的构造,有陷下去的感觉,所以称为陷入。什么是用户态和内核态用户态和内核态是操作系统的两种运行状态。内核态:处于内核态的CPU可以访问任意的数据,包括外围设备,比如网卡、
14、硬盘等,处于内核态的CPU可以从一个程序切换到另外一个程序,并且占用CPU不会发生抢占情况,一般处于特权级。的状态我们称之为内核态。用户态:处于用户态的CPU只能受限的访问内存,并且不允许访问外围设备,用户态下的CPU不允许独占,也就是说CPU能够被其他程序获取。那么为什么要有用户态和内核态呢?这个主要是访问能力的限制的考量,计算机中有一些比较危险的操作,比如设置时钟、内存清理,这些都需要在内核态下完成,如果随意进行这些操作,那你的系统得崩溃多少次。用户态和内核态是如何切换的?所有的用户进程都是运行在用户态的,但是我们上面也说了,用户程序的访问能力有限,一些比较重要的比如从硬盘读取数据,从键盘
15、获取数据的操作则是内核态才能做的事情,而这些数据却又对用户程序来说非常重要。所以就涉及到两种模式下的转换,即用户态- 内核态- 用户态,而唯一能够做这些操作的只有 系统调用,而能够执行系统调用的就只有操作系统。一般用户态- 内核态的转换我们都称之为trap进内核,也被称之为 陷阱指令(trap instruction)。他们的工作流程如下:首先用户程序会调用glibc库,glibc是一个标准库,同时也是一套核心库,库中定义了很多关键APToglibc库知道针对不同体系结构调用系统调用的正确方法,它会根据体系结构应用程序的二进制接口设置用户进程传递的参数,来准备系统调用。然后,glibc库调用软件中断指令(SWI),