1. CPU工作原理
CPU上电后 发生了什么?自动取指执行
将一个程序加载到内存中,设置PC指针,指向一个地址(比如 PC = 50),
CPU 根据PC的位置 发出取指指令
把50放到 地址总线上,内存通过总线 将50上的命令 传递给 CPU
CPU解释执行该指令,该命令是 将 100位置上的值 0 赋值给 ax
CPU 怎么工作?不断的取指执行。自动取指执行,PC自动累加
2.管理CPU的最直观方法
设置完PC初值就完事!
比如上边的程序,最开始 设置 PC=50,执行完一句代码,PC自动累加,CPU不断取指执行
这样做存在的问题:遇到 I/O 操作,会特别慢
举例:1+…+n,打印每次累加的结果
int main(int argc, char* argv[])
{
int i, to, *fp, sum = 0;
to = atoi(argv[1]);
for(int i = 1; i <= to; i++)
{
sum = sum + i;
fprintf(fp, "%d", sum); // fprintf是一条 I/O 指令
}
}
上边的代码,执行次数越多,每次循环耗时越长,
执行 10^7次 的每次耗时:执行 10^3 的每次耗时 = 10^6
I/O 操作越多,CPU越慢,怎样提高CPU利用率?
多程序交替执行:执行一个程序,当CPU推进不下去的时候,切到另一个程序执行。
3. 单道程序 与 多道程序 对比
单道程序 执行:A先执行,40 执行完,再执行B,80 执行完
多道程序 执行:交替执行,在45执行完
B启动 设备1,比如是一个打印机,B耗时,A开始执行,
A执行到 10,A要用设备1,CPU开始执行B
当A执行完Dev1,到了15,需要CPU,此时 B在使用CPU,A等待
4.并发
并发:同时触发
怎么做到 一个CPU上 交替执行多个程序?适当的时候 切换PC
两个程序都用到了 ax,bx
执行程序1,当PC = 52时,不再执行 程序1,切换到程序2,PC=200
当 PC = 202时,不再执行程序2,切回到程序1,PC = 53
除了要切PC,还有切回到 程序1 的 ax,bx 寄存器的值
如何才能切回来?
静态程序(未执行的程序)不需要记录 状态信息
执行的程序,切出去时,要记录 程序当前的信息。再次切回来时,要 还原之前的信息。
5.进程
进程:进行(执行)中的程序
进程与程序的区别:
- 进程有开始,有结束;程序没有
- 进程会走走停停;程序没有,走停对程序无意义
- 进程需要记录 ax,bx……;程序不用