标签:
管理CPU ,先要使用CPU…
CPU 的工作原理
CPU上电以后发生了什么? 自动的取指 — 执行
设好PC 初值就完事!
现在变成了这个样子
单道程序 |
多道程序 |
|
CPU 利用率 |
40/80=50% |
40/45=89% |
DEV1 利用率 |
15/80=18.75% |
15/45=33% |
DEV2 利用率 |
25/80=31.25% |
25/45=56% |
一个CPU 上交替的执行多个程序: 并发
怎么做到?
运行的程序和静态程序不一样了…
运行的程序和静态程序不一样!
进程是进行(执行)中的程序
如何使用CPU 呢?
如何充分利用CPU 呢?
启动了的程序就是进程,所以 是多个进程推进
main 中的fork() 创建了第1 个进程
if(!fork()){init();}
shell再启动其他进程
int main(int argc, char * argv[])
{ while(1) { scanf("%s", cmd);
if(!fork()) {exec(cmd);} wait(); } }
一命令启动一个进程,返回shell 再启动其他进程…
有一个进程在执行
有一些进程等待执行
有一些进程再等待某事件
运行 → 等待; 运行 → 就绪; 就绪 → 运行……
启动磁盘读写;
pCur.state = ‘W‘;
将pCur 放到DiskWaitQueue;
schedule();
schedule()
{
pNew = getNext(ReadyQueue);
switch_to(pCur,pNew);
}
就是进程调度,一个很深刻的话题
FIFO?
FIFO 显然是公平的策略
FIFO 显然没有考虑进程执行的任务的区别
Priority?
优先级该怎么设定? 可能会使某些进程饥饿
switch_to(pCur,pNew) {
pCur.ax = CPU.ax;
pCur.bx = CPU.bx;
...
pCur.cs = CPU.cs;
pCur.retpc = CPU.pc;
CPU.ax = pNew.ax;
CPU.bx = pNew.bx;
...
CPU.cs = pNew.cs;
CPU.retpc = pNew.pc; }
多个进程同时在存在于内存会出现下面的问题
解决的办法:限制对地址100 的读写
多进程的地址空间分离: 内存管理的主要内容
为什么说进程管理连带内存管理形成多进程图像?
想一想打印工作过程
写counter 时阻断其他进程访问counter
如何形成多进程图像?
[No000038]操作系统Operating Systems -CPU
标签:
原文地址:http://www.cnblogs.com/Chary/p/No000038.html