线程的概念参考书籍:《计算机操作系统》第四版 汤小丹等编著
基本属性:资源的拥有者,独立调度单位
引入线程的目的:减少并发执行时的时空开销。因为进程的创建、撤销、切换交费时间。
线程是系统独立调度和分派的基本单位,基本上不拥有系统资源,只需要少量的资源(指令指针IP,寄存器,栈(地址、实参、局部变量,每个线程都有自己的stack)),但可以共享其所属进程所拥有的全部资源。
线程的运行状态进程与线程的比较
1.调度单位
引入线程后,线程是处理机调度的基本单位,进程是资源分配的基本单位,而不再是一个可执行的实体。
在同一进程中线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。
2.并发性
引入线程后,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行
多个线程会争夺处理机,在不同的状态之间转换。线程也是一个动态的概念,也有一个从创建到消亡的生命过程,具有动态性。
3.资源分配
进程是资源分配的单位,一般线程自己不拥有系统资源,但可以访问其隶属进程的资源,
同一进程中的所有线程都具有相同的地址空间(进程的地址空间)
4.独立性
同进程的不同线程间的独立性要比不同进程间的独立性低得多
多个线程共享进程的内存地址空间和资源
5.系统开销
线程开销小
6.支持多处理机系统
同进程的不同线程可分配到多个处理机上执行,加快了进程的完成。
执行:线程正获得处理机而运行
就绪:具备了除CPU外的所有资源
阻塞:线程处于暂停执行时的状态
线程有挂起状态吗?
挂起是进程级的概念,一个进程被挂起,它的所有线程也必被挂起,一个进程被激活,它的所有线程也都被激活。
线程控制块TCB:标志线程存在的数据结构,其中包含对线程管理所需要的全部信息
多进程中的线程拥有系统资源的基本单位
可包括多个线程
不再是一个可执行的实体。所谓进程处于执行状态,实际上是指该进程中的某线程正在执行。
对于通常的进程,都是利用系统调用而进入OS内核
不论是系统进程还是用户进程,不论是进程还是线程,都必须直接或间接得到OS内核的支持
内核支持线程KST系统调用是内核提供的一组函数,是应用程序和操作系统内核之间的功能接口
内核支持线程由操作系统直接支持,在内核空间中执行线程的创建、调度和管理
优点:当有多个处理机时,一个进程的多个线程可以同时执行。
实现:直接利用系统调用进行线程控制
用户级线程指不需要内核支持而在用户空间中实现的线程
内核并不知道用户级的线程
对于用户级线程其调度仍是以进程为单位
优点:同一进程内的线程切换不需要转换到内核空间,控制简单,调度算法是进程专用的,与操作平台无关。
缺点:当线程执行一个系统调用时,不仅该线程被阻塞,进程内的其他线程也会被阻塞。
实现:不能直接利用系统调用(导致进程中的全部线程阻塞),为了取得内核服务,需借助中间系统
直接制约关系(进程同步):协调各进程间的工作而相互等待、相互交换信息而产生的制约关系
间接制约关系(进程互斥):进程共享独占型资源而必须互斥执行的间接制约关系
同步与互斥的比较
临界资源:
一次只允许一个进程使用的资源,如打印机、绘图机、变量、数据等,进程之间采取互斥方式实现对临界资源的共享,访问临界资源的那一段代码称为临界区。
临界区:
进入区:检查欲访问的临界资源此刻是否被访问
临界区:进程访问临界资源的那段代码
退出区:将临界资源的访问标志恢复为未被访问
剩余区:其余代码
同步机制应遵循的规则
1.空闲让进:临界资源空闲,允许进入
2.忙则等待:临界资源正被访问,其它试图进入临界区的资源必须等待
3.优先等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入死等状态(循环请求)
4.让权等待:当进程不能进入临界区时,应立即释放处理机,以免进程陷入 忙等
信号量机制没有进入临界区的正在等待的某进程根本无法获得临界资源而进入进程,这种等待是无结果的,是死等状态
没有进入临界区的正在等待的某进程不断的在测试循环代码段中的变量的值,占着处理机而不释放,这是一种忙等状态。
例如:
while S≤0 do no−op
S: = S−1;
只要 S≤0,wait 操作就不断地测试(忙等),因而未做到“让权等待”
整型信号量:用于表示资源数目的非负整数
记录型信号量:引入阻塞队列,信号量可以取负值
组成:整型变量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
- 生产者-消费者问题
- “哲学家进餐”问题
- 读者-写者问题
基本思想:把访问某种临界资源的所有进程的同步操作都集中起来,构成一个所谓的“秘书”进程(管程),凡是访问临界资源的进程,都需要报告“秘书”,由秘书来实现诸进程的同步
管程的定义:一个数据结构和在该数据结构上能被并发进程所执行的一组操作,这组操作能使进程同步和改变管程中的数据。
进程通信:进程间的信息交换
低级通信:信号量机制,效率低,对用户不透明
高级通信:效率高,对用户透明
高级通信机制:共享存储器系统、消息传递系统(直接通信方式:消息缓冲通信;间接通信方式:又称为信箱通信方式)、管道通信、客户机-服务器系统



