参考书籍:《计算机操作系统》第四版 汤小丹等编著
- 点此链接可跳转到:操作系统笔记整理——目录索引页
- 线程的概念
- 线程的运行状态
- 多线程中的进程
- 线程的实现
- 内核支持线程KST
- 用户级线程ULT
- 进程同步与互斥
- 信号量机制
- wait、signal操作小结
- 经典进程同步问题
- 管程机制
- 进程通信
基本属性:资源的拥有者,独立调度单位 引入线程的目的:减少并发执行时的时空开销。因为进程的创建、撤销、切换交费时间。
线程是系统独立调度和分派的基本单位,基本上不拥有系统资源,只需要少量的资源(指令指针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
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?