基礎:作業系統是什麼
使用者模式
使用者模式(user mode)是所有一般程式執行時所處的受限、被圍起來的模式。想像一棟建築裡的住客:他有自己公寓的鑰匙,也能使用大廳與共用健身房,但不能進入鍋爐房、配電盤或別人的公寓。那就是你的程式在使用者模式下的處境:可以自由做自己的工作,但任何可能傷害機器或其他程式的動作,都被硬體擋下。
當 CPU 處於使用者模式時,程式可以執行一般指令——算術、搬移資料、呼叫自己的函式——而且只能存取作業系統授予它的記憶體。它不能做的,是執行特權指令:它無法直接命令裝置、更改記憶體保護設定、讓 CPU 停機,或關閉中斷。若它嘗試,硬體會拒絕並陷入核心。要完成任何特權的事,使用者模式的程式必須透過系統呼叫禮貌地請求,那是跨入核心唯一被認可的方式。「使用者空間」一詞,是對使用者模式程式以及它們所棲身記憶體的世界的通稱。
棲身於使用者模式,正是讓一個程式能安全地與其他程式並存的原因。使用者模式裡的當機或程式錯誤是被圍堵的:作業系統能偵測它、善後、並終止該程式,而不致拖垮整個系統。這種圍堵價值極高,因此設計者會盡可能把更多東西推進使用者模式——在某些系統上,許多裝置驅動程式、檔案系統與服務都跑在使用者空間,正是為了讓故障被隔離,代價則是更頻繁(也更慢)地跨入核心。
試算表把一整欄相加,完全在使用者模式中進行——純粹的算術,不需要任何特權。只有當你按下「儲存」時,它才透過 write() 系統呼叫跨入核心,因為寫入磁碟是項特權操作,必須由核心代它執行。
一般工作留在使用者模式;只有特權工作才跨入核心。
在使用者模式中執行並不代表程式無害——它仍可能濫用自己合法擁有的資料與權限。使用者模式限制的是硬體允許程式直接碰觸的範圍,而非它在自身權限內所能造成的破壞。
又称
另见