WINDOWS核心编程之进程(一)

原创 2007年09月16日 10:16:00
从今天开始说说进程
 
进程通常被定义为一人正在运行的程序的实例,它由两个部分组成:
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函数.
 
待续.............
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

windows 核心编程 笔记之 进程

发表时间:2013.5.18 内容:windows进程(process) 作者:郑金玮   如上图所示,windows任务管理器中的进程Tab列中列出了系统管理的所有进程,我们经常利用任务...

Windows核心编程学习笔记--进程和线程的优先级

线程调度、优先级和关联性  From:http://blog.csdn.net/drecik__/article/details/8095467     每个线程都有一个CONTEXT结构,保存在线...

基于visual c++之windows核心编程代码分析(63)无模块dll进程注射

我们在信息安全编程的时候经常需要进行dll进程注入,我们在编程中如何实现呢。需要引用Psapi.Lib,具体可以百度下载之。其头文件如下,odule Name: psapi.h Abstr...

Windows核心编程学习笔记(15)--进程和线程与CPU的关联性

Drecik学习经验分享 转载请注明出处:http://blog.csdn.net/drecik__/article/details/8096253   默认情况下,Windows Vist或以...

《windows核心编程系列》四谈谈进程的建立和终止

http://blog.csdn.net/ithzhang/article/details/7927682转载请注明出处! 第二部分:工作机理 第一章:进程 上一章介...

Windows核心编程学习笔记(12)--线程与进程运行的时间

Drecik学习经验分享 转载请注明出处:http://blog.csdn.net/drecik__/article/details/8093724   如果是一般精度要求可以使用GetThre...

Windows核心编程 第4章 进程

Windows核心编程 第4章 进程 进程由两部分组成: 操作系统管理进程的内核对象。存放该进程 的统计信息的地方。 地址空间,包含可执行模块和DLL模块的代码和...

《Windows核心编程》——四 进程

前言     一般将进程定义为一个正在运行的程序的一个实例,它由两部分组成:     ①一个内核对象,操作系统用它来管理进程。内核对象也是系统保存进程统计信息的地方     ②一个地址空间,其中...

Windows核心编程学习五:进程的环境变量

注:源码为学习《Windows核心编程》的一些尝试,非原创。若能有助于一二访客,幸甚。 1.进程的环境变量 每个进程都有一个与它关联的环境块(environment block),这是...

《Windows核心编程》进程

《Windows程序设计》先放下了,不知道为什么,看不下去了,后面的感觉不是那么重要。 开始了《Windows核心编程》。 《Windows核心编程》进程 可以说是读书笔记吧,怎么样从书...
  • l0g1n
  • l0g1n
  • 2012-06-03 12:20
  • 722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)