搜档网
当前位置:搜档网 › 进程和线程的管理

进程和线程的管理

进程和线程的管理
进程和线程的管理

2. 进程和线程的管理

例题解析

例2.2.1 试说明进程和程序之间的区别和联系。

解进程和程序是既有区别又有联系的两个概念。

(1)进程是动态的,程序是静态的。程序是一组有序的指令集合,是一个静态的概念;进程则是程序及其数据在计算机上的一次执行,是一个动态的集合。离开了程序,进程就失去了存在的意义,但同一程序在计算机上的每次运行将构成不同的进程。程序可看作是电影的胶片,进程可以看作电影院放电影的过程。

(2)一个进程可以执行多个程序,如同一个电影院的一场电影可放映多部影片。

(3)一个程序可被多个进程执行,如同多个影院同时利用一个电影的胶片放映同一部电影。

(4)程序可以长期保存,进程只能存在于一段时间。程序是永久存在的,而进程有从被创建到消亡的生命周期。

例2.2.2 举例说明多道程序系统失去了封闭性和再现性。

解例如,有两个循环程序A和B,共享一个变量N。程序A每执行一次时,都要做N:=N+1操作;程序B则每执行一次时,都要执行print(N)操作,然后再将N的值置成“0”。程序A和B在多道程序系统中同时运行。假定某时刻变量N的值为n,可能出现下述三种情况:

(1)N:=N+1 在print(N)和N:=0之前,此时得到N值变化过程为n+1、n+1、0;

(2)N:=N+1 在print(N)和N:=0之后,此时得到N值变化过程为n 、0 、1;

(3)N:=N+1 在print(N)之后和N:=0之前,此时得到N值变化过程为n、n+1、0。

所以,在A、B程序多次执行过程中,虽然其每次执行时的环境和初始条件都相同,但每次得到的结果却不一定相同。

例2.2.3 为什么将进程划分成执行、就绪和阻塞三个基本状态?

解根据多道程序执行的特点,进程的运行是走走停停的。因此进程的初级状态应该是执行和等待状态。处于执行状态的进程占用处理机执行程序,处于等待状态的进程正在等待处理机或者等待其它某种事件的发生。但

是,当处理机空闲时,并不是所有处于等待状态的进程都能放到处理机上执行,有的进程即使分配给它处理机,它也不能执行,因为它的执行的条件没有得到满足。因此,将等待状态的进程分成两部分,一部分是放在处理机上就能立即执行,这就是就绪的进程;另一部分是仍需等某种事件发生的进程,即使放在处理机上也不能执行的进程,这就是阻塞进程。

例2.2.4 进程的挂起状态与进程的阻塞状态和就绪状态有何异同?

解相同点是它们都没有占用处理机。不同点是挂起状态的进程是处于一种静止状态,不会参与对资源的竞争,在解除挂起之前,进程不会有新的资源要求,也不会有占用处理机的机会;阻塞状态和就绪状态的进程均处于活动状态,它们都有获得处理机的机会,都可能有新的资源要求。

例 2.2.5 两个并发进程P1和P2的程序代码在下面给出。其中,A、B、C、D和E均为原语。

P1: begin P2: begin

A; D;

B; E;

C; end

end

请给出P1、P2两个进程的所有可能执行的过程。

解P1和P2进程以不可预知的速度推进,它们所有可能的执行过程为:

(1)A→B→C→D→E (2)A→B→D→E→C

(3)A→B→D→C→E (4)A→D→B→E→C

(5)A→D→B→C→E (6)A→D→E→B→C

(7)D→E→A→B→C (8)D→A→B→C→E

(9)D→A→B→E→C (10)D→A→E→B→C

例2.2.6 在操作系统中为什么要引入进程这一概念?

解在单道程序设计环境下,CPU被一道程序独占,CPU严格按该程序的指令顺序来执行。单道程序具有顺序性、封闭性和可再现性。单道程序有许多局限性,于是出现了多道程序。在多道程序环境中,有若干个程序同时运行,具有了许多新的特征,如并发性、动态性以及相互制约性等。这时,程序的概念已经不能描述上述这些特征,并发程序的特征必须用新的概念来描述,于是引进了“进程”的概念。

例 2.2.7 在多道程序系统,当进程需要等待某种事件发生时,进程将进入何种状态?

解当进程需要等待某种事件发生时,进程进入何种状态取决于进程程

序的处理方式。进程可以调用阻塞原语,将自己阻塞,暂时放弃处理机;进程也可以采用不放弃处理机的循环等待的方式等待某种事件发生。因此,当进程需要等待某种事件发生时,进程并不是一定要进入阻塞状态。

例2.2.8 父进程创立子进程与主程序调用子程序有何不同?

解父进程创立子进程后,父进程与子进程同时执行;主程序调用子程序,主程序暂停在调用点,子程序开始执行,直到子程序执行完毕返回,主程序开始执行。

例2.2.9 进程控制块PCB的作用是什么?它主要包含哪些内容?

解操作系统管理的进程是多种多样的,要对这些进程实施有效的管理,必须对进程进行抽象。为了便于系统控制和描述进程的活动,在操作系统核心为进程定义了一个进程控制块PCB。PCB用于描述进程的基本情况以及进程运行和变化的过程,它与进程一一对应。当系统创建进程时,为进程分配一个PCB;在进程运行过程中,系统通过PCB对进程实施管理和控制;进程结束时,系统将收回PCB。

PCB中的内容主要包括调度信息和现场信息两大部分。调度信息包括进程名、进程号、优先级、当前状态、资源信息、程序和数据的位置信息、隶属关系和各种队列指针信息等。现场信息主要包括程序状态字、时钟寄存器和界限寄存器等描述进程运行情况的信息。

例2.2.10 一个新创建的进程,第一次被调度到CPU上运行时,其“现场”从何而来?

解进程在CPU上交替地执行是通过保存退出进程的现场和恢复新选中进程的现场实现的;而一个进程的“现场”是其上次从CPU上退出时获得的。但是,一个新创建的、尚未在CPU上运行过的进程还没有“上一次”,那么它的“现场”从何而来?是从其父进程继承而来,是在进程创建程序执行时,将父进程特意为子进程准备的“现场”复制给子进程。新创建的子进程就是以此“现场”实施其第一次运行的。

例2.2.11 用户级线程和内核支持线程有何区别?

解两者的区别是:

(1)内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。

(2)用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS 内核提供支持,而且与进程的创建、撤消和调度大体是相同的。

(3)用户级线程执行系统调用指令时将导致其所属进程被中断,而内

核支持线程执行系统调用指令时,只导致该线程被中断。

(4)在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。

(5)用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序。

例2.2.12 说明Solaris OS的用户级线程、内核线程和轻型进程之间的关系。

解首先要说明的是,这里所说的“内核线程”与“内核支持线程”是有区别的,即“内核线程”是与OS内核中的程序相对应的线程;而“内核支持线程”是指其创建、撤消和切换都需要内核程序支持才能实现的线程,其线程本身所对应的程序可以是OS的内核程序,也可以是内核外运行在用户态的程序,但主要是用户的应用程序。

