操做系统面试知识点总结

 一.操做系统概述
1. 操做系统的四个特性

并发:同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件)程序员

共享:系统中的资源能够被内存中多个并发执行的进线程共同使用web

虚拟:经过时分复用(如多道程序技术,分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个算法

异步:系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推动安全

2.操做系统的主要功能

处理机管理:处理机分配都是以进程为单位,因此处理机管理也被看作是进程管理。包括进程控制,进程同步,进程通讯和调度(做业调度和进程调度)
存储器管理(或者内存管理):内存分配,内存保护,地址映射,内存扩充
设备管理:管理全部外围设备,包括完成用户的IO请求;为用户进程分配IO设备;提升IO设备利用率;提升IO速度;方便IO的使用
文件管理:管理用户文件和系统文件,方便使用同时保证安全性。包括:文件存储空间管理,目录管理,文件读写管理以及文件共享和保护
提供用户接口:程序接口(如API)和用户接口(如GUI)多线程

二.进程和线程并发

3.进程的状态与转换

  进程的三种基本状态:就绪(Ready)状态,执行(Running)状态,阻塞(Block)状态  (引入的两种常见的状态:建立状态,终止状态)异步

运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。socket

就绪状态:进程已处于准备运行的状态,即进程得到了除处理机以外的一切所需资源,一旦获得处理机便可运行。函数

阻塞状态,又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即便处理机空闲,该进程也不能运行。测试

4.进程同步的几种机制

同步机制须要遵循的原则:

  1.空闲让进,2.忙则等待,3.有限等待,4.让权等待

经典的进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题

进程同步的机制:硬件同步机制、信号量机制、管程机制

  硬件同步机制:关中断

         利用Test-and-Set指令实现互斥(Test-and-Set TS指令:”测试并创建“)

         利用Swap指令实现进程互斥(该指令称为对换指令,用于交换两个字的内容)

  信号量(Semaphores)机制

  管程机制

5.进程的通讯方式有哪些?

主要分为:管道、系统IPC(包括消息队列、信号量、共享存储器)、SOCKET、远程过程(函数)调用RPC

管道主要分为:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe)

# 管道( pipe ):管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备亲缘关系的进程间使用。进程的亲缘关系一般是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通讯方式,可是它容许无亲缘关系进程间的通讯。
# 信号量( semophore ) : 信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它常做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通讯方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问。共享内存是最快的 IPC 方式,它是针对其余进程间通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号两,配合使用,来实现进程间的同步和通讯。
# 套接字( socket ) : 套解口也是一种进程间通讯机制,与其余通讯机制不一样的是,它可用于不一样及其间的进程通讯。

 

6.请分别简单说一说进程和线程以及它们的区别

  • 进程是具备必定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分派的一个独立单位。
  • 线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程是轻量级的进程。
  • 一个进程能够有多个线程,多个线程也能够并发执行
 

7.线程同步的方式有哪些?

线程同步的方式:

  • 临界区:经过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问
  • 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,由于互斥对象只有一个,因此能够保证公共资源不会同时被多个线程访问
  • 信号量:它容许多个线程同一时刻访问同一资源,可是须要限制同一时刻访问此资源的最大线程数目。信号量对象对线程的同步方式与前面几种方法不一样,信号容许多个线程同时使用共享资源,这与操做系统中PV操做类似。
  • 事件(信号):经过通知操做的方式来保持多线程的同步,还能够方便的实现多线程的优先级比较的操做
 
三.处理机调度与死锁
8.用户态和核心态

当程序运行在3级特权级上时,就能够称之为运行在用户态,由于这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;

反之,当程序运行在级特权级上时,就能够称之为运行在内核态。

用户态切换到内核态的3种方式:系统调用,异常,外围设备的中断

 

9.处理机调度的层次

  高级调度(长程调度或做业调度):调度对象是做业,主要用于多道批处理系统中,而在分时和实时系统中不设置高级调度

  低级调度(进程调度或短程调度):调度对象是进程,在多道批处理,分时和实时三种类型的OS中,都必须配置这级调度

  中级调度:内存调度,引入中级调度的主要目的是,提升内存利用率和系统吞吐量,中级调度实际上就是存储器管理中的对换功能

 

10.死锁

死锁的定义:所谓死锁就是一个进程集合中的多个进程由于竞争资源,而形成的互相等待现象。

死锁的缘由:系统资源不足;多个进程的推动顺序不合理

