买了本《现代操作系统》,前面的介绍部分直接略过,在回家的路上直接从进程开始看。对并发、多道程序设计有了初步的了解,在此将心得稍微写一下。
1、什么是进程?
进程是正在运行程序的一个实例,可以把他比作计算机正在做的某一件事情。
2、什么是并发?
在单核CPU中,实现真正的并发是不可能的,因为在一个时间片里,CPU只能运行一个进程。就好比,你不可能同时做饭,同时看书。那么所谓的并发是什么呢?能实现“并发”是因为CPU的运转速度是非常快的,所以进程间来回切换速度是异常迅速的,速度快到人感觉他们是同时运行的,并没有切换。当然,对于多核CPU来说,并发就不是一回事情了,但是每一个核每次还是只能运行一个进程。
3、进程和程序有什么不同?
进程和程序的区别很微妙。进程包含了输入数据,程序和输出数据,可以说进程和程序是一个真包含的关系。程序是告诉一个进程该怎么运行的一个逻辑描述,进程则是实现输入数据在程序中的执行后的输出,这样一整个过程。书中的比喻是做蛋糕:程序相当于是食谱,输入数据就是做蛋糕的原材料,CPU是做蛋糕的人,进程就是实现做蛋糕这一整件事情的动作总和。
4、什么是前台进程和后台进程?
与人类进行交互的进程称为前台进程(办公软件、游戏),停留在后台处理如电邮、WEB页面、新闻、打印的进程称为后台进程,也称作守护进程。
5、进程的状态有哪几种?
运行态——进程实际占用着CPU;
就绪态——准备运行的进程,但是因为其他进程占用着CPU,所以暂时被挂起;
阻塞态——除非某种外部事件发生,否则不能运行(比如需要输入数据才能运行的进程);
6、进程之间的切换是怎么控制的?
有一个叫做进程调度程序的程序(-__-),他是操作系统的一部分,如果系统认为一个进程占用CPU的时间过长,那么他会选择让另一个进程开始运行。进程调度程序的调度标准主要从整体效率和竞争公平性中去权衡。进程调度程序的层次结构在普通进程之下。
7、进程是用什么数据结构实现的?
操作系统中有维护着一张表格(书上说的是:结构数组。估计就是个指针实现的动态数组,或者有指定大小的静态数组),这个表格有个名字:进程表,每个进程占用着表格中的一个表项。
8、进程在切换时底层是如何实现的?(微机接口没学好,这段就不是很理解了,真伤不起啊)
当一个磁盘中断发生时,中断硬件将程序计数器、程序状态字、有时还有一个或多个寄存器压入堆栈,计算机随即跳转到中断向量指向的地址。这些操作都是由汇编语言实现的。这一部分还有待进一步研究……
9、什么是多道程序设计模型?
比如有N个进程,每个进程等待I/O操作的时间与其停留在内存中的时间比为p(也就是在内存中不干事的时间),则所有进程都在等待I/O的概率是p^n,那么他的否命题:至少有一个进程不在等待I/O(即,在I/O)的概率,也即CPU的利用率为:1-p^n。从这个式子里就可以看出,等待I/O的时间越长或进程数越少,CPU利用率越低,吞吐量也就越低(也就是说,进程干事的时间比例越高,干事的进程越多,CPU利用率就越大)。