学习《
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的使用。
主要参考:
《
windows
核心编程》
机械工业出版社
jeffrey richter
著
《
windows
系统编程》
人民邮电出版社
求是科技
《
windows2000
编程技术内幕》
机械工业出版社