关闭

WINDOWS核心编程之进程(一)

标签: windows编程winapic++图形os
655人阅读 评论(0) 收藏 举报
分类:
从今天开始说说进程
 
进程通常被定义为一人正在运行的程序的实例,它由两个部分组成:
1.       一个是操作系统用来管理进程的内核对象,内核对象也是系统用来存放关于进程的统计信息的地方。
2.       另一个是地址空间,它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。
 
要使进程完成某项操作,它必须要有一个自已的线程,来执行包含在此进程的地址空间中的代码。每个线程都有它自已的一组CPU寄存器和它自已的堆栈。
 
多个线程是如何运行的呢,操作系统为每个线程安排一定的CPU,通过一种循环方式为线程式提供时间片(称为量称)
 
Windows支持两种类型的应用程序。一种是基于图形用户界面(GUI)的应用程序,另一种是基于控制台用户界面(CUI)的应用程序。
 
在vc设置里的链接程序根据 /SUBSYSTEM:CONDOLE还是/SUBSYSTEM:WINDOWS,当用户运行一个应用程序时,os的加载程序查看可执行图形程序的标题,并抓取该子系统的值,如果该值指明一个CUI应用程序,那么加载程序就会自动保证为该应用程序创建文本控制台窗口。反之加载应用程序,当应用程序启动运行后,os就不再关心应用程序拥有什么类型的用户界面了。
 
Windows提供的四个应用程序启动运行时调用的进入点函数
Int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PSTR pszCmdLine, int nCmdShow);
//第二个参数表示前一个实例句柄,它是用在16位windows上的
Int WINAPI wWinMain(HINSTANCE hinstExe, HINSTANCE, PWSTR nszCmdLine, int nCmdShow);l
 
Int _cdecl main(int argc, char *agrv[], char *envp[]);
 
Int _cdecl wmain(int argc, wchar_t *argv[], wchar_t *envp[]);
 
注意:os并不调用我们编写的进入点函数,它是调用的是c/c++运行期启动函数。该 函数负责对c/c++运行期库进行初始化, 这样,就可以调用malloc和free之类的函数。它还能确保已经声名的任何全局对象和静态c++对象能够在代码执行之前正确的创建
 
应用程序的进入点
 应用程序类型                                                     进入点                   嵌入可执行文件的启动函数
需要ASCI字符和字符串的GUI应用程序          WinMain                 WinMainCRTStartup
需要UNICODE字符和字符串的GUI应用程序  wWinMain              wWinMainCRTStartup
需要ASCI字符和字符串的CUI应用程序          main                         mainCRTStartup
需要UNICODE字符和字符串的CUI应用程序 wmain                      wmainCRTStartup
 
所有的c/c++运行期启动函数的作用都是相同的,只不过处理ANSI字符串还是Unicode字符串,以及它们在对C运行期库进行初始化后它们调用哪个进入点函数。
 
C运行期库的源代码在CRt0.c文件里
其主要功能如下:
1.       检索指向新进程的完整命令行的指针.
2.       检索指向新进程的环境变量的指针。
3.       对c/c++运行期的全局变量进行初始化。如果包含了StdLib.h文件,代码就能访问这些变量了(WinMain等那四个函数)
4.       对C运行期内存单元分配函数(malloc和calloc)和其它低层输入/输出例程使用的内存栈进行初始化。
5.       为所有全局和静态c++类对象调用构造函数。
完成以上的功能后,c/c++启动函数就调用应用程序的进入点函数。
 
进入函数返回时,启动函数便调用c运行期的exit函数,exit函数负责如下的操作
1.       调用由_onexit函数的调用而注册的任何函数
2.       为所有全局的和静态的c++类对象调用析构函数。
3.       调用OS的ExitProcess函数.
 
待续.............
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1338104次
    • 积分:20796
    • 等级:
    • 排名:第364名
    • 原创:810篇
    • 转载:12篇
    • 译文:1篇
    • 评论:227条
    最新评论
    ATL/WTL
    Big Deal
    Book