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

上传人:壹****1 文档编号:570193189 上传时间:2024-08-02 格式:PPT 页数:42 大小:547.50KB
返回 下载 相关 举报
孙钟秀操作系统ch线程及其实现.ppt_第1页
第1页 / 共42页
孙钟秀操作系统ch线程及其实现.ppt_第2页
第2页 / 共42页
孙钟秀操作系统ch线程及其实现.ppt_第3页
第3页 / 共42页
孙钟秀操作系统ch线程及其实现.ppt_第4页
第4页 / 共42页
孙钟秀操作系统ch线程及其实现.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

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

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

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

3、dows, Solaris, Linux, Mach, and OS/2 Windows, Solaris, Linux, Mach, and OS/2 支持多支持多线程技术线程技术2.4.2 多线程环境中的进程与线程 多线程结构进程进程 进程PCB资源线程控制块用户栈核心栈线程控制块用户栈核心栈线程n控制块用户栈核心栈存储区存储空间全局数据程序代码线程1线程1线程控制块线程2线程1线程控制块用户栈核心栈线程i线程n1.多线程环境中进程的定义 进程是操作系统中进行除处理器外的资源分配和保护的基本单位,它有一个独立的虚拟地址空间,用来容纳进程映像(如与进程关联的程序与数据),并以进程为单位对各种

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

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

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

7、is)。2.4.3 线程的实现2.4.3 线程的实现1.内核级线程内核级线程线程管理的所有工作都由内核完成,应用程序部线程管理的所有工作都由内核完成,应用程序部分只有一个访问内核级线程设施的应用程序编程分只有一个访问内核级线程设施的应用程序编程接口接口(API)。内核维护进程和线程的上下文信息,。内核维护进程和线程的上下文信息,调度对象是线程。调度对象是线程。优点:优点: 内核可以调度同一个进程中的所有线程;内核可以调度同一个进程中的所有线程; 内核自身也可以是多线程内核自身也可以是多线程缺点:缺点: 线程切换需要内核模式切换,开销较大线程切换需要内核模式切换,开销较大2.4.3 线程的实现2

8、.用户级线程用户级线程u 用户级线程是指线程的管理由应用程序完成,在用户用户级线程是指线程的管理由应用程序完成,在用户空间中实现,内核无需感知线程的存在。空间中实现,内核无需感知线程的存在。u优点:优点: 线程切换的开销小线程切换的开销小 线程调度是应用程序专用的线程调度是应用程序专用的 可以不必修改内核,用户级线程就可以运行在任何操作系可以不必修改内核,用户级线程就可以运行在任何操作系统中统中缺点:缺点: 系统调用引起阻塞系统调用引起阻塞 不能利用多处理技术不能利用多处理技术2.4.3 线程的实现三、组合方法三、组合方法Solaris操作系统采用组合方法操作系统采用组合方法线程的创建是在用户

9、层进行线程的创建是在用户层进行线程的调度和同步在用户层进行线程的调度和同步在用户层进行选择一部分用户级线程映射到一些内核级线程选择一部分用户级线程映射到一些内核级线程上上2.4.3 线程的实现组合方法组合方法组合方法组合方法进程进程 1进程进程 2进程进程 3进程进程 4进程进程 5进程库进程库用户用户内核内核硬件硬件用户级线程用户级线程内核级线程内核级线程轻型线程轻型线程处理器处理器2.5 Linux进程与线程进程描述符task_struct中包含:进程标识、链接信息、调度信息、文件信息、虚存空间信息、信号处理信息等,在v2.4以上内核代码中,它有将近100个成员。 Linux中认为线程就是

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

11、nttask_struct进程的核心栈、*task和task_struct结构Linux进程的运行环境信息thread_info结构 包含:进程描述符task_struct指针、当前CPU号、底层标志、线程同步标志、内核抢占计数器等。 Linux2.6 task_struct 增加用于调度的新成员,主要有:动态优先级prio静态优先级static_prio正常优先级normal_prio优先级数组prio_array进程平均等待时间sleep_avg负载平衡权重load_weight等Linux进程状态TASK_RUNNINGTASK_INTERRUPTIBLETASK_UNINTERRUPT

