什么是处理机管理,你或许并不清楚,但是,如果提到它的另一个称呼进程管理,可能就比较熟悉了。在计算机中进程是一个重要的概念,而提到进程,我们又常常会提到线程、死锁之类的说法,这些内容和进程有什么关系呢?这里我们就来总结下关于进程以及与之相关的一些概念,而且进程也是后边编程开发中一个重要的概念,所以了解一些关于它的基本情况就显得特别重要。
1.什么是进程
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,其中程序是指令、数据及其组织形式的描述,也是程序的实体。那程序和进程又有什么关系呢?
(1)程序和进程
系统中的程序可以按照顺序执行,也可以并发执行。其中在顺序执行的过程中主要的特点就是顺序性、封闭性和可再现性,而并发执行的程序,破坏了程序的封闭性和可再现性,使得程序和执行程序的活动不再一一对应,这就涉及到了进程之间的同步和互斥问题。
(2)进程组成
进程通常是由程序、数据、进程控制块组成的。关于这三个组成部分的具体解释如下:
程序,描述了进程需要完成的功能,它是程序执行时不可修改的部分。
数据,包括程序执行时所需要的数据及工作区,这个部分只能为一个进程所专用,是进程可修改部分。
进程控制块,它是进程存在的唯一标识。
2.进程的状态
进程状态的描述有两种模型,一种是三态模型,另一种是五态模型,下边我们就分别介绍下这两种模型。
(1)三态模型
系统中进程在处理器上交替运行,状态也在不断的发生变化,所以进程一般有三种状态,即运行、就绪、阻塞,关于这三种状态的描述如下:
运行,当一个进程在处理机上运行时,就称这个进程处于运行状态。
就绪,一个进程获得了除处理机外的一切资源,一旦得到处理机即可运行,就称这个进程处于就绪状态。
阻塞,阻塞也叫做等待或睡眠状态,一个进程正在等待某一事件发生而暂时停止运行,这时即使处理机分配进程也无法运行,所以称这个进程处于阻塞状态。
(2)五态模型
相比较三态模型的描述,对于一个实际的系统,进程的状态及其更换显得很复杂,五态模型的描述就显得比较合适一些。在这个模型中,新建状态对应进程刚刚被创建没有被提交时的状态,等待系统完成创建进程必要的信息,创建一个进程分为两个阶段,如下所示:
第一个阶段是为一个新进程创建必要的管理信息。
第二个阶段让该进程进入就绪状态。
3.进程的操作
在前边我们了解了进程的基本情况,那么系统中的进程有哪些操作处理呢?这里我们就总结了两个常见的操作过程,即进程之间的通信和进程的调度。
(1)进程之间的通信
在系统中存在多个可以并发执行的进程,所以进程之间必然存在资源共享和相互合作的情况,也就是进程之间的通信。对于进程之间的通信而言,最重要的概念就是同步和互斥,其中同步指的是合作进程之间的直接制约问题,互斥是申请临界资源进程之间的间接制约问题。下边,我们就来说一下关于同步和互斥的概念。
进程之间的同步,在计算机中多个进程可以并发执行,每个进程都以独立、不可预知的速度向前推进,但是需要在某些确定点上协调相互合作进程间的工作,所以进程之间的同步是进程间完成一项任务时直接发生相互作用的关系。
进程之间的互斥,计算机中各进程之间可以共享各类资源,但有些资源一次只能提供一个进程使用,这些资源称之为临界资源,也就是说进程之间的互斥是系统中各进程互斥使用临界资源。
(2)进程之间的调度
进程调度是指如何按照进程的优先级分配CPU,调度的方式有可剥夺和不可剥夺两种方式,其中前者是指当有更高优先级进程到来时,强行将正在运行进程的CPU分配给更高优先级的进程,后者是指当有更高优先级的进程到来时,必须等到正在运行进程自动释放占用的CPU,然后将CPU分配给高优先级的进程。
在操作系统中,一个作业从提交到完成需要经过高、中、低三级调度,具体的描述如下:
高级调度,决定处于输入池中的某个后辈作业可以调入主系统做好运行的准备,成为一个或一组就绪进程,在系统中一个作业只需经历一次高级调度。
中级调度,决定处于交换区的哪个就绪进程可以调入内存,以便直接参与对CPU的竞争。在内存资源紧张时,为了将进程调入内存,必须将内存中处于阻塞状态的进程调出交换区,以便为调入进程腾出空间。
低级调度,它决定处于内存中的哪个就绪进程可以占用CPU,它是系统中最活跃、最重要的调度程序,对系统的影响很大。
4.死锁的概念
计算机中有许多互斥资源或软件资源,若两个进程同时使用打印机,或者同时进入临界区必然会出现问题,所以死锁就是指两个以上的进程相互要求对方已经占有的资源导致无法继续运行下去的现象。
(1)死锁的产生
死锁产生的原因是为了竞争资源以及进程推进程序的非法,其中进程推进顺序非法的意思是指进程在运行过程中请求和释放资源的顺序不当,导致进程死锁;而当系统中有多个进程所共享的资源不足以同时满足它们的需求时,将引起它们对资源的竞争导致死锁。总结下来产生死锁的必要条件就是互斥条件、请求保持条件、不可剥夺条件和环路条件。
(2)死锁的处理
死锁的产生如何处理呢?可以通过如下几个方面处理。
死锁预防,采用某种策略限制并发进程对资源的请求,破坏产生死锁的四条条件之一,使系统中在任何时候都必须要满足死锁的必要条件。
死锁避免,死锁预防是设法破坏产生死锁的四个必要条件之一,严格防止死锁的产生,死锁避免就不那么严格的限制产生死锁的必要条件。
死锁检测,对资源的分配不加限制,即允许死锁产生。但系统定时的运行一个死锁检测程序,判断系统是否发生死锁,若检测到死锁,,就设法加以解除。
5.线程是什么
传统进程有两个属性,即可拥有资源的独立单位、可独立调度和分配的基本单位。由于在进程的创建、撤销和切换中,系统必须为之付出较大的时空开销,所以在系统中设置的进程数目不宜过多,进程切换的频率不宜太高,这就限制了并发程度的提高。引入线程之后将传统进程的两个基本属性分开,线程作为调度和分配的基本单位,进程作为独立分配资源的单位。用户可以通过创建线程来完成任务,以减少程序并发执行时付出的时空开销。
线程是进程中的一个实体,是被系统独立分配和调度的基本单位。线程基本上不拥有资源,只拥有一点运行中必不可少的资源,它可与同属一个进程的其他线程共享进程所拥有的全部资源。
线程有就绪、运行、阻塞三个基本状态。由于线程具有许多传统进程所具有的特性,在线程中可以创建另一个线程,同一个进程中多个线程可以并发运行。
线程分为用户级线程和内核支持线程两大类。用户级线程不依赖内核,这类线程的创建、撤销和切换都不利用系统调用来实现。内核支持线程依赖于内核,也就是说无论在用户进程中的线程还是在系统中的线程,它们的创建、撤销、切换都利用系统调用来实现。
和线程不同的是,不论是系统进程还是用户进程,在执行切换时,都要依赖内核中的进程调度。因此不管是什么进程都和内核有关,都是在内核的支持下进行切换的。尽管线程和进程表面上看起来相似,但它们本质上是不同的。
备注信息
在我的微信公众账号 nanshanPG 中每周都会更新一些和计算机、软件开发以及职业发展相关的内容,如果您感觉内容对您有所帮助的话,您可以打开微信搜索 nanshanPG 关注我的微信公众账号或者扫面下方的二维码就可以看到更多信息了。