进程是如何实现的
本文是《操作系统:以程序员的角度》第四章第五篇,从本章开始将开启第一个重要的主题:进程,彻底理解进程对程序员来说是极为重要的,本章就从程序员的角度来讲解到底什么是进程、操作系统是如何实现进程的。本文承接上篇《进程退出:占用的内存都去哪儿了?》,以下为本篇目录:
- 如何描述一辆在高速上运行的车
- 如何描述进程
- 进程如何用代码表示
- 篮球比赛是如何暂停与恢复的
- 进程的上下文是什么
- 进程切换:Context Switch
- 总结
我们可以自己先想一想进程实现这个问题,如果让你在操作系统中实现进程,你该怎么用代码来实现?
如何描述一辆在高速上运行的车
如果你对进程实现这个问题一时不知道该从哪里着手,不妨先想一想什么是进程?那么什么才是进程呢,这个问题我们在本章的开始已经讲解了,程序运行起来的样子就是进程。程序是静态的而进程是动态的,这就好比汽车是程序,汽车在高速上跑起来就是进程,那么你该怎样描述汽车在高速上运行呢?想一想这个问题。
显然,我们可以通过各种属性来描述一辆在高速上运行的汽车:车子当前的时速(这是最明显的)、车子当前所在的地理位置(在哪条高速上)、车子当前还有多少汽油(还可以跑多少公里)等等,对于每一辆在高速上跑起来的车你都可以用这些属性来列一个单子,如图所示:

同样的道理,如果让你描述一个在内存中运行的程序,也就是进程,你该怎么描述呢?
如何描述进程
接下来让我们思考一下该怎样描述进程?进程的一个最明显的属性就是有各种状态,就像在《进程是如何运行的》”一节中讲解的那样,进程有运行、就绪和阻塞几种状态。
CPU通过执行机器指令才能使得进程运行起来,因此进程运行过程中使用的各种CPU寄存器是一种进程的属性。CPU在进程切换的过程中需要将被暂停进程寄存器的值保存起来,以再次调度该进程时可以根据这些信息恢复进程的运行,比如用来记录进程运行到了哪里的程序计数器,该寄存器中保存CPU将要执行的下一条机器指令的内存地址。





