1. 程式人生 > 其它 >【Windows 作業系統】 核心物件

【Windows 作業系統】 核心物件

核心物件簡介

首先大家別被這個名字唬住了,核心物件=核心+物件;先解釋“物件”這個名字,這個與C++中的類的例項是一個道理,即類的例項化便是一個到底,再往底層了說就是按照類這個模板,為其分配一塊記憶體,並作相應的初始化,就這麼簡單,可別忘了,作業系統也是用程式碼寫成的,只不過不同於C++中的類,而是用的C中的結構體。在一個概念就是“核心”,可別被這玩意整蒙了,這裡所謂的核心無非就是跑在系統空間裡的例項物件,即物件的記憶體地址分配在系統空間中的物件即為核心物件。好了,名字的事情搞明白了

Windows中有很多像程序物件、執行緒物件、檔案物件等等這樣的物件,我們稱之為Windows核心物件。核心物件是系統地址空間中的一個記憶體塊,由系統建立並維護,這個記憶體物件是一個數據結構,維護著與物件相關的資訊(如計數器)。核心物件為核心所擁有,而不為程序所擁有,所以不同程序可以訪問同一個核心物件。

2、核心物件的構成

我們都知道,像CPP,JAVA,C#等等,這類面向物件的程式語言有一個很重要的特性就是“繼承”。所謂的繼承一句話總結下就是:拿來主義,子承父業。無非是實現程式碼複用,而這種複用的語法很 簡單,就是通過”繼承”來實現了,簡化了複用的整個過程。除了複用之外,還有一個好處便是能夠實現多型,通過基類指標就能夠訪問子類中該寫過的虛擬函式,這種基於同一個介面實現不同功能的方式便是多型的核心了。通過一套統一的介面就能夠達到統一管理的目的,不得不說,CPP的成功本質是程式設計思想的成功。然而C語言中,沒有繼承這個概念,那麼多型啥的就跟他沒一丁點關係了。難道偉大的C語言真就被這麼個小玩意難住了嗎?顯然沒有,諾,這裡的核心物件管理就另闢蹊徑,把C玩出了CPP的味道,不得不說,C就是這麼偉大。微軟的解決方案是:

物件頭+物件體
物件頭便是相當於CPP中的基類,負責管理一些簡單的,所有物件共有的屬性;諸如程序物件頭,執行緒物件頭,檔案物件頭,除錯物件頭等等;
物件體相當於CPP中的繼承的子類,代表著具體的某個物件;諸如程序物件,執行緒物件,檔案物件,除錯物件等等;
具體的記憶體佈局如下圖所示:

但別覺得物件頭就很簡單,類似於CPP中的一個類中有很多欄位屬性一樣,Windows核心中實現的物件頭又是有很多個不同的組成部分組成的,這些獨立的組成部分是否存在則由一個總的欄位來進行管理的,具體的簡化圖如下圖所示:

二.核心物件結構

每個物件都有物件頭和物件體組成。所有型別的物件頭結構都是相同的,而結構體部分卻各不相同的。下面是核心物件的結構圖:

詳細請檢視:https://www.anquanke.com/post/id/219839#h2-4

核心物件結構圖

程式設計是個人愛好