怎麼查看用戶态和内核态? 在寫完《Windows核心編程入門2:操作系統内核有哪些類型以及特色》 後,到現在已經是相隔一個月了在這個過程中,我仔細研究了用戶态和内核态一直遲遲沒有更新,一是因為要仔細揣摩,以免理解的不夠當然,我現在還沒有 接觸系統内核代碼,自然理解還是不夠的這個過程我也是加深理解學習,寫之前也是查閱了很多資料書籍,然後自己消化,再用自己的思想整理表達出來,更加完 整更加通俗易懂的表達出來,讓更多人能夠輕松理解時隔一個月,還因為工作的忙碌、出差、放假旅遊,都把節奏打亂了這才恢複過來繼續把這個系列寫完, 再更新其他東西至于工作上的事情,留給白天去忙碌吧晚上做點自己的事情,放松一下,總結寫文章提高一下自己的水平,我來為大家科普一下關于怎麼查看用戶态和内核态?以下内容希望對你有幫助!
怎麼查看用戶态和内核态
在寫完《Windows核心編程入門2:操作系統内核有哪些類型以及特色》 後,到現在已經是相隔一個月了。在這個過程中,我仔細研究了用戶态和内核态。一直遲遲沒有更新,一是因為要仔細揣摩,以免理解的不夠。當然,我現在還沒有 接觸系統内核代碼,自然理解還是不夠的。這個過程我也是加深理解學習,寫之前也是查閱了很多資料書籍,然後自己消化,再用自己的思想整理表達出來,更加完 整更加通俗易懂的表達出來,讓更多人能夠輕松理解。時隔一個月,還因為工作的忙碌、出差、放假旅遊,都把節奏打亂了。這才恢複過來。繼續把這個系列寫完, 再更新其他東西。至于工作上的事情,留給白天去忙碌吧。晚上做點自己的事情,放松一下,總結寫文章提高一下自己的水平。
對于什麼是Windows都不知道的人來說,你可以多查查資料了解,然後也是可以看我們這些文章的。我們C 技術網的教程或者系列文章,至少是我主筆的,都基本做到了小白都能看得懂的通俗程度。也因此就顯得有些啰嗦了。所以,隻有委屈有基礎的人咯。
我們買了電腦,隻是買了一個硬件。要讓硬件發揮作用,這是計算機操作系統考慮的問題。現在的計算機都是大規模集成電路形式的,拆開電腦,你看到一個主闆, 上面各種元件,還有其他各個部件,都是各種電路闆支持的。作為一個男生,我也比較喜歡拿個扳手去修各種家電,修改一個家電,成就感杠杠的。有一次爺爺說機 頂盒壞了,我想試着去修一下,結果拆開了,發現就是一塊電路闆,其他什麼也沒有。這讓我深受打擊。這麼一塊電路闆,讓我不知所措。是的,各種各樣的硬件都 有這樣的電路闆,很多集成度很高,一塊闆裡基本是各種各樣的元件,也有的比較簡單。外表光鮮的硬件,拆開後都是一塊塊電路闆,不禁讓人感覺硬件内部是如此 的空虛呀。
從另一個角度想想,我們無法直接用扳手修理,很多基本也無法用按鈕去操作了。集成度越高,越沒有辦法在硬件上直接操作了。那麼這些硬件如何去操作的呢?集 成度非常高的典型代表就是計算機了。基本上,硬件本身無法直接操作。我們要操作硬件,讓這些電路闆發揮作用,就得通過軟件了。在現在設備越來越智能的時 代,很多設備都可以稱為一台微型電腦了,内部有專用的指令,外部設備隻要給它發送這些指令就可以操作這些設備了。電腦自然也是這樣。
而這些指令不可能通過手指摩擦發送,也不能動動嘴巴就能發送。所以,這才有了軟件。能夠完整接納硬件,然後在軟件上提供界面操作硬件的,都可以叫做操作系 統。在計算機上的操作系統叫做計算機操作系統,在收音機上運行的系統叫做收音機操作系統。大家不要局限于計算機操作系統。現在非常流行的不就有手機操作系 統嘛。
現在的設備基本都有一個操作系統來管理,人類不直接操作硬件了,也沒法直接操作,不然你怎麼讓一個電路闆運行呀,難道你眼睛放電讓電路闆執行指令麼?操作 系統也就理所當然完全霸占了硬件。如果你買一個電腦沒有安裝操作系統,你是不是很焦慮,即使電腦配置再牛逼,不就是一堆硬件嘛,玩不起來呀。
我們的計算機操作系統是非常成熟的了。操作系統就是用來操作管理硬件的,對于操作系統來說,它可以任意操作計算機的硬件,包括内存、磁盤、顯卡、屏幕、鍵 盤鼠标等等各種硬件設備。它說要訪問哪個硬件就可以訪問哪個硬件。計算機的世界裡,操作系統就是老大,所有的硬件資源都是操作系統管轄的。一個操作系統就 如同一個國家,操作系統内核程序,就如同國家核心領導層,這就是我們前面說的操作系統内核。我們通常叫做内核程序執行的狀态叫做内核态或者核心态。當然, 因為操作系統是接管硬件的,在硬件上有絕對的管理能力,它知道哪些可以操作,哪些不能被操作,哪些已經被分配出去了,操作系統内核扮演的就是一個不折不扣 的管理層角色,因此也叫内核态為管态(管理層态)。如果按照權利大小來看,自然内核是核心管理層,自然也是會給自己賦予絕對特權的,這樣方便管理各種硬 件,提供完整的控制。在自己的地盤裡,自己當然是最大的,自然是特權級的。所以,内核态也叫作特權态。那麼特權态自然相對于非特權态了,隻有比較才有意 義,如果大家都是可以自由訪問,也沒有必要分特權态了。特權态訪問的東西,自然不能被一般權利的程序訪問了。這個很好理解,比如國家領導人出席的國家機密 場所,不是普通人能夠去的。就是等級低了,也是不能去的。大家經常聽過什麼ring0-ring3這些名詞,我解釋一下。ring0是CPU的一個特權級 别。ring0,ring1,ring2,ring3。Windows隻使用其中的兩個級别ring0和ring3,ring0隻給操作系統内核 用,ring3普通應用程序都能用。如果普通應用程序企圖執行ring0指令,則Windows會顯示“非法指令”錯誤信息。
ring是戒指、環狀的意思。描述的是一個權利适用的範圍。0級最高,也就是操作系統内核使用的,可以對硬件随意訪問。3級最低,也就是廣大程序使用的, 級别3自然很多地方都有約束條件,不能随意訪問硬件。如果在3級下,很多事情做不了。所以很多病毒都會想着提升自己的特權,如果能夠達到ring0,自然 也就無所不能了。很多人以為自己知道ring0這個一個東西就覺得好了不起一樣的,其實這些名詞并不能說明什麼,學了點核心編程的,也就慢慢知道這些名詞 了。關鍵是要理解這些名詞背後的思想含義。
相對于操作系統的那些狀态稱呼(核心态、内核态、管态、特權态)來說,普通的應用程序也是有狀态的,不過因為應用程序權利太普通了,稱呼也少些。我們叫非 内核态為用戶态或者目态。目态就好比很多地方你隻能看,卻去不了的,隻有有特權的領導才能去的。如果将計算機世界類比為人類社會,系統内核程序就是核心管 理層了,系統其它系統組件,就是地方的管理層了,普通的應用程序就是最普通的廣大民衆了。
我想解釋到這裡,你不理解内核态和用戶态都難了吧。好吧,再多擴展一點,讓你理解更加深入一點。我們這些文章,看似淺顯,實際卻是将内部的原理都通俗化 了。當你再深入學習的時候,也就很好懂了。我們這裡絕非是聊聊曆史那樣的。所以對于這些描述文字還是需要用心理解吸收的哦。
那麼核心态和用戶态真實的應用場景到底是哪樣的呢?我們前面類比了人類社會,不免還是有點模糊,雖然理解了,但是還是不能具體化到實際場景。我們來看看這不同的狀态到底是怎麼回事。
操作系統的目标是很好的管理硬件,沒有操作系統,我們沒法使用硬件。但不是随便有一個可以操作硬件的系統就可以了的。我們需要系統穩定的運行。假如系統在 你轉賬,寫論文,做各種事情做到一半的時候突然崩潰了,是不是會讓你産生很大損失呢!必須損失很大啦。穩定是評價一個操作系統的好壞的關鍵因素。不穩定的 系統誰也不敢使用,誰知道什麼時候挂了。當硬件發生不可修複的錯誤時,系統就會崩潰藍屏。操作系統不僅要讓用戶可以很好的使用硬件,還要保證系統穩定,保 護硬件不被惡意或者非惡意的操作,以免讓系統造成崩潰。這也是系統為什麼要設置不同的運行狀态的原因。
設置運行狀态,也隻有操作系統内核才能完全訪問硬件,應用程序都是委托内核程序操作硬件。這樣一來,硬件的操作都是内核程序執行的。這樣硬件的所有操作都是在操作系統控制範圍之内的,這樣就大大提高了系統的穩定性。
用戶态的程序也就是我們平時寫的程序,和内核程序其實沒有什麼不同,都是執行指令,都是完成邏輯的執行而已。區别就在于程序關聯的權限級别了。權限不同, 能夠執行的指令類别也就不同。ring0權利的程序也就是内核程序,可以執行計算機中所有指令,這些指令包括普通指令和特權指令。如果ring3的程序試 圖執行特權指令,會被駁回,無法執行。隻因為擁有的權限不同,能做的事情就不一樣。就好比國家核心領導人身份地位高,權利高,很多國家決策可以決定,然而 他們也是一個普通人。但是他有做決定的權限,所以可以做決策。我們普通民衆,沒有那些權限,自然也無法做影響國家運作的決策。
你可能發現ring1和ring2并沒有提及,因為目前系統用0和3級别就可以了。因為系統隻需要區别内核态和用戶态就可以滿足管理需求了,所以沒有必要使用ring1和ring2。當然如果以後有特别需要,ring1和ring2也會用上的。
内核态和用戶态還有一個區别,不過這個區别可能讓你感覺身體不适哦。或者會讓你覺得挺受打擊的。所有的程序(内核态程序和用戶态程序),都是在CPU上執 行的,因為CPU是共享的,所有程序都是在CPU上執行,因此有競争關系了。如果内核态程序和用戶态程序打架,搶CPU,你猜誰會赢呢?這還用猜嘛,自然 内核态赢啦。一個有特權的和一個普通的,根本沒有競争的可能。用戶态程序在CPU上執行,會按照一定的策略輪流的執行,這樣可以保證大家都可以執行。這樣 保證公平性。然而對于特權态和用戶态來講,真會公平嗎?不會的。系統自然有優先級機制,特權态的程序自然優先級很高。即使用戶态程序剛執行,如果内核态程 序需要執行,用戶态也隻有退出來咯。而用戶态某一個程序十萬火急,内核态程序沒有執行好,那也隻有等咯。也就是說,内核态是不會被打斷的,而用戶态是可以 打斷的哦。這是一個很現實的問題哦。這個和人類社會太像了。所以不要苦惱了,不要抱怨了,計算機世界裡,其實也是人生百态呀。程序也有程序的煩惱呀。
對于硬件訪問的限制,我們接觸最多的就是内存了。物理内存的訪問,不隻是應用程序不能直接操作内存,甚至一部分内存應用程序根本就見不着。應用程序使用的 是虛拟内存地址空間,最終隻能轉換到一段内存中。我們看似應用程序可以訪問4G内存(32位程序),實際上隻是虛拟的哦。而且程序也不是直接操作内存,所 有操作都是通過地址轉換,将虛拟地址轉為實際的物理内存地址,這樣才能操作。如此一來,内存的操作也是在内核程序的處理下完成的。因此内核可以控制程序訪 問内存,避免應用程序随意操作内存。操作系統本身所在的内存和應用程序使用的内存是隔離開的,所以應用程序不能修改操作系統内核所在的内存數據的。這樣是 防止惡意程序破壞操作系統,或者防止正常程序無意破壞了操作系統哦。
至于對于用戶态的其他硬件訪問的限制,我就不再舉例說明了。相信說了這麼多,你可以非常了解用戶态和内核态了吧。如果還有什麼疑問,可以在文章底下留言。
,