进程的概念
进程的引入是为了更好的研究、描述和控制并发程序的执行,使多道程序的并发执行具有了可控性和可再现性。
进程是一个具有一定独立功能的程序在一个数据集合上一次动态执行过程,简而言之,进程就是程序的一次运行的过程。
进程 = 程序 + 数据 + 进程控制块
进程 = 资源管理 + 线程。
进程和程序的概念是既是相互关联的,又是相互区别的。
- 联系:
程序是进程的组成部分,一个进程的运行目标是执行它所对应的程序,从静态来看,进程是由程序、数据和进程控制块三部分组成的。简单来说,进程就是一个程序运行的过程,因此进程是有生命周期的,有诞生(创建)、也有消亡(kill)。 - 区别
程序是静态的,进程是动态的。程序的存在是永久的,进程的存在是暂时的,会动态产生和消亡,一个进程可以执行一个或多个程序,一个程序也可以构成多个进程。进程具有创建其它进程的功能。
此外进程的定义还有以下几种:
进程是程序的一次执行过程。
进程是程序及数据,在处理机(CPU)上顺序执行时所发生的活动。
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立或基本单位。
进程是可以和别的计算并发执行的计算。
进程是可并发执行的程序在一个数据集合上的运行过程。
进程的特征
- 动态性
进程的实质是程序的一次执行过程,因此,动态性是进程最基本的特性。其动态性还表现为:它因创建而产生,由调度而执行,由撤销而消亡,可见进程是有生命周期的,而程序是一组有序指令集合,存放于某种介质中,因此程序是静态的。 - 并发性
并发性是指进程能在一段时间内(生命周期)同时运行,并发性是进程的重要特征,引入进程的目的也正是为了使程序能和其它进程的程序并发运行,而程序(没有建立进程的程序)是不能并发运行的,即程序是不能反应执行过程的动态性的。 - 独立性
独立性是指进程是一个能独立运行、独立分配资源和独立调度的基本单位,凡是未能建立进程的程序,都不能作为一个独立的单位参加运行。只有进程才有资格向系统申请资源并获得系统提供的服务。 - 异步性
这是指进程按照各自独立的、不可预知的速度向前推进,或说进程按照异步的方式运行。 - 结构性
为使进程能够独立运行,应为之配置一个称为进程控制块(Process Control Block)的数据结构。从结构上看,进程是由程序段、数据段和PCB这三个部分组成,UNIX把这三部分称为“进程映像”。
进程的基本状态及其转换
基本状态
- 就绪状态
当进程已分配到了除了处理机(CPU)之外的所有必要资源后,只要能再获得处理机,就能立刻执行,把进程这时的状态称为就绪状态。在一个系统中,可以有多个进程处于就绪状态,把这些进程排列成一个队列,称为就绪队列。 - 阻塞状态
进程因发生某些事件(如请求I/O)而暂停执行,即进程的执行处于受到阻塞,称这种暂停状态为阻塞状态,也称等待状态和睡眠状态。将处于阻塞状态的进程排成一个队列,则称为阻塞队列。 - 执行状态
指进程已经获得CPU,其程序正在执行的状态,在单处理系统中,只能有一个进程处于执行状态。
转换
处于就绪状态的进程,在进程调度程序为其分配CPU之后,其状态便由就绪状态变为执行状态。当进程在执行的过程中,由于时间片已完,这时进程的状态就会从执行状态变为就绪状态,而如果因为该进程由于访问临界资源,而该资源被其它进程所占用,这时进程的状态就由执行状态变为阻塞状态,当资源能够进行访问时,进程就由阻塞状态先变为就绪状态,等待进程调度程序分配CPU资源,一旦分配到CPU之后,便由就绪状态变为执行状态。
由上述可知,当执行状态的进程因为某些原因变为阻塞状态时,当等待的事件发生之后(资源可以被访问了),阻塞状态不会直接变为执行状态,而是会先变为就绪状态,然后等待进程调度程序分配处理机,才能转换为执行状态,其原因是因为当进程进程进入阻塞状态之后,处理机会被进程调度系统分配给另外一个处于就绪状态的进程。
进程控制块(Process Control Block, PCB)
进程控制块的作用是为了描述和控制进行的运行,系统为每个进程定义了一个数据结构,该数据结构被称为进程控制块。
所谓系统创建一个进程就是系统为某个程序设置一个PCB,用于对该程序的控制和管理。
进程任务完成,由系统回收其PCB,该进程就消亡。系统根据某PCB感知进程的存在,因此PCB是进程存在的唯一标志。
进程和线程的区别
根本区别
进程管理是操作系统的主要功能之一,进程是操作系统资源分配的基本单位,而线程是处理器进行任务调度和执行的基本单位。
相互关系
线程是进程的一部分,通常一个进程包含多个线程,且至少包含一个线程,同一进程下的多个线程的资源和地址空间是共享的,而不同进程之间的资源和地址空间是相互独立的。每个独立的进程都有程序运行的入口、顺序执行序列和程序出口,可以独立运行,但线程不能独立运行,必须依存于应用程序中,进程和线程都可以并发执行。
相互影响
一个进程崩溃之后,在保护模式之下,不会对其它进程造成影响,但进程中只要有一个线程崩溃,那么整个进程就会死掉,所以多进程比多线程健壮。
进程相关的指令
查看进程的相关指令
ps:查看进程。
ctrl+z::将进程挂起。例如可以运行一个vi编辑器的进程,然后按ctrl+z将该进程挂起,然后可以通过ps查看正在运行的vi进程。
可以看到挂起的vi进程。此外,可以通过fg命令将挂起的命令唤醒。按:q退出vi之后,再输入ps命令就可以看到没有vi进程了。
ps也后面可以加参数-u,可以看到运行的进程的当前状态和开始时间。
STAT为进程当前的状态 ,S表示sleep,T表示temporarily,R表示执行,Z表示僵死状态,D表示不可中断睡眠状态。
VSZ:进程虚拟内存的大小。
RSS:进程占用实际内存的大小。
START:进程开始的时间。
vi test.txt是前台启动进程的方式,也可以用后台的方式启动进程,用命令vi test.txt&
进程调度的相关指令
ps -l可以查看进程的优先级。
其中PRI是实际的优先级,是由操作系统动态计算的,是实际的进程优先级,NI表示的是请求进程执行的优先级,它由进程拥有者或超级管理员进行设置,NI的设置是会影响实际的进程优先级(PRI)。
nice命令可以在进程启动时改变进程优先级,renice可以在进程执行时改变进程的优先级。
挂起和激活
挂起:ctrl+z
激活:fg(激活到前台),bg(激活到后台),注意后面跟的参数是进程序号
,不是进程标识号。
中止进程
ctrl+c和kill + PID
进程的监视
top
top进入之后可以按q退出,按k可以中止一个进程,s改变刷新的时间
系统日志
常用的日志文件都在/var/log目录。
dmesg:可以获知系统能够检测出的硬件等信息。
last:列出目前与过去登入系统的用户相关信息。
系统监视器
gnome-system-monitor
文件系统监控
df -h
查看内存情况
free -m