第3讲补充线程PPT讲稿.ppt

上传人:石*** 文档编号:49898474 上传时间:2022-10-12 格式:PPT 页数:31 大小:1.67MB
返回 下载 相关 举报
第3讲补充线程PPT讲稿.ppt_第1页
第1页 / 共31页
第3讲补充线程PPT讲稿.ppt_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《第3讲补充线程PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第3讲补充线程PPT讲稿.ppt(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第3讲补充线程第1页,共31页,编辑于2022年,星期一WINCE中的进程与线程中的进程与线程1 进程的基本概念进程的基本概念2 线程的基本概念线程的基本概念3 系统调度系统调度 第2页,共31页,编辑于2022年,星期一1进程的基本概念进程的基本概念n进程(Process)定义:是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。它是系统进行资源分配和调度的一个独立单位。n进程通常由三部分组成:程序、数据集合、进程控制块PCB(Process Control Block)第3页,共31页,编辑于2022年,星期一1进程的基本概念进程的基本概念 进程特点:并发性:执行时间可以重叠;

2、动态性:动态的产生,动态的消亡。有生命周期,存在不同的状态;独立性:是一个相对完整的调度单位。制约性(交互性):虽然独立执行,但可能存在相互制约关系;异步性:各进程执行时间相对独立,不确定,不可预知;第4页,共31页,编辑于2022年,星期一n进程与程序的区别与联系:程序是构成进程的3个组成部分之一。一个进程的运行目标是执行它对应的程序。n进程与程序的区别:n程序是静态的,进程是动态的。n进程有创建、执行及撤销而消亡的生命周期,程序只是一个文件,存在于某种介质上。n一个程序可对应多个进程,但是一个进程只能对应一个程序。1进程的基本概念进程的基本概念第5页,共31页,编辑于2022年,星期一1进

3、程的基本概念进程的基本概念运行运行就绪就绪阻塞阻塞被调度被调度时间片用完,时间片用完,中断中断资源释放或事资源释放或事件完成件完成等待资源等待资源和事件和事件新建新建创建完毕创建完毕结束结束结束执行结束执行五种进程状态转换五种进程状态转换第6页,共31页,编辑于2022年,星期一1进程的基本概念进程的基本概念n进程之间的基本关系:n同步进程之间相互合作、协同工作的关系称为进程的同步。简单说来就是:多个相关进程在执行次序上的协调。n临界资源也称独占资源,是指在一段时间内只允许一个进程访问的资源。例如打印机,磁带机,也可以是进程共享的数据、变量等。n互斥定义:当多个进程因为争夺临界资源而互斥执行称

4、为进程的互斥。进程间的间接制约。第7页,共31页,编辑于2022年,星期一1进程的基本概念进程的基本概念nWindows CE(5.0)最多只支持32个进程同时运行。每个进程占据32MB的虚拟地址空间。n在系统启动的时候,默认会启动四个进程,NK.EXE,FILESYS.EXE,GWES.EXE及DEVICE.EXE。第8页,共31页,编辑于2022年,星期一n创建进程的API如下:BOOL CreateProcess(LPCWSTR lpApplicationName,/可执行文件的路径和名字,不能为NULL LPWSTR lpCommandLine,/传递启动参数(必须为Unicode字符

5、串)LPSECURITY_ATTRIBUTES lpProcessAttributes,/不支持,设置为NULL LPSECURITY_ATTRIBUTES lpThreadAttributes,/不支持,设置为NULL BOOL bInheritHandles,/不支持,设置为FALSE DWORD dwCreationFlags,/进程加载后的初始状态 PVOID lpEnvironment,/不支持,设置为NULL LPCWSTR lpCurrentDirectory,/不支持,设置为NULL LPSTARTUPINFOW lpStartupInfo,/不支持,设置为NULL LPPRO

6、CESS_INFORMATION lpProcessInformation,/返回的进程相关的信息 );整个函数返回值为BOOL型,当成功创建进程后,返回值为真(TRUE),否则返回假(FALSE).1进程的基本概念进程的基本概念第9页,共31页,编辑于2022年,星期一n终止进程n最好是由WinMain()或者其他主函数返回。n调用ExitThread()函数使进程的主线程退出从而终止进程。n直接调用ExitProcess()函数。n在当前进程终止另一个进程可以使用TerminateProcess()。1进程的基本概念进程的基本概念第10页,共31页,编辑于2022年,星期一2线程的基本概念

7、线程的基本概念n线程(Thread)定义:有时也称为轻量级进程,它代替以往的进程,成为现代操作系统中处理机调度的基本单位。第11页,共31页,编辑于2022年,星期一2线程的基本概念线程的基本概念n线程特点:n是进程的一个实体,可作为系统独立调度和分派的基本单位。n不拥有系统资源(只拥有从属进程的全部资源,资源是分配给进程)n一个进程中的多个线程可并发执行。(进程可创建线程执行同一程序的不同部分)n系统开销小、切换快。(进程的多个线程都在进程的地址空间活动)第12页,共31页,编辑于2022年,星期一2线程的基本概念线程的基本概念PCB程序程序数据数据进进程程地地址址空空间间TCB栈栈线程线程

8、1TCB栈栈线程线程2TCB栈栈线程线程3工作区工作区n线程是进程的一个组成部分,线程由进程创建,因此一个进程中至少存在一个线程,线程还可以创建其它线程。n进程是资源分配和保护的基本单位,线程只能在进程的地址空间活动,线程只能使用其所在进程的资源。第13页,共31页,编辑于2022年,星期一2线程的基本概念线程的基本概念n线程是Windows CE中最小的可执行单元。Windows CE的调度系统只识别和调度线程。n一个进程可拥有的线程数理论上是没有限制的,只与当前可用的内存有关。n线程的上下文:线程占用的内存以及其他资源(如:处理器的寄存器、自己独立的栈等),这些资源构成了线程的上下文。n线

9、程可运行在:n核心态:线程可访问操作系统所有的资源(可访问核心态的2GB虚拟地址空间)。一般来说,操作系统线程和中断服务例程运行在核心态。n用户态:应用程序和设备驱动程序的中断服务线程运行在用户态。第14页,共31页,编辑于2022年,星期一2线程的基本概念线程的基本概念n创建线程的API如下:HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpsa,/不支持,设为NULL DWORD cbStack,/线程栈的大小,通常被设置为NULL,使用默认值 LPTHREAD_START_ROUTINE lpStartAddr,/指向线程的执行函数的指针 LPVOI

10、D lpvThreadParam,/向线程中传递一个参数 DWORD fdwCreate,/控制线程创建的附加参数 LPDWORD lpIDThread/返回新创建线程的ID);如果线程创建成功,那么函数返回新创建线程的句柄;否则函数返回NULL。第15页,共31页,编辑于2022年,星期一2线程的基本概念线程的基本概念n结束线程n最好是从线程的执行函数返回。n在线程中调用ExitThread()函数可以使线程结束执行。n在当前线程中终止另一个线程调用TerminateThread()函数。第16页,共31页,编辑于2022年,星期一3系统调度系统调度nWindows CE是一个抢占式多任务(

11、Preemptive Multitasks)操作系统。调度程序使用基于优先级的时间片算法对线程进行调度。nWindows CE中每个线程都有一个优先级,Windows CE调度系统根据线程的优先级进行调度。nWindows CE将线程分为256个优先级。0表示优先级最高,255表示优先级最低。096-优先级高于驱动程序的实时程序使用248255-基于WindowsCE的驱动程序153247-优先级低于驱动程序的实时程序使用248255-非实时的普通应用程序第17页,共31页,编辑于2022年,星期一3系统调度系统调度PriorityComponent0-19Open Real Time Abo

