友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

深入浅出MFC第2版(PDF格式)-第99部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





 「多个执行线程同时工作」的幻觉主要是靠排程器来完成…它以一个硬件定时器和一组复 



杂的游戏规则,在不同的执行线程之间做快速切换动作。以Windows 95 和Windows NT 



而言,在非特殊的情况下,每个执行线程被CPU 照顾的时间(所谓的timeslice )是20 个 



milliseconds 。 



如果你有一部多CPU 计算机,又使用一套支持多CPU  的操作系统(如Windows NT ), 



那么一个CPU 就可以分配到一个执行线程,真正做到实实在在的多任务。这种操作系统特性 



称为symmetric multiprocessing  (SMP)。Windows 95 没有SMP 性质,所以即使在多CPU 



计算机上跑,也无法发挥其应有的高效能。 



图14…1 表现出一个进程(PDB )如何透过「MODREF  串行」连接到其所使用的所有模 



组。图14…2 表现出一个模块数据结构(MDB )的细部内容,最后的DataDirectory'16' 记 



录着16 个特定节区(sections )的地址,这些sections 包括程序代码、资料、资源。图 



14…3 表现出一个执行线程数据结构(PDB )的细部内容。 



                                                                  747 


…………………………………………………………Page 810……………………………………………………………

                        第篇    深入  MFC  程式設計 



                        当Windows 加载器将程序加载内存中,KERNEL32 挖出一些内存,构造出一个 



                        PDB 、一个TDB 、一个以上的MDBs                     (视此程序使用到多少DLL 而定)。针对TDB , 



                        操作系统又要产生出memory context                  (就是在操作系统书籍中提到的那些所谓page 



                        tables )、消息队列、handle 表格、环境数据结构(EDB )。。。。当这些系统内部数据结构 



                        都构造完毕,指令指位器(Instruction Pointer )移到程序的进入点,才开始程序的执行。 



                                                                                         Module Table               IMTEs 



                                                              pModuleTableArray                0               KERNEL32。DLL 

                          Process 

                         Database                                                    )          1                USER32。DLL 

                                                                                    e 

                                                                                   l 

                                                                                  b 

                                                                                 a 

                                                                                 t 

                                                                               e  

                             for                                               l 

                                                                              u 

                                                                             d 

                                     MODRefList                             o 

                                                                           m 

                                                pNextModRef              o                     2 

                                                                         t 

                                                                        n                                         GDI32。DLL 

                          MY。EXE                                       i 

                                                                      x  

                                                                     e 

                                                                    d 

                                                                   n 

                                                                   i 

                                                      0           ( 

                                                                                               3 

                                                    ppdb 



                                                                                               4                 MYEXE。EXE 



                                                                                      ) 

                                                                                     e 

                                                                                    l 

                                                                                   b 

                                                                                  ta 

                                                                                 e  

                                                pNextModRef                     l              5 

                                                                               u 

                                                                              d 

                                                                             o 

                                                                            m 

                                                                          o  

                                                                          t 

                                                                         n 

                                                                        i 

                                                                       x  

                                                      4               e 

                                                                     d 

                                                                    n 

                                                                   i 

                                                                   ( 

                                                                                               6 

                                                    ppdb 



                                                                                               7                   FOO。DLL 



                                                pNextModRef                                    8 

                                                      9          (index into module table) 

                                                    ppdb                                       9                   BAR。DLL 



                                                 MODREF list 

                                      (MY。EXE uses KERNEL32 and BAR。DLL) 



                                     图14…1 进程 (PDB ) 透过 「MODREF 串行」连接到其所使用的所有模块 



                  执行线程优先权 (Priority) 



                        我想我们现在已经能够用很具体的形象去看所谓的进程、模块、执行线程了。「执行事实」 



                        发生在执行线程身上,而不在进程身上。也就是说,CPU 排程单位是执行线程而非进程。排 



                        程器据以排序的,是每个执行线程的优先权。 



                        优先权的设定分为两个阶段。我已经在第1章介绍过。执行线程的「父亲大人」(进程) 



748 


…………………………………………………………Page 811……………………………………………………………

                                                                   14       MFC  

                                                                第 章              多緒程式設計 



拥有所谓的优先权等级(priority class ,图1…7),可以在CreateProcess 的参数中设定。 



执行线程基本上继承自其「父亲大人」的优先权等级,然后再加上CreateThread 参数中的 



微调差额(…2~+2 )。获得的结果(图1…8)便是执行线程的所谓base priority ,范围从0~31 



数值愈高优先权愈高。::SetThreadPriority 是调整优先权的工具,它所指定的也是微调差 



额(…2~+2 )。 



 IMTE 結構                                                        Module Database (MDB) 

   00h DWORD             un1                                     IMAGE_NT_HEADERS : 

                                                                   DWORD Signature 

   04h PIMAGE_NT_HEADERS pNTHdr                                  IMAGE_FILE_HEADER FileHeader : 

   08h DWORD             un2                                       WORD    Machine; 

   0Ch PSTR              pszFileName                               WORD    NumberOfSections; 

   10h PSTR              pszModName                                DWORD   TimeDateStamp; 

   14h WORD              cbFileName                                DWORD   PointerToSymbolTable; 

                                                                   DWORD   NumberOfSymbols; 

   16h WORD              cbModName 

                                                                   WORD    SizeOfOptionalHeader; 

   18h DWORD             un3                                       WORD    Characteristics; 

   1Ch DWORD             cSections                               IMAGE_OPTIONAL_HEADER OptionalHeader : 

   20h DWORD             un5                                       WORD    Magic; 

   24h DWORD             baseAddress/Module Handle                 BYTE    MajorLinkerVersion; 

                                                                   BYTE    MinorLinkerVersion; 

   28h WORD              hModule16 

                                                                   DWORD   SizeOfCode; 

   2Ah WORD              cUsage                                    DWORD   SizeOfInitializedData; 

   2Ch DWORD             un7                                       DWORD   SizeOfUninitializedData; 

   30h PSTR              pszFileName2                              DWORD   AddressOfEntryPoint; 

   34h WORD              cbFileName2                               DWORD   BaseOfCode; 

                                                                   DWORD   BaseOfData; 

   36h DWORD             pszModName2 

                                                                   DWORD   ImageBase; 

   3Ah WORD              cbModName2                                DWORD   SectionAlignment; 

                                                                   DWORD   FileAlignment; 

                                                                   WORD    MajorOperatingSystemVersion; 

                                                                   WORD    MinorOperatingSystemVersion; 

                                                                   WORD    MajorImageVersion; 

                                                                   WORD    MinorImageVersion; 

                                                                   WORD    MajorSubsystemVersion; 

                                                                   WORD    MinorSubsystemVersion; 

                                                                   DWORD   Reserved1; 

                                                                   DWORD   SizeOfImage; 

                                                                   DWORD   SizeOfHeaders; 

                                                                   DWORD   CheckSum; 

                                                                   WORD    Subsystem; 

                                                                   WORD    DllCharacteristics; 

                                                                   DWORD   SizeOfStackReserve; 

                                                                   DWORD   SizeOfStackmit; 

                                                                   DWORD   SizeOfHeapReserve; 

                                                                   DWORD   SizeOfHeapmit; 

                                                                   DWORD   LoaderFlags; 

                                                                   DWORD   NumberOfRvaAndSizes; 

                                                                   IMAGE_DATA_DIRECTORY   DataDirectory'16' 

                                                                                       // 指向各个sections, 

                                                                                       // 包括程序代码,资料,资源 



           图14…2 模块数据结构MDB 的细部内容 ( 资料整理自Windows 95 System 



                    Programming SECRETS; Matt Pietrek; IDG Books) 



                                                                                                       749 


…………………………………………………………Page 812……………………………………………………………

                         第篇    深入  MFC  程式設計 



                                                                                          Thread Database (TDB) 

                                                          

                           Process DataBase (PDB) 



                            00h  DWORD     Type                                            00h   DWORD   Type 

                                                                                           04h   DWORD   cReference 

                            04h  DWORD     cReference 

                                                                                           08h   PPROCESS_DATABASE   pProcess 

                            08h  DWORD     un1 

                                                                                           0Ch   DWORD   someEvent 

                            0Ch  DWORD     someEvent 

                                                                                           10h   DWORD   pvExcept 

                            10h  DWORD     TerminationStatus                               14h   DWORD   TopOfStack 

                            14h  DWORD     un2                                             18h   DWORD   StackLow 

                            18h  DWORD     DefaultHeap                                     1Ch   WORD    W16TDB 

                            1Ch  DWORD     MemoryContext                                   1Eh   WORD    StackSelector16 

                            20h  DWORD     flags                                           20h   DWORD   SelmanList 

                                                                                           24h   DWORD   UserPointer 

                            24h  DWORD     pPSP 

                                                                                           28h   PTIB    pTIB 

                            28h  WORD      PSPSelector 

                                                                                           2Ch   WORD    TIBFlags 

                            2Ah  WORD      MTEIndex 

                                                                                           2Eh   WORD    Win16MutexCount 

                            2Ch  WORD      cThreads 

                                                                                           30h   DWORD   DebugContext 

                            2Eh  WORD      cNotTermThreads                                 34h   PDWORD  pCurrentPriority 

                            30h  WORD      un3                                             38h   DWORD  
返回目录 上一页 下一页 回到顶部 9 10
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!