内存中的进程:
进程中断时(如时间片到期),保存当前进程状态
运用的是PCB数据结构保存进程上下文:
****进程调度:
1、非抢占式(批处理系统)------------------------>>调度标准是:先来先服务;最短作业优先
2、抢占式(交互系统)----->>调度标准:1、公平(合理分配CPU)2、响应时间短(用户输入到执行完成的时间短)3、吞吐量大(单位时间完成的任务数量多) 这三个标准是互相矛盾的
所以抢占式系统就有以下几种调度策略:
1、轮转(时间片)
2、优先级(动态优先级,等待时间增长,不断提升的优先级)
3、多级队列反馈
<--进程同步-->
生产者和消费者问题(打印机问题)(共享变量不一致的问题):
伪代码如下:
产生问题的核心:
1、调度的不可控 2、counter++,counter--;不是原子操作 ------->>>P.counter!=C.counter;
<--解决线程同步问题-->
临界区:当进程进入临界区的时候不允许其他进程进行操作
实现临界区问题:
1、关闭中断,在进程进入临界区的时候,关闭中断,使得该CPU只执行当前进程。问题:如果多核的情况下要关闭多个中断;并且在进程执行完毕后要重新打开中断,不然系统会崩溃,所以这个关闭中断操作不能交给应用程序权限;所以这只是理论存解决的方案。
2、硬件指令实现锁
3、信号量(DJstra)
注意:<--在实现同步的过程中,没拿到锁的进程不能忙等,要把没有锁的进程放入等待队列中,当有锁空了之后再从队列中取出-->
伪代码如下: