简述程序,进程,线程,管程之间的区别和联系。

2024-12-05 05:51:29
推荐回答(1个)
回答1:

程序

程序是为解决一个信息处理任务而预先编制的工作执行方案,是由一串CPU能够执行的基本指令组成的序列,每一条指令规定了计算机应进行什么操作(如加、减、乘、判断等)及操作需要的有关数据。
进程
进程指是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程
线程是指线程是进程中的一个实体,是被系统独立调度和执行的基本单位。

管程
管程是指管程实际上是定义了一个数据结构和在该数据结构上的能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。

关系
(1)作业是在较早的多道批处理系统中提出的,现代操作系统基本没有这个概念。一般来说作业是可以包含多个程序或数据集,但至少有一个程序。怎么理解呢?个人任务程序和作业可以从功能的角度来理解。打个比方,今天班主任要求我们进行班级大扫除,这可以看做一个作业。而这个作业被我们分成擦窗户,洗地板等等,这些所谓的“子作业”可以看成是一个一个的程序。
(2)一个程序可以有多个进程,一个线程可以包含多个程序。前半句比较好理解,那上面那个例子来说,比如说实现擦窗户这个程序。有些人(资源)去准备好布(资源)和水(资源),供别人擦洗;有些人(资源)接布进程擦窗户。这便可以理解为实现这个程序功能的两个线程。而为什么又说一个线程可以包含多个程序?仔细看清楚是“包含”。其实便是在这个进程里面直接调用其他程序,也就是使用程序的功能。
(3)一个进程至少有一个线程. 线程的划分尺度小于进程,多个线程共享进程内存。多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。还是拿上面的例子来讲,实现擦窗户这个功能的程序创建了两个进程。需要的资源有:人、布、水。这些资源早在创建的时候就已经申请了。第一条进程“有些人(资源)去准备好布(资源)和水(资源),供别人擦洗“现在可以开辟多个线程来细化这个任务。可以叫其中一个人去打水,其中一个人负责洗布,其中一个人传递干净的布等,这便是一个个线程。而无论开辟多少个线程,使用的资源都是来自进程已申请的,无法脱离进程而独自存在。另外,线程之间是独立的,打水的,洗布的,传递的,只要自己干好自己的活,没有必然的相互依赖的关系。而且可以同时进行,这便是多线程的好处所在。
(4)而对于管程呢?通俗的理解就是”管理进程“。死锁问题的存在导致管程于1971年被Dijkstra提出,说道:把所有进程对某一种临界资源的同步操作都集中起来,构成一个所谓的秘书进程。凡要访问该临界资源的进程,都需先报告秘书,由秘书来实现诸进程对同一临界资源的互斥使用。
管程由四部分组成:
1).管程内部的共享变量。
2).管程内部的条件变量。
3).管程内部并行执行的进程。
4).对于局部与管程内部的共享数据设置初始值的语句。

回到例子,上面说道两个进程中,有些人去准备布和水的工作,有些人要擦窗户。那么问题来了。准备布工作的人的名单中却写着准备水的人,那么问题来了,这个人到底该干吗?如果准备布工作要了这个人,这个人一直工作着,而准备水的工作一直等着他去做,那么就一直等着吗?更极端的情况下,这个一直在洗布就不去换水,这便是死锁的一个情形。没关系,此时班主任来了,看到在场的情形,他决定了此时这个人应该去干嘛,解决了用人冲突的问题,其作用类似管程。