友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
深入浅出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
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!