并发控制原理(一)
多任务的操作系统在单一CPU上运行时,通过快速切换造成并发的假象。
早期多任务操作系统只在用户态可以抢占,即进程运行在内核态时不可能被切换到别的进程。
(大迷惑,只是不会被抢占,为什么不会被切换到别的进程?有没有懂哥告诉我?)
(可能的解答:内核线程运行到一半是不会被优先级更高的其他线程取代的)
(迷惑之二,到底什么是进程的内核态?是内核的进程,还是用户进程调用系统调用?)
但是,操作系统仍然需要关心:
- 阻塞操作
- 中断
-
阻塞操作
进程在等待某些资源的时候,会进入阻塞状态。这个时候,或许需要给某些资源加锁,避免其他进程对其造成破坏。 -
中断
虽然内核态不可被抢占,但是,它仍然会被外部设备的中断打断。
若内核此时正在操作某一个数据结构,而中断也要操作某一个数据结构,则会导致数据状态不一致。
内核解决这个问题的方法时,在处理这些数据结构的时候屏蔽中断。
注意,中断屏蔽时间不可过长,否则会降低用户体验。
且,中断被屏蔽时,进程不会主动放弃CPU进入阻塞状态。
即操作系统解决这两个问题,一个方法是加锁,另一个方法是屏蔽中断。
很多多任务操作系统可以在内核态被抢占。优点是更快的反应速度,缺点是同