孙钟秀操作系统线程及其实现

上传人:宝路 文档编号:48252494 上传时间:2018-07-12 格式:PPT 页数:42 大小:547.97KB
返回 下载 相关 举报
孙钟秀操作系统线程及其实现_第1页
第1页 / 共42页
孙钟秀操作系统线程及其实现_第2页
第2页 / 共42页
孙钟秀操作系统线程及其实现_第3页
第3页 / 共42页
孙钟秀操作系统线程及其实现_第4页
第4页 / 共42页
孙钟秀操作系统线程及其实现_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《孙钟秀操作系统线程及其实现》由会员分享,可在线阅读,更多相关《孙钟秀操作系统线程及其实现(42页珍藏版)》请在金锄头文库上搜索。

1、2.4 2.4 线程及其实现线程及其实现2.4.1 引入多线程的动机2.4.2 多线程环境中的进程和线程2.4.3 线程的实现2.4.1 引入多线程的动机 单线程(结构)进程(Single Threaded Process) 多线程(结构)进程(Multiple Threaded process) 单线程结构进程给并发程序 设计效率带来问题进程切换开销大 进程通信代价大 进程间的并发性粒度较粗,并发度不高 不适合并行计算和分布并行计算的要求 不适合客户/服务器计算的要求。线程的概念线程的概念(1)(1)操作系统中引入进程的目的是为 了使多个程序并发执行,以改善 资源使用率和提高系统效率,操作系

2、统中再引入线程,则是为 了减少程序并发执行时所付出的 时空开销,使得并发粒度更细、 并发性更好。线程的概念线程的概念(2)(2)解决问题的基本思路:把进程的两项功能“独立分配资源” 与“被调度分派执行”分离开来,进程作为系统资源分配和保护的独立单 位,不需要频繁地切换;线程作为系统调度和分派的基本单位, 能轻装运行,会被频繁地调度和切换, 在这种指导思想下,产生了线程的概念 。操作系统支持在一个进程中执行多个线程的技术 多线程MS-DOS 支持单线程技术UNIX 支持多个用户进程,但每个进程仅仅支持 一个线程Windows, Solaris, Linux, Mach, and OS/2 支持多

3、 线程技术2.4.2 2.4.2 多线程环境中的进程与线程多线程环境中的进程与线程多线程结构进程进程 进程 PCB资源线程 控制块用户栈核心栈线程 控制块用户栈核心栈线程n 控制块用户栈 核心栈 存储区存储空间全局数据程序代码线程1线程1线程 控制块线程2线程1线程 控制块用户栈核心栈线程i线程n1. 1.多线程环境中进程的定义多线程环境中进程的定义进程是操作系统中进行除处理器外 的资源分配和保护的基本单位,它 有一个独立的虚拟地址空间,用来 容纳进程映像(如与进程关联的程 序与数据),并以进程为单位对各 种资源实施保护,如受保护地访问 处理器、文件、外部设备及其他进 程(进程间通信)。多线程

4、环境中的线程概念多线程环境中的线程概念线程是操作系统进程中能够独 立执行的实体(控制流),是 处理器调度和分派的基本单位 。线程是进程的组成部分,每 个进程内允许包含多个并发执 行的实体(控制流),这就是 多线程。线程组成线程组成线程惟一标识符及线程状态信息;未运行时保存的线程上下文;可把 线程看成是进程中一个独立的程序 计数器在操作;核心栈,核心态下工作时,保存参 数,函数调用时的返回地址等;用于存放线程局部变量及用户栈的 私有存储区。线程又称轻量进程线程又称轻量进程线程运行在进程的上下文中,并 使用进程的资源和环境。系统调度的基本单位是线程而 不是进程,每当创建一个进程时 ,至少要同时为该