在Solaris OS中,为了实现“用户级线程”与内核的无关性,在“用户级线程”和“内核线程”之间设立了称之为“轻型进程”(LWP:Light-Weight Process)的运行实体,作为两类线程的接口,用户级线程只能通过LWP请求内核线程的支持和服务。这样做的目的是要将两类线程隔离开来,使系统的运行层次更加清晰,效率和安全性更好。

例2.2.13 简述创建进程的大致过程。

解创建一个进程大体分以下几步:

(1)申请一个空白的PCB和唯一的进程标识号pid

(2)为新进程分配除CPU以外的资源,包括内存空间;

(3)初始化PCB中的数据项,包括标志信息、状态信息、控制信息等;

(4)将新进程的PCB插入系统的就绪队列。

2.3 习题

2.3.1 选择最合适的答案

1. UNIX操作系统的进程控制块中常驻内存的是()。

A.proc结构

B.proc结构和核心栈

C.ppda区

D.proc结构和user结构

2. 当()时,进程从执行状态转变为就绪状态。

A.进程被调度程序选中

B.时间片到

C.等待某一事件

D.等待的事件发生

3. 在进程状态转换时,下列()转换是不可能发生的。

A.就绪态→运行态

B.运行态→就绪态

C.运行态→阻塞态

D.阻塞态→运行态

4. 下列各项工作步骤中,()不是创建进程所必需的步骤。

A.建立一个PCB

B.作业调度程序为进程分配CPU

C.为进程分配内存等资源

D. 将PCB链入进程就绪队列

5. 下列关于进程的叙述中,正确的是()。

A.进程通过进程调度程序而获得CPU。

B.优先级是进行进程调度的重要依据,一旦确定不能改变。

C.在单CPU系统中,任一时刻都有1个进程处于运行状态。

D.进程申请CPU得不到满足时,其状态变为等待状态。

6. 从资源管理的角度看,进程调度属于()。

A.I/O管理

B.文件管理

C.处理机管理

D.存储器管理

7. 下列有可能导致一进程从运行变为就绪的事件是()。

A.一次I/O操作结束

B.运行进程需作I/O操作

C.运行进程结束

D.出现了比现运行进程优先权更高的进程

8. 一个进程释放一种资源将有可能导致一个或几个进程()。

A.由就绪变运行

B.由运行变就绪

C.由阻塞变运行

D.由阻塞变就绪

9. 一次I/O操作的结束,有可能导致()。

A.一个进程由睡眠变就绪

B.几个进程由睡眠变就绪

C.一个进程由睡眠变运行

D.几个进程由睡眠变运行

10. 当一个进程从CPU上退下来时,它的状态应变为()。

A.静止就绪

B. 活动就绪

C. 静止睡眠

D. 活动睡眠

11. 为使进程由活动就绪变为静止就绪,应利用()原语?

A.SUSPEND

B. ACTIVE

C. BLOCK

D. WAKEUP

12. 在下面的叙述中,不正确的是()。

A.一个进程可创建一个或多个线程

B.一个线程可创建一个或多个线程

C.一个线程可创建一个或多个进程

D.一个进程可创建一个或多个进程

13. 若系统中只有用户级线程,则处理机调度单位是()。

A.线程

B.进程

C.程序

D.作业

14. 一个进程是()。

A.由协处理机执行的一个程序

B. 一个独立的程序+数据集

C.PCB结构与程序和数据的组合

D.一个独立的程序

15. 下列几种关于进程的叙述,()最不符合操作系统对进程的理解?

A.进程是在多程序并行环境中的完整的程序。

B.进程可以由程序、数据和进程控制块描述。

C.线程是一种特殊的进程。

D.进程是程序在一个数据集合上运行的过程,它是系统进行资源分

配和调度的一个独立单位。

16. 在下面的叙述中正确的是()。

A.线程是比进程更小的能独立运行的基本单位。

B.引入线程可提高程序并发执行的程度,可进一步提高系统效率。

C.线程的引入增加了程序执行时的时空开销。

D.一个进程一定包含多个线程。

17. 下面关于线程的叙述中,正确的是()。

A.不论是系统支持线程还是用户级线程,其切换都需要内核的支

持。

B.线程是资源的分配单位,进程是调度和分配的单位。

C.不管系统中是否有线程,进程都是拥有资源的独立单位。

D.在引入线程的系统中,进程仍是资源分配和调度分派的基本单

位。

18. 在下面的叙述中,正确的是()。

A.引入线程后,处理机只在线程间切换。

B.引入线程后,处理机仍在进程间切换。

C.线程的切换,不会引起进程的切换。

D.线程的切换,可能引起进程的切换。

19. 进程的控制信息和描述信息存放在()。

A.JCB

B.PCB

C.AFT

D.SFT

20. 进程依靠()从阻塞状态过渡到就绪状态。

A.程序员的命令

B.系统服务

C.等待下一个时间片到来

D.“合作”进程的唤醒

21. 在WINDOWS NT 中()可以处于就绪状态。

A. 进程

B. 线程

C. 程序

D. 作业

22. 只作用于一个进程一次的原语是____________.

A.创立

B.解挂

C.阻塞

D.挂起

23. 在UNIX系统中,处于( )状态的进程最容易被执行。

A.辅存睡眠

B.内存睡眠

C.内存就绪

D. 辅存就绪

24. 从执行状态挂起的进程解除挂起时进入( )状态。

A.就绪

B.执行

C.阻塞

D.挂起

25. 一个进程执行过程中不能可能对应( )。

A.一个PCB

B.一个JCB

C.多个PCB

D.一个程序

2.3.2 选择所有正确的答案

1.在下列进程的四个特征中,最基本的特征是()。

A.并发性

B. 动态性

C. 独立性

D. 异步性

2. 下面会引起进程创建的事件是()。

A.用户登录

B. 设备中断

C. 作业调度

D. 执行系统调用

3. 下面是关于线程的叙述,其中正确的是()。

A.线程自己拥有一点资源,但它可以使用所属进程的资源。

B.由于同一进程中的多个线程具有相同的地址空间,所以它们间的

同步和通信也易于实现。

C.进程创建与线程创建的时空开销不相同。

D.进程切换与线程切换的时空开销相同。

4. 在下面的叙述中,不正确的是()。

A.同一进程内的线程可并发执行,不同进程的线程只能串行执行。

B.同一进程内的线程只能串行执行,不同进程的线程可并发执行。

C.同一进程或不同进程内的线程都只能串行执行。

D.同一进程或不同进程内的线程都可以并发执行。

5. 线程是操作系统的概念,已具有线程管理的操作系统有()。

A.Windows3.2

B. OS/2

C. Windows NT

D. Mach

6. 下面属于进程基本状态的是()。

A.就绪

B. 运行

C. 后备

D. 阻塞

7. 下列各项工作步骤,()是创建进程所必须的步骤。

A.建立一个PCB

B.由CPU调度程序为进程调度CPU

C.为进程分配内存等必要资源

D.将PCB接入进程就绪队列

8. 关于进程的正确说法是()。

A.进程就是程序,或者说,进程是程序的另一种叫法

B.一个被创建了的进程,在它被消灭之前,大多数时刻处于进程的三种基本状态之一。