12、ve Drivers20Graphics Vertical Retrace99Power management Resume Thread100-108USB OHCI UHCI,Serial109-129IRSIR1,NDIS,Touch130KITL131VMini132CxPort145PS2 Keyboard148IRComm150TAPI248Power Management249WaveDev,Mouse,PnP,Power250WaveAPI251Normal252-255Open-Applications第18页,共31页,编辑于2022年,星期一3系统调度系统调度n获取和设置

13、线程的优先级GetThreadPriority 当前线程的优先级SetThreadPriority 改变当前线程的优先级(248255)CeGetThreadPriority 得到当前线程的优先级CeSetThreadPriority 改变当前线程的优先级第19页,共31页,编辑于2022年,星期一3系统调度系统调度n线程的状态n运行(Running)线程正在处理器上执行。n就绪(Ready)线程可以执行,但是此刻没有占用处理器。如果就绪的线程被调度程序选中,则占用处理器就进入运行状态。n挂起(Suspended)创建线程时指定了CREATE_SUSPENDED 参数或 者调用SuspendT

14、hread()函数都可导致线程挂起。n睡眠(Sleeping)调用Sleep函数可使线程进入睡眠状态,处于睡眠 状态的线程不能占有处理器。当睡眠时间结束后,线程转入就绪态。n阻塞(Blocked)如果线程申请的共享资源暂时无法获得,那么线程 就进入阻塞状态,处于阻塞状态的线程不能占有处理器。n终止(Terminated)线程运行结束。第20页,共31页,编辑于2022年,星期一3系统调度系统调度就绪就绪终止终止阻塞阻塞睡眠睡眠运行运行挂起挂起运行结束运行结束睡眠结束睡眠结束得到得到资源资源ResumeSuspend得到得到CPU上下文上下文切换切换Sleep(n)第21页,共31页,编辑于20

