进程与线程
进程
进程是资源分配的基本单位.
- 进程控制块PCB: 描述了进程的基本信息和运行状态, 所谓的创建进程和撤销进程都是指对PCB的操作
线程
线程是独立调度的基本单位.
一个进程中可以有多个线程, 它们共享进程资源.
线程与进程的区别
- 一个进程至少有一个线程
- 在同一个进程中,线程的切换不会引起进程的切换,从一个进程中的线程切换到另一个进程中的线程,会引起进程切换.
- 创建和销毁进程的开销远大于创建或销毁线程时的开销.
- 线程间的通信可以通过直接读写统一进程中的数据进行通信, 但是进程间的通信需要借助IPC.
进程状态的转换
- 就绪
- 运行
- 阻塞
进程调度算法
批处理系统
批处理系统没有太多的用户操作, 在该系统中, 调度算法的目标是保证吞吐量和周转时间.
- 先来先服务(FCFS)
- 短作业优先(SJF)
- 最短剩余时间优先(SRTN)
交互式系统
交互式系统有大量的用户交互操作, 在该系统中调度算法的目的是快速地响应
- 时间片轮转
- 优先级调度
- 多级反馈队列
实时系统
实时系统要求一个请求在一个确定的时间内得到响应
- 硬实时: 满足绝对的截止时间
- 软实时: 可以容忍一定的超时
进程同步
临界区
对临界资源访问的那段代码成为临界区
同步和互斥
- 同步: 多个进程按照一定的顺序执行
- 互斥: 多个进程在统一时刻只有一个进程能够进入临界区
信号量
信号量(Semaphore)是一个整形变量, 是常见的PV操作
进程通信
管道
管道是通过调用pipe函数创建的, fd[0]用于读, fd[1]用于写.
支持半双工, 只能在父子进程中使用
FIFO命名管道
常用于客户-服务器应用程序, 在二者的进程中传递数据.
消息队列
相比于FIFO, 有一下优点:
- 消息队列可以独立与读写进程存在, 从而避免了FIFO中同步管道的打开和关闭时可能产生的困难.
- 避免了FIFO同步阻塞问题, 不需要进程自己提供同步方法
- 读进程可以根据消息类型有选择接受, 而不像FIFO那样只能默认接收
信号量
计数器, 用于为多个进程提供对共享对象的访问服务.
共享存储
云溪多个进程共享一个给定的存储区
需要使用信号量来同步对共享存储的访问
套接字
用于不同机器间的进程通信