操作系统笔记整理3——进程的描述与控制(2)

​​点击阅读更多查看文章内容

点此链接可跳转到:操作系统笔记整理——目录索引页

参考书籍:《计算机操作系统》第四版 汤小丹等编著

@[toc]

线程的概念

基本属性:资源的拥有者,独立调度单位
引入线程的目的:减少并发执行时的时空开销。因为进程的创建、撤销、切换交费时间。

线程是系统独立调度和分派的基本单位,基本上不拥有系统资源,只需要少量的资源(指令指针IP,寄存器,栈(地址、实参、局部变量,每个线程都有自己的stack)),但可以共享其所属进程所拥有的全部资源。

进程与线程的比较
1.调度单位
  引入线程后,线程是处理机调度的基本单位,进程是资源分配的基本单位,而不再是一个可执行的实体。
  在同一进程中线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。
2.并发性
  引入线程后,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行
  多个线程会争夺处理机,在不同的状态之间转换。线程也是一个动态的概念,也有一个从创建到消亡的生命过程,具有动态性。
3.资源分配
  进程是资源分配的单位,一般线程自己不拥有系统资源,但可以访问其隶属进程的资源,
  同一进程中的所有线程都具有相同的地址空间(进程的地址空间)
4.独立性
  同进程的不同线程间的独立性要比不同进程间的独立性低得多
  多个线程共享进程的内存地址空间和资源
5.系统开销
  线程开销小
6.支持多处理机系统
  同进程的不同线程可分配到多个处理机上执行,加快了进程的完成。
在这里插入图片描述

线程的运行状态

执行:线程正获得处理机而运行
就绪:具备了除CPU外的所有资源
阻塞:线程处于暂停执行时的状态

线程有挂起状态吗?
挂起是进程级的概念,一个进程被挂起,它的所有线程也必被挂起,一个进程被激活,它的所有线程也都被激活。

线程控制块TCB:标志线程存在的数据结构,其中包含对线程管理所需要的全部信息

多线程中的进程

拥有系统资源的基本单位
可包括多个线程
不再是一个可执行的实体。所谓进程处于执行状态,实际上是指该进程中的某线程正在执行。

线程的实现

对于通常的进程,都是利用系统调用而进入OS内核
不论是系统进程还是用户进程,不论是进程还是线程,都必须直接或间接得到OS内核的支持

系统调用是内核提供的一组函数,是应用程序和操作系统内核之间的功能接口

内核支持线程KST

内核支持线程由操作系统直接支持,在内核空间中执行线程的创建、调度和管理
优点:当有多个处理机时,一个进程的多个线程可以同时执行。
实现:直接利用系统调用进行线程控制

用户级线程ULT

用户级线程指不需要内核支持而在用户空间中实现的线程
内核并不知道用户级的线程
对于用户级线程其调度仍是以进程为单位
优点:同一进程内的线程切换不需要转换到内核空间,控制简单,调度算法是进程专用的,与操作平台无关。
缺点:当线程执行一个系统调用时,不仅该线程被阻塞,进程内的其他线程也会被阻塞。
实现:不能直接利用系统调用(导致进程中的全部线程阻塞),为了取得内核服务,需借助中间系统

运行时系统:
运行时系统是用于管理和控制线程的函数(过程)的集合,其中包括用于 创建和撤消线程的函数、线程同步和通信的函数以及实现线程调度的函数 等。
运行时系统使用户级线程与内核无关
运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之 间的接口。
当线程需要系统资源时,将该要求传送给运行时系统,由后者通过相应的 系统调用 来获得系统资源

在这里插入图片描述

进程同步与互斥

直接制约关系(进程同步):协调各进程间的工作而相互等待、相互交换信息而产生的制约关系
间接制约关系(进程互斥):进程共享独占型资源而必须互斥执行的间接制约关系

同步与互斥的比较
在这里插入图片描述

临界资源
一次只允许一个进程使用的资源,如打印机、绘图机、变量、数据等,进程之间采取互斥方式实现对临界资源的共享,访问临界资源的那一段代码称为临界区。
临界区
进入区:检查欲访问的临界资源此刻是否被访问
临界区:进程访问临界资源的那段代码
退出区:将临界资源的访问标志恢复为未被访问
剩余区:其余代码
同步机制应遵循的规则
1.空闲让进:临界资源空闲,允许进入
2.忙则等待:临界资源正被访问,其它试图进入临界区的资源必须等待
3.有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入死等状态(循环请求)
4.让权等待:当进程不能进入临界区时,应立即释放处理机,以免进程陷入 忙等