死锁的必要条件:

  • 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
  • 请求与保持条件(Hold and wait):已经获得资源的进程能够再次申请新的资源。
  • 不可抢占条件(No pre-emption):进程对于已经申请到的资源在使用完成以前不能够被抢占
  • 环路等待条件:发生死锁的时候存在的一个 进程-资源 环形等待链

死锁处理:

  1. 预防死锁:破坏产生死锁的4个必要条件中的一个或者多个;实现起来比较简单,可是若是限制过于严格会下降系统资源利用率以及吞吐量

  2. 避免死锁:在资源的动态分配中,防止系统进入不安全状态(可能产生死锁的状态)-如银行家算法

  3. 检测死锁:容许系统运行过程当中产生死锁,在死锁发生以后,采用必定的算法进行检测,并肯定与死锁相关的资源和进程,采起相关方法清除检测到的死锁。实现难度大

  4. 解除死锁:与死锁检测配合,将系统从死锁中解脱出来(撤销进程或者剥夺资源)。对检测到的和死锁相关的进程以及资源,经过撤销或者挂起的方式,释放一些资源并将其分配给处于阻塞状态的进程,使其转变为就绪态。实现难度大

11.进程调度算法 操做系统中进程调度策略有哪几种?

FCFS(先来先服务),优先级,时间片轮转,多级反馈

 

先来先服务调度算法FCFS:既能够做为做业调度算法也能够做为进程调度算法;按做业或者进程到达的前后顺序依次调度;所以对于长做业比较有利;

短做业优先调度算法SJF:做业调度算法,算法从就绪队列中选择估计时间最短的做业进行处理,直到得出结果或者没法继续执行;缺点:不利于长做业;未考虑做业的重要性;运行时间是预估的,并不靠谱 ;

优先级调度算法PSA:基于做业的紧迫程度,由外部赋予做业相应的优先级,调度算法是根据该优先级进行调度的

高相应比优先调度算法HRNN:响应比=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间

 

时间片轮转调度RR:按到达的前后对进程放入队列中,而后给队首进程分配CPU时间片,时间片用完以后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;

多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每一个队列设置不一样的优先级,第一个队列优先级最高,其他依次递减。优先级越高的队列分配的时间片越短,进程到达以后按FCFS放入第一个队列,若是调度执行后没有完成,那么放到第二个队列尾部等待调度,若是第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。

 

四.存储器管理

 
12.内存连续分配

连续分配方式:单一连续分配:单道程序环境下

固定分区分配:多道程序系统,每一个分区的大小是固定的

动态分区分配

动态可重定位分区分配  算法四种方式

主要是指动态分区分配时所采用的几种算法。
动态分区分配又称为可变分区分配,它是动态划份内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地创建分区,并使分区的大小正好适合进程的须要。所以系统中分区的大小和数目是可变的。

