操作系统面试题

进程和线程,协程的区别

  1. 进程是操作系统资源分配的最小单位,线程是 CPU 调度和分派的基本单位
  2. 一个进程中可以有多个线程,至少有一个线程
  3. 线程必须依赖于进程存在
  4. 一个线程可以拥有多个协程。协程与线程主要区别是它将不再被内核调度,而是交给了程序自己而线程是将自己交给内核调度。
  5. 线程是抢占式的调度,而协程是协同式的调度

进程的状态

在这里插入图片描述

僵尸进程

僵尸进程实际上是一个已经死掉但并未释放 PCB 的进程。
产生原因:子进程先于父进程退出后,子进程的 PCB 需要其父进程释放,但是父进程并没有释放子进程的 PCB(进程管理块,里面存放着进程的各种属性信息,每个进程都拥有自己的PCB,它是进程存在的唯一标识)。

孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。
僵尸进程不同的是,由于父进程已经死亡,系统会帮助父进程回收处理孤儿进程。所以孤儿进程实际上是不占用资源的,因为它终究是被系统回收了。不会像僵尸进程那样占用 ID,损害运行系统。

进程调度算法

  • 先来先服务(FCFS)
  • 短作业优先(SJF)
  • 最短剩余时间优先
  • 时间片轮转(RR)
  • 优先级调度
  • 多级反馈队列

Java 线程的调度方式

基于优先级的时间片轮转抢占式调度。

进程间通信方式IPC

  1. 管道:管道是单向的、先进先出的、无结构的、固定大小的字节流。
    无名管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(通常是指父子进程关系)的进程间使用。
    命名管道:命名管道也是半双工的通信方式,它允许无亲缘关系进程间的通信。
  2. 信号量:信号量是一个计数器。它常作为一种锁机制
  3. 消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  4. 信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
  5. 共享内存:共享内存就是映射一段能被其它进程所访问的内存。共享内存是最快的IPC方式。
  6. 套接字:与其它通信机制不同的是,它可用于不同机器间的进程通信。

线程间通信方式

共享内存和消息传递。

  1. volatile和synchronized关键字
  2. wait/notify 方法
  3. join()方法
  4. threadLocal(线程本地变量)

用户态和核心态

用户态和内核态是操作系统的两种运行状态。

  • 内核态:处于内核态的 CPU 可以访问任意的数据,包括外围设备,比如网卡、硬盘等,处于内核态的 CPU 可以从一个程序切换到另外一个程序,并且占用 CPU 不会发生抢占情况,一般处于特权级 0 的状态我们称之为内核态。
  • 用户态:处于用户态的 CPU 只能受限的访问内存,并且不允许访问外围设备,用户态下的 CPU 不允许独占,也就是说 CPU 能够被其他程序获取。

一般用户态 -> 内核态的转换我们都称之为 trap 进内核,也被称之为 陷阱指令(trap instruction)。

操作系统内存管理方式

内存管理可以简单的分为连续分配管理方式和非连续分配管理方式
连续分配管理方式:块式管理

  1. 页式内存管理:不存在外部碎片,只在每个进程的最后一个页中存在内部碎片
  2. 段式内存管理:按照逻辑关系分
  3. 段页式内存管理:,先把程序按逻辑意义分成段,然后每个段分成固定大小的页

页面置换算法

  1. 最优算法在当前页面中置换最后要访问的页面。
  2. FIFO,先进先出置换算法
  3. LRU(最近最久未使用页面置换算法)
  4. LFU(最少使用页面置换算法)
  5. CLOCK 时钟置换算法(是对 FIFO 的一个修改,它会在删除页面之前检查这个页面是否仍在使用。)

产生死锁的条件以及如何解决

  • 互斥:进程对所需求的资源具有排他性,若有其他进程请求该资源,请求进程只能等待。
  • 不剥夺条件:进程在所获得的资源未释放前,不能被其他进程强行夺走,只能自己释放。
  • 请求和保持条件:进程当前所拥有的资源在进程请求其他新资源时,由该进程继续占有。
  • 循环等待:死锁发生时,系统中一定有两个或者两个以上的进程组成一个循环,循环中的每个进程都在等待下一个进程释放的资源。

如何解决:
预防死锁
避免死锁
检测死锁
解除死锁

  1. 破坏请求和保持条件:让所有的进程开始执行前请求全部的资源。还有一种方式是进程在请求其他资源时,先释放所占用的资源,然后再尝试一次获取全部的资源。
  2. 破坏不剥夺条件:方法一:如果去抢资源,被拒绝,就释放自己的资源。方法二:操作系统允许抢,只要你优先级大,可以抢到。
  3. 破坏循环等待条件:制定一个标准,一个进程在任何时候只能使用一种资源。将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值