没有进入临界区的正在等待的某进程根本无法获得临界资源而进入进程,这种等待是无结果的,是死等状态
没有进入临界区的正在等待的某进程不断的在测试循环代码段中的变量的值,占着处理机而不释放,这是一种忙等状态。
例如:
while S≤0 do no−op
S: = S−1;
只要 S≤0,wait 操作就不断地测试(忙等),因而未做到“让权等待”

信号量机制

信号量是用于表示资源数目或请求使用某一资源的进程个数的整型量。
信号量只能通过初始化和两个标准的原语(P,V 操作)来访问。
信号量机制也称为P、V操作,P 操作也称为 wait 操作,V 操作也称为 signal 操作。

整型信号量:用于表示资源数目的非负整数
记录型信号量:引入阻塞队列,信号量可以取负值
组成:整型变量value:代表资源数量;链表指针L:用于连接所有等待的进程
执行一次P(s)操作:进程请求一个单位的资源,s<0表明资源已分配完,若有请求则阻塞,绝对值表示因申请该资源而被阻塞的进程的数目
执行一次V(s)操作:进程释放一个单位的资源,s<0表明由进程被阻塞,需要唤醒
AND型信号量:一次性分配(释放)所有临界资源
P原语 Swait(S1,S2,…,Sn);V原语 Ssignal(S1,S2,…,Sn)
信号量集:对需要多种资源、每种占用的数目不同、且可分配资源还存在一个临界值时的信号量处理。
进程对信号量Si的测试值为ti(信号量的判断条件,当资源数小于ti时,不予分配),占用值为di(资源的申请量,即Si=Si-di和Si=si+di)
P原语 Swait(S1,t1,d1;…;Sn,tn,dn);
V原语 Ssignal(S1,d1;…;Sn,dn); 释放时不必考虑ti
Swait(S,1,0):可作为一个可控开关(S≥1 时,允许多个进程进入某特定 区;S=0 时禁止任何进程进入)。

例题
设系统有 n(n>2)个进程,且当前不在执行进程调度程序,试考虑下述4种情况,不可能发生的是(A)。
A、没有运行进程,有 2 个就绪进程,n-2 个进程阻塞
B、有 1 个运行进程,没有就绪进程,n-1 个进程阻塞
C、有 1 个运行进程,有 1 个就绪进程,n-2 个进程阻塞
D、有 1 个运行进程,n-1 个就绪进程,没有进程阻塞
解析:没有运行进程且就绪队列非空,处理机不应空闲,而应该调度一个进程来运行,因此A错误


对于两个并发进程,设互斥信号量为 mutex。当 mutex=0 时,则(B)。
A、表示没有进程进入临界区
B、表示有一个进程进入临界区
C、表示有一个进程进入临界区,另一个进程等待进入
D、表示有两个进程进入临界区
解析:A:mutex=1 B:mutex=0 C:mutex=-1 D: 错误

wait、signal操作小结

  • wait、signal 操作必须成对出现,有一个 wait 操作就一定有一个 signal
    操作。
    • 当为互斥操作时,它们同处于同一进程。 当为同步操作时,则不在同一进程中出现。
    • 如果两个 wait 操作相邻,那么它们的顺序至关重要,而两个相邻的
      signal 操作的顺序无关紧要。
  • 一个同步 wait 操作与一个互斥 wait 操作在一起时,同步 wait 操作在互 斥 wait 操作前。
  • 优点:简单,而且表达能力强(用 wait、signal 操作可解决任何同步互 斥问题)。
  • 缺点:不够安全,P、V 操作使用不当会出现死锁。

经典进程同步问题

  • 生产者-消费者问题
  • “哲学家进餐”问题
  • 读者-写者问题

管程机制

基本思想:把访问某种临界资源的所有进程的同步操作都集中起来,构成一个所谓的“秘书”进程(管程),凡是访问临界资源的进程,都需要报告“秘书”,由秘书来实现诸进程的同步
管程的定义:一个数据结构和在该数据结构上能被并发进程所执行的一组操作,这组操作能使进程同步和改变管程中的数据。

进程通信

进程通信:进程间的信息交换
低级通信:信号量机制,效率低,对用户不透明
高级通信:效率高,对用户透明
高级通信机制:共享存储器系统、消息传递系统(直接通信方式:消息缓冲通信;间接通信方式:又称为信箱通信方式)、管道通信系统、客户机-服务器系统

套接字:套接字(Socket)是对网络中进程之间进行双向通信的端点的抽象。一个套接字就是网络中进程通信的一端。套接字是一个通信标识类型的数据结构,包含许多选项,由操作系统内核管理。

作者

ShiHaonan

发布于

2021-12-28

更新于

2025-03-13

许可协议

评论