1、2019/10/5,北京理工大学珠海学院 计算机教研室,1,第二章 Windows CE体系结构与功能,北京理工大学珠海学院 计算机教研室,2,2019/10/5,教学目的,熟悉进程的同步与互斥的概念;理解Windows CE5.0中进程间通信的手段,并能够理解并编写简单的多线程应用程序。,北京理工大学珠海学院 计算机教研室,3,2019/10/5,项目4:多线程-PDA下多任务实现,本节课程主要知识点 Windows CE5.0进程的同步与互斥(重点) Windows CE5.0进程间通信(难点),北京理工大学珠海学院 计算机教研室,4,2019/10/5,教学重点 同步与互斥的概念 教学难
2、点 进程的通信,北京理工大学珠海学院 计算机教研室,5,2019/10/5,进程的互斥,系统中的很多资源是共享资源。有些资源每时刻只允许由一个进程使用,同时请求该资源的进程就需要竞争使用这些资源,进程的这种关系为进程的互斥。,北京理工大学珠海学院 计算机教研室,6,2019/10/5,生活中的实例,共享资源每时每刻只允许一个人使用,这样的例子在生活中多的很吧? 图书馆的座位,公用电话 同学们自己找找看?,北京理工大学珠海学院 计算机教研室,7,2019/10/5,临界资源critical resource,临界资源一次仅允许一个进程使用的资源。 很多物理设备都属于临界资源。例如:纸带或卡片输入
3、机、打印机、磁带机等。 除了物理设备外,许多变量、数据、表格、队列等也可以由若干个进程共享使用,但每时刻仅允许一个进程使用,这些资源也属于临界资源。,北京理工大学珠海学院 计算机教研室,8,2019/10/5,临界区critical section,临界区针对同一临界资源进行操作的程序段,也称为互斥段。 任一共享进程一旦对临界资源开始操作,则在该操作结束之前,其它进程就不能对该临界资源进行处理。也就是说,执行这些操作的程序段必须是互斥执行的。,北京理工大学珠海学院 计算机教研室,9,2019/10/5,2.2.4 同步 产生的原因:多线程、分时共享技术的使用; 作用:对多线程共享资源的访问加以
4、保护; 必要性:造成数据损坏或者死锁。 Windows CE的同步机制 Mutex Event Semaphore Critical Section Interlocked Functions 同步对象的状态 通知(Signaled):阻塞线程转为就绪态,等待调度执行 未通知(Non- Signaled):表示该同步对象被一个或多个线程占有,不能被其它等待的线程占有,线程A读写数据时,另一个线程B也对这个数据进行读写,导致数据冲突,引起数据混乱,线程A需要线程B中的数据才能够运行,而线程B也需要线程A中的数据才能运行,北京理工大学珠海学院 计算机教研室,10,2019/10/5,同步的基本原理
5、:当某个同步对象的状态变为通知状态时,等待在它上面的阻塞线程会得到通知,并且转为就绪态,等待调度执行。 同步对象的使用 由句柄(Handle)表示,一个32位的指针 句柄的指向表示该对象的一个数据结构 可以有名字也可以没有名字 若跨进程使用同步对象,一般要命名。 等待函数(见P42) WaitForSingleObject 等待单个同步对象 WaitForMultipleObjects 等待多个同步对象,两个函数都会阻塞当前的调用线程, 直到等待的同步对象变为通知状态,北京理工大学珠海学院 计算机教研室,11,2019/10/5,2.2.4.1 Mutex Mutual Exclusion,互
6、斥 同时只有一个线程可以占有Mutex对象 当共享资源同时只能被一个线程访问,使用Mutex进行同步 相关函数 CreateMutex 创建一个有名或无名的Mutex对象 bInitialOwner参数指定该Mutex是否为创建的线程所占有 ReleaseMutex 释放对Mutex对象的占有,北京理工大学珠海学院 计算机教研室,12,2019/10/5,2.2.4.2 Semaphore 信标或信号灯 带有引用计数的Mutex,即带有计数n,表示同时最多可以有n个线程占有该信号灯 若共享资源同时被固定数量的线程使用,则选用Semaphore进行同步 相关函数 CreateSemaphore
7、创建信号灯 参数IMaximumCount指定最多可有多少个线程占有该信号灯对象 参数IInitialCount为信号灯指定初始计数,北京理工大学珠海学院 计算机教研室,13,2019/10/5,ReleaseSemaphore 使用此函数释放信号灯对象,则IInitialCount指定的初始值增加IReleaseCount 当有线程使用ReleaseSemaphore函数释放Semaphore对象时,该初始值增加1;当有线程使用等待函数占有信号灯时,该初始值减1 若信号灯的计数大于0,则信号灯处于通知状态;若计数小于0,处于未通知状态,北京理工大学珠海学院 计算机教研室,14,2019/10
8、/5,事件Event,事件事件就是一个标志,不具备其它信息。 在一个进程中将事件设置为通知状态,则所有等待该事件的进程将进入就绪状态。 没有进程发送该事件的通知信号,则所有等待该事件的进程均处于阻塞状态。 事件在进程的同步与互斥中用的最多。,北京理工大学珠海学院 计算机教研室,15,2019/10/5,2.2.4.3 Event 当一个线程需要通知其它线程某个时间发生,则使用事件(Event)同步对象 此同步对象使用比较广泛。在Windows CE驱动程序中,中断处理线程就是使用事件同步对象来等待中断发生。 相关函数 CreateEvent 参数bInitialState参数指定Event的初
9、始状态。若为True则新创建的Event最开始就是通知状态 参数bManualReset用来指定Event是否为人工重置。人工的话,等待该Event的所有线程均变为就绪态,而Event还处于通知状态,调用ResetEvent;自动的话,等待该Event的线程中只有一个线程变为就绪态,然后自动变为未通知状态。 SetEvent ResetEvent PulseEvent,创建一个有名或无名的事件对象,把事件对象设置为signal状态,把事件设置为非signal状态,把事件设置为signal状态,然后在释放一定量的线程之后,转回非signal状态,北京理工大学珠海学院 计算机教研室,16,2019
10、/10/5,用户态下的同步方法 Critical Section 互锁函数-Interlocked Functions 因为没有对应Windows CE内核对象,所以用户态下的同步对象不能跨进程 运行效率比内核同步对象高 2.2.4.4 Critical Section 应用程序分配的一个数据结构 用来把一段代码标记为临界区,从而保证此区域内部代码的访问是串行的 相关函数(见P47) 使用临界区时,一般为每一个共享资源分配一个临界区变量。同时把尽可能少的代码放在临界区中,北京理工大学珠海学院 计算机教研室,17,2019/10/5,2.2.4.5 互锁函数 可对变量和指针进行原子的读/写操作
11、相关函数 InterlockedIncrement InterlockedDecrement InterlockedExchange InterlockedTestExchange InterlockedCompareExchange InterlockedCompareExchangePointer InterlockedExchangePointer InterlockedExchangeAdd,北京理工大学珠海学院 计算机教研室,18,2019/10/5,进程间通信,进程通信是指进程之间可直接以较高的效率传递较多数据的信息交换方式。 在进程间传递大量信息需要操作系统提供相应的机制。 Wi
12、ndowsCE5.0提供的进程间通信机制包括共享内存、消息传递和管道。,北京理工大学珠海学院 计算机教研室,19,2019/10/5,管道Pipe,管道也称共享文件方式,基于文件系统,利用一个打开的共享文件连接两个相互通信的进程,文件作为缓冲传输介质。,北京理工大学珠海学院 计算机教研室,20,2019/10/5,2.2.5 进程间通信进程通信的由来 Windows CE具有内存保护机制,不允许应用程序间有计划的共享数据 若并发发生在不同的进程之间,此时操作系统需要提供一种机制把一个进程地址空间中的数据复制到另外一个进程的地址空间中 Windows CE提供多种进程间通信的方式 文件映射(管道
13、) 点对点消息队列(消息传递) 剪贴板 COM/DCOM 网络套接字 WM_COPYDATA消息,北京理工大学珠海学院 计算机教研室,21,2019/10/5,共享内存,共享内存在相互通信的进程间设有公共内存,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。 共享内存的物理意义是,同一块物理内存被映射到相互通信的各进程的地址空间内。 共享内存是最快的进程间通信方式。,北京理工大学珠海学院 计算机教研室,22,2019/10/5,2.2.5.1 文件映射 File Mapping-内存映射文件(Memory-Mapped File,MMF) 在进程的共享
14、虚拟地址空间内保留一个地址空间的区域,同时将文件所在的物理内存映射到此区域 Windows CE中,内存映射文件被映射到4GB虚拟地址空间的0x420000000x7FFFFFFF的进程共享区域中 内存映射文件并不是简单的文件I/O操作,实际用到Windows CE中的内存管理 相关函数(见P50) CreateFileForMapping CreateFileMapping MapViewOfFile UnmapViewOfFile,北京理工大学珠海学院 计算机教研室,23,2019/10/5,文件映射的过程,CloseHandle,CreateFile创建或打开一个文件。标识磁盘上将要用作
15、内存映射文件的文件,CreateFileForMapping专用于创建内存映射文件用的文件,向内核空间提供回调,保证其创建的文件可被其他进程使用,指定文件映射对象需要的物理存储空间。通过此函数创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式,此函数负责通过系统的管理将文件映射对象的全部或部分映射到进程地址空间,此函数负责从进程的地址空间撤销文件数据的映像,通过CloseHandle关闭前面创建的文件映射对象和文件对象,北京理工大学珠海学院 计算机教研室,24,2019/10/5,消息,消息是在进程之间的一种通信机制。 消息没有定义格式,所有的消息都是字节流,没有特定的含义。 从应
16、用观点看,根据应用定义的消息格式,消息可被解释成特定的含义 系统允许一个应用程序或驱动程序创建自己的消息队列,消息队列既可以作为在进程之间传递数据的工具,也可以作为进程之间同步工具。 只占用很小的内存。,北京理工大学珠海学院 计算机教研室,25,2019/10/5,2.2.5.2 点对点消息队列 Point-to-Point Message Queues,常用的系统模块之间进行通信的方式 一个先进先出的队列结构 特色 消息可为任意类型的数据 消息队列可用来进行同步 严格按照先进先出的方式 基于点对点的操作,不能进行广播 相关函数(P53) CreateMsgQueue OpenMsgQueue
17、 GetMsgQueueInfo ReadMsgQueue WriteMsgQueue CloseMsgQueue,创建或打开一个消息队列,对一个现存的消息队列打开一个句柄,返回有关一个消息队列的信息,从消息队列中读一个消息,向消息队列写一条消息,关闭一个打开的消息队列,北京理工大学珠海学院 计算机教研室,26,2019/10/5,第七讲作业,结合CreateWindow()、CreateProcess()、CharLowerBuff()三个函数来阐述Windows CE的系统调用过程 画出线程五种状态的转换图,并解释每一种状态 解释优先级反转的原因?并给出Windows CE的解决方法 进程间通信的方式有哪些?其中最快的通信方式的通信过程是什么?,