C.多个不同的进程可以包含相同的程序

D.一个处于等待队列中的进程,即使进入其它状态,仍然放在等待队列中。

9. 在()时,可能挂起某进程。

A.进程出现死锁

B.进程的数目太少

C.进程数目太多

D.进程出现故障

10. 多道程序系统进程从执行状态转换到就绪状态的原因是( )。

A.时间片完

B.等待其它进程的执行结果

C.等待I/O

D.有更高优先级的进程到来

2.3.3 判断正误,错误的简要说明理由

1. 有了线程之后,程序只能以线程的身份运行。

2. 线程的切换会引起进程的切换。

3. 多个线程可以对应同一段程序。

4. 系统内可以有无父进程的进程。

5.线程所对应的程序肯定比进程所对应的程序短。

6.进程从CPU退下时,将“现场”保存在系统栈内。

7.在多道程序系统,进程需要等待某种事件的发生时,进程一定进入阻塞状态。

8.进程上下文是进程执行活动全过程的静态描述。

9.并发是并行的不同表述,其原理相同。

10. 进程是基于多道程序技术而提出的,其基本的特征是动态性;进程的执行是在多个状态间多次转换的过程,但只有处于就绪和执行状态的进程位于内存。

11. 操作系统对进程的管理和控制主要是通过控制原语实现的。

12. 原语的执行是屏蔽中断的。

13. 一般情况下,分时系统中处于就绪状态的进程最多。

14. 系统中进程的数目越多,CPU的利用率越高.

15. 多道程序的执行失去了封闭性和再现性,因此多道程序系统不需要封闭性和再现性。

16. 一个多道程序可能具备封闭性和再现性。

17. 单道程序不具备封闭性和再现性。

2.3.4 简答题

1. Windows这样的多任务系统与Unix这样的多进程系统在调度上有何不同?

2. 进程和线程的主要区别是什么?

3. 程序的并发执行为什么会有间断性?

4. 进程能自己将自己唤醒吗?进程能自己将自己撤消吗?

5. 什么是原语?原语的主要特点是什么?

6. 程序并发执行与顺序执行时相比产生哪些新特征?

7. 程序并发执行的主要特性是什么?

8. 一个因等待I/O操作结束而入阻塞状态的进程,何时被唤醒?

9. 在什么情况下,可以一次唤醒一个进程和一次唤醒多个进程?

10. 进程的就绪状态和阻塞状态的有何不同?

11. 程序的并行执行将导致运行结果失去封闭性,这对所有的程序都成立吗?

12.父进程创建子进程之后,父子进程之间的关系是什么?

2.3.5 解答题

1. 什么是线程?进程和线程是什么关系?

2. 简述引进线程的好处。

3.当系统内所有的进程都进入睡眠之后,系统还有可能复活吗?

4.当一个进程的父进程被撤消时,该进程是撤消好还是不撤消好?

5.进程的挂起操作和入睡操作有何异同?

6.简述进程为什么不能从就绪状态直接变成阻塞(睡眠)状态?

7. 进程的三个基本的转换如下图所示,图中1、2、3、4分别代表某种

(1)什么事件引起各状态之间的变迁?

(2)统中常常由于某一进程的状态变迁引起另一进程也产生状态变迁,试判断变迁3——1、2——1、3——2、4——1、3——4,如果有的话,将发生什么因果变迁

(3)在什么情况下,如果有的话,上述变迁将不引起其它变迁?

2.4习题解答要点

2.4.1 选择最合适的答案

1.A

2.B

3.D

4.B

5.A

6.C

7.D

8.D

9.A 10.B

11.A 12.C 13.B 14.C 15.A 16.B 17.C 18.D 19.B 20.D

21.A 22.A 23.C 24.A 25.C

2.4.2 选择所有正确的答案

1. AB

2. ACD

3. ABC

4.ABC

5.BCD

6.ABD

7. ACD

8. BC

9. ACD10.AD

2.4.3 判断正误,简要说明理由

1. 正确

1.错误

属于同一进程的多个线程之间的切换不会引起进程的切换,只有属于不同进程的线程之间的切换才会引起进程的切换。

3. 正确

4. 正确

5. 错误

不一定,若进程只有一个线程的话。

6. 错误

应该保存在PCB中,但有的系统也有例外。

7. 错误

进程也可以循环等待。

8. 错误

进程是进程实体的执行过程,具有动态性。

9. 错误

若干个事件在同一时刻发生成为并行;若干个事件在同一时间间隔内发生成为并发。并行是并发的特例,并发是并行的拓展。

10. 错误

(1)基本特征还有并发性、异步性、独立性等;

(2)进程在新、终止两状态中只经过一次;

(3)进程都在内存。

11. 正确

12. 正确

13.正确

14.错误

进程容易产生资源竞争而处于阻塞或死锁状态

15.错误

需要,否则程序没有稳定性和可靠性而言,用户也无法使用。

16.正确

通过程序员的设计可以达到。

17.错误

这是单道程序的固有属性。

2.4.4 简答题

1. Windows这样的多任务系统与Unix这样的多进程系统在调度上有何不同?

2. 进程和线程的主要区别是什么?

3. 程序的并发执行为什么会有间断性?

4. 进程能自己将自己唤醒吗?进程能自己将自己撤消吗?

5. 什么是原语?原语的主要特点是什么?

6. 程序并发执行与顺序执行时相比产生哪些新特征?

7. 程序并发执行的主要特性是什么?

8. 一个因等待I/O操作结束而入阻塞状态的进程,何时被唤醒?

9. 在什么情况下,可以一次唤醒一个进程和一次唤醒多个进程?

10. 进程的就绪状态和阻塞状态的有何不同?

11. 程序的并行执行将导致运行结果失去封闭性,这对所有的程序都成立吗?

12.父进程创建子进程之后,父子进程之间的关系是什么?

1.从调度上讲,在Windows这样的多任务系统中,当前执行哪个任务是由用户决定的,是用户可控的;而在Unix这样的多进程系统中,当前运行哪个进程是由内部的调度算法决定的,是对用户透明的,用户是不可直接控制的。

2. 在有进程和线程的系统中,进程是系统资源分配的独立单位,而线程是可调度运行的独立单位。

3. 并发执行是指系统内有多道程序在宏观上“同时”执行,但系统内往往只有一台处理机(CPU),因此只能分时地为多个程序服务。就一道程序而言,往往不是一次能够运行完成,而是以“走走停停”的方式完成其运行,这就是并发系统内程序执行的间断性。

4. 唤醒进程和撤消进程都是要通过在CPU上运行程序来实现的。一个进程入睡了,它就不可能被调度到CPU上运行;一个进程在撤消前必须先进入终止状态,而处于终止状态的进程不可能被调度到CPU上运行。因此,进程被唤醒、被撤消都不能由自己来完成,只能由别的进程实现。

5. 原语是指由若干条机器指令构成的,并用以完成特定功能的一段程序。这段程序在执行期间是不可分割的。其主要特点是不可分割性。

6. 可分割性、失去封闭性、失去可再现性。

7. 并发程序间具有相互制约的关系,程序并发执行失去了程序的封闭性和再现性,程序和机器执行程序的活动不再一一对应。

