天天看點

作業系統

接着上面所講,作業系統的設計目标和一些基本要求是什麼?

首先講這個設計目标,設計目标,即是我要幹什麼,很清晰,我要把硬體抽象為使用者提供一個接口,另外一方面,我得管理好不多的硬體資源,是以設計目标就是提供服務和管理資源!

第二方面,作為一個作業系統,它應該要滿足哪些原則?

可移植性,這是十分重要的,讓作業系統适應更多的平台,而這方面也提出了posix标準。

安全性和公正性,安全自然不用說,你必須讓使用者的資料不被别人偷走,也不能輕易的崩潰,公正性的話,對于每個程序,你都必須維護好公平,不能讓一個程序一直霸占導緻其他程序過于饑餓!

強壯,類似安全

有效,兩方面,一個是提高資源使用率,一個是提高吞吐量。

接口統一,類似可移植。

(另外,對上次的虛拟機做一個補充,虛拟機有一個廣義的概念,就是作業系統,在裸機上加載一層軟體,來管理整個計算機系統,形成一個虛拟的計算機,(另外的就是我們現在用的軟體))

因為是複習,這裡還要提一下一些作業系統的概念:

程序與作業,程序本質上是正在執行的一個程式,與每個程序相關的是程序的位址空間,你現在打開的wps可能就是一個程序(實際有很多程序),而你再打開wps又是一個新的程序,雖然東西都是一樣的,但是程序是一個執行個體,而代碼是一個模闆,而作業是一個大的概念,可能需要好幾個程序去做,而對于程序的位址空間,想一想,一個爸爸生了好多兒子,每個兒子是不是要有自己的房子,程序也一樣,程序就是一個人,他有自己的特性,代碼是它的外貌,而資料是它的精神,各種各樣的特性封裝在軀殼或者獨立的空間裡,(這裡我倒想到一個有意思的東西,虛拟記憶體,和人一樣,如果我們都把自己的所有财富都拿出來,街道肯定空間不夠,是以我們隻能看今天要幹嘛帶什麼東西出門,看到人太多了隻能窩在家裡(對應窩在硬碟),而其實最開始不需要虛拟記憶體的概念,為什麼,因為大家都窮的要死,要帶的東西太少了,而現在大家富裕了,财富多(需要的記憶體越來愈大),是以我們不可能為你提供這麼大的實體記憶體,隻能看需求帶東西)。

檔案的一二三,我們說過,在很多作業系統裡面,一切皆檔案,硬體被抽象為檔案,我們就像讀書一樣去操作硬體,檔案可以定義為檔案名下的一組資訊的集合,這倒是很貼切,當然檔案最後都要對應硬體,或是硬碟之類的,檔案名相當于一個ID,我們知道它是什麼東西,但是檔案要對應到實體上去,還得有一個inode(也就是一個實體定位),我們為什麼不直接操作實體定位,因為我們使用者不想喝這些複雜的底層打交道,我們隻需要拿到檔案名就夠了,我們隻需要知道這個人叫某某,至于它住哪住的怎麼樣,我們并不是很想關注,是以,在實際的作業系統來講,檔案對應的兩個必不可少的東西就是檔案名和inode節點。

核心态和使用者态以及所謂系統調用:

我們說作業系統的作用是封裝硬體,使用者可以幹嘛,使用者可以使用系統給的api(就是系統調用)去做我們想做的事情,但是具體的實作我們不知道,我們也無法直接操作硬體,我們想做什麼,都得向核心請求,靠核心來實作,或者說核心态和使用者态處在兩個不同的級别上,一個是boss,一個是小職員,我們要幹嘛最後都要靠核心來做,這些系統調用是系統給我們的接口,而為了提高代碼的可移植性,unix下有一個posix标準,就是對應這些系統調用,比如fork之類的。

系統調用是作業系統很重要的一個概念,有的題目也會涉及到,事實上,系統調用是作業系統必須提供的一個功能,因為它是我們程式設計的接口或者說工具,沒這些函數編個屁!

系統調用有很多種,涉及到了各個方面,通過這些函數,我們可以覆寫對硬體的通路和管理,當然這裡要區分系統調用和庫函數還有核心調用,系統調用準确來講是一個過程,我們使用庫函數一步步陷入到核心完成我們的功能的過程,另外一個說法是庫函數包裝了系統調用,而核心調用和系統調用對于大核心來講應該是沒有差別的,都是直接切入到核心,而對于minix的這種微核心來講,存在這樣一個差別,系統調用一般是使用者切入到核心,而核心調用往往是伺服器和驅動切入核心,而且事實上minix還有任務調用的概念,伺服器之間切換,這都不是很重要。

到這裡,作業系統的一些小東西差不多介紹完了,下面開始介紹一個很重要的概念,程序!

繼續閱讀