15、22年,星期一3系统调度系统调度 对线程的控制就好比你控制了一个雇工为你干活。你对雇工的控制是通过编程来实现的。挂起线程挂起线程的意思就是你对主动对雇工说:“你睡觉去吧,用着你的时候我主动去叫你,然后接着干活”。使线程睡眠线程睡眠的意思就是你主动对雇工说:“你睡觉去吧,某时某刻过来报到,然后接着干活”。线程阻塞线程阻塞的意思就是,你突然发现,你的雇工不知道在什么时候没经过你允许,自己睡觉呢,但是你不能怪雇工,肯定你这个雇主没注意,本来你让雇工扫地,结果扫帚被偷了或被邻居家借去了,你又没让雇工继续干别的活,他就只好睡觉了。至于扫帚回来后,雇工会不会知道,会不会继续干活,你不用担心,雇工一旦发现扫

16、帚回来了,他就会自己去干活的。因为雇工受过良好的培训.第22页,共31页,编辑于2022年,星期一3系统调度系统调度nWindows CE调度系统的特点n具有高优先级的进程如果处于就绪状态,则总是会被调度系统选中执行n如果系统中存在多个优先级相同的就绪进程,这些进程以时间片轮转算法调度n如果线程的时间片大小被设置为0,那么它会一直占用处理器运行,直到线程结束或者进入阻塞、挂起及睡眠状态n调度系统不提供对线饥饿(Starvation)的自动检测第23页,共31页,编辑于2022年,星期一9.3系统调度系统调度线程并发引起的问题:n多个线程相对执行的顺序是不确定的。n线程执行顺序的不确定性会产生执

17、行结果的不确定性。n在多个线程对共享数据操作时常常会由于这种不确定性而产生错误。第24页,共31页,编辑于2022年,星期一3系统调度系统调度 解决办法:解决办法:让线程的访问共享数据的操作序列不被打断,让线程的访问共享数据的操作序列不被打断,即让这些操作序列即让这些操作序列“串行串行”执行。执行。这种方法就叫做线程同步。这种方法就叫做线程同步。第25页,共31页,编辑于2022年,星期一3系统调度系统调度临界区:临界区:临界区对象运行在用户模式。它能保证在临界区内所有被访临界区对象运行在用户模式。它能保证在临界区内所有被访问的资源不被其它线程访问,直到当前线程执行完临界区代码。问的资源不被其

