part2 进程与线程

结合p39框架图好好复习。

1.进程的概念

思考:为什么要引入进程?
更好地使多道程序并发执行,提高资源利用率和系统吞吐量,增加并发程度。

1.PCB:进程控制模块,描述进程(进程是动态的)的基本情况和运行态,进而控制和管理进程。程序段、数据段、PCB构成了进程实体(即进程映像,是静态的)。创建进程就是创建PCB,撤销进程就是撤销PCB。
2.概念:是程序的一次执行过程;一个程序及其数据在处理机上顺序执行时所发生的活动;是一个有独立功能的程序在数据集合上运行的过程;是资源分配和调度的独立单位。

2.进程的特征

1.动态性:创建、活动、暂停、终止。
2.并发性:
3.独立性:进程实体是一个能独立运行、独立获取资源、独立接受调度的基本单位。
4.异步性:导致结果不可再现性。进程执行有间断性,独立的、不可预知的速度前进。
5.结构性:程序段、数据段、PCB构成了进程实体。

3.进程的状态转换

就绪态–>运行态:被调度后获得处理机(时间片)。
运行态–>就绪态:时间片用完或者有更高优先级的进程就绪时。
运行态–>阻塞态:请求某一资源(如外设)的分配使用或者等待某一事件发生(等待用户输入密码)。系统调用时。
阻塞态–>就绪态:等待的事件到来。
阻塞态也叫等待态。

思考:
你能画出5种进程状态的转换吗?

4.进程控制

创建、撤销、由系统设备完成的IO操作,都是利用系统调用进入内核。

创建过程:
1)分配唯一进程标识号,申请空白PCB。申请失败则创建失败。
2)分配资源,新进程程序和数据及用户必要的内存空间,若资源不足,并非创建失败,而是阻塞态
3)初始化PCB,包括标志信息、处理机状态信息、处理机控制信息、进程优先级等。
4)若就绪队列能接纳新进程,就进入队列等待调度。

终止过程:
进程终止原因:正常结束和异常结束(存储区越界、IO故障、非法指令等)。
1)根据标识符检索PCB,读取状态。
2)若正执行,立即终止,将处理机资源分配给其他。
3)若有子进程,终止子进程,将资源归还给父进程或操作系统。
4)将PCB从所在队列中删除。

阻塞过程:
正在执行的进程期待的事情未发生,比如请求资源失败。
1)根据标识号找到对应的PCB,读取进程状态。
2)若正在执行,立即停止,并保护现场,转为阻塞态。
2)将PCB加入阻塞(等待)队列。

唤醒过程:
期待的事件已经发生。
1)在相应等待队列中找出该进程的PCB并且移出,置状态为就绪态。
2)把PCB插入就绪队列,等待调度。

切换过程:
1)保存处理机上下文,包括一些寄存器,
2)更新PCB信息,将PCB移入相应队列,如就绪队列、等待队列。
3)选择另一个进程,更新其PCB,并将处理机分配给该进程。
4)更新内存管理的数据结构,恢复处理机上下文。

思考:
进程切换和调度怎么去区别理解呢?(p33)

5.进程结构

1.PCB:包含进程描述信息(PID,UID)、进程控制和管理信息(进程当前状态、进程优先级)、资源分配清单、处理机相关信息(寄存器、状态字)。
2.程序段
3.数据段

6.进程的通信

1.共享存储
2.消息传递
3.管道通信:半双工,某一时刻只能单向传输。

7.线程的概念

思考:引入线程的目的是什么?
减少进程并发执行时所付出的时空开销,使OS具有更好的并发性;
隶属于同一个进程的多个线程可以并发执行,缩短了进程任务的执行时间;
进一步提高了资源的利用率。
( 理解:有了线程,那么线程切换可能发生进程切换,也可能不发生,那么平均而言切换的开销变小,可以使更多的线程参与并发。)

1.线程:是进程的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有资源,只拥有一点点在执行中必不可少的资源,但它可以与同进程的其他线程共享进程所拥有的资源。线程也有间断性、就绪、阻塞、运行三态。

2.线程与进程的比较:
调度:线程是独立调度的基本单位,进程是拥有资源的基本单位。
拥有资源
并发性
系统开销:进程创建和撤销开销很大,进程切换时,要保存原CPU环境以及设置新CPU环境,开销也大。但是同进程之间的线程同步和通信很容易,切换时只需保存少量寄存器,开销很小。
地址空间和其他资源:进程之间互相独立。同进程的线程共享进程资源。
通信:进程之间需同步或互斥,线程之间可以直接读/写数据段。

3.线程的属性:
1)每个线程都有唯一的标识符和一个线程控制块(TCB)记录寄存器和栈等现场状态。
2)不同的线程可以执行相同的程序。
3)同进程的线程共享进程所拥有的资源。

8.线程的实现

1.两类:
用户级线程:由应用程序完成,内核意识不到该线程的存在。用户级线程执行时,需要将用户线程映射到核心线程,由核心线程控制用户线程的执行。OS只为核心线程分配CPU等资源。
内核级线程:内核完成,应用程序只有一个到内核级线程的编程接口。

9.多线程模型

1.多对一模型:多个用户级映射到一个内核级线程。,线程管理在用空间完成。
2.一对一:每个用户级都映射到内核级
3.多对多:将n个用户级线程映射到m个内核级,m<=n。

思考:
1.各个模型的优缺点是什么?(p37)
2.某计算机系统包括多个CPU,但操作系统核心不支持多线程机制,当用户使用pthread或java提供的多线程机制创建了多个用户级线程时,这些用户级线程是否可以分配到多个处理器上运行?为什么?
答:OS只为核心线程分配CPU。若核心不支持多线程机制,只能一个用户线程映射到一个核心线程,那么核心仅能感知到一个用户进程的存在,一个进程至少应包括一个线程,OS只能感知到进程的一个线程存在,因此内核无法将多个用户线程调度到多个CPU上运行。

3.某计算机系统包括多个CPU,支持多线程机制,当用户使用pthread或java提供的多线程机制创建了多个用户级线程时,这些用户级线程是否可以分配到多个处理器上运行?为什么?
答:要点:OS只能为核心线程分配CPU,且只能当每个用户线程映射到一个核心线程时才能运行。
若采用Many-to-One模型,就不能。每个时刻只能有一个用户线程映射到核心线程运行;当一个用户线程调用一个系统调用进入阻塞状态后,整个进程将会被阻塞。
如果使用One-to-One,并且操作系统如果允许创建的核心线程数不少于CPU的数量,是可以的;
Many-to-Many并且如果核心线程的数量足够多,多个用户线程可以映射到多个核心线程上运行,多个用户线程可以在多个CPU上运行;但不能保证为每个用户线程都分配一个CPU,取决于核心线程的数量及用户线程与核心线程的映射关系。

4.在many-to-many用户线程与核心线程映射模型中,对于下列三种情况:
用户线程的数量小于处理器数量
用户线程的数量等于处理器数量
用户线程的数量大于处理器数量
请讨论多线程机制对系统性能的影响
答:有些CPU会空闲;所有CPU会充分利用,但如有线程阻塞,则这些CPU会空闲;若有的线程阻塞,其他线程会被调度到这些CPU上执行,CPU会得到充分利用。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值