1 进程基本概念
1.1 多进程模型
多个进程是分时执行的,每个进程的指令流按顺序执行。
多个进程在一个处理器上分时运行,如图:

操作系统需要做的事情是:维护一个全局的进程表,记录下当前有哪些进程正在被执行;把时间分成适当的片段,现代处理器结构可以通过设置时钟中断,每次时钟中断到来时系统就会获得控制权,在进程间实施切换,即保留上一个进程的环境信息,恢复下一个进程的执行环境。
1.2 进程和程序
程序的内存布局结构
一个c/c++ 程序的典型布局结构,如图:
程序内存区域有三种类型:静态数据区,动态数据区,以及维护控制流信息和局部状态的调用栈区域。
静态数据区存放的时全局变量以及静态变量等信息,编写代码时确定。
动态数据区存放程序执行过程中根据需要而分配或回收的区域。
调用栈存放的时程序执行过程中的函数状态信息,函数参数。
2 线程基本概念
2.1 线程模型
现代计算机结构中有两种线程模型:用户级线程(user-level threads)和内核级线程(kernel-level threads)。
用户级线程是指,应用程序在操作系统提供的单个控制流的基础上,通过在某些控制点(比如系统调用)上分离出一些虚拟的控制流,从而模拟多个控制流的行为。
内核级线程往往指操作系统提供的线程语义。因此,系统有必要维护一个全局的线程表,在线程表中记录每个线程的寄存器、状态以及其他一些信息。
2.2 线程调度算法
线程调度算法可以分为非抢占式算法和抢占式算法。
三种典型的线程调度算法:先到先服务算法、时间片轮转调度算法、优先级调度算法。
2.3 线程和进程的关系
如图:
a图:不支持线程语义的系统中,进程提供一个完全的执行环境,同时也有一个控制流完成其预定的功能。
b图:操作系统按进程来分配处理器资源,对线程的支持可以在用户模式下完成。
c图:支持内核级线程的系统中,进程仅提供一个执行环境,它包含一个或多个线程,每个线程代表一个单独的指令流,操作系统按线程分配处理器资源。