- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 第十八讲 线程概念,用户级线程实现 目的与要求:掌握线程概念,线程与进程区别及用户级线程的实现. 重点与难点:线程如何从原进程概念中剥离出来,线程控制块,线程状态.用户级线程实现方法及优缺点. 线程的引入 传统进程既是除了处理机以外的资源分配单位(如内存占用单位)又是执行单位。随着共享内存多外理机的发展,为了支持进程内多道程序设计而引入线程。 8.1.1. 对称多处理 对称多处理机指共享内存且多个处理机都可响应中断且可以运行用户和核心程序的多处理机系统。 第八章 并行与分布式操作系统 8.1并行操作系统 处理机 Cache 处理机 Cache 处理机 Cache ... 主存 总线适配器 I/O总线 系统总线 打印机 硬盘 对称多处理机系统结构 新结构对操作系统的要求: 多任务并行支持,希望同一进程的程序可同时在多CPU上运行,同时还共享进程存储空间。 同步支持,当运行在不同CPU上的程序访问共享数据时要有利用硬件支持的同步手段(如:Test-and-set指令)。 每个CPU都应该能够运行操作系统调度程序自行调度。 多CPU cache一致性的要求(全部由硬件实现或由硬件和操作系统合作实现)。 8.1.2 线程概念 将原进程的PCB内容分成两部分。 ·描述进程资源,空间的部分。 ·描述执行现场,状态及调度的部分。 将第二部分内容作为线程描述表的内容且进程内允许多个线程存在。 一. 进程与线程区别 新的进程被定义为:资源分配单位。 线程定义为:CPU分配单位(执行单位)。 新进程描述: 一个独立的进程空间,可装入进程映像。 一个独立的进程关联的执行文件。 进程所用系统其它资源。 一个或多个线程。 进程在创建时一般同时创建好第一个线程,其它线程按需要由用户程序请求创建。 线程TCB描述: 线程标识信息; 状态和调度信息; 现场信息(组织成栈帧); 线程私有存储区; 指针指向PCB。 传统进程与多线程进程比较 PCB 用户 栈 用户 空间 描述 核心 栈 a.传统进程模型 用户 栈 核心 栈 用户 栈 核心 栈 用户 空间 描述 PCB TCB TCB ... b.多线程进程模型 二.多线程应用 多线程可以方便实现CPU之间的并行,CPU与外设间的并行。多线程与多进程比,多线程天然地共享空间,而多进程要通过如shmget系统调用才可共享部分用户空间。 举例:有两个任务:任务1和任务2,把它们组织到单进程中,和多线程中运行的时间花费比较。 任务1 等 I/O 任务1 任务2 等 I/O 任务2 a.单线程进程单CPU执行 任务1 任务1 等 I/O 任务2 任务2 等 I/O 线程1 处理机1 线程2 处理机2 b.多线程进程多CPU执行 线程1 线程2 CPU切换 任务1 等 I/O 等 CPU 任务1 任务2 等 I/O 任务2 c.多线程进程单CPU执行 等CPU 三.线程状态变化 进程产生时同时产生第一个线程,其它线程在以后由任一线程请求创建。 线程创建后运行过程中三个主要状态是:运行、就绪、阻塞。 运行 就绪 结束 阻塞 结束 被调度 时间片 完 或被剥 夺 等待事 件 事件发 生 重新初始 化 创建 原进程的运行、就绪、阻塞状态已变为针对线程,而原挂起状态反映进程映像在不在内存故还是进程的状态。 四、线程间通讯与同步。 线程间通过共享空间通讯。可以通过共享变量进行通讯。 可以通过同步原语(系统调用/或利用硬同步指令的同步函数),实现互斥与同步。 五.多线程编程接口举例 UNIX的pthread库所提供的有关线程函数。 1.创建线程 int pthread_create (pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void *), void *arg); 2. 等待某线程结束 int pthread_join(pthread_t tid,void **status); tid是我们必须要等待线程的tid, 3. 获得正在执行线程的ID pthread_t pthread_self(void); 4. 将线程变为独立状态 int pthread_detach(pthread_t tid); 线程或者是可汇合的(joinable)或者是独立的(detached)。当可汇合的线程终止时,其线程ID和退出状态将保留,直到另外一个线程调用pthread_join。独立的线程终止时,所有的资源都释放,我们不能等待它终止。如果一个线程需要知道另一个线程什么时候终止,最好保留第二个线程的可汇合性。 5. 线程结束 void pthread_exit(void *status); 6.加锁/解锁
您可能关注的文档
最近下载
- FLEX SYSTEM EN2092 1GB ETHERNET调试文档模板.pdf VIP
- 2024年9月中国汽车产销报告.pdf VIP
- 2024年11月广东深圳市福田区选用机关事业单位辅助人员和社区专职工作者143人笔试备考题库及答案解析.docx VIP
- 流体力学 课件 第6章 气体射流.pptx
- 武汉理工大学材料科学基础课件(全套).pdf
- 风貌改造工程施工组织设计.doc
- 药品生物检定技术 全套教案.doc
- 浅谈双碳战略下的自来水厂碳核算碳减排经验分享_供水技术讲座资料课件.pptx
- 2024广州铁路局机考.pdf
- 11《动物的眼睛》教学设计-2023-2024学年科学二年级下册青岛版.docx VIP
文档评论(0)