8. 是在别的进程执行相应的I/O中断处理程序时唤醒的。

9. 在I/O中断处理程序中,当唤醒进程时,只唤醒等待该I/O结束的那一个进程;当一个进程释放一个系统资源(如I/O缓存)时,将要唤醒所有因等待使用该资源而进入阻塞状态的进程。

10. 阻塞状态的进程还不具备执行的条件,即使放到处理机上也不能执行;就绪状态的进程具备了执行的所有条件,放到处理机上就能执行。

11. 并不是所有程序的并行执行都会导致运行结果失去封闭性。例如,当程序中都使用内部变量,不可能被外部程序访问时,程序的运行不会受到外部环境的影响。

12. 一个进程创建子进程之后,创建进程与产生的进程之间的关系是父子关系,分别成为父进程和子进程。子进程一经产生就与父进程并发执行,子进程共享父进程的正文段和已经打开的文件。

2.4.5 解答题

3.当系统内所有的进程都进入睡眠之后,系统还有可能复活吗?

4.当一个进程的父进程被撤消时,该进程是撤消好还是不撤消好?

5.进程的挂起操作和入睡操作有何异同?

6.简述进程为什么不能从就绪状态直接变成阻塞(睡眠)状态?

1. 线程可定义为进程内的一个执行单位,或者定义为进程内的一个可调度实体。

在具有多线程机制的操作系统中,处理机调度的基本单位不是进程而是线程。一个进程可以有多个线程,而且至少有一个可执行线程。

进程和线程的关系是:

(1)线程是进程的一个组成部分;

(2)进程的多个线程都在进程的地址空间活动;

(3)资源是分给进程的,而不是分给线程的,线程在执行中需要资源时,系统从进程的资源配额中扣除并分配给它;

(4)处理机调度的基本单位是线程,线程之间竞争处理机,真正在处理机上运行的是线程;

(5)线程在执行过程中,需要同步。

2. 引进线程的好处为:

(1)以线程作为系统调度的基本单位,减少了系统的时空开销。以进程为系统调度的基本单位的系统中,进程的切换是很频繁的。在切换中由于要保留当时的运行环境,还要设置新选中的进程的运行环境,这既花费了处理机的时间,又增加了主存的空间,从而也限制了系统进程的数量和进程的切换速度。

(2)引进线程提高了系统的并行能力。线程作为进程内的一个可执行实

体,减少了并行粒度。线程作为调度的基本单位而不是资源分配的基本单位,调度更为容易,而且采用线程提高系统的并行能力比采用进程更为有效。

(3)同一进程的线程共享进程的用户地址空间,所以同一进程的线程间的通信更容易实现。

3. 只有两种情况下系统可以复活。

一种情况是有因等待I/O操作完成而进入睡眠的进程,当相应的I/O操作完成后,I/O中断处理程序唤醒等待本次I/O的进程,而该进程在运行过程中又可能通过释放资源、发送消息等事件而唤醒其它进程,这样整个系统就又活跃起来了。

另一种情况是没有等待I/O操作完成的进程,但有定时睡眠的进程,当睡眠时间到期,会由时钟中断将该入睡进程唤醒,从而获得可运行进程,并有可能使系统重新活跃起来。

4. 在实际系统中,两种处理办法都是可行的,且各有优缺点。若撤消,则该进程的任务可能还没有完成,这显然是不利的,特别是当该进程的运行结果对其它进程的运行很重要(如该进程是其它进程的前趋进程,没有它的运行结果其它进程无法运行)时;若不撤消,则该进程又可能成为不可控的“孤儿”,从而产生不可预测的结果。

