进程
经典定义: 一个执行中的程序的实例 / 一个执行中的程序
当一个可执行文件被装入内存时,一个程序才能成为进程
系统由一组进程组成:
- 操作系统进程执行系统代码
- 用户进程执行用户代码
通过cpu多路复用,所有这些进程可以并发的执行。
csapp里的描述不够清晰,明天参考恐龙书重写本篇
系统中的每个程序都是运行在某个进程的上下文中的,上下文是由程序正确运行时所需的状态组成的,每次用户执行一个程序时,系统就会创建一个新的进程,然后在这个新进程的上下文中运行这个可执行目标文件。
进程提供给应用程序关键抽象:
- 一个独立的逻辑控制流
- 一个私有的地址空间
程序计数器(PC,值唯一的对应程序的指令)值的序列叫做逻辑控制流,如下图是一个运行着三个进程的系统,处理器的一个物理控制流分成了三个逻辑流,每个进程一个,每个竖线代表一个进程的逻辑流的一部分,在这个例子中,三个逻辑流的执行是交错的,轮流使用处理器,每个进程执行它的一部分,然后被抢占(preempted)(暂时挂起),然后轮到其他进程,对于一个运行在这些进程之一的上下文中的程序,它看上去就像是在独占地使用处理器,
一个逻辑流的执行和在时间上与另一个流重叠,称为并发流,这两个流称为并发的运行
- 并发:多个流并发地执行的一般现象称为并发
- 多任务:一个进程和其他进程轮流运行称为多任务
- 并行流:如果两个流并发地运行在不同的处理器核或计算机上,则称它们为并行流,并行流是并发流的真子集
并发的思想和流运行的处理器核数或者计算机数无关,如果两个流在时间上重叠,那么它们就是并发的。即使它们是运行在同一个处理器上的。
私有地址空间
一个进程为每个程序提供它自己的私有地址空间,一般而言,和这个空间中某个地址相关联的那个存储字节是不能被其他进程读或者写的,从这个意义上说,这个地址空间是私有的。
用户模式和内核模式
为了使操作系统内核提供一个完美的进程抽象,处理器必须提供一种机制,限制一个应用可以执行的指令以及它可以访问的地址空间范围。
处理器通常用某个控制寄存器中的一个模式位来提供这种功能,该寄存器描述了当前享有的特权,当设置了模式位时,进程就运行在内核模式中(也叫超级用户模式),一个运行在内核模式中的进程可以执行指令集中的任何指令,并且可以访问系统中任何存储器位置。
没有设置模式位时,进程就运行在用户模式中,用户模式中的进程不允许执行特权指令。
参考资料:《CSAPP》第8章 8.2