Operating System – Chapter 3
Process
Process Concept
进程是执行中的程序,不只是进程代码 (文本段、代码段),还包括当前活动,通过程序计数器 (Process Counter)的值和处理器寄存器的内容来表示。另外,进程通常还包括进程堆栈段 (包括临时数据,如函数参数、返回地址和局部变量)和数据段 (包括全局变量)。进程还可能包括堆 (heap),是在进程运行期间动态分配的内存。
Process State
- new
- running
- waiting
- ready
- terminated
Process Control Block(PCB)
- 进程状态:进程状态可包括new,ready,running,waiting,terminated
- 程序计数器:计数器表示进程要执行的下个指令的地址
- CPU寄存器:根据计算机体系结构的不同,寄存器的数量和类型也不同。它们包括累加器、索引寄存器、堆栈指针、通用寄存器和其他条件码信息寄存器。
- CPU调度信息:包括进程优先级、调度队列的指针和其他调度参数
- 内存管理信息:根据操作系统所使用的内存系统,包括基址和界限寄存器的值,页表和段表
- 记账信息:包括CPU使用时间、实际使用时间、时间界限、记账数据、作业或者进程数量等
- I/O状态信息:包括分配给进程的I/O设备列表、打开的文件列表等
Process Scheduling
Scheduling Queues
进程进入系统时,会被加载到作业队列中,该队列包括系统中的所有进程。
Schedulers
进程的选择是由相应的调度程序来执行的。
对于批处理系统,进程选择更多地是被提交,而不是马上执行。这些进程被放到大容量储存设备的缓冲池中。长期调度程序 (long-term scheduler)或者作业调度程序 (job scheduler)从该池中选择进程,并装入内存以准备执行。短期调度程序 (short-term scheduler)或者CPU调度程序从准备执行的进程中选择进程,并为之分配CPU。
有的操作系统比如分时系统,可能引入另外的中期调度程序 (medium-term scheduler)。中期调度程序的核心思想是能讲进程从内存或者CPU竞争中移除,从而降低多道程序设计的程度。之后,进程能被重新调入内存,并从中断中继续执行。这种方案成为交换 (swapping)。
Context Switch
进程的上下文用PCB表示,它包括CPU寄存器的值、进程状态、和内存管理信息等。通常,通过执行一个状态保存来保存CPU当前状态,之后执行一个状态恢复重新开始运行。
Operations on Processes
Creation
创建进程称为父进程,新进程称为子进程。大多数操作系统根据一个唯一的进程标识符 (Process Identifier,pid)来标识进程。
通常,进程需要一定的资源(如CPU时间、内存、文件、I/O设备)来完成其任务。一个进程创建子进程时子进程从可能从操作系统那里直接获得资源,也可能只从父进程那里获得资源。
当创建新进程时,有两种可能:
- 父进程与子进程并发执行
- 父进程等待,直到某个或者全部子进程执行完
新进程的地址空间也有两种可能:
- 子进程是父进程的复制品
- 子进程装入另一个新程序
在UNIX中,新进程通过复制原来进程的地址空间而成。这种机制允许父进程与子进程方便地进行通信。两个进程都继续执行fork()之后的指令。但是,子进程fork的返回值为0,父进程返回值为子进程的进程标识符pid(非零)。
Interprocess Communication
协作进程需要一种进程间通信机制 (Interprocess Communication,IPC)来允许进程相互交换数据与信息。
进程间通信有两种基本模式:
- 共享内存
- 消息传递
Shared-Memory Systems
采用共享内存的进程间通信需要通信进程建立共享内存区域。通常,一块共享内存区域驻留在生成共享内存段进程的地址空间,其他希望使用这个共享内存段进行通信的进程必须将此放到他们自己的地址空间上。
生产者-消费者问题
Message-Passing Systems
消息传递机制提供一种机制以允许进程不必通过共享地址空间来实现通信和同步,在分布式环境中特别有用。
信息传递工具提供至少两种操作:发送和接收。
如下是一些逻辑实现线路和send()/receive()操作的方法:
- 直接或间接通信
- 同步或异步通信
- 自动或显式缓冲
1. 命名
···
2. 同步
···