145嵌入式软件开发导论_第1页
145嵌入式软件开发导论_第2页
145嵌入式软件开发导论_第3页
145嵌入式软件开发导论_第4页
145嵌入式软件开发导论_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、概述概述l系统架构系统架构windows ce 系统架构系统架构nk.exelnk.lib + oal.lib = nk.exe内核是硬件体系结构无关内核是硬件体系结构无关但是是处理器相关的但是是处理器相关的oal越小越好越小越好nk.exe oalram rom/flashtimerintccpuprotected server libraries (psl)l实现实现api的系统函数的系统函数l把操作系统的功能放在多个进程的机制把操作系统的功能放在多个进程的机制lpsl calls run through the kernel (nk.exe)gwes.exel图形窗口事件系统图形窗口事件

2、系统device.exel设备管理器设备管理器电池驱动已经被从电池驱动已经被从gwes中拿走了中拿走了大多数功能都放在了大多数功能都放在了devmgr.dll中。中。l提供所有的与驱动相提供所有的与驱动相关的函数实现关的函数实现l在启动的时候通过注在启动的时候通过注册表加载驱动程序册表加载驱动程序services.exel所有服务的宿主进程所有服务的宿主进程与与device.exe分开分开文件系统文件系统l所有与文件系统相关的函数都在所有与文件系统相关的函数都在 filesys.exe中实现中实现l单根单根 “”, 没有像没有像“c:”一样的盘符一样的盘符l有三个组件有三个组件:文件系统概述文

3、件系统概述目标存储目标存储l被被 filesys.exe管理的一个堆管理的一个堆l包括包括:registrydatabaseram文件系统文件系统rom 文件系统文件系统l被映射成被映射成“windows” 目录目录l“windows” 目录中所有的文件都是只读目录中所有的文件都是只读的的存储管理存储管理l负责负责:线程迁移线程迁移createfile()概述概述l进程进程l线程线程l虚拟内存虚拟内存windows ce 内核特征内核特征l多进程多进程可以支持最多可以支持最多32个进程个进程进程进程l静态上下文,线程的容器静态上下文,线程的容器进程不被执行,线程被执行进程不被执行,线程被执行

4、线程线程lwin32的执行的单元的执行的单元l按照优先级调度按照优先级调度l高优先级的线程会抢占低优先级的线程高优先级的线程会抢占低优先级的线程l同样的优先级使用同样的优先级使用round-robin算法算法l默认的时间片是默认的时间片是 100毫秒,毫秒,oem可以在可以在oal中重新设置中重新设置线程调度线程调度l线程线程a拥有最高的拥有最高的优先级,他会一优先级,他会一直执行直到结束直执行直到结束或阻塞或阻塞l线程线程b和和c使用使用round-robin算算法运行法运行l在在round-robin 每个线程都运行每个线程都运行一个固定的时间,一个固定的时间,叫做时间片叫做时间片l优先级

5、数字越小,优先级数字越小,优先级越高优先级越高线程优先级分布图线程优先级分布图(例例)prioritycomponent0-19open real time above drivers20graphics vertical retrace99power management resume thread100-108usb ohci uhci, serial109-129irsir1, ndis, touch130kitl131vmini132cxport145ps2 keyboard148ircomm150tapi248power management249wavedev, mouse, pn

6、p, power250waveapi251normal252-255open - applications优先级反转优先级反转lavoid priority inversion by keeping all threads waiting for same resource at the same prioritythread 3high prioritymedium prioritylow prioritythread 3resource owner:thread 2thread 1thread 1priorityinversionpreemptpreemptblockedpriorityr

7、estoredthread 3example: thread 1 blocked waiting for resource owned by thread 3, causing priority inversionthread 3blockedthread 1thread 2blockedthread apil线程创建createthread 创建一个普通优先级的线程l线程优先级getthreadpriority 当前线程的优先级setthreadpriority 改变当前线程的优先级 (251)cegetthreadpriority 得到实时线程的优先级cesetthreadpriority

8、 改变实时线程的优先级l线程睡眠sleep(0) 放弃剩余的时间片sleep (n) 睡指定的毫秒sleep (infinite) sleeptilltick 睡到下一个系统嘀嗒suspendthread 增加休眠的引用计数resumethread 减少休眠的引用计数进程进程 & 线程线程lwindows ce 进程不支持环境变量进程不支持环境变量_wfopen (l“%windows%a.txt”, l“w”);/ error_wfopen(l“a.txt”, l“w”);/ error, first search root directory, then search window

9、s directory.同步对象同步对象l线程需要同步对象在某些时候进行同步操作。l同步对象类型critical sectionmutexsemaphoreeventl也可以使用子增函数或者点对点消息队列同步同步l概览允许多个线程共享访问同一块数据使用互斥访问保护数据其他线程会block直到占有者放弃临界区每个cs都是os提供的一个数据结构,只能在同一个进程内部使用,比mutex要高效。l函数initializecriticalsection分配 critical_section 结构entercriticalsection调用着在占有cs的人调用 leavecriticalsection之前

10、会阻塞tryentercriticalsectionentercriticalsection的非阻塞版leavecriticalsection释放criticalsection的所有权deletecriticalsection释放initializecriticalsection分配的资源同步对象同步对象l概览同一时刻只有一个线程可以拥有mutex全局名称的mutex可以跨进程使用。在没有线程拥有它时处于signal状态被线程拥有的时候处于非signal状态l函数createmutex创建一个有名或无名的mutex对象waitforsingleobject or waitformultiple

