进程
内容整理自《深入理解计算机系统 第三版 第八章》
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函数创建一个新的运行的子进程;
子进程得到与父进程用户级虚拟地址空间相同(但是独立)的一份副本,包括代码、数据段、堆、共享库、用户栈;
子进程获得父进程已经打开的文件描述符的副本,可以读写父进程中打开的任何文件;
父进程和子进程是并发运行的独立进程