考虑我们该如何管理CPU?
计算机的原理是取址执行,我们只需要给PC一个值,CPU就可以开始工作了。
50: mov ax, [100]
51: mov bx, [101]
52: add ax, bx
...
100: 0
101: 1
初始另PC等于50,CPU把地址50发给内存,内存把指令发给CPU,PC可以自动增加。该段代码执行完毕,ax为1,bx为1。
所以置PC初值是管理CPU最直观的方法。
考虑地址53开始IO操作(比如说打印),CPU是否要等待IO操作的完成?
; 程序1 ; 程序2
50: mov ax, 1 200: mov ax, 10
51: mov bx, 1 201: mov bx, 10
52: add ax, bx 202: add ax, bx
53: IO...
让CPU更高效的方式是让CPU走完52后,我们修改PC为200,此时CPU与打印机并行,程序1的IO操作完成后发起中断,CPU继续回到程序1执行。
让CPU执行程序,CPU就工作起来了;让CPU并发的执行程序,CPU就很好的工作起来了。
并发:多道程序,同时出发,交替执行。
我们如何控制并发?只是修改PC就可以了么?
考虑程序1执行52后寄存器的状况:ax为2,bx为1;程序2执行202后寄存器的状况:ax为20,bx为10。
假设CPU执行202后跳转回程序1,此时ax为20,bx为10。
我们需要在从程序1切出去的时候记录程序1的信息,包括ax=2,bx=1,PC=53,每一个运行中的程序都需要这么一个存放信息的结构称为进程控制块(PCB)。
运行的程序和静态的程序是不一样的。程序 + PCB -> 进程。