学习《 windows 核心编程》
u 字符集,一切软件的基础,单字集(用 1 个字节表示一个字符),双字节字符集( DBCS, 并不是用 2 个字节表示一个字符哦,而是用 1 个, 2 个,或多个字节的混合来表示字符),宽字节字符集( unicode 用 2 个字节来表示一个字符)。对 windows 操作系统来说, windows 98 内核用 ANSI , windows ME 用 unicode , windows 2000 以后的版本也用 unicode ,对于我们在 windows 上开发, windows2000 以后的版本,我们即可以开发 ANSI 版本,也可以开发 unicode 版本,他们都能够很好的运行,但是重效率和软件的国际化来看的化,最后使用 unicode 进行编码。
u 内核对象,被系统和应用程序用来管理各种资源,我们可以使用 API 来管理和使用内核对象,但是不能直接修改内核对象的数据结构,内核对象由内核所拥有,内核知道某个内核对象有没有被使用等,内核对象被广泛的使用在进程,线程。。。中用来管理。(内核即操作系统的本质,核心所在,进行系统的管理)
u 进程,包含用来管理进程的内核对象和用来加载 exe 和数据等的地址空间。当一个 exe 开始运行时,它即对应一个进程, exe 的 main ()也即是进程入口函数,但是在进入 main ()之前还有 c , c ++运行库的初始化。当创建一个进程时,就产生了一个唯一的实例句柄,它就是 winmain ()函数中要传入的实例句柄,另外在主进程(可没有非主进程的啊,但也可以认为主进程的子进程是非主进程,因为系统不保存父子进程的关系,他们可以看作是相互独立的)中可以创建它的子进程,用来对多个需要共同管理的线程进行管理。
u 作业,作业是进程的容器,可以统一地对一组进程增加一些额外的限制。有时候建立单个进程的作业也是有意义的,因为可以对单一进程施加一些进程本身所没有的属性。
u 线程,线程在进程中被创建,在创建进程时,默认的主线程即被创建。操作系统是用线程来完成任务的,因为进程不直接获得操作系统的时间,线程可以认为是操作系统的最小的处理单位。在多线程编程中,首先要注意的就是线程的同步问题,还有线程池的使用。且最好不要使用全局或静态变量。
u 纤程,比线程更小的单位,纤程是用户对线程进行分割,然后自定义算法实行对纤程的调用,系统的内核并不知道线程。
u Windows 内存结构,每个进程都有它自己的虚拟内存, 32 位机,虚拟内存位 4G ,但是这 4G 并不都可以被用户使用,它包含 NULL 指针, dos 兼容区,文件映射区,系统核心区,能被用户使用的只有 2G 。当然现在 64 位的机子可不是 2G 哦。
u 虚拟内存, windows 进行内存管理的方法之一,最适合用来管理大型对象和结构数组,也即相当于 RAM (即物理内存)的二级缓存,系统先到 RAM 找,如找不到就到虚拟内存(页文件)找,找到了就加载到 RAM 中,然后执行。
u 内存映射文件, windows 的第二中内存管理方法,最适合用来管理大型数据流和单机上的数据共享。
与虚拟内存一样,内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域。它们之间的差别是,物理存储器来自一个已经位于磁盘上的文件,而不是系统的页文件。一旦该文件被映射,就可以访问它,就像整个文件已经加载内存一样。系统还使用内存映射文件,以便加载和执行
. e x e
和
D L L
文件。
u 堆栈, windows 的第三中内存管理方法,最适合管理大量的小对象,例如链表等,线程,进程都有自己的堆栈,默认的大小位 1M ,也可以修改。
最后是DLL高级和SEH的使用。
最后是DLL高级和SEH的使用。
主要参考:
《 windows 核心编程》
机械工业出版社 jeffrey richter 著
《 windows 系统编程》
人民邮电出版社 求是科技
《 windows2000 编程技术内幕》
机械工业出版社