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