操作系统面试总结—进程线程

最近在准备春招,复习到操作系统相关的知识,像面试中经常会问到的进程与线程的区别,进程间的通信,进程调度等可以看看  希望这篇博客会对你有帮助


进程的三种状态

  • 阻塞态:等待某个事件的完成

  • 就绪态:等待系统分配处理器以便运行

  • 运行态:占有处理器正在运行




用户态和核心态之间的区别是什么呢?

  • 用户态的进程能存取它们自己的指令和数据,但不能存取内核指令和数据(或其他进程的指令和数据)

  • 核心态下的进程能够存取内核和用户地址某些机器指令是特权指令,在用户态下执行特权指令会引起错误。在系统中内核并不是作为一个与用户进程平行的估计的进程的集合

进程与线程的区别

我们从调度,并发性,系统开销,拥有资源等方面来比较线程与进程

1.调度

   在引入线程的操作系统中,则把线程作为调度和分派的基本单位,而把进程作为资源拥有的基本单位,在同一个 进程中,线程的切换不会引起进程的切换,在由一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换

 2.并发性

  在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,奕可并发执行,因而使操作系统具有更好的并发性,从而能够有效的使用系统资源和提高系统吞吐量

3.拥有资源

  进程是拥有资源的一个独立单位。一般地说,线程自己不拥有系统资源(一个线程必不可少的资源:线程标识符,程序计数器,一组寄存器的值,和堆栈),但是它可以访问其隶属于进程的资源:代码段,数据段,以打开的文件,I/O设备等

4.系统开销 

 由于在创建或撤销进程时,系统都要为之分配或回收资源,如内存空间,i/o设备等。在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调用运行的进程的CPU环境的设置。而线程切换只需保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易


进程间通信

  管道:管道是单向的,先进先出的,无结构的,固定大小的字节流,它把一个进程的标准输出和另一个进程的  标准输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的头端读取数据。数据读出后将从管道中移走,其他读进程都不能在读到这些数据。管道提供了简单的流程控制机制。进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样的,管道已经满时,进程在试图协管道,在其他进程从管道中移走数据之前,写进程 将一直阻塞

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

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

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

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

  套接字:套接字也是一种进程间通信机制,与其他通信机制不同的是,它可以用于不同机器间的进程通信


进程调度

调度种类

  • 高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行

  • 低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU

  • 中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换

非抢占式调度与抢占式调度

     非抢占式:分派程序一旦把处理机分配给某个进程后便让它一直运行下去,直到进程完成或发生进程调度,进程调度某件事而阻塞时,才能把处理机分配给另一个进程

     抢占式:操作系统将正在运行的进程强行暂停,由调度程序将CPU分配给其它就绪进程的调度方式


调度策略的设计

      响应时间:从用户输入到产生反应的时间

      周转时间:从任务开始到任务的结束时间

CPU任务可以分为交互式任务和批处理任务调度最终的目标是合理的使用CPU,使得交互式任务的响应时间尽可能短,用户不至于感到延迟,同时使得批处理任务的周转时间尽可能的短,减少用户等待的时间


调度算法

FIFO或First Come,First Served(FCFS):先来先服务算法

   调度的顺序就是任务到达就绪队列的顺序

   公平,简单(FIFO队列),非抢占式,不适合交互式

   未考虑任务特性,平均等待时间可以缩短

Shortest Job First(SJF):最短作业优先算法

    最短作业(CPU区间长度最小)最先调度  非抢占式

    SJF可以保证最小的平均等待时间

Shortest Remaining Job First (SRJF) 最短剩余时间优先 

   SJF的可抢占版本,比SJF更有优势

   SJF(SRJF): 如何知道下一CPU区间大小?根据历史进行预测: 指数平均法

   注意:有关运行时间必须提前掌握

 优先级调度

  每个任务关联一个优先权,调度优先权最高的任务

  注意:优先权太低的任务一直就绪,得不到运行,出现“饥饿”现象,所以偶尔要对优先级进行调整

Round-Robin (RR) 轮转调度算法

  设置一个时间片,按时间片来轮转调度

  优点: 定时有响应,等待时间较短;缺点: 上下文切换次数较多

  时间片太大,响应时间太长;吞吐量变小,周转时间变长;当时间片过长时,退化为FCFS

多级队列调度

     按照一定的规则建立多个进程队列

    不同的队列有固定的优先级(高优先级有抢占权)

    不同的队列可以给不同的时间片和采用不同的调度方法

    存在问题1:没法区分I/O bound和CPU bound

    存在问题2:也存在一定程度的“饥饿”现象

多级反馈队列

   在多级队列的基础上,任务可以在队列之间移动,更细致的区分任务

   可以根据“享用”CPU时间多少来移动队列,阻止“饥饿”

   最通用的调度算法

多级反馈队列调度算法描述:


  • 进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。

  • 首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。

  • 对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。

  • 在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)



  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值