【Linux基础】程序与进程

程序是一个普通文件,是机器代码指令和数据的集合,这些指令和数据存储在磁盘上的一个可执行映像(Executable Image)中。
所谓可执行映像就是一个可执行文件的内容,例如,你编写了一个C源程序,最终这个源程序要经过编译、连接成为一个可执行文件后才能运行。
源程序中你要定义许多变量,在可执行文件中,这些变量就组成了数据段的一部分;源程序中的许多语句,例如“i++; for(i=0; i<10; i++);”等,在可执行文件中,它们对应着许多不同的机器代码指令,这些机器代码指令经CPU执行,就完成了你所期望的工作。可以这么说,程序代表你期望完成某工作的计划和步骤,它还浮在纸面上,等待具体实现。而具体的实现过程就是由进程来完成的,可以认为进程是运行中的程序,它除了包含程序中的所有内容外,还包含一些额外的数据。
我们知道,程序装入内存后才得以运行。在程序计数器的控制下,指令被不断地从内存取至CPU中运行。实际上,程序的执行过程可以说是一个执行环境的总和,这个执行环境包括程序中各种指令和数据外,还有一些额外数据,比如寄存器的值、用来保存临时数据(例如传递给某个函数的参数、函数的返回地址、保存的临时变量等)的堆栈、被打开的文件及输入输出设备的状态等等。上述执行环境的动态变化表征了程序的运行。为了对这个动态变化的过程进行描述,程序这个概念已经远远不够,于是就引入了“进程”概念。
进程代表程序的执行过程,它是一个动态的实体,随着程序中指令的执行而不断地变化。在某个时刻进程的内容被称为进程映像(Process Image)
Linux是多任务操作系统,也就是说可以有多个程序同时装入内存并运行,操作系统为每个程序建立一个运行环境即创建进程。从逻辑上说,每个进程拥有它自己的虚拟CPU。当然,实际上真正的CPU在各进程之间来回切换。但如果我们想研究这种系统,而去跟踪CPU如何在程序间来回切换将会是一件相当复杂的事情,于是换个角度,集中考虑在(伪)并行情况下运行的进程集就使问题变得简单、清晰得多。这种快速的切换称作多道程序执行。在一些Unix书籍中,又把“进程切换”(Process Switching)称为“环境切换”或“上下文切换”(Context Switching)。这里“进程的上下文”就是指进程的执行环境。
进程运行过程中,还需要其他的一些系统资源,例如,要用CPU来运行它的指令、要用系统的物理内存来容纳进程本身和它的有关数据、要在文件系统中打开和使用文件、并且可能直接或间接的使用系统的物理设备,例如打印机、扫描仪等。由于这些系统资源是由所有进程共享的,所以操作系统必须监视进程和它所拥有的系统资源,使它们可以公平地拥有系统资源以得到运行。
小知识:假设有三道程序ABC在系统中运行。程序一旦运行起来,我们就称它为进程,因此称它们为三个进程PaPbPc。假定进程Pa执行到一条输入语句,因为这时要从外设读入数据,于是进程Pa主动放弃CPU。此时操作系统中的调度程序就要选择一个进程投入运行,假设选中Pc,这就会发生进程切换,从Pa切换到Pc。同理,在某个时刻可能切换到进程Pb。从某一时间段看,三个进程在同时执行,从某一时刻看,只有一个进程在运行,我们把这几个进程的伪并行执行叫做进程的并发执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值