2.2+进程和线程与调度.ppt_第1页
2.2+进程和线程与调度.ppt_第2页
2.2+进程和线程与调度.ppt_第3页
2.2+进程和线程与调度.ppt_第4页
2.2+进程和线程与调度.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2.2 进程和线程与调度,进程 线程 调度,2.2 进程和线程与调度,进程 线程 调度,进程概述,进程(process)定义:是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。它是系统进行资源分配和调度的一个独立单位。 进程通常由三部分组成:程序、数据集合、进程控制块PCB(Process Control Block) 进程特点: 动态性 独立性 并发行 结构化,进程概述,进程与程序的联系: 程序是构成进程的两个组成部分之一。一个进程的运行目标是执行它对应的程序。 进程与程序的区别: 程序是静态的,进程是动态的。 进程有创建、执行及撤销而消亡的生命周期,程序只是一个文件,存在于某

2、种介质上。 一个程序可对应多个进程,但是一个进程只能对应一个程序。,Windows CE进程,Windows CE(5.0)最多只支持32个进程同时运行。每个进程占据32MB的虚拟地址空间,也被称为一个Slot。 在系统启动的时候,默认会启动四个进程,NK.EXE, FILESYS.EXE, GWES.EXE及DEVICE.EXE。,Windows CE进程,Windows CE的进程也不支持环境变量(Environment Variable)和当前目录。 如果没有明确指明可执行文件的路径,那么Windows CE会按照如下的顺序搜索: 首先查找“Windows”目录 查找根目录(“”) OE

