0x01 什么是操作系統(tǒng)桦锄?
操作系統(tǒng)是一個軟件扎附,一個可以讓應用程序運行變得更容易,允許程序共享內存结耀,讓程序能夠與硬件設備交互留夜,以及其他類似的工作。這種軟件被稱為操作系統(tǒng)(Operating System, OS)
為了實現上述的功能图甜,操作系統(tǒng)主要利用一種通用的技術:虛擬化(virtualization)碍粥,將物理資源,如處理器黑毅、內存嚼摩、磁盤轉換為更通用、更強大且更易用與使用的虛擬形式。因此低斋,操作系統(tǒng)也被稱為虛擬機(virtual machine)蜂厅。
0x02 什么是虛擬化?
先舉個例子:現在有一所房子膊畴,兩個人(A掘猿、B),這兩個人都想擁有一所房子
- 你對A說:這個房子屬于你唇跨,你需要進去的時候稠通,就來找我拿鑰匙,用完把鑰匙還給我
- 你對B說:這個房子屬于你买猖,你需要進去的時候改橘,就來找我拿鑰匙,用完把鑰匙還給我
- 你負責保管鑰匙玉控,并且要讓A和B知道這個房子只屬于自己飞主,A、B互相不知道對方
- 當A找你拿鑰匙時高诺,如果房子空閑碌识,你就把鑰匙給他;如果B在房子中虱而,那你就拒絕A筏餐,讓他等著
- 同樣B找你拿鑰匙時,也是同理......
在上述例子中牡拇,房子只有一所魁瞪,但是你讓A和B都覺得自己擁有了房子,這個過程就類似于虛擬化CPU惠呼,而你在中間扮演的角色就是操作系統(tǒng)的角色导俘。
上面的例子是一個時分共享(time sharing)機制的應用,操作系統(tǒng)通過這個機制實現了虛擬化CPU剔蹋。相對應的還存在空分共享機制趟畏,操作系統(tǒng)在虛擬化磁盤和內存的時候使用了此機制。
- 時分共享:允許資源由一個實體使用一小段時間滩租,然后由另一個實體使用一小段時間赋秀,如此下去......
- 空分共享:資源在空間上被劃分給希望使用它的人,例如律想,一旦將一塊磁盤空間分配給用戶猎莲,在用戶刪除文件之前,不可能將它分配給其他文件
0x03 虛擬化CPU
從上述例子中技即,可以看到著洼,即使只有一個處理器,4個程序似乎是可以同時運行的。操作系統(tǒng)通過時分共享機制身笤,實現了系統(tǒng)擁有非常多CPU的假象豹悬。將單個CPU(或其中的一小部分)轉化為看似無限數量的CPU,從而讓許多程序看似在同時運行液荸,這就是虛擬化CPU瞻佛。
0x04 虛擬化內存
從這個例子中,可以看到娇钱,這兩個進程都在相同的地址(00200000)處分配了內存伤柄,但每個進程似乎都獨立更新了 00200000 處的值,就好像每個正在運行的程序都有自己的私有內存文搂,而不是與其他正在運行的程序共享相同的物理內存适刀。
這是因為操作系統(tǒng)虛擬化內存,每個進程訪問自己的私有虛擬地址空間(virtual address space)煤蹭,操作系統(tǒng)以某種方式映射到機器的物理內存上笔喉。一個正在運行的程序中的內存引用不會影響其他進程(或操作系統(tǒng)本身)的地址空間。對于正在運行的程序硝皂,它看起來完全擁有自己的物理內存然遏。實際上,物理內存是由操作系統(tǒng)管理的共享資源吧彪,這就是虛擬化內存。
0x05 持久性
操作系統(tǒng)管理磁盤的軟件通常被稱為文件系統(tǒng)(file system)丢早,它負責以可靠和高效的方式姨裸,將用戶創(chuàng)建的任何文件存儲在系統(tǒng)的磁盤上。不像操作系統(tǒng)為CPU和內存提供的抽象怨酝,操作系統(tǒng)不會為每個應用程序創(chuàng)建專用的虛擬磁盤傀缩。相反,它假設用戶經常需要共享文件中的信息农猬。比如我們編寫代碼時赡艰,需要使用編輯器創(chuàng)建和編輯文件;編寫完后需要使用編譯器來編譯代碼斤葱,生成可執(zhí)行文件慷垮,最后運行可執(zhí)行文件。因此文件是可以在不同的進程之間共享的料身。
而文件的持久化過程中芹血,文件系統(tǒng)會確定新數據將駐留在磁盤上的哪個位置啃擦,然后在文件系統(tǒng)所維護的各種結構中對其進行記錄,這需要向底層存儲設備發(fā)出 I/O 請求,以讀取現有結構或更新(寫入)它們。這個過程辆憔,操作系統(tǒng)相當于提供了一些API,屏蔽了讓硬件設備執(zhí)行操作的一些低級別設備接口。所以绘沉,OS 有時被視為標準庫喻喳。