**
說抽象之前得先知道cpu
以及鍵盤、滑鼠是之間是工作的。
cpu最終狀態只能進行加減,當我們輸入乙個簡單的字元「
a」的時候,鍵盤與
cpu都是把字母「
a」轉化為能夠識別的二進位制
01才能識別。而這一些對於使用者來說都是透明的,讓使用者認為當輸入乙個字母「
a」時就是對字母「
a」的乙個「投影」顯示。但實現這個的一切轉化都已經由作業系統幫助我們完成,如果沒有作業系統,對於乙個字母
a的輸入,可能就是輸入
01000001
這樣的二進位制**。作業系統把裝置(
cpu,鍵盤,滑鼠等)抽象後以方便我們的操作。
那麼作業系統究竟把這些裝置抽象成什麼,是如何開發者方便開發者的呼叫?在作業系統中everything is file!cpu
,滑鼠等這些都被作業系統抽象(虛擬化?)成為了檔案,這樣開發者可以通過對這些檔案操作來操作裝置。下面兩幅圖前者是
linux(ubuntu)
對於cpu
和滑鼠抽象之後的結果
,後者是
windows7
對於硬碟的抽象
(虛擬化?
)後的截圖
前面提到的os
把一切抽象成為了檔案的形式以供開發者(包括使用者)來使用,那麼在寫乙個
c語言簡單的
scanf
的時候,
內部究竟幹了什麼?如下圖:
上圖乙個程式與裝置通訊的工程,可以想象我們正在執行乙個包含scanf
的程式,我們需要通過程式輸入乙個值,在內部是程式通過系統呼叫介面
(syscall.h
或man 2 syscall)
去操作裝置驅動,然後裝置驅動選擇使用哪個裝置節點,最後節點與實際的裝置相關聯。
對於上圖的進一步分析:
對於在linux作業系統中執行
ls命令檢視當前資料夾內容的抽象:
抽象=虛擬化?
虛擬化和抽象我認為不能混為一談,抽象是把物理裝置變成實實在在的檔案形式;但是虛擬化對於乙個虛擬化系統是乙個並不存在的東西,雖然虛擬化系統會認為自己本身是執行在物理裝置之上的,但這一切都是執行在乙個虛擬裝置監視器(vmm)
的容器之內。如圖:
因為每個程序都擁有自己的記憶體空間,程序間通過pipe
進行通訊,而虛擬機器監視器可以讓虛擬機器共享乙個物理記憶體空間。換句話說就是:虛擬機器監視器對於虛擬機器是多對多的關係,而對於物理設別的抽象記憶體是一對一的關係。如果是省略中間的
「監視器
」,實際上就是虛擬機器共享物理記憶體的乙個程序的記憶體空間(實際是不可能省略中間的監視器,這裡只是模擬)。監視器模擬虛擬
cpu,虛擬
cpu的計算通過監視器傳遞給真實的
cpu計算。(下圖為
vmm模擬)
作業系統 虛擬化和雲
虛擬機器管理程式需要在以下三個維度上有良好的表現 安全性 虛擬機器管理程式應完全掌控虛擬資源。保真性 程式在虛擬機器上執行的行為應與在裸機上相同。高效性 虛擬機器中執行的大部分 應不受虛擬機器管理程式的干涉。敏感指令 在核心態和使用者態執行的行為不同。進行 i o 操作或修改 mmu 設定 特權指令...
虛擬作業系統
windows是大家眾所周知的作業系統,但最近要進行linux開發,所以就安裝了ubuntu系統。但雙系統用起來畢竟不方便,因為有些工作要在windows下進行 如使用photoshop進行編輯 頻繁切換系統是一件鬧心的事。於是想到用虛擬工具虛擬作業系統。說起虛擬作業系統,又面臨乙個鬧心的選擇 到底...
作業系統 虛擬
虛擬 虛擬磁碟 虛擬網 對資料加密 磁碟 倉庫 記憶體 車間 cpu 計算 未進入記憶體的程式 進入作業區 程序 程式進入記憶體,程式記憶體 變數區 控制區 程序 所占用的記憶體 虛擬磁碟 比喻 把車間暫時不需要用到的產品搬到倉庫 相當於記憶體的擴容 多使用者多工 實時多工作業系統 時分復用作業系統...