18、它线程访问,直到当前线程执行完临界区代码。除了除了API外,外,MFC也对临界区函数进行了封装。临界区相关函数:也对临界区函数进行了封装。临界区相关函数:void InitializeCriticalSection(LPCRITICAL_SECTION);void EnterCriticalSection(LPCRITICAL_SECTION);void LeaveCriticalSection(LPCRITICAL_SECTION);void DeleteCriticalSection(LPCRITICAL_SECTION);第26页,共31页,编辑于2022年,星期一3系统调度系统调度vo

19、id CriticalSectionExample(void)CRITICAL_SECTION csMyCriticalSection;InitializeCriticalSection(&csMyCriticalSection);/初始化临界区变量_try EnterCriticalSection(&csMyCriticalSection);/开始保护机制/此处编写代码_finally/异常处理,无论是否异常都执行此段代码LeaveCriticalSection(&csMyCriticalSection);/撤销保护机制 第27页,共31页,编辑于2022年,星期一3系统调度系统调度MFC类

20、使用更简单:类使用更简单:CCriticalSection cs;cs.Lock();/编写代码编写代码cs.Unlock();第28页,共31页,编辑于2022年,星期一3系统调度系统调度事件对象事件对象:事件对象运行在内核模式。与用户模式不同,内核模式下线程利用等待函事件对象运行在内核模式。与用户模式不同,内核模式下线程利用等待函数来等待所需要的事件、信号,这个等待过程由操作系统内核来完成,而线数来等待所需要的事件、信号,这个等待过程由操作系统内核来完成,而线程处于睡眠状态,当接收到信号后,内核恢复线程的运行。内核模式的优点程处于睡眠状态,当接收到信号后,内核恢复线程的运行。内核模式的优点

21、是线程在等待过程中并不浪费是线程在等待过程中并不浪费CPU时间,缺点是从用户模式切换到内核模式需要时间,缺点是从用户模式切换到内核模式需要一定的时间,而且还要切换回来。一定的时间,而且还要切换回来。第29页,共31页,编辑于2022年,星期一3系统调度系统调度nDWORD WINAPI WaitForSingleObject(_in HANDLE hHandle,_in DWORD dwMilliseconds);n参数参数1为为HANDLE类型,参数类型,参数2为为DWORD类型。此函数等待参数类型。此函数等待参数1标识的事件,等待时间为参数标识的事件,等待时间为参数2的值,单位的值,单位m

22、s。如果不超时,当事。如果不超时,当事件成为有信号状态时,线程唤醒继续运行。件成为有信号状态时,线程唤醒继续运行。第30页,共31页,编辑于2022年,星期一3系统调度系统调度HANDLE WINAPI CreateEvent(_in LPSECURITY_ATTRIBUTES lpEventAttributes,_in BOOL bManualReset,_in BOOL bInitialState,_in LPCTSTR lpName);n函数函数CreateEvent创建一个事件对象,参数创建一个事件对象,参数1必须为必须为NULL,参数,参数2指定是否手工重指定是否手工重新设置事件对象

23、的状态。新设置事件对象的状态。如果为如果为FALSE,当等待函数接到信号并返回后此事件对象被自动置为无信,当等待函数接到信号并返回后此事件对象被自动置为无信号状态。这时等待此事件对象的其它线程就不会被唤醒,因为事件对象已经号状态。这时等待此事件对象的其它线程就不会被唤醒,因为事件对象已经被置为无信号状态。被置为无信号状态。如果参数如果参数2设置为设置为TRUE,当等待函数接到信号并返回后事件对象不会被自动,当等待函数接到信号并返回后事件对象不会被自动置于无信号状态,其它等待此事件对象的线程都能够被唤醒。置于无信号状态,其它等待此事件对象的线程都能够被唤醒。nBOOL SetEvent(HANDLE hEvent);第31页,共31页,编辑于2022年,星期一

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com