回想大二刚上操作系统课的时候老师讲了进程和线程的知识,当时模棱两可,写下了一篇疏浅的博客(点击打开链接)。现在转眼即将毕业,为了找工作开始系统地复习学过的知识,看了《操作系统真象还原》后,加上这么长时间的知识积累,对线程实现也有了进一步了解。
执行流
操作系统就是一个无限循环,处理器不断取指、执行、取指……就是计算机所做的事情。通过加入中断调用让处理器先执行其他指令再跳转回内核程序执行,来实现各种各样的功能。所谓执行流是处理器执行指令的一段轨迹,也可以说是一段逻辑上独立的指令区域。执行流是独立的,它有自己的栈空间、寄存器映像和内存资源,这就是上下文环境。因此任何大小的代码块都可以独立称为执行流,只要在它在运行的时候提前准备好所需的上下文环境。
在任务调度器的眼中只有执行流才是调度单元,即处理器运行的每个任务都是由调度器分配的执行流。程序中独立的执行流就是进程和线程。而所谓的上下文切换本质上就是改变了处理器中程序计数器的指向,即改变了执行流。
线程
有了前面对执行流的概念理解,线程的理解就容易多了。线程其实是一种机制,它为代码(指令)提供所依赖的上下文环境(寄存器映像、栈等),从而使代码块具有独立性,使之成为调度单元(执行流),从而可以占有处理器资源。引入线程概念后,进程 = 线程 + 资源。对于处理器来说,进程就是执行流集合,里面至少包含一条执行流,执行流之间相互独立,但共用进程的资源,这些执行流就