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。使用事件内核对象完成线程间的同步。可把事件对象看成一种信号,通过此信号控制
线程同步。