學習《
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
編程技術內幕》
??
機械工業出版社