八宝书库 > 文学其他电子书 > 深入浅出MFC第2版(PDF格式) >

第148部分

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

小说: 深入浅出MFC第2版(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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; 

                     

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的