操作系统高频面试题

1.并发与并行
  • 并行是指两个或多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生;
  • 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件
2.同步、异步、阻塞、非阻塞
  • 同步:当一个同步调用发出后,调用者要一直等待返回结果。通知后,才能进行后续的执行。
  • 异步:当一个异步过程调用发出后,调用者不能立刻得到返回结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
  • 阻塞: 是指调用结果返回前,当前线程会被挂起,即阻塞。
  • 非阻塞: 是指即使调用结果没返回,也不会阻塞当前线程。
3.进程和线程的概念
  • 进程:进程是系统进行资源分配和调度的一个独立单位,是系统中的并发执行的单位
  • 线程:线程是进程的一个实体,也是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,有时线程又被称为轻量级进程。
4.进程和线程的区别
  1. 进程是资源分配的最小单位,而线程是CPU调度的最小单位
  2. 创建进程或撤销进程,系统都要为之分配或回收资源,操作系统开销远大于创建或撤销线程时的开销
  3. 不同进程地址空间相互独立,同一进程内的线程共享同一地址空间。一个进程的线程在另一个进程内是不可见的。
  4. 进程间不会相互影响,而一个线程挂掉可能导致整个进程挂掉
5.为什么有了进程还要有线程?

进程也可以使多个程序并发执行,提高资源的利用率和系统的吞吐量,但进程也带来了一些缺点:

  1. 进程在同一时间只能干一件事
  2. 进程如果在执行过程中阻塞,整个进程就会被挂起,即使进程中有些工作不依赖于等待的资源
    所以操作系统引入了比进程粒度更小的线程,作为并发执行的基本单位,从而减少程序在并发执行时所付出的时间和空间开销。
6.进程的状态转换

进程有三种状态:就绪态、运行态、阻塞态

  1. 就绪 -> 运行:对于就绪状态的进程,当进程调度程序按选定的策略从中选中一个就绪进程,为之分配处理机之后,该进程便由就绪态变为运行态。
  2. 运行 -> 阻塞:正在运行的程序由于某种原因发生等待事件而无法执行,则变为阻塞态。比如:进程提出输入/输出请求,等待外部设备进行信息传输;进程申请资源得不到满足;运行过程中出现故障。
  3. 阻塞 -> 就绪:处于阻塞状态的进程,等待的事件已经发生。比如:完成输入/输出;等待的资源得到满足;错误处理完毕
  4. 执行 -> 就绪:正在执行的进程,因时间片用完而被暂停执行,或在采用抢先试优先级调度算法的系统中,当有更高优先级的进程要运行而被迫让出处理机。
7.进程间的通信方式(IPC InterProcess Communication)

进程通信是指在不同进程之间传播或交换信息

  1. 管道
    • 它是半双工的,具有固定的读端和写端;
    • 它只能用于父子进程或者兄弟进程之间的进程通信;
    • 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。
    • 但它不是普通的文件,它不属于其他任何文件系统,并只存在于内存中
  2. 命名管道
    • FIFO 可以在无关进程之间交换数据,与无名管道不同
    • FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中
  3. 消息队列
    • 消息队列是消息的链接表,存放在内核中,一个消息队列由一个标识符ID来标识;
    • 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级;
    • 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除;
    • 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取
  4. 信号量
    • 信号量是一个计数器。用于实现进程间的互斥与同步,而不是用于存储进程间通信数据;
    • 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存
    • 信号量基于操作系统的PV操作,程序对信号量的操作都是原子操作
    • 每次对信号量的PV操作不仅限于对信号量值加1或减1,而且可以加减任意正整数;
    • 支持信号量组
  5. 共享内存
    • 共享内存,指两个或多个进程共享一个给定的存储区
    • 共享内存是最快的一种IPC,仅为进程是直接对内存进行存取
8.进程的调度算法

常用的调度算法有:先来先服务调度算法、时间片轮转调度算法、短作业优先调度算法、最短剩余时间优先、高响应比优先调度算法、优先级调度算法

  • 先来先服务调度算法:即先来先分配,利于长作业,不利于短作业
  • 时间片轮转调度算法:选择就绪队列中的第一个进程执行,但只能运行一个时间片
  • 短作业优先调度算法:从后备队列中选一个或若干个估计运行时间最短的作业,调入内存运行;非抢占
  • 最短剩余时间优先调度算法:相比于最短作业优先调度算法,该算法增加了抢占机制,只要有一个具有更短剩余时间的进程就绪,就可能抢占正在运行的进程
  • 高响应比优先调度算法:同时考虑每个作业的等待时间和估计的运行时间,计算响应比,从后备作业队列中选出响应比最高的作业投入运行
  • 优先级调度算法:在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程
9.死锁的概念

死锁:是指多个进程在运行过程中因争夺资源而造成的一种僵局,若无外力作用,他们都将无法在向前推进。

10.死锁产生的原因

由于系统中存在一些不可剥夺资源,而当两个或两个以上进程占有自身资源,并请求对方资源时,会导致每个进程都无法向前推进。比如:进程A和进程B互相等待对方的数据

11.死锁产生的必要条件
  1. 互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一进程所占用
  2. 请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放
  3. 不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放
  4. 环路等待条件:在发生死锁时,必然存在一个进程–资源的环形链
12.解决死锁的基本方法

1.预防死锁 2.避免死锁 3.检测死锁 4.解除死锁

13.如何预防死锁
  1. 破坏请求条件一次性分配所有资源,这样就不会有请求了
  2. 破坏请求保持条件:只要有一个资源得不到分配,也不给这个进程分配其他资源
  3. 破坏不可剥夺条件:当某进程获得了部分资源,但得不到其他资源,则释放已占有的资源
  4. 破坏环路等待条件:系统给每类资源赋予一个编号,每个进程按编号递增的顺序请求资源,释放则相反
14.如何避免死锁
  1. 银行家算法:当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。在进程运行过程中要申请新的资源也是如此进行分配。
  2. 安全序列:系统按某种进程推进顺序,为每个进程分配其所需要的的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺序地完成。银行家算法的核心就是寻找一个安全序列
  3. 系统安全状态:如果系统能找到一个安全序列,就称系统处于安全状态,否则就称系统处于不安全状态
15.如何解除死锁
  1. 资源剥夺:挂起某些死锁进程,并抢占它的资源分配给其他进程
  2. 撤销进程:强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源
  3. 进程回退:将一个获多个进程回退到足以避免死锁的地步,回退时进程自愿释放资源而不是强制剥夺
16.物理地址、逻辑地址、虚拟内存的概念
  • 物理地址:它是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取,是内存单元真正的地址
  • 逻辑地址:是指计算机用户看到的地址。是操作系统通过地址映射,将逻辑地址映射成连续的。
  • 虚拟内存:是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存,而实际上,它通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
17.页面置换算法
  • 先进先出置换算法(FIFO)
    先进先出,即淘汰最早调入的页面
  • 最佳置换算法(OPT)
    选未来最远将使用的页淘汰,是一种最优的方案,可以证明缺页数最小
  • 最近最久未使用(LRU)算法
    即选择最近最久未使用的页面予以淘汰
  • 时钟(Clock)置换算法
    时钟置换算法也叫最近未用算法NRU(Not RecentlyUsed)。该算法为每个页面设置一位访问位,将内存中的所有页面都通过链接指针链成一个循环队列。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值