标签:
本文阐述操作系统的核心概念之一:进程(Process),主要内容:
进程是执行程序的一个实例,是对正在运行的程序的抽象(Abstraction),包含当前运行程序的所有程序计数器(PC),寄存器以及变量:程序运行所需要的指令和数据。
如果说程序是一个菜谱,那么进程就是做菜的过程。
我当前系统运行的进程实例(windows 10)
如果一个程序同时运行多次,操作系统会创建多个进程(互不影响),对于操作系统来说就是有多个进程恰好在运行相同的程序而已。上图的Google Chrome就是一个例子(多个实例,互不影响,但是消耗内存资源。。)
为什么操作系统要引入进程的概念?上面提到了隔离,但是隔离不是进程引入的首要驱动力,引入进程的首要驱动力是:增加系统的响应时间。
CPU同一个时间只能做一件事情,只能有一个进程运行在CPU上,但是为什么我们感觉电脑在同时作者很多事情呢?我们一遍在Word中打字,一遍右下角收到邮件通知。
操作系采用自己的调度策略让CPU在Word和Email之间切换,由于切换的非常快,所以用户感觉CPU同时在作者很多事情,从而达到了增加系统响应的效果。
用户感觉
a、b、c进程在同时执行
a、b、c同一时间只有一个在执行
用一个例子说明:有一个爸爸准备给儿子做一个蛋糕,他有一份做蛋糕的菜谱,他正在按照食谱做着蛋糕,突然他儿子进来对他说:“爸爸,我要喝牛奶”。这位爸爸停下手中正在做的蛋糕,去给儿子倒牛奶,然后在微波炉加热,最后把牛奶给了儿子。最终这位爸爸又回到原来做蛋糕的地方,继续完成蛋糕。
CPU根据现有的情况(策略)在进程A、B之间切换。上面爸爸倒完牛奶后继续做蛋糕。这里的继续其实就是CPU在进程之间切换之前先保存当前进程的状态,当再次切换到这个进程时,会从之前保存的状态处进行运行(由此也能看出进程切换的开销)。
以上的所说的三种创建进程的时机最终创建进程的方式是一致的:由一个已有的进程跳过一个系统调用完成进程的创建。
该系统调用会告知操作系统去创建一个进程。
发起系统调用的进程为父进程,被创建的进程为子进程,父子进程之间是相互独立的,他们的地址空间完全不同。
上面做了阐述,新的进程是已有进程通过像OS发送创建进程的call而完成的。被创建的进程暂且叫child process。这个child process接下来可能也会再次给os发请求创建子进程。。。。。以此类推,将会有一个进程继承链。
上面这种成为一个链的进程在unix中会作为一个进程组而存在。但是在Windows中,这些进程其实是完全独立的。继承关系在进程中不是很重要。
一个进程创建后最终都会终止的,进程会在以下几种条件下被终止,相对比较好理解:
在有些操作系统中当一个进程终止时,有其创建的进程也会被Kill 掉。
进程被创建后有三个状态:
Blocked是指进程在等待外部的刺激(与CPU无关),比如Console程序,一直在等待用户输入。
Ready是指进程可以运行,没有等待任何资源,但是CPU被其他进程占用,没有CPU资源
如图:
Running-》Blocked:进程在运行过程中需要其他外部资源。
Blocked-》Ready:进程需要的资源得到了满足
Ready-》Running:由CPU的Scheduler决定,CPU可以给当前进程使用
Running-》Ready:由CPU的Scheduler决定,CPU分配给其他进程使用(比如上面的例子,爸爸停下正在做的蛋糕去给儿子热牛奶,这时候蛋糕处于ready状态)
标签:
原文地址:http://www.cnblogs.com/kmpp/p/Operating_System_Process_Part1.html