5、进程创建一 个线程,否则该进程无法被调 度执行。2.2.线程的状态线程的状态线程状态有:运行、就绪和阻塞, 线程的状态转换也类似于进程。挂起状态对线程是没有意义的,如 果进程挂起后被对换出主存,则它 的所有线程因共享了进程的地址空 间,也必须全部对换出去。3.线程管理和线程库(1) 多线程技术利用线程包(库)提供线 程原语集来支持多线程运行, 有的操作系统直接支持多线程,而 有的操作系统不支持多线程。 线程包(库)可分成两种:用户空间 中运行的线程包(库)和内核中运行 的线程包(库)。 线程管理和线程库线程管理和线程库(2)(2)线程包(库)提供一组API,支持应用 程序创建、调度、撤销和管理

6、线程 的运行。基本线程控制原语:孵化(Spawn):又称创建线程。封锁(Block):又称阻塞线程。活化(Unblock):又称恢复线程。结束(Finish):又称撤销线程。4.4.并发多线程程序设计的优点并发多线程程序设计的优点 快速线程切换。 减少(系统)管理开销。 (线程)通信易于实现。 并行程度提高。 节省主存空间。线程的组织线程的组织进程中线程多种组织方式:第一种是调度员工作者模式第二种是组模式第三种是流水线模式 多线程技术的应用前台和后台工作 C/S应用模式任务异步处理 用户界面设计2.4.3 线程的实现从实现的角度看,线程分成: 用户级线程ULT(如Java ,Informix)

7、 内核级线程KLT(如OS/2)。 混合式线程(如,Solaris)。2.4.3 线程的实现2.4.3 线程的实现1.内核级线程线程管理的所有工作都由内核完成,应用程序部 分只有一个访问内核级线程设施的应用程序编程 接口(API)。内核维护进程和线程的上下文信息, 调度对象是线程。优点:内核可以调度同一个进程中的所有线程;内核自身也可以是多线程缺点:线程切换需要内核模式切换,开销较大2.4.3 线程的实现2.用户级线程u 用户级线程是指线程的管理由应用程序完成,在用户 空间中实现,内核无需感知线程的存在。u优点:线程切换的开销小线程调度是应用程序专用的可以不必修改内核,用户级线程就可以运行在任

8、何操作系 统中缺点:系统调用引起阻塞不能利用多处理技术2.4.3 线程的实现三、组合方法Solaris操作系统采用组合方法线程的创建是在用户层进行线程的调度和同步在用户层进行选择一部分用户级线程映射到一些内核级线程 上2.4.3 线程的实现组合方法组合方法进程 1进程 2进程 3进程 4进程 5进程库用户内核硬件用户级线程内核级线程轻型线程处理器2.5 Linux2.5 Linux进程与线程进程与线程进程描述符task_struct中包含:进程标识 、链接信息、调度信息、文件信息、虚 存空间信息、信号处理信息等,在v2.4 以上内核代码中,它有将近100个成员。 Linux中认为线程就是共享地

9、址空间及其 他资源的进程,故并没有单独为线程定 义数据结构,有一套在用户模式下运行 的线程库-pthread,但每个线程都拥有惟 一隶属于自己的task_struct。 LinuxLinux2.42.4进程的核心栈进程的核心栈、PCBPCB和和虚存映象虚存映象esp存放 堆栈栈 顶指针核心栈struct task_struct8KB00x080480000x400000000xc0000000内核虚存用户栈(运行时创建 )共享库主存映象区运行时堆空间 堆(malloc创建) 读/写段只读段从可执行 文件加载esp用户代码 不可见未 用brkLinuxLinux2.62.6进程的核心栈进程的核心

10、栈进程核心栈进程核心栈栈顶栈指针espthread_info*task currenttask_struct进程的核心栈、*task和task_struct结构LinuxLinux进程的运行环境信息进程的运行环境信息thread_infothread_info 结构结构 包含:进程描述符task_struct指针、当前CPU号、底层标志、线程同步标志、内核抢占计数器等。 Linux2.6 task_structLinux2.6 task_struct 增加用于调度的新成员,主要有:动态优先级prio静态优先级static_prio正常优先级normal_prio优先级数组prio_array进