11、object调用着在占有mutex的人释放之前会阻塞releasemutex释放对mutex对象的占有closehandle删除mutex对象同步对象同步对象l概览限制占有共享资源的数量全局名称的semaphores可以跨进程使用。引用计数大于零时处于signal状态引用计数小于等于0时处于非signal状态l函数createsemaphore创建一个有名或无名的semaphore对象waitforsingleobject or waitformultipleobject调用者在计数是非0之前阻塞releasesemaphore增加semaphore的引用计数closehandle删除sema

12、phore对象同步对象同步对象l概览全局名称的event可以跨进程使用。事件发生时处于signal状态时间未发生时处于非signal状态l函数createevent 创建一个有名或无名的事件对象setevent 把事件对象设置为signal状态resetevent 把事件设置为非signal状态pulseevent 把事件设置为signal状态,然后在释放一定量的线程之后,转回非signal状态waitforsingleobject or waitformultipleobject 调用者阻塞直到某一事件达到signal状态closehandle 销毁事件对象同步同步l概览对多个线程对同一个变

13、量的共享访问保护提供原子操作l函数interlockedincrement 对一个变量进行原子加1操作interlockeddecrement -对一个变量进行原子减1操作interlockedexchange 对两个变量进行交换值操作interlockedtestexchange 如果变量符合,则交换两个变量的值interlockedcompareexchange 基于比较,交换两个变量的值同步同步l概述允许拥有多个用户定义的消息队列的使用者存在高优先级和报警消息l函数createmsgqueue 创建或打开一个消息队列openmsgqueue 对一个现存的消息队列打开一个句柄closems

14、gqueue 关闭一个打开的消息队列readmsgqueue 从消息队列中读一个消息writemsgqueue 向消息队列写一条消息getmsgqueueinfo 返回有关一个消息队列的信息内存管理内存管理* 只在桌面windows上存在physical memory* storage devicevirtual memorylogical memory (heap, stack)c runtime (mallc, new)application内存结构内存结构l物理内存物理内存在内部或外部总线上可访问的实际的在内部或外部总线上可访问的实际的ram/rom虚拟内存虚拟内存l虚拟内存管理虚拟内存

15、管理windows ce为所有进程为所有进程提供平板的提供平板的4gb虚拟地址虚拟地址空间空间系统仍然对每个进程提供系统仍然对每个进程提供保护保护允许快速的进程间线程切允许快速的进程间线程切换换memory mapping(shared)reservedslot 32:process32.slot 1:xip dll codeslot 0:active process2gb2gb32mb概述概述l虚拟内存模型虚拟内存模型l静态映射的虚拟内存静态映射的虚拟内存l进程模型进程模型l进程内存进程内存l进程进程l模块模块l堆堆l栈栈虚拟内存模型虚拟内存模型l虚拟内存虚拟内存一个一个 32-bit (4

16、 gigabyte) 平板式虚拟内存地址空间平板式虚拟内存地址空间提供了被保护物理内存的有效使用提供了被保护物理内存的有效使用虚拟内存模式虚拟内存模式l特权模式特权模式在内核模式和用户模式间的虚拟内存在内核模式和用户模式间的虚拟内存split所有的进程共享同一个平板式虚拟内存地址空间所有的进程共享同一个平板式虚拟内存地址空间 通过通过mmu内核模式管理用户模式进程保护内核模式管理用户模式进程保护虚拟内存模式虚拟内存模式kernel spaceuserspacekernel addresses: kpage, trap area, othersslot 97: nk.exeunusedstati

17、cally mapped virtual addresses: un-cachedstatically mapped virtual addresses: cachedslot 0 current processslot 1 xip dll codeslots 2-32 - processesslots 33-63object store and memory-mapped filesffff ffffe000 0000c400 0000c200 0000c000 0000a000 00008000 00007fff ffff4200 00000400 00000200 00000000 00

18、00total 4 gb virtualspace2 gb2 gbkernel spaceuser spaceunused静态映射虚拟地址静态映射虚拟地址2 gbuser512 mbuncached512 mbcached32 mb flashphysical memoryvirtual memory04000000820000008000 0000a000 0000c000 00000000000064 mb ram0000 000064 mb ram32 mb flash64 mb ramffff ffffaddresstranslation32 mb flashkernel spaceu

19、serspaceprocess modell虚拟地址虚拟地址 slots每个每个slot是是32 mb (225 bytes) 虚拟地址空间虚拟地址空间slot空间被进程空间被进程,dlls, 和虚拟分配共享和虚拟分配共享在进程在进程slot间快速进行上下文切换间快速进行上下文切换(交换页表交换页表)当前线程执行在当前线程执行在slot 0上上lesson: process memoryslot 30slot 31slot 32. . .01ff ffff0001 00000000 000032 mb process spacecurrent processxip rom dllsnk.exefilesys.exeshell.exedevice.exegwes.exec400 0000c200 0000free virtual spaceslot 63. . .resource dllsslot 2slot 3slot 4slot 5slot 1slot 00a00 00003e00 00003c00 00004000 00004200 00000000 00000400 00000200 00000600 00000800 00000c00 0000. . .slot 978000 00007e00 0000模块模块l模块模块标准的标准的 win32 portable 可执行

温馨提示

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

评论

0/150

提交评论