408-操作系统

操作系统常见面试题汇总

1.基本概念

死锁
是指多个进程竞争同一个资源而造成的一种僵局(互相等待),如果没有外力作用,这种局面无法打破。

死锁的必要条件
1.互斥条件。在某一段时间内一个资源只能被一个进程占用。
2.不剥夺条件:进程获得的资源在没有被使用完之前,不会主动释放
3.请求和保持:进程已经保持了几个资源,又提出新的资源请求,被拒绝,也继续持有现有的资源。(破坏的话就静态资源分配,一次申请完所有)
4.循环等待:存在一个进程资源的循环等待链。(破坏的话就顺序资源分配)

死锁的处理
1.死锁预防:破坏死锁产生的必要条件中的一个
2.死锁避免:银行家算法
3.死锁的检测和解除:在分配的时候不采取任何措施,通过资源分配图,利用死锁定理,来判断是否有死锁。 当资源分配图不可完全简化,就是死锁定理。 死锁解除:资源剥夺法和撤销进程法。

死锁和饥饿
死锁:多个进程因竞争资源而形成的一种僵局(互相等待对方的资源)
饥饿:一个进程等待其他进程释放资源

进程和线程的区别
(1)调度:线程是独立调度的基本单位,进程是资源拥有的基本单位
(2)并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,多个线程之间也可以并发执行
(3)系统开销:进程切换系统开销大,进程切换系统开销小
(4)线程不拥有资源,在同一个进程内,多个线程共享一个进程的资源,每个线程具有自己的线程栈,线程没有独立的线程地址空间,多个线程共享一个进程地址空间。

进程和程序的区别
进程:程序的一次执行过程,一个动态的过程。存在生命周期,包括进程的创建、进程运行、进程挂起、进程结束。
程序:代码+数据的一个集合,一个静态的表示

作业和进程的区别
一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。 作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合
进程调度算法
(1)先来先服务
(2)短作业优先
(3)优先级调度算法
(4)高响应比
(5)时间片轮转
(6)多级反馈队列调度

进程通信的几种方式

进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储), SOCKET.
管道包括三种:

  1. 普通管道PIPE, 通常有种限制,一是半双工,只能单向传输;二是只能在父子进程间使用.
  2. 流管道s_pipe: 去除了第一种限制,可以双向传输.
  3. 命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通讯.

系统IPC的三种方式相近,都是使用了内核里的标识符来识别.

  • 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

  • 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

  • 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

  • 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

  • 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

  • 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

  • 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

内核态与用户态用户态和内核态的理解和区别

2.内存管理

概念
操作系统对内存的划分和动态分配

程序的装入和链接
创建一个进程先要将程序和数据装入内存。需要编译,链接,和装入这三个过程。链接就是把编译后形成的目标模块与所需的库函数链接在一起。

其中链接的方式主要有三个:
1.静态链接
2.装入时动态链接
3.运行时动态链接

覆盖与交换
是在多道程序环境下扩充内存的方法
覆盖一般时在同一个程序或进程中,常用的程序放在固定区,其余按需要放在覆盖区。在需要时,将需要调入覆盖区。
交换一般是在不同进程中进行的。就是把处于等待状态的进程从内存移到辅存,把内存空间腾出来。

区别:
1、交换主要是在进程和作业之间进行
2、覆盖主要在同一个进程或作业中进行
3、打破了一个程序一旦进入主存便一直运行到结束的限制
4、打破了必须将一个进程的全部信息装入主存后才能运行的限制

内存分配方式管理方法 1. 单一分配 2. 固定分配
连续分配
主要有三种方式: 单一连续分配、固定分区分配、动态分区分配
1.单一连续分配:内存分为系统区和用户区。内存中永远只有一道程序
2.固定分区:大小相等的分区和大小不等的分区
3.动态分配:
1)首次适应算法:空闲分区按地址递增形式,找到第一个满足要求的(最好,最快)
2)最佳适应算法:按空间大小递增形式
3)最坏适应算法:按空间大小递减
4)邻近适应算法(循环首次适应)

非连续分配
分页存储,分段存储,段页式存储(首先被分成逻辑段,每个段再分成页)。
分页和分段的区别:
1.页是信息的物理单位,是系统的需要;段则是信息的逻辑单位,是为了满足用户的需要
2.页的大小固定且有系统决定,而段长度可变,取决于用户编写的程序
3.分页的作业地址空间一维,单一线性地址空间;分段的作业地址空间是二维的,要给出段名和段内地址

局部性原理
时间局部性:某个指令一旦被访问,接下来一段时间可能会被再次访问
空间局部性:程序访问了某个内存单元,接下来可能就会再一次访问

虚拟内存
系统提供了部分装入,请求调用,置换功能之后,系统好像为用户提供了一个比实际要大得多得内存。它得大小由计算机的地址空间决定。
它的实现有三种方式:请求分页,请求分段,请求段页式
请求分页:在基本分页的基础上增加了请求调页功能和页面置换功能。

只要将当前需要的一部分页面装入内存,之后需要时,再请求调用。还可以通过置换将暂时不用的换出,这就需要一定的硬件来支持:页表机制,缺页中断,地址变换机构(快表)。

内存池
内存池是一种内存分配方式。通常我们习惯直接使用new、malloc等系统调用申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。

内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升。

页面置换算法
1.最佳置换算法(OPT):淘汰的页面是以后不再使用的,或者是在最长时间内不会被访问到的。
2.先进先出(FIFO):belady异常
3.最近最久未使用(LRU):最近最长时间没有访问的
4.时钟COLCK置换算法(又称最近未用算法(Not Recently Used))

页面分配策略
1.固定分配局部置换:一开始就固定好数目,然后页面置换
2.可变分配全局置换:为系统中每个进程预先分配一定的物理块,系统自身保持一定数目的空间物理块队列。
3.可变分配局部置换:预先分配一定量,系统自身保持,如果缺页频繁,就分配。

3.文件系统

文件分配方式
1.连续分配 要求占连续的内存空间
2.链接分配:分为显示链接和隐式链接 隐式链接对应一个磁盘块的链表,目录里包含文件的第一块和最后一块的指针。显示链接:有一个文件分配表,每个物理块的号码都放在那个文件分配表里。
3.索引分配:把每个文件的所有的盘块号都集中在一起构成索引表。

文件存储空间管理
1.空闲表
2.空闲链表
3.位示图法
4.成组链接法,适合大型文件。把顺序的N个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区内则保存另一个顺序空闲扇区的地址。

磁盘调度
1.先来先服务
2.最短寻找时间优先
3.电梯算法(SCAN扫描算法)
4.循环扫描算法(一个给定方向不变)

4.设备管理

I/O控制方式
1.程序直接控制:CPU一直测试读入了没有
2.中断方式:I/O结束给CPU发中断信号
3.DMA方式:DMA控制器来处理这些东西,一个数据块读好,才会发出中断。
4.通道控制方式:I/O是专门用来负责输入/输出的处理器。从一个数据块扩展为一组数据块。实现CPU、I/O设备、通道的并行。
SPOOLING技术
5.假脱机技术:有一个输入井和输出井,将独占设备改为共享设备,空间换时间。

https://www.jianshu.com/p/77a004f797a6

猜你喜欢

转载自blog.csdn.net/weixin_43202635/article/details/115253553
今日推荐