Ⅰ Windows NT採用了怎樣內核結構
Windows NT 內核基本結構和特徵
盡管大部分人每天在Windows系統上工作學習娛樂,但是對於其內核結構很多人仍然是不了解的。一方面是由於其內核源代碼不開源,另一方面則是由於相關資料的奇缺。我大二基本上花了一學期來學習和探究NT內核。雖然不敢說自己對其有很深入的了解,但至少其基本結構還算是清楚的。但是我畢竟才學有限,肯定會有不完善的地方,還請各位不吝賜教。
目前微軟所有的主流操作系統均是基於NT內核,比如:
Windows 2000/XP/Server 2003(基於NT5)
Windows Vista (基於NT6)
Windows 7(基於NT6.1, 我沒裝過Win7,不過據說是這樣的)
盡管很多人責備Windows在一些方面存在很多問題,但是這並不是內核的錯,總的來說,NT的是一個成熟穩定且先進的內核,我認為在今後相當長的一段時期內,NT內核仍將是主流,且不會有很大變化(當然,局部的升級是完全毫無疑問的)
微軟早期希望把NT做成一個純微內核結構,關於微內核和單一內核的區別,各位如有不清楚的,可以去網上搜索一下。後來為了提高圖形子系統的性能,避免大量的內核態和用戶態切換,微軟便將其移入內核之中,使其成為內核一部分(類似的還有後來的DirectX技術)。由此可見,NT並不是一個完全的微內核,它也具有單一內核的某些特徵。
NT內核具有以下幾個特徵(摘自Undocumented Windows NT)
Portability (可移植性)
如你所知,Windows NT 可以運行在多種平台上,即 Intel、MIPS、Power PC 和 DEC Alpha。眾多廠商都為 Windows NT 的可移植性做出了貢獻。 其中最為重要的因素可能是其實現所使用的語言。Windows NT 大部分是用 C 語言編寫的,也有一部分用的是 C++。 平台相關的匯編語言只在必需的地方才用到。Windows NT 團隊還將操作系統中硬體相關的部分與其它部分隔離開,單獨放進了 HAL.DLL。 如此一來,Windows NT 中與硬體無關的部分的代碼就可以用 C 之類的高級語言來編寫,也因此可以很容易地移植到各種平台。
Extensibility(可擴展性)
Windows NT 具有很高的可擴展性,但因為缺少文檔,其可擴展的特性卻極少得到發掘。未公開的特性的名單中,子系統首當其沖。子系統在操作系統中提供了多種操作系統介面。只需添加新的子系統程序就可以為 Windows NT 擴展新的操作系統介面,但是對於公開添加新子系統過程的要求微軟卻一直打馬虎眼。
Windows NT 的內核是高可擴展的,因為可以將內核模塊作為驅動程序動態載入。對於 Windows NT,微軟提供了足夠的文檔來編寫硬體設備驅動——即硬碟驅動、網卡驅動、磁帶機驅動等等。在 Windows NT 下還可以編寫不控制設備的驅動程序。甚至連文件系統也是作為驅動程序載入的。
Windows NT 的可擴展性的另一個例子就是系統調用介面的實現。 開發者要修改操作系統行為,一般都需要鉤掛或添加系統調用。 Windows NT 的開發團隊實際了良好的系統調用介面以方便鉤掛和添加系統調用。但是微軟還是沒有公開這些機制。
Compatibility(兼容性)
長久以來,向下兼容性都是 Intel 處理器和微軟操作系統的一大特徵,也是這兩位巨人成功的關鍵。Windows NT 必須能運行 DOS、Win16 和 OS/2 的程序。兼容性是 Windows NT 開發團隊使用子系統概念的另一個原因。除二進制兼容之外(執行不同格式的可執行文件),Windows NT 還為符合 POSIX 的程序提供了源代碼級的兼容。增強兼容性的其他方面還表現在除自己本身的 NTFS 外,Windows NT 支持其它的文件系統,如 DOS 的 FAT 和 OS/2 的 HPFS。
Maintainability(可維護性)
Windows NT 的代碼量很大,維護著些代碼的工作量也相當大。NT 的開發團隊通過使用面向對象的設計實現了高可維護性。再有,將操作系統的功能分成各個層也提高了可維護性。最上面的一層,也就是用戶見到的操作系統層面,是子系統層。子系統提供系統調用介面來為外界提供應用程序編程介面。在系統調用介面層之下的是 NT 的 executive,executive 又建立在內核之上,而內核又依賴於硬體抽象層(HAL),硬體抽象層與硬體直接通訊。
NT 的開發團隊所選的編程語言也與 Windows NT 的可維護性有關。正如我們前面提到的,整個操作系統都是用 C 和 C++ 來編寫的,只有極少數不用不行的地方用了匯編語言。
Security(安全性)
Windows NT 是一個安全的操作系統,是因為它有以下幾點特徵:用戶在使用系統之前必須先登陸。 系統中的資源都被視為對象,而每一個對象都相應由一個安全描述符。安全描述符有一個安全列表來指示那些用戶可以訪問該對象。
盡管有這些,要是沒有一個安全的文件系統,操作系統也不能說是安全的。 DOS 時的 FAT 文件系統沒有預見到任何的安全問題,其作為一個單用戶的系統,也不用防範安全問題。
為了克服此缺陷,Windows NT 團隊推出了一種新的文件系統,這種文件系統基於 OS/2 的文件系統 HPFS。這種新的 Windows NT 的自有文件系統叫 NTFS。它支持訪問控制,用戶可以為 NTFS 下創建的文件或目錄指定訪問許可權,NTFS 只允許有訪問許可權的進程訪問該文件或目錄。
Multiprocessing(多進程)
Windows NT 支持對稱多處理,Windows NT 的工作站版本可以支持兩個處理器,伺服器版可以支持到4個。為支持多處理,操作系統需要特殊的同步機制。在單處理器系統中,通過禁用中斷,臨界區中的代碼執行時不會被打斷。這對於維護內核數據結構的完整性來說是必需的。在多處理器環境下,就不可能在所有的處理器上都禁用中斷。在多處理環境中,Windows NT 使用自旋鎖來保護內核數據結構。
註:多處理可分為對稱的和非對稱的。在非對稱多處理中,有一個處理器為主處理器,其它的處理器都為從處理器。只有主處理器運行在內核模式,其它從處理器都只運行在用戶線程。只要運行在用戶線程的從處理器一調用系統服務,主處理器就接管此線程並執行所需的內核服務。調度程序,一個內核程序,之運行在主處理器上。因此,主處理扮演者調度員的角色,將用戶模式線程分派給從處理器。很自然,與所有處理器都可在內核或用戶模式運行的對稱多處理相比,主處理器負擔很重,系統不均衡。
International Language Support(國際化語言支持)
如今眾多的 PC 用戶都使用英語之外的其它語言。與這些用戶能很好交互的關鍵就是使操作系統能支持用戶們的語言。Windows NT 通過使用 Unicode 標準的字元集實現了這一目標。Unicode 標准規定了一個16位的字元集,而ASCII 使用的是8位字元集。 Unicode 的前256個字元的編碼與 ASCII 的相同。這就為非拉丁語的語言留出了充足的空間。Win32 API 能接受 Unicode 和 ASCII 兩種字元集,而 Windows NT 的內核則只能使用 Unicode。盡管應用程序程序員可以不去了解 Unicode,但驅動程序的開發者必須熟悉 Unicode,因為內核介面函數只接受 Unicode 字元串而且驅動的入口點都用的是 Unicode。
Windows NT 從 MACH 操作系統那裡借用了核心體系,MACH 操作系統是在卡耐基梅隆大學開發的。MACH 操作系統的基本理念就是通過將復雜的操作系統功能交給用戶級進程而將內核減至最小。這種客戶機-伺服器的操作系統體系還有另外一個目的:允許在同一操作系統上使用多種 APIs。通過在伺服器進程中實現 APIs 就可以做到。
MACH 操作系統的內核提供了非常簡單的一組介面函數。伺服器進程使用這組介面函數實現出某種 API 來提供一組更復雜的介面函數。Windows NT 從 MACH 那裡借用了這個理念。Windows NT 中的伺服器進程被稱作子系統。模塊化和結構化的程序設計都是優秀軟體管理的原則,NT 選擇使用客戶機-伺服器的體系結構顯示了它對這種原則的服從。Windows NT 本可以將所需的 APIs 在內核實現,也可以在內核上加上不同的層來實現不同的 APIs。出於維護性和擴展性的目的,NT 團隊選擇了子系統的辦法。
Windows NT 中有兩種子系統: integral subsystems 和 environment subsystems。Integral subsystems,如安全管理子系統,完成基本的操作系統任務。 Environment subsystems 則使得一台 Windows NT 機器能使用不同種類的 APIs。Windows NT 的子系統能支持以下的 APIs:
Win32 子系統。Win32 子系統提供 Win32 API。使用 Win32 API 的應用程序可以運行在微軟 提供的所有平台上—
WOW 子系統。Windows on Windows (WOW) 子系統提供了對 16-bit Windows 應用程序的兼容,使得 Win16 的應用程序可以在 Windows NT 上運行。只要沒有使用 Windows NT 不支持的未公開函數,這些應用程序都可以運行。
NTVDM 子系統。NT Virtual DOS Machine (NTVDM) 提供了一個基於文本的環境,DOS 程序可以在這個環境中運行。
OS/2 子系統。OS/2 子系統能運行 OS/2 應用程序。WOW、NTVDM 和 OS/2 都只能用在 Intel 平台上,因為他們都對應用程序提供二進制兼容性。而用於一種處理器的可執行文件或二進制文件就不能用在另一種處理器上,因為處理器間的機器指令格式不同。
POSIX 子系統。POSIX 子系統提供符合 POSIX 1003.1 標準的 API。
應用程序並不知道所調用的 API 是由相應的子系統處理的。這種隱藏是通過每種子系統各自的客戶端 DLL 來實現的。這種 DLL 將 API 調用轉換為本地過程調用(local procere call,LPC)。本地過程調用類似於聯網的 UNIX 上的遠程過程調用(RPC)。使用 RPC,客戶應用程序可以調用運行在網路上另一台機器上的伺服器進程。 LPC 對運行在同一台計算機上的客戶機與伺服器進行了優化。
NT內核主要包含以下幾個重要文件:
Ntoskrnl.exe(或者Ntkrnlpa.exe)
HAL.Dll
NTDll.Dll
Win32k.Sys
NT內核的核心是NT EXECUTIVE。對應的文件是Ntoskrnl.exe。如果是機器是多處理器的,則是Ntkrnlpa.exe。非常可笑的是,這個文件可以直接刪除,其後果就是重啟後Windows無法啟動,甚至連滾動條都看不到。該文件只有2MB左右的大小,但可謂是麻雀雖小五臟俱全,它作為整個Windows中最核心的部分,向外界提供了復雜的介面。
與之相輔相成的是HAL.Dll文件,即Hardware Abstraction Layer 硬體抽象層 。它直接與機器的硬體打交道,將硬體的差異對其之上的層隱藏起來。Windows NT 是一個有高可移植性的操作系統,運行在多種平台上。HAL.DLL 包含的代碼向核心的其它部分隱藏了處理器和機器相關的細節。因此平台之間只有 HAL.DLL 不同,剩下的使用 HAL 介面的核心代碼都有很高的可移植性。
NTDll.Dll模塊。導出了大部分的Native API函數,提供了由用戶態至內核態的切換的功能。做過Windows平台開發的人都知道,Windows API主要由Kernel32.Dll, User32.Dll, GDI32.Dll構成。其實對WindowsAPI的調用最終會被轉接到NTDll。即所謂Native API,命名上基本上就是在原API前面加上Nt或者Zw(比如CreateFile就變成了NtCreateFile)。而Kernel32.Dll, User32.Dll, GDI32.Dll三個文件則組成了Win32子系統,它們本身不實現API,它導出的函數被稱為stub 函數(盡管名稱上看起來很迷惑人)
Win32K.sys模塊。實現了Windows的圖形處理部分。USER32 和 GDI32 使用系統調用介面來調用 WIN32K.SYS 中的服務。由於其工作與內核態,所以具有很高的性能,這也成就了Windows系統的強大的圖形處理能力。
Ⅱ Windows 7、ios、android是用什麼語言編寫的
Windows 7使用C語言和C++語言編寫而成。部分內容由SDK等語言編寫而成。基於Vista內核,並融合Microsoft Windows 2008 Several基礎上編寫的,內部版本號6.1版本7600。
iOS開發主流編程語言是Object-C以及Swift。
Objective-C主要用於iOS開發。Objective-C在C的基礎上,加入面向對象特性而成的編程語言。
Swift是蘋果公司在2014上發布的全新開發語言。Swift內在依然是Object-C,但Swift大大地降低了開發門檻。
常規的C和C++亦可用於iOS開發。但使用C和C++做ios開發的人越來也少。
3.Android是基於linux內核,所以android核心部分是c語言編寫的。
但是android提供的sdk是基於java語言的,也就是說大部分用戶所使用的應用程序是用java編寫的,運行於這個虛擬機之上。
Ⅲ 怎麼查看自己電腦當前系統是什麼版本
1、按電腦開機鍵,打開電腦。
(3)win7內核編程擴展閱讀:
操作系統理論研究者有時把操作系統分成四大部分:
1、驅動程序: 最底層的、直接控制和監視各類硬體的部分,它們的職責是隱藏硬體的具體細節,並向其他部分提供一個抽象的、通用的介面。
2、內核: 操作系統之最內核部分,通常運行在最高特權級,負責提供基礎性、結構性的功能。
3、支承庫:是一系列特殊的程序庫,它們職責在於把系統所提供的基本服務包裝成應用程序所能夠使用的編程介面(API),是最靠近應用程序的部分。例如,GNU C運行期庫就屬於此類,它把各種操作系統的內部編程介麵包裝成ANSI C和POSIX編程介面的形式。
4、外圍- 所謂外圍,是指操作系統中除以上三類以外的所有其他部分,通常是用於提供特定高級服務的部件。例如,在微內核結構中,大部分系統服務,以及UNIX/Linux中各種守護進程都通常被劃歸此列。
參考資料來源:網路-操作系統
Ⅳ c語言用什麼軟體編寫
可以編寫c語言的軟體有:Vim、C++編譯器、Dev-C++、Code::Blocks、Visual Studio等。
1、Vim
Vim是一個類似於Vi的著名的功能強大、高度可定製的文本編輯器,在Vi的基礎上改進和增加了很多特性。VIM是自由軟體。Vim普遍被推崇為類Vi編輯器中最好的一個,事實上真正的勁敵來自Emacs的不同變體。
1999 年Emacs被選為Linuxworld文本編輯分類的優勝者,Vim屈居第二。但在2000年2月Vim贏得了Slashdot Beanie的最佳開放源代碼文本編輯器大獎,又將Emacs推至二線, 總的來看, Vim和Emacs在文本編輯方面都是非常優秀的。