首先第一个问题进程是什么?
先有一个粗暴但熟悉的理解,进程就是一个个正在运行的exe
See,这个就是进程。
我写的程序test.c编译生成的test.exe每一次执行都会创建一个名为test.exe的进程。
一个不太恰当的比喻:
编译生成的exe文件就是菜谱,每次运行创建一个进程都是在按照菜谱去炒菜,每次炒菜都会产生一盘真实的菜(就是进程)。
好,瞎扯结束,毕竟时间紧任务重。让我看看大纲接下来是什么。
主要有几个部分:
进程是什么:
进程的组成(重要的是PCB进城控制块),
进程的特性,
进程的几种状态,
进程和线程&程序的区别
进程控制:
操作系统怎么样控制单个进程(可以创建它、阻塞它、唤醒它,等等)
进程调度:
现在有一大波进程都想被执行,操作系统要怎么决定他们执行的顺序
- 进程之间的并发控制和死锁:
很多进程在一段时间内执行,他们之间要怎么协调。 - 进程的互斥:
进程在执行的时候可能会用到很多资源(比如说打印机啥的),如果很多个进程在某一段时间内都想用同一个资源怎么办 - 进程的同步:
如果进程A在执行的时候需要用到进程B产出的结果,或者在设计上进程A必须要等进程B做完了才能做,那两个进程之间要怎么沟通 - 死锁:
要了解死锁的产生和预防(或者解决)的方法
再来一个不恰当的比喻:
有很多贪得无厌的小朋友坐在一起搭积木,他们之间可以共享积木(但是不能同时拥有,如下丑图)。
在一个小朋友玩够之前它是不会把自己已经获得的积木放到桌子中间的,但是如果它玩够了,它会马上交出自己手中所有的积木放到桌子中间给大家共享并且离开。
死锁的情况就是,这些小朋友把桌子中间的积木都瓜分完了,并且这个时候非常不幸没有一个小朋友玩够交出自己手里的积木,所有都小朋友都在等待获得新的积木,大家都不能继续搭积木,都卡住了。(如第二章丑图)