电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>Windows CE 进程、线程和内存管理一

Windows CE 进程、线程和内存管理一

2017-11-08 | rar | 0.3 MB | 次下载 | 1积分

资料介绍

进程、线程、内存管理是一个内核最基本的服务,也是一个内核最主要的组成部分。这几方面的知识是一个软件开发人员必须掌握的基础知识。虽然一个人不懂这些知识也能编写简单的程序,但这样的程序只能算是皮毛。掌握了进程、线程和内存管理方面的知识,就能够充分利用操作系统内核提供的服务,提高你编写的软件的执行效率、更节省资源、更健壮。顺便说一下,在Windows CE.net下可以运行用Visual Studio.net开发的.net平台上运行的软件,但这样的软件是最上层的软件,离操作系统内核太远了。不但执行效率相对较低,而且还要把.net 框架加到内核中。所以在大多数情况下,EVC仍然是第一选择。
  Windows CE 进程、线程和内存管理一
  图一 CE内核结构
  一、进程和线程
  1、概念:
  Windows CE.NET是一个抢占多任务操作系统,抢占多任务又被称为调度。在调度过程中,内核的调度系统包含一个当前所有进程中线程的优先级列表,并对所有的线程按优先级排列顺序。当中断发生时,调度系统重新安排所有线程的排列顺序。
  一个进程是一个正运行的应用程序的实例。它由两个部分组成:一个是操作系统用来管理这个进程的内核对象。另一个是这个进程拥有的地址空间。这个地址空间包含应用程序的代码段、静态数据段、堆、栈,非XIP(Execute In Place)DLL。从执行角度方面看,一个进程由一个或多个线程组成。一个线程是一个执行单元,它控制CPU执行进程中某一段代码段。一个线程可以访问这个进程中所有的地址空间和资源。一个进程最少包括一个线程来执行代码,这个线程又叫做主线程。
  2、进程:
  Windows CE.NET最多支持32个进程同时运行。这是由整个系统分配给所有进程的总地址空间决定的。低于Windows CE 4.0版本(也就是低于.NET的版本)的CE操作系统,总进程空间从0x0000 0000到0x4200 0000 ,每32MB地址空间为一个槽(Slot),共33个槽。当一个进程启动时,内核选择一个没有被占用的槽作为这个进程的地址空间。其中0x0000 0000到0x01FF FFFF这个槽称为Slot 0。每个进程在即将得到CPU控制权时,将整个地址映射到Slot 0。这个进程在帮助文档中称为当前运行进程(currently running process)。分配一个槽后,内核在这个槽内按由低地址到高地址顺序为代码段、静态数据段分配足够的地址空间,然后是堆、栈,栈之后的空间为所有 DLL保留,包括XIP和非XIP DLL。注意Slot 0最底部64KB是永远保留的。从Slot 1 到 Slot32 为进程使用。前几个槽一般为系统程序使用。如filesys.exe、device.exe、gwes.exe等。
  Windows CE.NET与低版本操作系统略有不同。这一点是从MSDN 的“Technical Articles”和“Knowledge Base”的文章中找到的,这的确让我费了一番功夫。在Windows CE.NET的帮助文件中只能找到和早期版本相同的说法,而“Technical Articles”和“Knowledge Base”中有几篇文章清楚的说明了Windows CE.NET 和低版本操作系统的不同。在低版本操作系统中,的确如上所说分为33个槽,Slot 0用于当前运行进程,共支持32个进程同时运行。而且所有DLL都加载到进程的地址空间。但Windows CE.NET下 Slot 1也用于当前进程(Slot 1只用于加载所有XIP DLL)。那么一个进程就不是占有32MB地址空间了,而是64MB。在讲解内存管理时我会具体讲解。
  创建一个进程的API函数如下:
  BOOL CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL bInheritHandles,
  DWORD dwCreationFlags,
  LPVOID lpEnvironment,
  LPCTSTR lpCurrentDirectory,
  LPSTARTUPINFO lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation );
  Windows CE.NET不支持安全性、当前目录、继承性,所以这个函数很多参数都必须设为0或FALSE。具体第3、4、7、8、9设为0,第5设为FALSE。第1参数为应用程序名称,这个参数不能为NULL。如果只传递应用程序名称而没有指定路径,那么系统将先搜索Windows目录,接着搜索OEM指定的搜索路径。第2参数用于传递启动参数,必须为UNICODE码。第6参数为创建标志。可以为0(创建一个常规进程)、CREATE_SUSPENDED(启动后挂起)、DEBUG_PROCESS(用于创建这个进程的父进程调试用)、DEBUG_ONLY_THIS_PROCESS(不调试子进程)、CREATE_NEW_CONSOLE(控制台进程)。第10参数传递给它一个PROCESS_INFORMATION结构变量的地址。返回进程和主线程的句柄和ID。
  终止一个进程最好是由WinMain函数返回。在主线程中调用ExitThread函数也可以。在当前进程终止另一个进程使用TerminateProcess函数。CE下的TerminateProcess函数要比其他Windows下TerminateProcess函数功能强大。CE下的TerminateProcess函数在使进程退出时,会通知每个加载的DLL并做出进程退出时该做的所有处理工作。
  3、线程:
  线程除了能够访问进程的资源外,每个线程还拥有自己的栈。栈的大小是可以调整的,最小为1KB或4KB(也就是一个内存页。内存页的大小取决于CPU),一般默认为64KB,但栈顶端永远保留2KB为防止溢出。如果要改变栈初始时大小,在EVC“Project”-“Settings”-“Link”链接选项“/STACK”后的参数中指定大小。其中参数1为默认大小,参数2为一个内存页大小,都用十六进制表示。如果将栈的初始值设置太小,很容易导致系统访问非法并立即终止进程。
  线程有五中状态,分别为运行、挂起、睡眠、阻塞、终止。当所有线程全部处于阻塞状态时,内核处于空闲模式(Idle mode),这时对CPU的电力供应将减小。
  创建一个线程的API函数如下:
  HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
  DWORD dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId );
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费