- 1、本文档共103页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.7.3 线程的状态和线程控制块 线程运行的三个状态: 执行状态、就绪状态、阻塞状态 2. 线程控制块TCB TCB记录所有用于控制和管理线程的信息记录。通常有:线程标识符、一组寄存器、线程运行状态、优先级、线程专有存储区(用于线程切换时存放现场保护信息等)、信号屏蔽、堆栈指针(指向用户自己堆栈的指针和指向核心栈的指针)。 2.7.3 线程的状态和线程控制块 3. 多线程OS中的进程属性 (1) 进程是一个可拥有资源的基本单位。 多个线程可并发执行 在OS中的所有线程都只能属于某一个特定进程。由进程为这些线程提供资源及运行环境,使它们能并发执行。 (3) 进程已不是可执行的实体 在多线程OS中,线程是独立运行的基本单位。此时,进程已不再是一个基本的可执行实体。 2.8 线程的实现 2.8.1 线程的实现方式 1. 内核支持线程KST( Kernel Supported Threads) 线程在内核的支持下运行的,在内核空间实现线程的创建、撤消和切换等。 2. 用户级线程ULT( User Level Threads) 线程在用户空间中实现,与内核无关。 3. 组合方式 在组合方式线程系统中,内核支持多个内核支持线程的建立、调度和管理,同时也允许用户应用程序建立、调度和管理用户级线程。 2.8.2 线程的实现 内核支持线程的实现 PTDA 进程资源 TCB # 1 TCB # 2 TCB # 3 图 任务数据区空间 TCB中保存:线程标识符、优先级、线程运行的CPU状态等信息。 系统在创建一个新进程时,便为之分配一个任务数据区PTDA(Per Task Data Area);每当进程要创建一个线程时,便为新线程分配一个TCB,将有关信息填入该TCB中,并为之分配必要的资源。内核支持线程的创建、撤消均与进程相似;其调度与进程相似。 2. 用户级线程的实现 1) 运行时系统(Runtime System) 所谓“运行时系统”,实质上是用于管理和控制线程的函数(过程)的集合。运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。 2.8.2 线程的实现 用户级线程是在用户空间实现的。所有的用户级线程都具有相同的结构,它们都运行在一个中间系统上。 用户级线程由运行时系统的线程切换过程来执行切换任务。当用户级线程需要系统资源时,将该请求传送给运行时系统,由后者通过相应的系统调用来获得资源。 2) 内核控制线程 又称轻型进程LWP(Light Weight Process)。每一个进程可拥有多个LWP,每个LWP都有自己的数据结构,可以共享进程所拥有的资源,LWP可通过系统调用来获得内核提供的服务。当一个用户级线程运行时,只要将它连接到一个LWP上,此时它便具有了内核支持线程的所有属性。 2. 用户级线程的实现 图 2 – 20 利用轻型进程作为中间系统 2) 内核控制线程 1. 线程的创建 应用程序在启动时,通常仅有一个线程在执行,即“初始化线程”。它可根据需要,利用一个线程创建函数再去创建若干个线程。在线程创建函数执行完后,将返回一个线程标识符供以后使用。 2.8.3 线程的创建和终止 终止线程的方式有两种:一种是在线程完成了自己的工作后自愿退出;另一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。 2. 线程的终止 3) 利用管程解决生产者—消费者问题 建立管程 producerconsumer (简称PC): put(x)过程。生产者利用该过程将自己生产的产品投放到缓冲池中,并用整型变量count表示在缓冲池中已有的产品数目。当count≥N时,表示缓冲池已满,生产者须等待。 get(x)过程。消费者利用该过程从缓冲池中取出一个产品,当count≤0时,表示缓冲池中已无可取的产品。 条件变量:notfull, notempty。分别有两个过程cwait和csignal对其操作: cwait(condition)过程:当管程被一个进程占用时,其他进程调用该过程时阻塞,并挂在条件condition的队列上; csignal(condition)过程:唤醒在cwait执行后阻塞在条件condition队列上的进程。 3) 利用管程解决生产者—消费者问题 Monitor producerconsumer{ item buffer[N]; int in,out; condition notfull, notempty; int count; public:
您可能关注的文档
最近下载
- 患者权利(医院)B-03 患者知情同意.pdf VIP
- 画法几何及工程制图习题集(第3版)机械类_王兰美课后习题答案解析.pdf
- PICC在新生儿中的运用.ppt
- 2025年湖南艺术职业学院单招面试模拟试题及答案解析.docx
- - 投影机 - 富可视 - IN3138HD说明书.pdf
- 2024年新疆维吾尔自治区高职单招面试试题及答案解析.docx
- 小学语文作业设计有效性策略研究课题中期报告.pdf VIP
- 二年级上册浙科版综合实践第二课 管理我的书包 - 活动B书包变轻了.pptx VIP
- 应用文写作之活动报道高中英语作文课课件 2023届高考英语写作专项.pptx
- GBT43562-2023 畜禽屠宰操作规程 羊.pdf
文档评论(0)