比较好的做法是,当一个进程的父进程被撤消时,可以将该进程“过继”给系统内一个级别较高的进程(如Unix中的1#进程),让它有一个“新的父亲”,这样既可以继续完成其任务又不会成为不可控的。

5. 最主要的不同是“入睡”是进程的主动行为,而“挂起”可以是系统的强制行为;此外,只有在CPU上运行的进程才能执行“入睡”操作,而不管进程处于什么状态,系统都可对其执行“挂起”操作。

它们的相同点是:这两个操作都导致一个正在CPU上运行的进程从CPU上退下来。

6. 一个进程要进入阻塞(睡眠)状态,必须通过执行相应的程序才能实现,如sleep()或block()。就绪进程当前不在CPU上运行,不能执行任何程序,当然不能使自己直接进入阻塞状态。

7.

(1)引起各变迁的事件如下:

变迁1:正在执行的进程从处理机上退下,导致进程调度程序从就绪状态的进程中选取一个进程。

变迁2:正在执行的进程所分配的时间片用完,导致进程从处理机上退到就绪状态;或者在可抢占优先级的进程调度中,有更高有先级的进程进入就绪状态,导致正在执行的进程从执行状态退到就绪状态。

变迁3:进程需要等待事件的发生;

变迁4:进程所等待的某事件发生了(如I/O完成);

(2) 可能发生的因果变迁

3——1:由于处于运行状态的进程转入阻塞状态,进程调度程序根据调度算法,又从就绪队列中选择一个进程投入运行;

2——1:由于处于运行状态的进程时间片用完,重新转入就绪状态,从而使进程调度程序又从就绪队列中选择一个进程投入运行;

3——2:此种变化不存在;

4——1:4的发生与1的发生没有必然关系;

3——4:3的发生和4的发生没有必然关系。

(3)无关变迁

变迁1、2、3与处理机有关,必然引起其它变迁,变迁4不涉及处理机,不直接引起其它变迁。

进程与线程的区别 进程的通信方式 线程的通信方式

进程与线程的区别进程的通信方式线 程的通信方式 进程与线程的区别进程的通信方式线程的通信方式2011-03-15 01:04 进程与线程的区别: 通俗的解释 一个系统运行着很多进程,可以比喻为一条马路上有很多马车 不同的进程可以理解为不同的马车 而同一辆马车可以有很多匹马来拉--这些马就是线程 假设道路的宽度恰好可以通过一辆马车 道路可以认为是临界资源 那么马车成为分配资源的最小单位(进程) 而同一个马车被很多匹马驱动(线程)--即最小的运行单位 每辆马车马匹数=1 所以马匹数=1的时候进程和线程没有严格界限,只存在一个概念上的区分度 马匹数1的时候才可以严格区分进程和线程 专业的解释: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执 行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序 的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行 的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在 应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可 以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程 的调度和管理以及资源分配。这就是进程和线程的重要区别。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的 能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中 必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的 其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以 并发执行 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有 独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响, 而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线 程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程 的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者 《操作系统的设计与实现》。对就个问题说得比较清楚。 +++ 进程概念

第二章进程管理答案

第二章进程管理 一、单项选择题 1、顺序程序和并发程序的执行相比,()。 A.基本相同 B. 有点不同 C.并发程序执行总体上执行时间快 D.顺序程序执行总体上执行时间快 2、在单一处理机上,将执行时间有重叠的几个程序称为()。 A.顺序程序 B. 多道程序 C.并发程序 D. 并行程序 3、进程和程序的本质区别是()。 A.存储在内存和外存 B.顺序和非顺序执行机器指令 C.分时使用和独占使用计算机资源 D.动态和静态特征 4、在下列特性中,不是进程的特性的是()。 A. 异步性 B. 并发性 C. 静态性 D. 动态性 5 A 6 A. 7 A. 8 A. 9 A. 10 A. 11 A. 12。 A. 13 A. 14 A. 15 A. 16、在操作系统中,对信号量S的P原语操作定义中,使进程进入相应阻塞队列等待的条件是()。 A. S>0 B. S=0 C. S<0 D. S≠0 17、信号量S的初值为8,在S上执行了10次P操作,6次V操作后,S的值为()。 A.10 B.8 C.6 D.4 18、在进程通信中,使用信箱方式交换信息的是()。 A.低级通信B.高级通信C.共享存储器通信D.管道通信 19.( )必定会引起进程切换。A.一个进程被创建后进入就绪态B.一个进程从运行态变成等待态c.一个进程从运行态变成就绪态 D.一个进程从等待态变成就绪态 20、操作系统使用( )机制使计算机系统能实现进程并发执行,保证系统正常工作。 A.中断B.查询c.同步D互斥 21.对于一个单处理器系统来说,允许若干进程同时执行,轮流占用处理器.称它们为()的。 A.顺序执行 B.同时执行c.并行执行D.并发执行

操作系统第二章进程和线程复习题

第二章练习题 一、单项选择题 1.某进程在运行过程中需要等待从磁盘上读入数据,此时该进程的状态将( C )。 A. 从就绪变为运行; B.从运行变为就绪; C.从运行变为阻塞; D.从阻塞变为就绪2.进程控制块是描述进程状态和特性的数据结构,一个进程( D )。 A.可以有多个进程控制块; B.可以和其他进程共用一个进程控制块; C.可以没有进程控制块; D.只能有惟一的进程控制块。 3.临界区是指并发进程中访问共享变量的(D)段。 A、管理信息 B、信息存储 C、数据 D、 程序 4. 当__ B__时,进程从执行状态转变为就绪状态。 A. 进程被调度程序选中 B. 时间片到 C. 等待某一事件 D. 等待的事件发生 5. 信箱通信是一种( B )通信方式。 A. 直接通信 B. 高级通信

C. 低级通信 D. 信号量 6. 原语是(B)。 A、一条机器指令 B、若干条机器指令组成 C、一条特定指令 D、中途能打断的指令 7. 进程和程序的一个本质区别是(A)。 A.前者为动态的,后者为静态的; B.前者存储在内存,后者存储在外存; C.前者在一个文件中,后者在多个文件中; D.前者分时使用CPU,后者独占CPU。 8. 任何两个并发进程之间存在着(D)的关系。 A.各自完全独立B.拥有共享变量 C.必须互斥D.可能相互制约 9. 进程从运行态变为等待态可能由于(B )。 A.执行了V操作 B.执行了P 操作 C.时间片用完 D.有高优先级进程就绪 10. 用PV操作管理互斥使用的资源时,信号量的初值应定义为(B)。 A.任意整数 B.1 C.0 D.-1

查看程序的进程和线程实验报告

查看程序的进程和线程实验报告 篇一:程序实验2:11-多线程编程---实验报告 程序实验二:11-多线程编程实验 专业班级实验日期 5.21 姓名学号实验一(p284:11-thread.c) 1、软件功能描述 创建3个线程,让3个线程重用同一个执行函数,每个线程都有5次循环,可以看成5个小任务,每次循环之间会有随即等待时间(1-10s)意义在于模拟每个任务到达的时间是随机的没有任何的特定规律。 2、程序流程设计 3.部分程序代码注释(关键函数或代码) #include #include #include #define T_NUMBER 3 #define P_NUMBER 5 #define TIME 10.0

void *thrd_func(void *arg ) { (本文来自:https://www.sodocs.net/doc/7214195450.html, 小草范文网:查看程序的进程和线程实验报告) int thrd_num=(int)arg; int delay_time =0; int count =0; printf("Thread %d is staraing\n",thrd_num); for(count=0;count { delay_time =(int)(rand()*TIME/(RAND_MAX))+1; sleep(delay_time); printf("\tTH%d:job%d delay =%d\n",thrd_num,count,delay_time); } printf("%d finished\n",thrd_num); pthread_exit(NULL); } int main()

北大操作系统高级课程-陈向群作业-XV6进程线程

阅读代码: 1.基本头文件: types.h param.h memlayout.h defs.h x86.h asm.h mmu.h elf.h 2.进程线程部分: vm.c proc.h proc.c swtch.S kalloc.c 以及相关其他文件代码 强调一下:由于内存管理部分还没有学到,所以请同学们遇到相关的代码和问题时,先将问题记录下来,到学过之后,再结合进程线程管理部分进行深入学习,最后要求对XV6有整体的理解。 请大家围绕如下一些问题阐述原理课的相关内容,以及XV6中是如何实现的。 1.什么是进程,什么是线程?操作系统的资源分配单位和调度单位分别是什么?XV6中的 进程和线程分别是什么,都实现了吗? 答:进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念。进程有3个基本状态,运行状态、就绪状态和等待状态(或称阻塞状态);进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可有进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出。进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。 线程可称为轻量级的进程,是操作系统可以运行调度的最小单位。线程是进程内的一个相对独立的可执行的单元。若把进程称为任务的话,那么线程则是应用中的一个子任务的执行。 不论操作系统中是否引入了线程,操作系统中资源分配的基本单位都是进程。如果操作系统没有引入线程那么进程就是调度的基本单位。线程并不独立拥有资源,它仅仅分配了一些运行必备的资源。一个进程中的多个线程共同分享进程中的资源。在引入了线程的操作系统中,线程就变成了调度的基本单位,进程中的部分线程阻塞并不代表该线程被阻塞。 xv6操作系统实现了一个基于进程(没有实现线程)的简单进程管理机制。通过对proc.h 文件的阅读了解到xv6的进程中定义了一个context结构,一个枚举类型proc_state定义了UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE 这6种进程的状态,proc结构定义了进程控制块的内容,cpu结构定义了寄存器和栈指针。 2.进程管理的数据结构是什么?在Windows,Linux,XV6中分别叫什么名字?其中包含哪 些内容?操作系统是如何进行管理进程管理数据结构的?它们是如何初始化的? 答:进程管理的数据结构是进程控制块(PCB)。在Linux中进程控制块的结构是由一个叫task_struct的数据结构定义的,ask_struct存在/include/ linux/sched.h中,其中包括管理进程

任务、进程和线程的区别

任务、进程和线程的区别 推荐 摘: 任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个进程,也可以是一个线程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。 进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。 线程(thread)则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。 一个进程和一个线程最显著的区别是:线程有自己的全局数据。线程存在于进程中,因此一个进程的全局变量由所有的线程共享。由于线程共享同样的系统区域,操作系统分配给一个进程的资源对该进程的所有线程都是可用的,正如全局数据可供所有线程使用一样。 简而言之,一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,由多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配,这就是进程和线程的重要区别。 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 进程概念

进程和线程的CPU亲和性

进程和线程的亲缘性(affinity)是指可以将进程或者是线程强制限制在可用的CPU子集上运行的特性,它一定程度上把进程/线程在多处理器系统上的调度策略暴露给系统程序员。 CPU的数量和表示在有n个CPU的Linux上,CPU是用0...n-1来进行一一标识的。CPU的数量可以通过proc文件系统下的CPU相关文件得到,如cpuinfo和stat: $ cat /proc/stat | grep "^cpu[0-9]\+" | wc -l 8 $ cat /proc/cpuinfo | grep "^processor" | wc -l 8 在系统编程中,可以直接调用库调用sysconf获得: sysconf(_SC_NPROCESSORS_ONLN); 进程的亲缘性Linux操作系统在2.5.8引入了调度亲缘性相关的系统调用: int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask); int sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask); 其中sched_setaffinity是设定进程号为pid的进程调度亲缘性为mask,也就是说它只能在mask中指定的CPU 之间进行调度执行;sched_getaffinity当然就是得到进程号为pid的进程调度亲缘性了。如果pid为0,则操纵当前进程。 第二个参数指定mask所指空间的大小,通常为sizeof(cpu_set_t)。 第三个参数mask的类型为cpu_set_t,即CPU集合,GNU的c库(需要在include头文件之前定义 __USE_GNU)还提供了操作它们的宏: void CPU_CLR(int cpu, cpu_set_t *set); int CPU_ISSET(int cpu, cpu_set_t *set); void CPU_SET(int cpu, cpu_set_t *set); void CPU_ZERO(cpu_set_t *set); 如果我们所关心的只是CPU#0和CPU#1,想确保我们的进程只会运作在CPU#0之上,而不会运作在CPU#1之上。下面程序代码可以完成此事: cpu_set_t set; int ret, i; CPU_ZERO(&set); CPU_SET(0, &set); CPU_CLR(1, &set); ret = sched_setaffinity(0, sizeof(cpu_set_t), &set); if( ret == -1) { perror("sched_se"); } for( i=0; i < 3; i++) { int cpu; cpu = CPU_ISSET(i, &set); printf("cpu = %i is %s/n", i, cpu? "set" : "unset"); } Linux只提供了面向线程的调度亲缘性一种接口,这也是上面只提调度亲缘性而不直言进程亲缘性的原因。当前Linux系统下广泛采用的线程库NPTL(Native Posix Thread Library)是基于线程组来实现的,同一个线程组中的线程对应于一组共享存储空间的轻量级进程,它们各自作为单独调度单位被内核的调度器在系统范围内调度,这种模型也就是我们通常所说的1-1线程模型。正因如此,目前线程的调度范围

进程和线程的选择

鱼还是熊掌:浅谈多进程多线程的选择 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。 我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受) 看起来比较简单,优势对比上是“线程 3.5 v 2.5 进程”,我们只管选线程就是了? 呵呵,有这么简单我就不用在这里浪费口舌了,还是那句话,没有绝对的好与坏,只有哪个更加合适的问题。我们来看实际应用中究竟如何判断更加合适。 1)需要频繁创建销毁的优先用线程 原因请看上面的对比。 这种原则最常见的应用就是Web服务器了,来一个连接建立一个线程,断了就销毁线程,要是用进程,创建和销毁的代价是很难承受的

