作業系統核心空間和使用者空間的互訪問
前面寫了很多的文章來說明了這個問題,並且在文章中均舉了一些例子,如果為了解決具體問題,那麼那些就已經足夠了,但是如果想實現一個作業系統,這些就遠遠不夠了。
硬體是軟體的底層,這是一個前提,硬體是舞臺,軟體都是舞者,作業系統是應用程式的底層,作業系統是舞臺,應用程式是舞者,並且,硬體是操作的系統的舞臺,這裡作業系統成了舞者,這就是計算機的層次(對於有作業系統的計算機而言,不包括裸機)。在作業系統理論中,往往將程序的地址空間分為核心空間和使用者空間,這樣的話就實現了作業系統最起碼的安全性。但是存在一個疑問,核心空間的保護不是cpu硬體提供的嗎?比如Intel的x86處理器的特權環的概念,怎麼會是OS的概念呢?注意,cpu只是提供了一個機制而已,比如特權環的機制使得核心地址空間的保護變得更加容易和可靠,就像Intel的x86處理器那樣,你完全可以不用那一套,自己實現一套核心和使用者分離的機制,正如很多虛擬機器所做的那樣。
一般情況下在linux中,3G是個分界線,在windows中,2G是個分界線,當然可以改,作業系統的作者完全可以只給核心1k空間或者別的。作業系統提出了核心和使用者分離的策略,然後利用處理器來實現,仍以Intel處理器為例,利用它的分段和分頁機制來實現就可以了,很簡單,就是一個層次問題,正如前文所述,你也可以不用這些機制實現,而自己用純軟體的方式實現或者對於不需要安全控制的系統乾脆不實現。
理解了以上以後就比較好理解核心空間和使用者空間的互訪問問題了,首先要注意的是,它們的地位是不平等的,如果使用者空間訪問核心空間,那麼必須從那幾道所謂的門通過然後才會得到訪問權,比如系統呼叫,對於cpu硬體實現的空間分離,那麼硬體會自然而然的阻止使用者直接訪問核心
不允許核心訪問使用者空間使核心免去了很多的負擔,使核心設計更加簡化,使核心空間和使用者空間變得更加隔離從而使二者的地位平等了一點點。注意這裡並不是說就不允許核心訪問使用者空間,硬體都不吱聲,作業系統亂做啥限制啊,其實核心訪問使用者空間有一個前提,這個前提純粹是作業系統約定的,不同的作業系統可能不同,在linux上,該前提就是訪問使用者空間前必須得到該使用者空間上下文,也就是說核心必須知道訪問的是哪個程序的使用者空間,雖然核心可以帶著最高指示做任何事情,但是也不能胡作非為,做事之前必須明白自己做的事是什麼,這個約定對於我們人也很適用,權力機關是不能胡作非為的,但是...