第七讲操作系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020年2月11日星期二3时46分53秒内蒙古工业大学1第六讲线程教学目的掌握线程的基本概念掌握线程与进程的区别掌握线程的分类与执行2020年2月11日星期二3时46分53秒内蒙古工业大学2教学内容3.9线程的概念3.10线程分类与执行第六讲线程2020年2月11日星期二3时46分53秒内蒙古工业大学3线程的引入第六讲线程进程的创建开销大许多操作系统中,都有一个最多进程数的限制。例如:Linux2.4:内存大小/内核中堆栈大小/2。若内存512MB,则512*1024*1024/8192/2=32768系统提供的资源有限,特别是内存资源,创建进程首先开销的是内存,因此,系统中并发进程的个数有限。有限的并发进程个数,限制了系统的效率。2020年2月11日星期二3时46分53秒内蒙古工业大学4第六讲线程进程的切换开销大许多操作系统中,都有一个最多进程数的限制。例如:Linux2.4:内存大小/内核中堆栈大小/2。若内存512MB,则512*1024*1024/8192/2=327682020年2月11日星期二3时46分53秒内蒙古工业大学5第六讲线程线程的定义线程(Thread)是进程的一部分。线程也是CPU调度的一个基本单位。线程也叫轻量级进程或轻权进程(LightWeightProcess)单线程进程2020年2月11日星期二3时46分53秒内蒙古工业大学6第六讲线程多线程进程2020年2月11日星期二3时46分53秒内蒙古工业大学7第六讲线程进程与线程的区别线程和进程都是处理机调度的单位线程切换只改变自己拥有的CPU资源,而不改变进程的其他资源。TCB存储的信息远远小于PCB的信息TCB中主要是堆栈(用户/系统堆栈)和寄存器数据。2020年2月11日星期二3时46分53秒内蒙古工业大学8第六讲线程进程是资源分配的单位进程是系统中资源分配的基本单位,进程具有完整的虚拟地址空间。进程不依赖线程而独立存在。进程可以独立存在2020年2月11日星期二3时46分53秒内蒙古工业大学9第六讲线程多线程与进程的关系2020年2月11日星期二3时46分53秒内蒙古工业大学10第六讲线程线程的适用范围在具有多个任务的系统中,为了减少进程创建、切换和撤销的时间。适用于多处理机系统、网络系统和分布式系统。2020年2月11日星期二3时46分53秒内蒙古工业大学11第六讲线程服务器中的文件管理或通信控制文件服务器可以对同时请求的多个任务,派生线程进程处理。前后台处理2020年2月11日星期二3时46分53秒内蒙古工业大学12第六讲线程异步处理如果同一个程序的两部分,在执行上没有顺序,可以采用线程处理。批量数据处理或网络中的发送/接收信息2020年2月11日星期二3时46分53秒内蒙古工业大学13第六讲线程线程的分类用户级线程(userlevelthreads)操作系统内核只对进程进行管理。线程的管理是通过操作系统提供的一个在用户空间执行的线程库实现。线程库的功能线程的创建、调度、撤销、线程间通信、执行以及存储线程上下文的功能。2020年2月11日星期二3时46分53秒内蒙古工业大学14第六讲线程用户级线程与进程的区别用户级线程的调度算法和过程由用户选择和决定,与操作系统关。进程是操作系统调度的基本单位。用户级线程的调度过程只进行线程上下文切换而不进行上处理机的上下文切换,且内核不参与线程上下文切换。线程的状态与进程状态无关。2020年2月11日星期二3时46分53秒内蒙古工业大学15第六讲线程核心级线程(kernel-levelthreads)线程的管理功能由操作系统内核完成。内核提供相应的系统调用和应用程序接口API。与用户级的区别核心级线程既可以被调度到一个处理机上并发执行,也可以调度到不同的处理机上并行执行。2020年2月11日星期二3时46分53秒内蒙古工业大学16第六讲线程核心级线程状态与进程状态一致核心级线程上下文切换时间大于用户线程的上下文切换下面是在VAX单处理机器上的对比实验。2020年2月11日星期二3时46分53秒内蒙古工业大学17第六讲线程用户级线程不需要系统的特殊支持典型应用WindowsNT或OS/22020年2月11日星期二3时46分53秒内蒙古工业大学18第六讲线程线程的执行特性线程的状态线程有三种基本状态:就绪、执行和阻塞。2020年2月11日星期二3时46分53秒内蒙古工业大学19第六讲线程状态转换的操作派生(spawn)线程在执行过程中需要等待某个事件发生。阻塞(block)线程在进程内派生,既可以由进程派生,也可以由线程派生。新派生地线程进入就绪队列。2020年2月11日星期二3时46分53秒内蒙古工业大学20第六讲线程激活(unblock)阻塞线程等待的事件发生,则该线程被激活并进入就绪队列。调度(schedule)选择一个就绪线程进入执行状态。结束(finish)线程执行结束,寄存器上下文以及堆栈内容被释放。2020年2月11日星期二3时46分53秒内蒙古工业大学21第六讲线程线程的同步同一进程中的线程共享该进程的所有资源和地址空间,所以线程间存在着同步关系。提供线程服务的同时系统也提供线程的同步。线程同步控制机制与进程相同。不在重复。2020年2月11日星期二3时46分53秒内蒙古工业大学22第六讲线程Windows系统下的线程应用API函数CreateThread()函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程的句柄ExitThread()函数用于结束本线程NT中处理机的分配对象为线程。2020年2月11日星期二3时46分53秒内蒙古工业大学23SuspendThread(HANDLEhThread);用于挂起指定的线程。一个线程可被多次挂起和多次激活。在线程内有一个挂起计数(suspendcount),挂起操作使该计数加1,激活操作便该计数减1;当挂起计数为0时,线程恢复执行。第六讲线程ResumeThread(HANDLEhThread);递减指定线程的挂起计数,挂起计数为0时,线程恢复执行。2020年2月11日星期二3时46分53秒内蒙古工业大学24第六讲线程#includestdio.h#includewindows.h#includeiostream.h#includewinbase.hvoidSubThread(void){inti;for(i=0;i5;i++){coutSubThreadiendl;Sleep(2000);}}线程实例2020年2月11日星期二3时46分53秒内蒙古工业大学25第六讲线程voidmain(void){coutCreateThreadendl;//Createathread;DWORDIDThread;HANDLEhThread;hThread=CreateThread(NULL,//nosecurityattributes0,//usedefaultstacksize(LPTHREAD_START_ROUTINE)SubThread,//threadfunctionNULL,//nothreadfunctionargument0,//usedefaultcreationflags&IDThread);//returnsthreadidentifier2020年2月11日星期二3时46分53秒内蒙古工业大学26第六讲线程//Checkthereturnvalueforsuccess.if(hThread==NULL)coutCreateThreaderrorendl;inti;for(i=0;i5;i++){coutMainThreadiendl;if(i==1){if(SuspendThread(hThread)==0xFFFFFFFF){coutSuspendthreaderror.endl;}else{coutSuspendthreadisok.endl;}}2020年2月11日星期二3时46分53秒内蒙古工业大学27if(i==3){if(ResumeThread(hThread)==0xFFFFFFFF){coutResumethreaderror.endl;}else{coutResumethreadisok.endl;}}Sleep(4000);}}第六讲线程2020年2月11日星期二3时46分53秒内蒙古工业大学28第六讲线程

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功