写在后面
这篇文章是参考了 CyC2018 大大的总结这篇文章,联合面试中常问的问题提取了局部,相当于是我本人的笔记吧,不便之后查看。
过程和线程
1. 什么是过程?
过程是零碎进行资源分配和调度的根本单位。过程管制块 (Process Control Block, PCB) 形容过程的根本信息和运行状态,所谓的创立过程和撤销过程,都是指对 PCB 的操作。
2. 什么是线程?
线程是系统调度和分派的根本单位。
3. 两者的区别
- 领有资源
过程是资源分配的根本单位,然而线程不领有资源,同一过程中的线程共享过程中的资源。 - 调度
线程是独立调度的根本单位,在同一过程中,线程的切换不会引起过程切换,从一个过程中的线程切换到另一个过程中的线程时,会引起过程切换。 - 零碎开销
过程的开销大:
1. 当创立或撤销过程时,零碎都要为之调配或回收资源;
2. 当切换过程时,要保留以后执行过程 CPU 环境的保留及新调度过程 CPU 环境的设置。
线程的开销小:
只需保留和设置大量寄存器内容。 - 通信
线程间能够通过间接读写同一过程中的数据进行通信,然而过程通信须要借助 IPC。
过程的状态
-
流动就绪 -> 执行:
- 运行的过程的工夫片用完,调度就转到就绪队列中抉择适合的过程调配 CPU。
-
执行 -> 流动就绪:
- 次要是过程占用 CPU 的工夫过长,而零碎调配给该过程占用 CPU 的工夫是无限的。
- 在采纳领先式优先级调度算法的零碎中,当有更高优先级的过程要运行时,该过程就被迫让出 CPU,该过程便由执行状态转变为就绪状态。
-
执行 -> 流动阻塞:
- 正在执行的过程因产生某期待事件而无奈执行,则过程由执行状态变为阻塞状态,如产生了 I / O 申请。
-
引起挂起状态:
- 终端用户的申请。当终端用户在本人的程序运行期间发现有可疑问题时,心愿临时使本人的程序静止下来。亦即,使正在执行的过程暂停执行;若此时用户过程正处于就绪状态而未执行,则该过程暂不承受调度,以便用户钻研其执行状况或对程序进行批改。咱们把这种静止状态称为挂起状态。
- 父过程申请。有时父过程心愿挂起本人的某个子过程,以便考查和批改该子过程,或者协调各子过程间的流动。
- 负荷调节的须要。当实时零碎中的工作负荷较重,已可能影响到对实时工作的管制时,可由零碎把一些不重要的过程挂起,以保证系统能失常运行。
- 操作系统的须要。操作系统有时心愿挂起某些过程,以便查看运行中的资源应用状况或进行记账。
过程调度算法
-
批处理零碎
- 先来先服务 first-come first-serverd(FCFS)
- 短作业优先 shortest job first(SJF)
- 最短剩余时间优先 shortest remaining time next(SRTN)
-
交互式零碎
- 工夫片轮转
- 优先级调度
- 多级反馈队列
-
实时零碎
- 软实时:必须满足相对的截止工夫
- 硬实时:能够容忍肯定的超时
进程同步
-
临界区
- 对临界资源进行拜访的那段代码称为临界区。
- 为了互斥拜访临界资源,每个过程在进入临界区之前,须要先进行查看。
-
同步和互斥
- 同步:多个过程因为单干产生的间接制约关系,使得过程有肯定的先后执行关系。
- 互斥:多个过程在同一时刻只有一个过程能进入临界区。
-
信号量
- PV 操作
- 应用信号量解决生产者 - 消费者问题
- 管程
过程间通信
-
管道
- 管道是通过调用 pipe 函数创立的,fd[0] 用于读,fd[1] 用于写。
- 只反对半双工通信
- 只能在父子过程或者兄弟过程中应用
-
FIFO
- 也称为命名管道,去除了管道只能在父子过程中应用的限度。
- 罕用于客户 - 服务器应用程序中,FIFO 用作汇聚点,在客户过程和服务器过程之间传递数据。
-
音讯队列
- 音讯队列能够独立于读写过程存在,从而防止了 FIFO 中同步管道的关上和敞开时可能产生的艰难。
- 防止了 FIFO 的同步阻塞问题,不须要过程本人提供同步办法。
- 读过程能够依据音讯类型有选择地接管音讯,而不像 FIFO 那样只能默认地接管。
-
共享存储
- 容许多个过程共享一个给定的存储区。因为数据不须要在过程之间复制,所以这是最快的一种 IPC。
- 须要应用信号量用来同步对共享存储的拜访。
- 多个过程能够将同一个文件映射到它们的地址空间从而实现共享内存。
-
套接字
- 可用于不同机器间的过程通信。