嵌入式100題(61) 核心態,使用者態的區別

2022-06-09 13:21:12 字數 1558 閱讀 5857

就像世界上的人並不平等一樣,並不是所有的程式都是平等的。世界上有的人占有資源多,有的人占有資源少,有的人來了,別人得讓出資源,有的人則專門為別人讓出資源。程式也是這樣,有的程式可以訪問計算機的任何資源,有的程式則只能訪問非常受限的少量資源。而作業系統作為計算機的管理者,自然不能和被管理者享受一樣的待遇,它應該享有更多的方便或特權。為了區分不用程式的不同權利,人們發膽了核心和使用者態的概念。

那麼什麼是核心態,什麼是使用者態呢?只要想一想現實生活中,處於社會核心的人與處於社會邊緣的人有什麼區別就能明白處於核心的人擁有的資源多!因此,核心態就是擁有資源多的狀態,或者說訪問資源多的狀態,我們也稱之為特權態。相對來說,使用者態就是非特權態,在此種狀態下訪問的資源將受到限制。如果乙個程式執行在特權態,則該程式就可以訪問計算機的任何資源,即它的資源訪問許可權不受限制。如果乙個程式執行在使用者態,則其資源需求將受到各種限制。

例如,如果要訪問作業系統的核心資料結構,如程序表,則需要在特權態下才能辦到。如果要訪問使用者程式裡的資料,則在使用者態下就可以了。

由於核心態的程式可以訪問計算機的所有資源,這種程式的可靠性和安全性就顯得十分重要。試想如果乙個不可靠的程式在核心態下修改了作業系統的各種核心資料結構,結果會怎樣呢?整個系統有可能崩潰。而執行於使用者態的程式就比較簡單了,如果其可靠性和安全性出了問題,其造成的損失只不過是讓使用者程式崩潰,而作業系統將繼續執行。

很顯然,核心態和使用者態各有優勢:執行在核心態的程式可以訪問的資源多,但可靠性、安全性要求高,維護管理都較複雜;使用者態程式訪問的資源受限,但可靠性、安全性要求低,自然編寫維護起來都較簡單。乙個程式到底應該執行在核心態還是使用者態取決於其對資源和效率的需求。

一般來說,乙個程式能夠執行於使用者態,就應該讓它執行在使用者態。只在迫不得已的情況下,才讓程式執行於核心態。只要看看乙個國家的治理就清楚了。我們拿什麼標準來判斷什麼事情應該歸國家領導管理。凡是牽扯到計算機本體根本執行的事情都應該在核心態下執行,只與使用者資料和應用相關的東西則放在使用者態執行。另外,對時序要求特別高的事情,也應該在核心態做。你有沒有想過,國家領導出門怎麼不塞車呢?

那麼什麼樣的功能應該在核心態下實現呢? 首先,cpu管理和記憶體管理都應該在核心態實現。這些功能可不可以在使用者態下實現呢?當然能,但是不太安全。就像乙個國家的軍隊(cpu和內存在計算機裡的地位就相當於乙個國家的軍隊的地位)交給老百姓來管一樣,是非常危險的。所以從保障計算機安全的角度來說,cpu和記憶體的管理必須在核心態實現。

診斷與測試程式也需要在核心態下實現。因為診斷和測試需要訪問計算機的所有資源,否則怎麼判斷計算機是否正常呢?就像中醫治病,必須把脈觸控病人。你不讓中醫觸控,他怎麼能看病呢(當然,很多人認為中醫是偽科學,根本治不了病,本書對此問題不做討論)?輸入輸出管理也一樣,因為要訪問各種裝置和底層資料結構,也必須在核心態實現。

對於檔案系統來說,則可以一部分放在使用者態,一部分放在核心態。檔案系統本身的管理,即檔案系統的巨集資料部分的管理,必須放在核心態,不然任何人都可能破壞檔案系統的結構;而使用者資料的管理,則可以放在使用者態。編譯器、網路管理的部分功能、編輯器使用者程式,自然都可以放在使用者態下執行。下圖描述的是windows作業系統的核心態與使用者態的界線。

嵌入式100題(61) 核心態,使用者態的區別

就像世界上的人並不平等一樣,並不是所有的程式都是平等的。世界上有的人占有資源多,有的人占有資源少,有的人來了,別人得讓出資源,有的人則專門為別人讓出資源。程式也是這樣,有的程式可以訪問計算機的任何資源,有的程式則只能訪問非常受限的少量資源。而作業系統作為計算機的管理者,自然不能和被管理者享受一樣的待...

嵌入式100題(48) 氣泡排序

氣泡排序 氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的 如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,...

嵌入式100題(51) 歸併排序

歸併排序 歸併排序是把序列遞迴地分成短序列,遞迴出口是短序列只有1個元素 認為直接有序 或者2個序列 1次比較和交換 然後把各個有序的段序列合併成乙個有序的長序列,不斷合併直到原序列全部排好序。可以發現,在1個或2個元素時,1個元素不會交換,2個元素如果大小相等也沒有人故意交換,這不會破壞穩定性。那...