11、程平均等待时间sleep_avg负载平衡权重load_weight等LinuxLinux进程状态进程状态TASK_RUNNINGTASK_INTERRUPTIBLETASK_UNINTERRUPTIBLETASK_ZOMBIE。TASK_STOPPEDTASK_SWAPPINGLinuxLinux进程状态及转换进程状态及转换wake_up_interruptible() wake_up( )TASK_ZOMBIETASK_RUNNINGTASK_UNINTERRUPTIBLE TASK_INTERRUPTIBLETASK_STOPPED占有CPU运行schedule( ) 时间 片到 sche

12、dule( ) interruptible_sleep_on( )schedulle( ) sleep_on( )wake_up()创建do_fork( )do_exit( )schedule( ) syscall_trace( ) sys_exit( )收到SIG_KILL或SIG_CONT 后,执行wake_up( )2.6Windows 20032.6Windows 2003进程与线程进程与线程进程是资源的容器,容纳各种分配 到的资源如主存、已打开文件等;线程是可被内核调度的执行实体, 可被中断,使CPU能转向另一线程 执行。进程和线程用对象来实现。Windows Windows 对象分

13、类对象分类(1)(1)Windows 是一个基于对象的操作系统, 用对象来表示所有的系统资源。 (1)执行体对象 由执行体的组件实现的对 象,用来实现各种外部功能,用户态程序( 服务器对象)可访问执行体对象。执行体对象:进程、线程、区域、文件、 事件、事件对、文件映射、互斥、信号量 、计时器、对象目录、符号连接、关键字 、端口、存取令牌和终端等。Windows Windows 对象分类对象分类(2)(2)(2)内核对象 内核实现的更原始的对 象集合,包括:内核过程对象、异步 过程调用对象、延迟过程调用对象、 中断对象、电源通知对象、电源状态 对象、调度程序对象等。内核对象对用户态代码是不可见的

14、, 仅在执行体内创建和使用,许多执行 体对象包含一个或多个内核对象,而 内核对象能提供仅能由内核来完成的 基本功能。Windows Windows 对象分类对象分类(3)(3)Windows 对象结构对象头对象体 对象管理器 进程及控制和使用的资源进程及控制和使用的资源对象句柄表虚拟地址空间描述符文件x信号量 y区域 zVAD VADVADVAD进程访问令牌可用对象句柄1句柄 2线程线程线程句柄 3对象和句柄间的关系对象和句柄间的关系应用程序执行体对象 执行体内 核用户态核心态句柄内核对象进程对象进程对象( (进程描述表结构进程描述表结构) )EPROCESS void *Uniqueproc

15、essId; KPROCESS uint32 kernelTime; uint32 UserTime; byte State; NT内核NT执行体线程对象线程对象( (进程和线程描述表结构进程和线程描述表结构) )KTHREADKTHREADEPROCESSKPROCESSETHREADKTHREADKTHREADKTHREADNT内核NT执行体调用调用CreateProcessCreateProcess函数创建进程函数创建进程创建WIN32进程的具体步骤: 打开将在进程中被执行的映像文件(.EXE)。 创建Windows2000/XP执行体进程对象。 创建初始线程(堆栈、描述表、执行体线程对

16、象) 。 通知WIN32子系统已创建了一个新的进程,以便 它可设置新的进程和线程。 启动初始线程的执行。 在新进程和线程的描述表中完成地址空间的初始化 ,加载所需的DLL,并开始程序的执行调用调用CreateThreadCreateThread函数创建线程函数创建线程创建WIN32线程的具体步骤: 在进程地址空间内为线程创建用户态堆栈;初始化线程描 述表; 调用NtCreateThread创建执行体线程对象。包括:增加进 程中的线程计数,创建并初始化执行体线程块,生成新 线程ID,从非页交换区分配线程的内核堆栈,设置线程 环境块TEB,设置线程起始地址和用户指定的WIN32起 始地址,设置KTHREAD块,设置指向进程访问令牌的指 针和创建时间; 通知WI

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号