2)需要进行大量计算的优先使用线程 所谓大量计算,当然就是要耗费很多CPU,切换频繁了,这种情况下线程是最合适的。 这种原则最常见的是图像处理、算法处理。 3)强相关的处理用线程,弱相关的处理用进程 什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。 一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。 当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。 4)可能要扩展到多机分布的用进程,多核分布的用线程 原因请看上面对比。 5)都满足需求的情况下,用你最熟悉、最拿手的方式 至于“数据共享、同步”、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,我只能说:没有明确的选择方法。但我可以告诉你一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。 需要提醒的是:虽然我给了这么多的选择原则,但实际应用中基本上都是“进程+线程”的结合方式,千万不要真的陷入一种非此即彼的误区。

操作系统实验报告(包括线程,进程,文件系统管理,linux+shell简单命令)

操作系统实验报告 班级:030613 学号:03061331 姓名:裴帅帅

实验一:进程的建立 一、实验内容 创建进程及子进程,在父子进程间实现进程通信,创建进程并显示标识等进 程控制块的属性信息,显示父子进程的通信信息和相应的应答信息。 使用匿名管道实现父子进程之间的通信。 二、源程序 1、创建匿名管道 SECURITY_ATTRIBUTES sa; sa.bInheritHandle=true; sa.lpSecurityDescriptor=NULL; sa.nLength=sizeof(SECURITY_ATTRIBUTES); if(!CreatePipe(&m_hRead,&m_hWrite,&sa,0)) { MessageBox("创建匿名管道失败"); return false; } 2、创建子进程 STARTUPINFO si; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); si.dwFlags=STARTF_USESTDHANDLES; si.hStdInput=m_hRead; si.hStdOutput=m_hWrite; si.hStdError=GetStdHandle(STD_ERROR_HANDLE); if(!CreateProcess(NULL,"子 进.exe",NULL,NULL,true,0,NULL,NULL,&si,&pi)) { MessageBox("创建子进程失败"); CloseHandle(m_hRead); CloseHandle(m_hWrite); m_hRead=NULL; m_hWrite=NULL; return; } 3、销毁子进程 if(m_hRead) CloseHandle(m_hRead);

进程线程的概念

提起程序这个概念,大家再也熟悉不过了,程序与进程概念是不可分的。程序是为了完成某项任务编排的语句序列,它告诉计算机如何执行,因此程序是需要运行的。程序运行过程中需要占有计算机的各种资源才能运行下去。如果任一时刻,系统中只有一道程序,即单道程序系统,程序则在整个运行过程中独占计算机全部资源,整个程序运行的过程就非常简单了,管理起来也非常容易。就象整个一套房子住了一个人,他想看电视就看电视,想去卫生间就去卫生间,没人和他抢占资源。但为了提高资源利用率和系统处理能力,现代计算机系统都是多道程序系统,即多道程序并发执行。程序的并发执行带来了一些新的问题,如资源的共享与竞争,它会改变程序的执行速度。就象多个人同时住一套房子,当你想去卫生间的时候,如果此时卫生间里有人,你就得等待,影响了你的生活节奏。如果程序执行速度不当,就会导致程序的执行结果失去封闭性和可再现性,这是我们不希望看到的。因此应该采取措施来制约、控制各并发程序段的执行速度。由于程序是静态的,我们看到的程序是存储在存储介质上的,它无法反映出程序执行过程中的动态特性,而且程序在执行过程中是不断申请资源,程序作为共享资源的基本单位是不合适的,所以需要引入一个概念,它能描述程序的执行过程而且可以作为共享资源的基本单位,这个概念就是进程。 进程的生命周期 进程和人一样是有生命的,从诞生到死亡要经历若干个阶段。一般说来进程有三种状态:就绪、执行、等待。由多种原因可以导致创建一个进程,例如一个程序从外存调入内存开始执行,操作系统就要为其创建进程,当然还可以有其它原因,如一个应用进程为完成一个特殊的任务,可以自己创建一个子进程。进程被创建后就是在内存中,处于就绪状态,所谓就绪状态就是具备除了CPU之外的所有资源,万事具备,只欠东风,一旦占有 了CPU,就变成了执行状态,执行中如果需要等待外围设备输入数据,则进程就沦落为 等待状态,操作系统又会从就绪状态队列中调度一个进程占有CPU。等到数据到来后, 等待状态的进程又被唤醒成为就绪状态。这些状态的转换是通过进程控制原语实现的。程序的运行是通过进程体现的,操作系统对进程进行管理和控制,那么操作系统怎么了解到进程的状态呢,怎么把资源分配给进程呢,而且进程做状态转换时CPU现场保存在那呢?这要说到PCB(进程控制快)。PCB是进程的唯一标志,在其中记录了进程的全部信息,它是一种记录型的数据结构,相当于进程的档案。操作系统就通过PCB感知进程的存在,通过PCB了解进程和控制进程的运行。PCB也是放在内存中的,如果PCB太大,有些系 统把PCB中一些不重要的信息放在外存中。 进程执行速度的制约 并发进程由于共享系统内部资源,因此导致进程执行速度上的制约,这种制约分为:间接制约与直接制约。间接制约引起进程之间的互斥执行,直接制约引起进程间的同步执行。例如一个家里如果只有一个卫生间,卫生间这个公有资源使得每个人只能互斥使用它,这就是间接制约。而直接制约是指并发进程各自执行的结果互为对方的执行条件,例如司机与售票员的关系,当司机到站停车后,售票员才能开门,而只有售票员关门后,司机才

