操作系统概念-----多进程管理

129 阅读2分钟

操作系统的核心就是多进程管理

单个CPU如果顺序执行程序,效果如图. 读磁盘是一个很消耗时间的操作 在这里插入图片描述 但是读磁盘并不是一个需要cpu的操作,所以cpu在读磁盘的时候去如果去执行程序B的话,cpu利用率就会增加 在这里插入图片描述 那么问题来了,当从程序A切换到B再切换回去的时候,如何知道已经执行到哪里了呢? 这时候就需要有一个数据结构来存储 cpu切换之前的状态 叫做 PCB.

PCB

PCB用来描述一个进程.一个操作系统中,运行着多个PCB,操作系统是如何管理的 在这里插入图片描述

进程的状态

操作系统根据进程的状态将进程分类 在这里插入图片描述 当一个进程需要处理IO事件的时候,操作系统就把该PCB放到 阻塞队列中,等IO读取完毕后操作系统再将 PCB 放回 就绪队列.

多进程如何调度

当一个线程需要读写磁盘的时候,操作系统会将该线程状态设置为 wait 然后放入等待队列中. 然后调用调度器 调度器 通过算法获得下一个需要执行的PCB 把当前的PCB和下一个PCB进行交换 在这里插入图片描述

多进程如何切换

上面说了操作系统如何选出下一个将要被CPU调度的进程,那么接下来看进程是如何切换的.

swich(pCur,newCur){
	pCur.ax = CPU.ax;
	pCur.bx = CPU.bx;
	...
	pCur.cs = CPU.cs;

	CPU.ax = newCur.ax;
	CPU.bx = newCur.bx;
	....
	CPU.cs = newCur.cs;
}

很简单,就是把新的进程的PCB给CPU就可以自动执行了

多进程的影响

多个进程在执行的时候, 同时都被放在了内存中. 那么进程A可能就会操作到进程B里面的数据.

线程1
------------------
mov ax, 10010b
mov [100], ax
-------------------
线程2
-------------------
100: 10023
-------------------

这样直接就会把内存100的数据改掉,而这内存100本了是线程2所使用的. 操作系统使用 内存映射表 来解决这个问题 在这里插入图片描述