模块、进程、线程的概念

通常,我们知道,一个程序执行起来就是一个进程,一个进程里面至少包含一个线程。那么什么是模块了,被加载内存中的dll或者exe都是模块。
据说,windows有个数据结构叫做Module Database(MDB),专门代表模块。可执行程序(exe或者dll),包括其代码、资源等被加载到内存中,windows大概就用这个结果管理它吧。这个数据结构其实代表的就是一个PE文件的表头。
那么进程了,代表的又是什么了,既然模块表示的是加载到内存的pe文件。进程应该代表的是资源拥有者吧。比如说,地址空间、申请的内存、打开的文件、所有的线程、以及模块(加载的dll,本身的exe)。windows也有一个叫做Process Database(PDB)的数据结构负责管理它。这样看,进程是各种所有权的集合吧。
那么线程了。执行的线程表示的是模块中一段正在被执行的代码吧。线程是被cpu调度的基本单位,因此真正占有cpu时间片的是线程,而不是进程。也有一个叫做Thread Database(TDB)的数据结构来代表线程,里面会记录执行线程区域储存空间(Thread Local Storage,TLS)、讯息队列、handle表格等等。其实,只有在多cpu的机器上面才能实现真正的并行。在单cpu上面,只是在硬件计时器的通知下不断的切换线程。