进程和线程的区别

进程和线程的区别 进程和线程的概念 先了解一下操作系统的一些相关概念,大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行”,这也就是我们所说的并发(并发简单来说多个任务同时执行)。 进程 计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序侧是具有某种功能的程序,程序是运行于操作系统之上的。 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序、数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。 进程具有的特征: 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的; 并发性:任何进程都可以同其他进程一起并发执行; 独立性:进程是系统进行资源分配和调度的一个独立单位; 结构性:进程由程序、数据和进程控制块三部分组成。 进程的生命周期 ? 在早期只有进程的操作系统中,进程有五种状态,创建、就绪、运行、阻塞(等待)、退出。

线程、进程、多线程、多进程和多任务之间的区别与联系

线程、进程、多线程、多进程和多任务之间的区别与联系

可能学习操作系统开发的读者都听说过这些专业名词,但又多少人理解了? 首先,从定义开始,先看一下教科书上进程和线程定义:进程:资源分配的最小单位。线程:程序执行的最小单位。 1 进程进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 举例说明进程:想象一位有一手好厨艺的计算机科学家正在为他的女儿烘制生日蛋糕,他有做生日蛋糕的食谱,厨房里有所需的原料:面粉、鸡蛋、糖、香草汁等。在这个比喻中,做蛋糕的食谱就是程序(即用适当形式描述的算法)计算机科学家就是处理器(CPU),而做蛋糕的各种原料就是输入数据。 进程就是厨师阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和。现在假设计算机科学家的儿子哭着跑了进来,说他的头被一只蜜蜂蛰了。计算机科学家就记录下他照着食谱做到哪儿了(保存进程的当前状态),然后拿出一本急救手册,按照其中的指示处理蛰伤。这里,我们看到处理机制是从一个进程(做蛋糕)切换到另一个高优先级的进程(实施医疗救治),每个进程拥有各自的程序(食谱和急救手册)。当蜜蜂蛰伤处理完之后,这位计算机科学

家又回来做蛋糕,从他离开时的那一步继续做下去。 2 线程线程是CPU调度的最小单位(程序执行流的最小单元),它被包含在进程之中,是进程中的实际运作单元。一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 一个标准的线程有线程ID、当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单元,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现处间断性。 线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。举例说明线程:假设,一个文本程序,需要接受键盘输入,将内容显示在屏幕上,还需要保存信息到硬盘中。若只有一个进程,势必造成同一时间只能干一样事的尴尬(当保存时,就不能通过键盘输入内容)。若有多个进程,每个进程负责一个任务,进程A负责接收键盘输入的任务,进程B负责将内容显示在屏幕上的任务,进程C负责保存内容到硬盘中的任务。这里进程A,B,C间的协作涉及到了进程通信问题,而且有共同都需要拥有的东西——-文本内容,不停的切换造成性能上的损失。若有一种机制,可以使任务A,B,C共享资源,这样上下文切换所需要保存和恢复的内容就少了,同时又可以减少通信所带来的性能损耗,那就好了。这种机制就是线程。 总的来说:进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。

进程、线程、管程三者之间的关系

进程、线程、管程三者之间的关系 首先我们先了解进程、线程、管程各自的概念:进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。 管程:管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。 现在我们来了解进程和线程的关系: 简而言之,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有

多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。 下面我们用实际图解来加以分析进程和线程之间的关系:

进程和线程的管理

2. 进程和线程的管理 例题解析 例2.2.1 试说明进程和程序之间的区别和联系。 解进程和程序是既有区别又有联系的两个概念。 (1)进程是动态的,程序是静态的。程序是一组有序的指令集合,是一个静态的概念;进程则是程序及其数据在计算机上的一次执行,是一个动态的集合。离开了程序,进程就失去了存在的意义,但同一程序在计算机上的每次运行将构成不同的进程。程序可看作是电影的胶片,进程可以看作电影院放电影的过程。 (2)一个进程可以执行多个程序,如同一个电影院的一场电影可放映多部影片。 (3)一个程序可被多个进程执行,如同多个影院同时利用一个电影的胶片放映同一部电影。 (4)程序可以长期保存,进程只能存在于一段时间。程序是永久存在的,而进程有从被创建到消亡的生命周期。 例2.2.2 举例说明多道程序系统失去了封闭性和再现性。 解例如,有两个循环程序A和B,共享一个变量N。程序A每执行一次时,都要做N:=N+1操作;程序B则每执行一次时,都要执行print(N)操作,然后再将N的值置成“0”。程序A和B在多道程序系统中同时运行。假定某时刻变量N的值为n,可能出现下述三种情况: (1)N:=N+1 在print(N)和N:=0之前,此时得到N值变化过程为n+1、n+1、0; (2)N:=N+1 在print(N)和N:=0之后,此时得到N值变化过程为n 、0 、1; (3)N:=N+1 在print(N)之后和N:=0之前,此时得到N值变化过程为n、n+1、0。 所以,在A、B程序多次执行过程中,虽然其每次执行时的环境和初始条件都相同,但每次得到的结果却不一定相同。 例2.2.3 为什么将进程划分成执行、就绪和阻塞三个基本状态? 解根据多道程序执行的特点,进程的运行是走走停停的。因此进程的初级状态应该是执行和等待状态。处于执行状态的进程占用处理机执行程序,处于等待状态的进程正在等待处理机或者等待其它某种事件的发生。但

进程与线程的区别[试题]