基于顺序搜索的动态分区分配算法

  首次适应(First Fit)算法:空闲分区以地址递增的次序连接。分配内存时顺序查找,找到大小能知足要求的第一个空闲分区。

  最佳适应(Best Fit)算法:空闲分区按容量递增造成分区链,找到第一个能知足要求的空闲分区。

  最坏适应(Worst Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序连接。找到第一个能知足要求的空闲分区,也就是挑选出最大的分区。

基于索引搜索的动态分区分配算法

  快速适应(quick fit)算法:又称为分类搜索法,是将空闲分区根据其容量大小进行分类,对于每一类具备相同容量的全部空闲分区,单独设立一个空闲分区链表

             这样系统中存在多个空闲分区链表

  伙伴系统(buddy system)

  哈希算法:构造一张以空闲分区大小为关键字的哈希表,该表的每个表项记录了一个对应的空闲分区链表表头指针

13.基本分页存储管理方式

离散分配方式:将一个进程直接分散地装入到许多不相邻接的分区中,即可充分利用内存空间

离散分配分为三种:分页存储管理方式、分段存储管理方式、段页式存储管理方式

     分页存储管理方式:将用户程序的地址空间分为若干个固定大小的区域,称为”页“或”页面“。相应的,也将内存空间分为若干个物理块或页框(frame),页和块的大小相同。这样就能够将用户程序的任一页放入任一物 理块中,实现了离散分配。

把主存空间划分为大小相等且固定的块,块相对较小,做为主存的基本单位。每一个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。

由于程序数据存储在不一样的页面中,而页面又离散的分布在内存中,所以须要一个页表来记录逻辑地址和实际存储地址之间的映射关系,以实现从页号到物理块号的映射。

因为页表也是存储在内存中的,所以和不适用分页管理的存储方式相比,访问分页系统中内存数据须要两次的内存访问(一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移获得实际物理地址;第二次就是根据第一次获得的物理地址访问内存取出数据)。


为了减小两次访问内存致使的效率影响,分页管理中引入了快表机制,包含快表机制的内存管理中,当要访问内存数据的时候,首先将页号在快表中查询,若是查找到说明要访问的页表项在快表中,那么直接从快表中读取相应的物理块号;若是没有找到,那么访问内存中的页表,从页表中获得物理地址,同时将页表中的该映射表项添加到快表中(可能存在快表换出算法)。

在某些计算机中若是内存的逻辑地址很大,将会致使程序的页表项会不少,而页表在内存中是连续存放的,因此相应的就须要较大的连续内存空间。为了解决这个问题,能够采用两级页表或者多级页表的方法,其中外层页表一次性调入内存且连续存放,内层页表离散存放。相应的访问内存页表的时候须要一次地址变换,访问逻辑地址对应的物理地址的时候也须要一次地址变换,并且一共须要访问内存3次才能够读取一次数据。

14.基本分段存储管理方式

分页是为了提升内存利用率,而分段是为了知足程序员在编写代码的时候的一些逻辑需求(好比数据共享,数据保护,动态连接等)。

分段内存管理当中,地址是二维的,一维是段号,一维是段内地址;其中每一个段的长度是不同的,并且每一个段内部都是从0开始编址的。因为分段管理中,每一个段内部是连续内存分配,可是段和段之间是离散分配的,所以也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制。段表中的每个表项记录了该段在内存中的起始地址和该段的长度。段表能够放在内存中也能够放在寄存器中。


访问内存的时候根据段号和段表项的长度计算当前访问段在段表中的位置,而后访问段表,获得该段的物理地址,根据该物理地址以及段内偏移量就能够获得须要访问的内存。因为也是两次内存访问,因此分段管理中一样引入了联想寄存器。

分段分页方式的比较

页是信息的物理单位,是出于系统内存利用率的角度提出的离散分配机制;段是信息的逻辑单位,每一个段含有一组意义完整的信息,是出于用户角度提出的内存管理机制

页的大小是固定的,由系统决定;段的大小是不肯定的,由用户决定

 

五.虚拟存储器

15.虚拟内存

若是存在一个程序,所需内存空间超过了计算机能够提供的实际内存,那么因为该程序没法装入内存因此也就没法运行。单纯的增长物理内存只能解决一部分问题,可是仍然会出现没法装入单个或者没法同时装入多个程序的问题。可是能够从逻辑的角度扩充内存容量,便可解决上述两种问题。

基于局部性原理,在程序装入时,能够将程序的一部分装入内存,而将其他部分留在外存,就能够启动程序执行。在程序执行过程当中,当所访问的信息不在内存时,由操做系统将所须要的部分调入内存,而后继续执行程序。另外一方面,操做系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。

虚拟存储器的特征:

  1. 屡次性:一个做业能够分屡次被调入内存。屡次性是虚拟存储特有的属性
  2. 对换性:做业运行过程当中存在换进换出的过程(换出暂时不用的数据换入须要的数据)
  3. 虚拟性:虚拟性体如今其从逻辑上扩充了内存的容量(能够运行实际内存需求比物理内存大的应用程序)。虚拟性是虚拟存储器的最重要特征也是其最终目标。虚拟性创建在屡次性和对换性的基础上行,屡次性和对换性又创建在离散分配的基础上

虚拟存储器的实现方法:分页请求系统,请求分段系统

16.页面置换算法(服务于分页请求系统)

最佳(Optimal)置换算法:只具备理论意义的算法,用来评价其余页面置换算法。置换策略是将当前页面中在将来最长时间内不会被访问的页置换出去。

先进先出(FIFO)置换算法:简单粗暴的一种置换算法,没有考虑页面访问频率信息。每次淘汰最先调入的页面。

最近最久未使用LRU(Least Recently Used)置换算法:算法赋予每一个页面一个访问字段,用来记录上次页面被访问到如今所经历的时间t,每次置换的时候把t值最大的页面置换出去(实现方面能够采用寄存器或者栈的方式实现)。

最少使用LFU(Least Frequently Used)置换算法:设置寄存器记录页面被访问次数,每次置换的时候置换当前访问次数最少的。

改进型Clock算法:在Clock算法的基础上添加一个修改位,替换时根究访问位和修改位综合判断。优先替换访问位和修改位都是0的页面,其次是访问位为0修改位为1的页面。

页面缓冲算法(Page Buffering Algorithm,PBA)

相关文章
相关标签/搜索