12、IBLETASK_ZOMBIE。TASK_STOPPEDTASK_SWAPPINGLinux进程状态及转换 wake_up_interruptible()wake_up_interruptible()wake_up( )wake_up( ) TASK_ZOMBIE TASK_ZOMBIE TASK_RUNNING TASK_RUNNINGTASK_UNINTERRUPTIBLETASK_UNINTERRUPTIBLE TASK_INTERRUPTIBLE TASK_INTERRUPTIBLE TASK_STOPPED TASK_STOPPED 占有占有CPUCPU运行运行schedule( )

13、 schedule( ) 时间时间片到片到schedule( )schedule( )interruptible_sleep_on( )interruptible_sleep_on( )schedulle( )schedulle( )sleep_on( )sleep_on( )wake_up()wake_up()创建创建do_fork( )do_fork( )do_exit( )do_exit( )schedule( )schedule( )syscall_trace( )syscall_trace( )sys_exit( )sys_exit( )收到收到SIG_KILLSIG_KILL或或S

14、IG_CONTSIG_CONT后,执行后,执行wake_up( )wake_up( )2.6Windows 2003进程与线程进程是资源的容器,容纳各种分配到的资源如主存、已打开文件等;线程是可被内核调度的执行实体,可被中断,使CPU能转向另一线程执行。进程和线程用对象来实现。Windows 对象分类(1) Windows 是一个基于对象的操作系统,用对象来表示所有的系统资源。 (1)执行体对象 由执行体的组件实现的对象,用来实现各种外部功能,用户态程序(服务器对象)可访问执行体对象。 执行体对象:进程、线程、区域、文件、事件、事件对、文件映射、互斥、信号量、计时器、对象目录、符号连接、关键字

15、、端口、存取令牌和终端等。 Windows 对象分类(2) (2)内核对象 内核实现的更原始的对象集合,包括:内核过程对象、异步过程调用对象、延迟过程调用对象、中断对象、电源通知对象、电源状态对象、调度程序对象等。 内核对象对用户态代码是不可见的,仅在执行体内创建和使用,许多执行体对象包含一个或多个内核对象,而内核对象能提供仅能由内核来完成的基本功能。Windows 对象分类(3)Windows 对象结构对象头对象体 对象管理器 进程及控制和使用的资源对象句柄表虚拟地址空间描述符文件x信号量 y区域 z VAD VAD VAD VAD进程访问令牌可用对象句柄1句柄 2线程线程线程句柄 3对象和

16、句柄间的关系 应用程序 执行体对象 执行体 内 核 用户态 核心态句柄内核对象进程对象(进程描述表结构) EPROCESSvoid *UniqueprocessId;KPROCESSuint32 kernelTime;uint32 UserTime;byte State;NT内核NT执行体线程对象(进程和线程描述表结构) KTHREADKTHREADEPROCESSKPROCESSETHREADKTHREADKTHREADKTHREAD NT内核 NT执行体调用CreateProcess函数创建进程 创建WIN32进程的具体步骤: 打开将在进程中被执行的映像文件(.EXE)。 创建Window

17、s2000/XP执行体进程对象。 创建初始线程(堆栈、描述表、执行体线程对象)。 通知WIN32子系统已创建了一个新的进程,以便它可设置新的进程和线程。启动初始线程的执行。 在新进程和线程的描述表中完成地址空间的初始化,加载所需的DLL,并开始程序的执行调用CreateThread函数创建线程 创建WIN32线程的具体步骤: 在进程地址空间内为线程创建用户态堆栈;初始化线程描述表; 调用NtCreateThread创建执行体线程对象。包括:增加进程中的线程计数,创建并初始化执行体线程块,生成新线程ID,从非页交换区分配线程的内核堆栈,设置线程环境块TEB,设置线程起始地址和用户指定的WIN32起始地址,设置KTHREAD块,设置指向进程访问令牌的指针和创建时间; 通知WIN32子系统已创建新线程,以便设置新的进程和线程; 置新线程为准备态,把其句柄和ID返回到调用进程;调用ResumeThread,线程将被激活并调度执行。Windows进程和线程状态资源可用事件完成但资源不可用事件完成资源可用阻塞挂起终止可运行不可运行选中切换抢占或时间片到Running运行态Ready就绪态Standby准备态Terminated中止态Waiting等待态Transition过渡态

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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