进程与线程的区别[试题] 进程与线程的区别: 通俗的解释 一个系统运行着很多进程,可以比喻为一条马路上有很多马车 不同的进程可以理解为不同的马车而同一辆马车可以有很多匹马来拉----这些马就是线程 假设道路的宽度恰好可以通过一辆马车道路可以认为是临界资源 那么马车成为分配资源的最小单位(进程) 而同一个马车被很多匹马驱动(线程)----即最小的运行单位 每辆马车马匹数>=1 所以马匹数=1的时候进程和线程没有严格界限,只存在一个概念上的区分度马匹数>1的时候才可以严格区分进程和线程 专业的解释: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。 +++++++++++++++++++++++++++++++++++++++++++++++ 进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I,O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。

进程管理习题及答案

一、判断题 1.( )操作系统的所有程序都必须常驻内存。 2.( )多道程序设计可以缩短系统中作业的执行时间。 3.( )实时系统中的作业周转时间有严格的限制。 4.( )进程获得处理机而运行是通过申请而得到的。 5.( )同一个程序不能被创建成多个进程。 6.( )子进程可以继承它的父进程所拥有的所有资源。 7.( )对于临界区,最重要的是断定哪个进程先执行临界区里的那段程序。 8.( )若进程A和进程B在临界区上互斥,那么当A位于临界区内时不能打断它的 运行。 9.( )进程间的互斥是一种特殊的同步关系。 10.( )临界区是指进程中用于实现进程互斥的那段代码。 11.( )资源的同时共享是指多个用户作业可以在同一时刻使用同一资源。 12.( )并发性是指若干事件在同一时间间隔内发生。 13.( )进程在运行中,可以自行修改自己的进程控制块PCB。 14.( )进程申请CPU得不到满足时,其状态变为等待态。 15.( )当一个进程从等待态变成就绪态,则一定有一个进程从就绪态变成运行态。 16.( )进程状态的转换是由操作系统完成的,对用户是透明的。 17.( )优先数是进程调度的重要依据,优先数大的进程首先被调度运行。 18.( )不可抢占式动态优先数法一定会引起进程长时间得不到运行。 19.( )进程调度的主要功能是从所有处于等待状态的进程中挑选一个"最合适"的进 程,创建好进程运行所需要的环境,然后把处理机分配给它。 20.( )无限循环和无限延迟是一个概念。 21.( )导致系统出现死锁的一种原因是某个用户作业发生了死循环。 22.( )一旦出现死锁,所有进程都不能运行。 23.( )所有进程都挂起时系统陷入死锁。 24.( )参与死锁的进程至少有两个已经占有资源。 25. ( )有M个进程的操作系统出现死锁时,死锁进程的个数为1

第02章 进程与线程习题解答

第2章进程与线程 习题2 参考解答 1. 简要回答下列问题。 1) 进程和线程有什么区别? 2) 线程是如何创建的?怎样设置线程的优先级? 3) 前台线程和后台线程有什么区别?如何将一个线程设置为后台线程? 【解答】 1) 一个完整的进程拥有自己独立的内存空间和数据,但是同一个进程内的线程是共享内存空间和数据的。一个进程对应着一段程序,它是由一些在同一个程序里面独立的同时运行的线程组成的。线程有时也被称为并行运行在程序里的轻量级进程,这是因为它的运行依赖于进程提供的上下文环境,并且使用的是进程的资源。 在一个进程里,线程的调度有抢占式或者非抢占的模式。在抢占模式下,操作系统负责分配CPU时间给各个线程,一旦当前的线程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此操作系统将定期的中断当前正在执行的线程,将CPU 分配给在等待队列的下一个线程。所以任何一个线程都不能独占CPU。每个线程占用CPU的时间取决于进程和操作系统。进程分配给每个线程的时间很短,以至于我们感觉所有的线程是同时执行的。 2) C#中创建线程的工作是通过使用System.Threading名称空间下的Thread类的构造方法来完成的,如创建一个线程实例输出字符“a”1000次。 Thread thread = new Thread(new ThreadStart(func1)); thread.Priority =ThreadPriority.Normal; thread.Start(); static void func1() { for(int i =0;i<1000;i++) { Console.WriteLine("a"); } } C#中System.Threading名称空间下的ThreadPriority枚举类定义了线程可能具有的所有优先级的值,优先级由高到低排序为:Highest,AboveNormal,Normal,BelowNormal,Lowest。可以通过访问线程的Priority属性来获取和设置其优先级。每个线程都具有分配给它的线程优先级。在公共语言运行库中创建的线程最初分配的优先级为ThreadPriority.Normal。在运行库以外创建的线程保留它们在进入托管环境之前具有的优先级。可以使用Thread.Priority属性获取或设置任何线程的优先级。 3) 前台线程和后台线程的区别是后台线程不会影响进程终止。属于某个进程的所有前台线程都终止后,公共语言运行库就会结束该进程,而且所有属于该进程的后台线程也都会立即停止,而不管后台工作是否完成。 1

操作系统(进程与线程)习题与答案

1、下面哪种死锁处理策略代价最小?() A.死锁忽略 B.死锁检测+恢复 C.死锁避免 D.死锁预防 正确答案:A 2、下面哪种死锁处理策略引入的不合理因素最严重?() A.死锁检测+恢复 B.死锁忽略 C.死锁预防 D.死锁避免 正确答案:C 3、为什么进程切换的代价要比线程切换要大?() A.因为进程切换要切换控制块数据结构 B.因为进程切换要切换PC指针 C.因为进程切换要切换段表 D.因为进程切换要切换栈 正确答案:C 4、初值为N的信号量,当前值为-1表示的含义是什么?() A.有1个资源 B.有N-1个进程在等待 C.有1个进程在等待 D.有N-1个资源 正确答案:C

5、为什么PC机通常死锁忽略策略?() A.因为死锁检测算法在PC机器上不能执行 B.因为PC机上的发生死锁造成的破坏小 C.因为PC机上的死锁可以用重启来解决 D.因为PC机上的发生死锁的可能性小 正确答案:C 6、下面哪种参数可以用来表征操作系统可以对用户输入快速处理?() A.响应时间 B.等待时间 C.吞吐量 D.周转时间 正确答案:A 7、下面哪种调度算法可以保证用户的输入在一定的时间以后可以得到响应?() A.短作业优先 B.时间片轮转调度 C.剩余短作业优先 D.先来先服务算法 正确答案:B 8、下面哪个系统调用不是用来操控进程的?() A.open() B.fork() C.wait() D.exec() 正确答案:A 9、下面哪种状态下的进程不存放在内存中?()

A.运行态 B.阻塞态 C.挂起态 D.就绪态 正确答案:C 10、关于进程和线程的主要区别,下面哪种论述是正确的?() A.线程之所以切换快是因为TCB比PCB尺寸小 B.线程切换时可能会引起进程切换 C.进程不能成为调度的单位 D.线程可以没有栈 正确答案:B 11、在实际系统中实现进程调度算法需要考虑诸多因素,相比而言下面哪个因素最不需要考虑?() A.机器物理内存的大小 B.机器的使用环境 C.用户任务的特点 D.算法的复杂性 正确答案:A 12、进程和程序的区别主要体现在哪里?() A.进程在内存中,程序在磁盘上。 B.进程有代码段,程序没有。 C.进程在CPU上执行,程序没有执行。 D.进程有当前执行位置,程序没有。 正确答案:D

相关主题