进程

内容整理自《深入理解计算机系统 第三版 第八章》

1 系统中每个程序都运行在某个进程的上下文中,由pid标示;

2 应用程序在进程中包含两个重要的抽象:

    一个独立的逻辑控制流,它提供一个假象,即程序独占cpu

    一个私有的地址空间,它提供一个假象,即程序独占内存系统

3 逻辑控制流

    程序计数器(PC)值的序列称为逻辑控制流。

    逻辑流包括:异常处理程序、进程、信号处理程序、线程等

    并发流:多个流并发执行的现象称为并发;(AB,AC为并发,BC不为并发)

                  并发的概念只与同一个时间段,两个进程是否有交叠有关,如下图AB,AC

                  一个进程和其它进程轮流运行的概念称为多任务或者时间分片;

                  进程

    并行流:两个流并发的运行在不同的处理器核或者机器上,称为并行流。

                 重点在于:不同的cpu或者机器上同时执行的流。

4 私有地址空间

    进程提供每个程序自己私有的地址空间。这个私有地址空间相关联(映射)的内存字节一般是不允许其他进程读写的。

5 上下文切换

    即内核使用一种异常控制流来实现多任务。

    触发条件:A 当内核代表用户执行系统调用时,可能会发生上下文切换,例如系统调用因为等待某个事件发生阻塞,内核可以让当前进程休眠,切换到另外的进程;

                     B sleep的系统调用,显式的请求让调用系统休眠。

                     C 中断,每当发生定时器中断时,内核可以判定当前进程已经运行了足够长的时间,切换到一个新的进程。

    执行动作:A 保存当前进程的上下文(通用目的寄存器、浮点寄存器、PC、用户栈、状态寄存器、内核栈、内核数据结构如私有地址页表等)

                     B 恢复某个先前被抢占的进程的上下文

                     C 将控制传递给这个新恢复的进程

6 进程的状态:运行(占用cpu或者等待调度)、停止(挂起且不会被调度)、终止

7 子进程

    父进程通过调用fork函数创建一个新的运行的子进程;

    子进程得到与父进程用户级虚拟地址空间相同(但是独立)的一份副本,包括代码、数据段、堆、共享库、用户栈;

    子进程获得父进程已经打开的文件描述符的副本,可以读写父进程中打开的任何文件;

    父进程和子进程是并发运行的独立进程