3、M所指定的搜索目录(“HKEY_LOCAL_MACHINELoaderSystemPath”) 例如:如果MyApp.exe的同一目录中存在MyFile.tex,那么下面的代码都是不正确的。 _wfopen(L”%WINDOWS%MyFile.txt, L”w”); _wfopen(L”MyFile.txt”,L”w”);,Windows CE进程,一种解决方案 TCHAR szBufMAX_PATH; DWORD dwPathLen; /得到当前程序可执行文件的完整路径 dwPathLen = GetModuleFileName(NULL,szBuf,MAX_PATH); if(!dwPat

4、hLen) return -1; /除去文件名 while(szBuf-dwPathLen!=); szBufdwPathLen+1=NULL; /拼接文件 _tcscat(szBuf,TEXT(“MyFile.txt”); /如果当前文件位于/Temp,则此时szBuf的内容为”/Temp/MyFile.txt”,Windows CE进程,创建进程的API如下: BOOL CreateProcess ( LPCWSTR lpApplicationName, /可执行文件的路径和名字,不能为NULL LPWSTR lpCommandLine, /传递启动参数(必须为Unicode字符串) LP

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

6、PROCESS_INFORMATION lpProcessInformation, /返回的进程相关的信息 ); 整个函数返回值为BOOL型,当成功创建进程后,返回值为真(TRUE) ,否则返回假(FALSE).,Windows CE进程,终止进程 最好是由WinMain()或者其他主函数返回 调用ExitThread()函数使进程的主线程退出从而终止进程 直接调用ExitProcess()函数 在当前进程终止另一个进程可以使用TerminateProcess(),2.2 进程和线程与调度,进程 线程 调度,线程概述,线程(Thread)定义:有时称轻量级进程,进程中的一个运行实体,是一个CP

7、U调度单位。 线程特点: 是进程的一个实体,可作为系统独立调度和分派的基本单位。 不拥有系统资源(只拥有从属进程的全部资源,资源是分配给进程) 一个进程中的多个线程可并发执行。(进程可创建线程执行同一程序的不同部分) 系统开销小、切换快。(进程的多个线程都在进程的地址空间活动),线程概述,线程和进程的关系是: 线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。 线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。,

8、Windows CE线程,线程是Windows CE中最小的可执行单元。Windows CE的调度系统只识别和调度线程。 一个进程可拥有的线程数理论上是没有限制的,只与当前可用的内存有关。 线程的上下文:线程占用的内存以及其他资源(如:处理器的寄存器、自己独立的栈等),这些资源构成了线程的上下文。 线程可运行在: 核心态:线程可访问操作系统所有的资源(可访问核心态的2GB虚拟地址空间)。一般来说,操作系统线程和中断服务例程运行在核心态。 用户态:应用程序和设备驱动程序的中断服务线程运行在用户态。,Windows CE线程,创建线程的API如下: HANDLE CreateThread( LPS

9、ECURITY_ATTRIBUTES lpsa, /不支持,设为NULL DWORD cbStack, /线程栈的大小,通常被设置为NULL,使用默认值 LPTHREAD_START_ROUTINE lpStartAddr, /指向线程的执行函数的指针 LPVOID lpvThreadParam, /向线程中传递一个参数 DWORD fdwCreate, /控制线程创建的附加参数 LPDWORD lpIDThread/返回新创建线程的ID ); 如果线程创建成功,那么函数返回新创建线程的句柄;否则函数 返回NULL。,Windows CE线程,结束线程 最好是从线程的执行函数返回 在线程中调用

10、ExitThread()函数可以使线程结束执行 在当前线程中终止另一个线程调用TerminateThread()函数,2.2 进程和线程与调度,进程 线程 调度,Windows CE调度,Windows CE是一个抢占式多任务(Preemptive Multitasks)操作系统。调度程序使用基于优先级的时间片算法对线程进行调度。 Windows CE中每个线程都有一个优先级,Windows CE调度系统根据线程的优先级进行调度。 Windows CE将线程分为256个优先级。0表示优先级最高,255表示优先级最低。 096-优先级高于驱动程序的实时程序使用 248255-基于WindowsC

11、E的驱动程序 153247-优先级低于驱动程序的实时程序使用 248255-非实时的普通应用程序,线程优先级分布图(例),Windows CE调度,获取和设置线程的优先级 GetThreadPriority 当前线程的优先级 SetThreadPriority 改变当前线程的优先级 (248255) CeGetThreadPriority 得到当前线程的优先级 CeSetThreadPriority 改变当前线程的优先级,Windows CE调度,时间片大小(Quantum):在线程获得处理器后,会执行特定的一段时间,然后重新调度,这段时间称做时间片大小。 默认的时间片是 100毫秒,OEM可

12、以在OAL中重新设置 获得时间片大小的API DWORD CeGetThreadQuantum( HANDLE hThread ); 此函数以线程的句柄为参数,返回值是一个32 位无符号整数,代表线程的时间片大小。,Windows CE调度,线程的状态 运行(Running) 线程正在处理器上执行。 就绪(Ready) 线程可以执行,但是此刻没有占用处理器。如果就绪的线程被调度程序选中,则占用处理器就进入运行状态。 挂起(Suspended) 创建线程时指定了CREATE_SUSPENDED 参数或者调用SuspendThread()函数都可导致线程挂起。 睡眠(Sleeping) 调用Sle

13、ep函数可使线程进入睡眠状态,处于睡眠状态的线程不能占有处理器。当睡眠时间结束后,线程转入就绪态。 阻塞(Blocked) 如果线程申请的共享资源暂时无法获得,那么线程就进入阻塞状态,处于阻塞状态的线程不能占有处理器。 终止(Terminated) 线程运行结束。,Windows CE调度,线程的状态转换图,就绪,Windows CE调度,线程A拥有最高的优先级,他会一直执行直到结束或阻塞 线程B和C使用时间片轮转算法(Round-Robin,RR)运行,线程的调度,Windows CE调度,Windows CE调度系统的特点 具有高优先级的进程如果处于就绪状态,则总是会被调度系统选中执行 如

14、果系统中存在多个优先级相同的就绪进程,这些进程以时间片轮转算法调度 如果线程的时间片大小被设置为0,那么它会一直占用处理器运行,直到线程结束或者进入阻塞、挂起及睡眠状态 调度系统不提供对线饥饿(Starvation)的自动检测,Windows CE调度,优先级反转(Priority Inversion):系统中有一些资源是由多个线程共享的,如果具有高优先级的线程申请的资源正在被低优先级线程占用,那么此时高优先级别的线程就阻塞在低优先级的线程上,反而使具有中休先级的线程先于高优先级的线程执行,这就是所谓的优先级反转。,Windows CE调度,Windows CE中解决优先级反转的方法 单级方法

15、:在这种方法中,操作系统只会激 活导致高优先级线程阻塞的一个低优先级线程 上台执行,直到释放共享资源。,优先级反转,Avoid priority inversion by keeping all threads waiting for same resource at the same priority,Thread 3,High Priority,Medium Priority,Low Priority,Thread 3,Resource Owner:,Thread 2,Thread 1,Thread 1,PriorityInversion,Preempt,Preempt,Blocked,PriorityRestored,Thread 3,Example: Thread 1 blocked waiting for resource owned by Thread 3, causing Priority Inversion,Thread 3,Blocked,Thread 1,Thread 2,Blocked,Thread API,线程创建 CreateThread 创建一个普通优先级的线程 线程优先级 GetThreadPrior

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论