改進Minix 3進程間通信
1、引言
本文引用地址:http://www.j9360.com/article/157963.htm早期的操作系統都是基于宏內核的思想實現的[5],例如UNIX、Linux、Solaris等。設計者將進程管理、文件系統、設備驅動程序、存儲管理等功能全部放在內核中完成。隨著技術的發展,操作系統性能不斷的提升的同時,也帶來了大量的錯誤[1]。把所有這些功能都放在具有最高特權級的內核中使得內核變得異常龐大,可靠性、安全性下降,可擴展性也變的十分困難[3]。因此,微內核的思想被提出。
微內核只提供基本的操作系統功能服務,采用了機制與策略分離的設計思想,相關的驅動與一些服務被移出內核,策略則由用戶層來實現,使得系統中各進程相對獨立,互不干擾[4],提高了系統的安全性,可靠性。但是,這種思想的實現對性能方面卻產生了一些影響。在微內核中,困擾性能的兩大因素主要是進程間通信以及任務切換。
相比較宏內核而言,微內核將大部分實現操作系統功能的服務移出了內核,內核僅僅實現不可避免的機制。這使得內核成了服務的中轉站,因此加大了信息處理的開銷,客戶進程與服務進程間的通信多了道門檻,地址空間的切換也急劇增加。
隨著技術的發展,微內核技術已發展到第二代。Minix 3[3]就是第二代微內核的典型代表。在保持著性能的最小損失的同時,實現了高可靠性與高穩定性。
2.1 Minix 3存在的缺陷
Minix最初是由Tanenbaum教授為了教學而寫的一個操作系統,發展到現在已經是第三代,它采用微內核模式,由服務器和驅動程序等進程模塊和內核組成,大大提高了操作系統的可靠性[3]。
由于Minix 3采用了第二代微內核技術,用戶進程及服務器進程和驅動進程都擁有自己的地址空間,它們之間相互獨立且相互不可見。為了能夠進行進程間通信,內核成了服務的中轉站,因為只有內核才進入各進程的地址空間中。經過代碼的閱讀,我們認為:Minix 3的編寫者為了提高效率,實現簡單,僅僅使用了分段機制。這直接導致了Minix3存在以下的缺陷:
1. 分段機制并不能充分利用物理內存。將導致物理內存存在大量的浪費。
2. 微內核必須緊緊結合硬件結構,這是為了能夠提升微內核的性能,而支持分段結構的CPU僅僅是Intel的IA32系列,這就大大將局限Minix3在別的CPU體系的發展。
3. 采用分段機制,并沒有真正實現將各進程的地址空間相隔離。如果采用分頁機制與虛擬內存,將使得每個用戶進程,服務器進程與驅動進程真正的相隔離,每個進程都有自己的地址空間,更加符合微內核操作系統的設計思想。
Minix3中為了使得內核能夠進入所有進程的地址空間而沒有采用分頁機制,僅僅使用了分段機制,這對系統的可靠性和穩定性帶來了一定的隱患,并且沒有分頁機制的操作系統也不是一種好的設計體系,并不能有效的使用物理內存。所以必須對Minix 3進行改進,引入分頁機制。
高性能和高靈活性的要求決定微內核必須盡可能縮到最小,這就將大量的服務放到了內核之外,服務進程與用戶進程、內核之間將產生大量的進程間通信和任務切換,這是導致微內核性能降低的主要因素。而采用分頁機制后,由于引進了頁目錄和頁表,這必將導致內核的性能進一步下降。其次,Minix 3對分段機制下的進程間通信采取了一定的優化,但這些優化并不適用于分頁機制中。因此,必須在分頁機制下對進程間通信加以優化,提高操作系統的效率。
2.2 內存快速映射技術
Minix 3的進程間的通信采用了聚合的方式(rendzvous),使用固定大小的消息通信(見圖1)。因此,Minix 3中的進程間通信完全通過消息完成。用戶進程也用這種方式與操作系統組件進行通信。聚合原則使得消息的傳遞不用任何中間緩沖。
每個進程都有自己的地址空間,進程之間相互不能看見另外進程的地址空間,這就大大提高了系統的安全性和可靠性。然而,在進程間通信時,需要將A進程的消息傳遞給B進程時就出現了問題。在Minix 3中,由于采用的是分段機制,內核地址空間分布在物理內存中的不同的邏輯段中,通過內核,可以將A進程的消息一次直接復制到B進程中去。不需要在內核中設置消息緩沖。
在采用了分頁機制后,也可以通過類似的方法復制消息,內核將進程A中的消息復制到內核共有的共享消息緩沖區中,在將消息復制給進程B。這樣就實現了消息的傳遞。即用戶進程A的地址空間→內核地址空間→用戶進程B的地址空間,由于內核可以根據各進程的頁目錄和頁表看到所有進程的地址空間,所以這種方法是可行的(見圖2)。也只有通過內核,才能使消息在不同的地址空間內傳遞。
評論