为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

WINCE进程、线程与调度

2014-03-15 44页 ppt 194KB 15阅读

用户头像

is_309566

暂无简介

举报
WINCE进程、线程与调度null第二章 Windows CE体系结构与功能 第二章 Windows CE体系结构与功能 教学目的 教学目的 熟悉进程和线程的定义方法;掌握Windows CE5.0线程调度的原则及方法 项目4:多线程-PDA下多任务实现 项目4:多线程-PDA下多任务实现 本节课程主要知识点 Windows CE的结构功能概览 进程与线程的定义(重点) Windows CE5.0的线程调度(难点)null教学重点 进程与线程的定义及调用方法 教学难点 线程的调度方法 2.1 Windows CE的结构功能概览2.1 Window...
WINCE进程、线程与调度
null第二章 Windows CE体系结构与功能 第二章 Windows CE体系结构与功能 教学目的 教学目的 熟悉进程和线程的定义方法;掌握Windows CE5.0线程调度的原则及方法 项目4:多线程-PDA下多任务实现 项目4:多线程-PDA下多任务实现 本节课程主要知识点 Windows CE的结构功能概览 进程与线程的定义(重点) Windows CE5.0的线程调度(难点)null教学重点 进程与线程的定义及调用方法 教学难点 线程的调度方法 2.1 Windows CE的结构功能概览2.1 Windows CE的结构功能概览2.1.1 Windows CE的层次体系结构 Windows CE属于典型的微内核操作系统 Windows CE采用层次化的方法 硬件层 OEM层 操作系统层 应用程序层 硬件层和OEM层由OEM厂商提供;操作系统层由微软公司提供;应用程序层由独立的软件开发商提供nullInternet客户 端服务第三方应用程序Windows CE应用程序用户界面 (国际化)应用和服务CoreDll对象存储多媒体技术GWES设备管理器网络内核OEM抽象层BootLoader配置文件驱动程序硬件层OEM层操作系统层应用程序层图2.1 Windows CE的层次化体系结构null2.1.2 硬件层 嵌入式系统的硬件有如下特点: 处理器体系结构不统一 硬件资源通常受限 外部设备种类繁多 有实时性和可靠性要求 2.1.3 OEM层 逻辑上位于硬件和Windows CE操作系统之间的一层硬件相关代码 作用是对具体的硬件进行抽象,得到统一的接口 包括OEM抽象层、引导程序Bootloader、配置文件(Configuration File)和驱动程序(Device Driver)nullOEM抽象层是整个OEM层的主体。负责Windows CE内核与硬件的通信,并进行硬件平台的初始化;物理上是内核的一部分 引导程序Bootloader是在硬件开发板上执行的一段代码,主要功能是初始化硬件,加载操作系统映像到内存,然后跳转到操作系统代码去执行。 配置文件是一些包含配置信息的文件 驱动程序直接与硬件外设打交道,是应用程序或操作系统与硬件外设交互的桥梁 与Windows CE的OEM层相对应的概念:BSP BSP是介于主板硬件和操作系统之间的一层。目的是为了支持操作系统,使之能够正常地运行于硬件主板上null2.1.4 操作系统层 Windows CE的进程管理、线程管理、处理机管理、调度、物理内存和虚拟内存管理、文件系统及设备管理功能的实现都位于这一层 操作系统的基本功能放在多个独立的进程里实现 内核NK.EXE 对象存储FILESYS.EXE 设备管理系统DEVICE.EXE 图形系统GWES.EXE 服务SERVICES.EXE 由于Windows CE是一个可裁剪的嵌入式操作系统,所以 未必所有的Windows CE系统中都有上述的几个进程null图2.2 Windows CE的模块图null2.1.4.1 系统调用与CoreDll.dll 主要功能负责应用程序与Windows CE通信以及完成Windows CE的系统调用(System Call) 系统调用的过程 应用程序首先直接调用CoreDll.dll中的一个包装(Wrapper)函数,此包装函数为真正的系统调用准备所需的参数。进程内部的调用 CoreDll.dll发起一个异常。其作用是把执行权重新由应用程序交给操作系统null操作系统内核会捕捉所有的异常,当操作系统捕获到此异常时,也就获得了CPU。在Windows CE上,NK.EXE会处理这个软件终端。此时进行系统调用的应用程序进程就挂起,执行就转入NK.EXE NK.EXE根据系统调用的不同,找到具体实现该系统调用的进程。此进程可能是NK.EXE,也可能不是。若不是则执行再次跳转,把执行转到具体实现系统调用的进程去执行 实现此系统调用的进程得到执行机会,会根据具体系统调用的不同而完成系统调用希望实现的功能,然后返回。null当实现系统调用的进程执行结束返回的时候,整个系统调用也就结束。应用程序从CoreDll.dll的调用处返回,然后继续执行。 CreateWindow()、CreateProcess()、CharLowerBuff() User mode threadWin32 API ThunksFunction CallCoredll.dllApp.exeKernel TrapWin32 API DispatchNk.exeJumpFunction CodeGWES. EXEKernel CallReturn Callnull2.1.4.2 内核NK.EXE 所有基于Windows CE的系统中都存在的核心进程。实现了Win32 API核心中进程创建加载、线程调用、中断处理和内存管理等核心功能。 NK.LIB + OAL.LIB = NK.EXE 微软提供了预先编译的 NK.LIB 库文件。其代码与CPU指令体系结构相关而与具体的外设无关。 OAL.lib是OEM层中的OAL代码编译后的输出 2.1.4.3 图形系统GWES.EXE 图形窗口事件系统 (Graphical Windowing and Event System,GWES)null负责操作系统中与图形界面相关的部分及用户的输入。 Windows CE5.0中将电源管理从GWES.EXE中移走 2.1.4.4 对象存储FILESYS.EXE 文件系统和数据存储统称为对象存储。 对象存储包括文件系统、Windows CE数据库和系统注册 文件系统包括RAM文件系统和ROM文件系统 Windows CE数据库提供结构化的数据存储 系统注册表负责存储系统和应用程序的配置信息null2.1.4.5 设备管理DEVICE.EXE 负责加载、卸载和管理所有不被GWES.EXE管理的驱动程序。如总线驱动程序、电源管理DLL等。 2.1.4.6 服务SERVICES.EXE 负责加载系统服务的进程,如FTP, TELNET, HTTPD (Web), UPnP, SMB, 其它… 2.1.5 应用程序层 位于Windows CE层次结构的最顶层。 每个应用程序都是Windows CE中的一个单独进程,其运行在权限较低的处理机状态下。使用操作系统提供的API系统调用与操作系统交互。2.2 进程、线程与调度2.2 进程、线程与调度进程是程序的一次运行活动,是操作系统中分配资源的基本单位。 进程具有动态性、并行性和异步独立性。 动态性:任务状态是不断变化的。 并行性:系统中同时存在多个任务,它们宏观上是同时运行的 异步独立性:每个任务各自按相互独立的不可预知的速度运行。进程和程序的区别进程和程序的区别程序是静态的,进程是动态的。 进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的。 一个程序可对应多个进程,反之亦然。 进程具有创建其他进程的功能,而程序没有。生活中的实例生活中的实例电影胶片相当于程序,放电影的过程相当于进程。 电影胶片是静态的,放电影的过程是动态的。 电影胶片可以长期保存,放电影的过程是有时间的,短暂的。 一个电影胶片可以对应多个放映活动。 一次放映过程可以放映多部电影。进程的组成进程的组成进程是由程序、数据及进程控制块三部分组成。 进程的程序部分描述了进程所要完成的功能。 如果一个程序能为多个进程同时共享执行,那么,这部分就应以再入码(reentry code)编制,它是进程执行时不可修改的部分。进程的数据进程的数据进程的数据集合部分包含两方面内容,即程序运行时所需要的数据和工作区。 数据集合部分通常由一个进程独占,为进程的可修改部分。 程序和数据集合部分是进程存在的物质基础,是进程的实体。进程控制块PCB进程控制块PCB进程控制块PCB (Process Control Block),它包含了进程的描述信息、控制信息、资源管理信息和进程的现场保护信息,是进程动态特性的集中反映。 一般包含以下内容: 进程标识名和标识数 位置信息 进程的状态信息 进程的优先权 进程间进行通讯的有关信息 进程现场保护区2.2.1 Windows CE的进程2.2.1 Windows CE的进程Windows CE5.0是多进程多线程操作系统,最多支持32个进程同时运行,理论上每一个进程可拥有无数个线程。 系统启动时,默认启动最少4个进程: NK.exe 提供有关内核的服务 FILESYS.exe 提供有关文件系统服务 GWES.exe 提供对GUI系统的支持 Device.exe 载入管理设备驱动程序Windows CE的进程结构Windows CE的进程结构在Windows CE中,进程本身不参加系统的调度,也没有优先级和上下文。 进程创建时,会创建一个主线程作为该进程默认的执行体。 每个进程占据32MB的虚拟内存空间。 4G的虚拟内存分成若干个Slot,Slot0-32分配给系统的32个进程使用。 其中Slot 0用于映射当前正在执行的进程。进程在内存中进程在内存中nullWindows CE的进程不支持环境变量和当前目录 P35 应用程序使用CreateProcess()函数创建进程。若创建成功,则函数返回非0;若失败函数返回FALSE。函数原型为 BOOL CreateProcess( LPCTSTR lpszImageName, //可执行文件的路径和名字 LPTSTR lpszCmdLine,Null,Null,False, //命令行参数 DWORD fdwCreate,Null,Null,Null, //执行进程加载后的状态 LPPROCESS_INFORMATION lppiProcInfo //返回的进程相关信息 ); null第1个参数是可执行文件的路径和名称,如果没有明确指明可执行文件的路径,那么Windows CE会按照如下顺序搜索: Windows目录(“\Windows”); 对象存储的根目录(“\”); OEM所指定的搜索目录(在系统注册表的”HEKY_LOCAL_MACHINE\Loader\SystemPath”下添加) 第2个参数lpszCmdLine指定要传递给新进程的命令行参数,命令行参数必须以Unicode字符串的形式传递 fdwCreate指定进程加载后的初始状态 null 最后一个参数lppiProcInfo指向一个PROCESS_INFORMATION结构体,此结构体返回进程和主线程的句柄以及ID。 进程终止的最佳方法是从WinMain()函数返回。还有另外几种方法 ExitThread()使进程的主线程退出从而终止进程 ExitProcess() TerminateProcess()表2.1 CreateProcess的fdwCreate参数null2.2.2 线程 Windows CE中最小的可执行单元。Windows CE的调度系统只识别和调度线程 进程中所有的线程共享进程的所有资源 一个进程拥有的线程数理论上没有限制,只与当前可用的内存有关 线程占用内存、处理器的寄存器和栈。每个线程有自己独立的栈。这些资源构成了线程的上下文。null 线程可运行在核心态或用户态 核心态,线程可访问操作系统所有的资源。一般操作系统线程和中断服务例程运行在核心态 应用程序和设备驱动程序的中断服务线程运行在用户态 线程有五种状态,分别为运行、挂起、睡眠、阻塞、终止。 应用程序使用CreateThread()函数创建一个新线程。原型如下:null HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpsa, DWORD cbStack, LPTHREAD_START_ROUTINE lpStartAddr, LPVOID lpvThreadParam, DWORD fdwCreate, LPDWORD lpIDThread ); null如果线程创建成功,函数返回新创建线程的句柄;否则返回NULL 若将fdwCreate参数设置为CREATE_SUSPENDED来创建一个起始状态为挂起的线程,否则线程创建结束后就会立即执行。 线程结束最好的方法是从线程的执行函数返回。另Windows CE提供了ExitThread()和TerminateThread()函数来结束线程。null2.2.3 调度 Windows CE是一个抢占式多任务操作系统。调度程序使用基于优先级的时间片算法对线程进行调度。 Windows CE每个线程都有一个优先级,调度系统根据线程的优先级进行调度 线程可拥有256个优先级。0为优先级最高,255表示优先级最低。null0-96:供优先级高于驱动程序的实时程序使用 97-152:基于Windows CE的驱动程序 153-247:供优先级低于驱动程序的实时程序使用 248-255:非实时的普通应用程序 驱动程序和应用程序可使用CeGetThreadPriority()和CeSetThreadPriority()函数来获取和设置线程的优先级 每个线程都有一个时间片大小,默认为100ms。此时间片大小可用CeGetThreadQuantum()函数获得线程获得处理器后,会执行特定的一段时间,然后重新调度null线程的运行状态: 运行(Running) 线程正在处理器上执行 就绪(Ready) 线程可执行,但此刻并没有占用处理器。若被调度程序选中,则占有处理器就进入运行状态 挂起(Suspended) 创建线程时指定CREATE_SUSPENDED参数或调用SuspendThread函数都可导致线程挂起。此状态不占用处理器。每个线程都有一个挂起计数,SuspendThread函数用来增加挂起计数,ResumeThread函数使线程挂起计数减1.当挂起计数为0时,线程转入就绪态。 睡眠(Sleeping) 调用Sleep函数可使线程进入睡眠状态。此状态不能占有处理器。睡眠结束后,线程转入就绪态null阻塞(Blocked) 如果线程申请的共享资源暂时无法获得,此时线程进入阻塞状态,此状态不占有处理器。当共享资源可以获得后,线程转入就绪态。 终止(Terminated) 线程运行结束运行就绪阻塞睡眠挂起终止上下文 切换·得到 处理器·睡眠结束Resume运行结束Sleep(n)得到 资源Suspend申请被其 他线程占 有的共享 资源图 线程状态转换图基于优先级不可抢占调度基于优先级不可抢占调度一旦某个线程占有了处理器就一直运行下去,直到该线程由于自身的原因自愿放弃处理器,线程调度程序才按优先级进行重调度,让其它线程运行。基于优先级可抢占调度基于优先级可抢占调度任何时刻都严格按照高优先级线程在处理器上运行的原则进行线程调度,或者说,在处理器上运行的线程永远是就绪线程中优先级最高的线程。 嵌入式操作系统要保证实时性,必须要求可抢占调度。轮转调度轮转调度是指当有两个或多个就绪线程具有相同的优先级且它们是就绪线程中优先级最高的线程时,线程调度程序按照这组线程就绪的先后次序调度第一个线程,让它运行一段时间。 运行的这段时间称为时间片。 当任务运行完一个时间片后,该线程即使还没有运行完成,也必须释放处理器让下一个与它相同优先级的线程运行。null举例 线程A拥有最高的优先级,他会一直执行直到结束或阻塞 线程B和C使用Round-Robin算法运行 在round-robin 每个线程都运行一个固定的时间,叫做时间片 优先级数字越小,优先级越高nullWindows CE调度系统的特点: 具有最高优先级的进程如果处于就绪状态,则总是会被调度系统选中执行; 若系统中存在多个优先级相同的就绪进程,这些进程以时间片轮转算法调度; 若线程的时间片大小被设置为0,则会一直占有处理器运行,直到线程结束或进入阻塞、挂起及睡眠状态; 调度系统不提供对线程饥饿的自动检测。 优先级反转优先级反转问题优先级反转问题当两个不同优先级的线程,为争夺互斥体(mutex),临界区( critical section)或信号量(semaphore)等资源时,低优先级的线程2因为已经占用资源,进而阻塞高优先级线程1的调度执行。从而使另一个线程3得到执行的现象叫优先级反转。 优先级反转会影响系统的实时性,所以必须重视。优先级反转优先级反转Avoid priority inversion by keeping all threads waiting for same resource at the same priorityThread 3High PriorityMedium PriorityLow PriorityThread 3Resource Owner:Thread 2Thread 1Thread 1Priority InversionPreemptPreemptBlockedPriority RestoredThread 3Example: Thread 1 blocked waiting for resource owned by Thread 3, causing Priority InversionThread 3BlockedThread 1Thread 2Blocked优先级继承优先级继承解决方法:Windows CE采取优先级继承的办法来解决。 当发生优先级反转时,内核将低优先级线程2的优先级提高到高优先级线程1的水平。这样线程2就可以被调度执行完相关的代码,线程1也就能够访问资源了。 内核将线程2的优先级恢复到原来水平。
/
本文档为【WINCE进程、线程与调度】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索