win32位下 每个进程都有4G的空间,前半部分留给进程私用,后半部分留给系统使用。

 

当应用程序调用一个系统函数时,用户的应用程序会从用户模式切换到内核模式去执行

进程是一个容器,包含了一系列上下文中的线程使用的资源。
进程由部分组成:进程内核对象(kernel object),私有的虚拟地址空间。所谓的内核

对象就是一个控制块,记录了必要的状态信息。

Win32程序的启动过程
1。操作系统调用CreateProcess函数来创建新的进程,同时创建一个进程内核对象。
2。操作系统为新进程创建一个主线程。(到此CreateProcess结束,返回TRUE或FAULSE


3。主线程执行c/c++运行期启动代码。
4。c/c++运行期启动代码又会调用main函数。

父进程创建子进程时会传递一个STARTUPINFO变量,包含了一些显示信息。子进程通过Ge

tStartupInfo函数获取其信息。
-------------------------------------线程------------------------------------
进程和线程ID使用同一个号码分配器。

进程的入口函数是main,线程的入口函数则是线程函数。

线程上下文(context)即线程寄存器的状态,这些寄存器的值保存在一个context结构

内。

新线程被创建后的Usage Count值为2

线程的退出代码exit

code是一个DWORD,可以说是线程函数的返回值,可使用getexitcodetread函数获得。

终止线程/进程的理想方法是使其入口函数自然退出。使用ExitThread终止当前线程则c/

c++运行期没有机会执行清除代码;使用TerminateThread终止其他线程则目标线程没有

机会做清除工作,例如打开的文件、申请的内存甚至使用的堆栈都不会释放。ExitProce

ss相当于对进程中所有的线程执行TerminateThread,也应该避免使用之。

进程和线程都具有优先级,线程的的相对优先级就是他的真实优先级,与其所在的进程

的优先级无关。

-------------------------------------线程同步--------------------------------

----
1。使用临界区变量可以保护进程内的共享数据,不能用于进程间资源的锁定。
2。使用事件内核对象完成线程间的同步。可把事件对象看成一种信号,通过此信号控制

线程同步。