1. 程式人生 > >作業系統與虛擬化安全第一次作業-關鍵習題

作業系統與虛擬化安全第一次作業-關鍵習題

《作業系統與虛擬化安全》

第一次作業(預備知識)本次作業要求:

1.  這是個人作業,每位同學獨立完成和提交。

2.  提交時間10月13日24點。

3.  如果遇到問題,請聯絡助教。

 一、作業系統設計技術

1.  作業系統的主要任務是什麼?

管理好計算機全部軟硬體資源,提高計算機的利用率;擔任使用者與計算機之間的介面,使使用者通過作業系統提供的命令或選單方便地使用計算機

2.  作業系統檔案的內部表示有檔案索引節點表、檔案表、使用者檔案描述符表,請你描述一下這三者之間的關係如何?並舉例說明。

每個檔案都有一個索引節點,索引節點包括檔案所有者、存取許可權、及其存取時間等資訊;檔案表示一個全域性表,每個活動的open,它都包含一個條目,每個檔案系統表的條目都包含檔案偏移量、訪問模式以及指向它的檔案描述表的條目計數。每個程序包含一個使用者檔案描述表,標誌程序開啟檔案的檔案。

如在Linux中,每個檔案在核心中用索引節點表示,已開啟的檔案在核心中用file結構體表示,檔案描述符表中的指標指向file結構體,每個程序用一個files_struct結構體記錄檔案描述符的使用情況,files_struct結構成為使用者開啟檔案表。

3.  作業系統程序的資料結構的主要組成部分包括哪幾部分?並請你重點解釋一下程序標識、程序樹關係、程序間通訊機制等三個部分。

(1)共包括八部分:1.標識號2.狀態資訊3.排程資訊4.有關程序間通訊資訊5.程序連結資訊6.時間定時器7.檔案系統資訊8. 程序和相關的上下文資訊

(2)程序標識:系統通過程序標識號(PID)唯一標識一個程序,程序標識號是線性增長的;程序樹關係:0程序是一個特殊程序,它是在系統引導時被“手工”建立的,當它建立一個子程序(1程序-init程序,是系統中其他每個程序的祖先)之後,0程序就變成對換程序,除了0程序以外,每個程序都是被另外一個程序執行fork建立的,每個程序都有一個父程序,但一個父程序可有多個子程序;程序間通訊機制:為了使程序能在同一項任務上協調工作,程序之間必須能進行通訊。如訊號Signals,管道Pipes,以及記憶體共享shared memory, 訊號量semaphore, 訊息佇列 Message Queues等。

4.  請你描述一下作業系統I/O子系統中核心與驅動程式介面、系統呼叫與驅動程式介面的作用是什麼?

核心與驅動程式介面:由塊裝置開關表(block device switch table)和字元裝置開關表(characterdevice switch table)描述。每一種裝置型別在表中有若干表項,這些表項在系統呼叫時引導核心轉向適當的裝置驅動程式介面。

系統呼叫與驅動程式介面:對於特殊裝置檔案的系統呼叫,核心通過檔案描述符找到對應的索引節點,從索引節點中抽取主裝置號和次裝置號,使用主裝置號作為索引值進入適當的開關表,根據使用者的系統呼叫來呼叫驅動程式中的函式。

二、虛擬化技術

1. 系統虛擬化體系結構分為宿主型和獨立監控型兩種型別,請你分析一下這兩種型別體系結構,並分別舉例說明現有虛擬化軟體的體系結構屬於哪種型別。

宿主型:需要執行在HostOS 之上,由其提供驅動程式與硬體通訊;

獨立監控型:直接運行於硬體之上;

比如VMwareworkstation 是宿主型,需要執行在作業系統之上,比如windows,

Xen是獨立監控型,可以直接執行在硬體上。

2. 請你分析一下系統虛擬化實現技術中全虛擬化、泛虛擬化和硬體輔助虛擬化技術,比較一下各自優缺點,並分別舉例說明現有虛擬化軟體實現技術屬於哪種型別

(1)全虛擬化:原本的作業系統調直接呼叫硬體介面,給底層硬體傳送的指令是二進位制指令,加了一層虛擬機器之後,作業系統不能直接呼叫底層,但依然傳送二進位制指令,這時候,虛擬機器要攔截下指令,由虛擬機器完成呼叫,所以虛擬機器要轉換二進位制指令。優點在於不需要修改原來的作業系統,且作業系統執行在1環上,安全性很高,缺點在於這種軟體攔截機制開銷比較大。

(2)泛虛擬化:作業系統仍然可執行在0環上,更改作業系統核心,以前的二進位制指令變成了hypercall呼叫,只有特權指令需要虛擬化。優點在於降低了虛擬機器的難度,不需要對二進位制指令進行轉換了。缺點在於:需要修改OS核心。

(3)硬體輔助虛擬化:優點在於特權指令呼叫之時,不需要半虛擬化更改作業系統核心,也不需要二進位制轉換,因為有了硬體的支援。缺點:需要有硬體支援(如Intel VT, AMD SVM)。

VMware workstation與KVM是全虛擬化,Xen是硬體輔助虛擬化。

3. 請你簡要描述一下Xen虛擬化系統中基於額度的排程演算法思想。

該演算法有兩個引數其中一個引數cap是指示佔用多少個cpu。另一個引數是weight指示一個是cpu佔多少時間。初始化時:weight=credit,若cap=100則 vcpu佔一個物理cpu,cap=200vcpu佔兩個物理cpu,在演算法中有三個佇列:OVER(已獲得),UNDER(等待),BOOST(某些虛擬機器讓出了cpu,下次排程放進boost,在排程時優先排程),每10毫秒執行一次後credit=credit-100+30/n,3次之後額度用完,讓出cpu,保證每個vcpu執行時間,保證相對公平。

該演算法曾經出現過bug:某cpu阻塞掛起,加入boost佇列,下個週期優先排程,週期加長,但是可以利用,在每次結束時,主動掛起,則可以無限期使用cpu可佔80-90%的時間。現已經修復。

4. 請你簡要描述一下MMU泛虛擬化和影子頁表技術,以及比較一下他們的異同處。

MMU泛虛擬化方法:VMM將對映關係 f•g 直接寫入guest OS的頁表中,並替換原來的對映 g,這實際上違背了“f-map對於虛擬機器不可見”的原則。

影子頁表方法:為guest OS的每個頁表維護一個影子頁表,並將合成後的對映關係 f•g 寫入到“影子”中,guest OS的頁表內容保持不變。最後,VMM將影子頁表交給MMU進行地址轉換。

相同點:都是由VMM根據對映f和g生成符合對映f•g 並直接將這個對映關係交給MMU,從而利用現有的MMU機制實現虛擬地址到機器地址的高效轉換。

不同點:虛擬地址到機器地址的轉換執行者不同,一個是Guest OS,一個是VMM。