Windows 2000应用程序的移植开发.ppt_第1页
Windows 2000应用程序的移植开发.ppt_第2页
Windows 2000应用程序的移植开发.ppt_第3页
Windows 2000应用程序的移植开发.ppt_第4页
Windows 2000应用程序的移植开发.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、Windows2000应用程序的移植/开发,凌聪,主要内容,Windows2000的新功能Windows2000的兼容性问题Windows2000下的调试DUMP生成工具Windbg每日技巧异步I/O专题,Windows2000的新功能,全新的驱动程序模式WDM支持PNP设备,支持电源管理增加了USB/1394等总线设备的支持增加PNP消息通知DLLHell的解决:WFP和私有文件保护新增内核对象Job对象,可作为一系列进程对象的总集安全增强KerberoesPKI体系结构加密EFS系统Smartcard,Windows2000的新功能,ActiveDirectory用户管理组策略域信任软件/

2、注册表控制异步RPCCOM+,Windows2000兼容性问题,应该使用GetDiskFreeSpaceEx代替GetDiskFreeSpace缺省系统目录的改变系统应该使用SHGetFolderPath/GetWindowsDirectory/GetSystemDirectoy/GetTempPath等函数获得系统路径,而不应该直接Hardcode用户目录改变Win9x:%SYSTEMDRV%MyDocumentsWinNT:%windir%profilesuserpersonalWin2k:%SYSTEMDRV%DocumentsandSettingsuserMyDocuments,Win

3、dows2000兼容性问题,DLL加载路径次序应用程序路径当前路径XP:HKLMSystemCurrentControlSetControlSessionManagerSafeDllSearchMode为1的时候当前路径是最后的路径,否则是第二个路径SYSTEM32Windows路径(使用GetWindowsDirectory的结果)%PATH%中的路径次序,Windows2000兼容性问题,GetWindowsSystemDirectory在TerminalServer中,使用GetWindowsDirectory会获得用户目录,请使用GetWindowsSystemDirectoryWin

4、2k的缺省用户权限要比NT的小,特别注意的是在Web应用升级的时候对目录的权限设定内存管理Win2k使用的stack会比WinNT大使用/F或者/Stack或者DEF中使用stacksize的应用需要检查是否够大,Windows2000兼容性问题,OpenFile函数缺省的OpenFile如果找不到你要找的类型,会指向Mydocuments的目录SetForegroundWindow不能确保你的窗体一定在最topWin2k的TCP/IP的实现不一定使用NetBiosWin2k对DialogFunc等的调用强制使用_stdcall,对于一般的c编译器,使用_cdecl编译函数,请加上_stdca

5、ll/WINAPI,Windows2000兼容性问题,Performancemonitor的插件Win2k把插件注册在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesXXXPerformance下,使用Exrlist工具或者直接设定DisablePerformanceCounter值为1/0可以开启/关闭改服务API兼容性测试使用Depends/APIMon工具对文件进行静态测试和动态测试,然后对API进行MSDN的检查,看看有没有obsolete的函数网上资源,Windows2000DUMP生成工具,Userdump可以获得一个进程的snap

6、shot,对于调试系统的死锁很有好处AutoDump+强大的script,分为crashmode以及hangmode,不过会cdb进程,Windbg结合UserDump对死锁问题的调试技巧演示,传统的同步方式,Client,Client,ListenerThread,WorkingThread,WorkingThread,1.客户端建立连接2.ListenerThread通过Accept获得端口,并为每个客户开辟一个新的工作线程3.工作线程和客户端直接通信,传统的同步方式,缺点线程随着用户数量的增加而增加,创建线程和关闭线程会耗费大量的时间对于Server的应用,很多的时候需要使用状态字去纪录

7、用户状态。这些状态字一般是全局变量。对这些变量的同步会使用大量的锁,系统资源会大量浪费,而且容易造成死锁线程过多以及过多的锁同步容易造成ContextSwitch的增加,影响系统效率容易造成系统资源不足而崩溃系统不能平稳运行系统不容易管理,改善的方式,线程池使用,并限制系统的线程最大数资源池使用NOP/Sleep等指令,减少系统的同步对象使用InitializeCriticalSectionAndSpinCount代替InitialzeCriticalSection这些方法都是治标不治本的,另外一种思维方式-异步I/O,Client,Client,ListenerThread,WorkingT

8、hread,Socket1,Socket2,状态字,1.客户端建立连接2.ListenerThread通过Accept获得端口,把端口放在状态字列表中3.工作线程通过轮训查阅/更改状态字的状态,来控制Socket读写操作,传统Berkerley异步Socket的缺陷,操作的函数包括SelectFD_SET/FD_CLR/FD_ZEROFD_ISSET此操作是“Poll”操作类型,工作线程实际上轮询的测试每个端口,如果有信号,线程操作这些信号;但是如果没有信号,线程会浪费CPU时间。这种异步IO实际上使用Unix系统信号的,而轮询这些信号是非常耗时的操作这种方法没有比较好的体系结构,Win32的

9、I/O异步模型,一般的I/O异步函数重叠I/O(OverLapped),用户态APCReadFile/WriteFile/DeviceIoControlReadFileEx/WriteFileExWaitForXXXObject/GetOverLappedResultWSASend/WSAAccept/WSARecv使用完成函数(CompletionRoutine)ReadFileEx/WriteFileExWSASend/WSAAccept/WSARecv使用窗口句柄WSAAsyncXXX系列函数,为服务器设计的完成端口,能把众多文件/设备联系在一起,使用同一个对象能够把这些对象的事件串行化

10、使用Push模型,提高CPU使用效率能够更有效的管理对象可以按照CPU配置线程模型,提高系统的效率一般的,工作线程的最佳配置是1个CPU对两个线程,使用完成端口的服务器模型,Client,Client,ListenerThread,ClientContext,ClientContext,CompletionPort,WorkerThread,WorkerThread,使用完成端口的服务器模型,客户端连接服务器Listener线程accept获得一个端口,生成一个ClientContext,然后把端口“粘”到完成端口上,并把ClientContext放以端口为序的队列中Worker线程CompletionPort以及对应的Socket通信API函数CreateIoCompletionPortGetQueueCompletionStatusPostQueueCompletionStatus,使用完成端口需要注意的地方,不要对端口使用send/recv等同步操作,要使用WSASend/WSARecv对于WSASend/WSARecv中的buffer数据,在Send/Recv过程中的时候应该保持有效释放端口的时候注意要CancelIo,并使用Has

温馨提示

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

评论

0/150

提交评论