Windows via C/C++ Chapter 4 : 进程 – 第一个程序

基础知识

1.一般将进程定义为一个正在运行的程序的一个实例,有两部分构成:
a.一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程体积信息的地方。
b.一个地址空间,其中包含所有可执行文件(executable)或DLL模块的代码和数据。此外,它还包含动态内存分配,比如线程堆栈和堆的分配。
2.进程是有“惰性”的。进程要做任何事情,都必须让一个线程在它的上下文中运行。如果没有线程要执行进程地址空间包含的代码,进程就失去了继续存在的理由。这是系统会自动销毁进程及其地址空间。
3.对于所有要运行的线程,操作系统会轮流为每个线程调度一些CPU时间。它会采取循环(round-robin,轮询或轮流)方式,为每个线程都分配时间片(称为“量”或者“量程”,即quantum),从而营造出所有线程都在“并发”运行的假象。
4.Windows支持两种类型的应用程序:GUI程序和CUI程序。前者是“图形用户界面”(Graphical User Interface)的简称,后者是“控制台用户界面”(Console User Interface)的简称。
5.Windows应用程序可以使用以下两种入口函数:_tWinMain()和_tmain()。
6.加载到进程地址空间的每一个可执行文件或者DLL文件都被赋予了一个独一无二的实例句柄。可执行文件的实例被当作(w)WinMain函数的第一个参数hInstanceExe传入。在需要加载资源的函数调用中,一般都要提供此句柄的值。
7.为了知道一个可执行文件或DLL文件被加载到进程地址空间的什么位置,可以使用如下的GetModuleHandle函数来返回一个句柄/基地址:
HMODULE GetModuleHandle(PCTSTR pszModule);
8.每个进程都有一个与它关联的环境块(environment block),这是在进程地址空间内存分配的一块内存。
9.进程中的线程可以在主机的任何CPU上执行。然而,也可以强迫线程在可用CPU的一个子集上运行,这称为“处理器关联性”(processor affinity)。
10.如果不提供完整的路径名,各种Windows函数会在当前驱动器的当前目录查找文件和目录。
11.可以用GetVersion函数获取用户运行的Windows系统版本。

常用函数

两种入口点函数“

1.GetModuleHandle函数:返回句柄/基地址

2.GetEnvironmentVariable函数:获取环境变量。

如无注明,均为原创。转载请注明: 转载自MITGAI`S THINKING
本文链接地址: Windows via C/C++ Chapter 4 : 进程 – 第一个程序

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

如果本文对您生活或工作产生了积极影响,那我非常高兴。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。
支付宝捐赠
anyShare分享到:

发表评论