1. 程式人生 > >現代作業系統讀書筆記

現代作業系統讀書筆記

再次拿起《現代作業系統》這本書,精心仔細閱讀,又有了幾點體會記錄一下。

作業系統的功能或者說職責:向下管理資源,向上提供服務介面。OS作為中間層軟體。作業系統涉及到的主要內容有程序和執行緒、檔案系統、死鎖、記憶體管理、I/O管理等。

程序和執行緒涉及到概念、區別、類別等,程序是存在輸入輸出和狀態的一段正在執行的程式,是動態的而非僅僅是靜態的程式。程序就涉及到其執行、阻塞和就緒的生命週期,其實程式方面很多都存在生命週期,例如java的諸多框架中例如spring中存在物件的生命週期,structs中請求存在生命週期等。程序中重要的概念是程序表,儲存在記憶體中,其單位是程序表項即entry,看到entry就想起了java中集合類中的entry內部類,java的內部類被很多人推崇而同時又被另外一些人所詬病,其實程序表是所有在記憶體中的和不再記憶體中的程序的reference,其內儲存了程序的狀態資料,說實話表看來真的很給力,在很多地方會看到表的廣泛應用和巨大威力,例如資料庫的基層就是表當然是關係型資料庫,新的NoSQL型別打破了一些傳統,例如在網路中表格也起著格式儲存資料的作用,現實生活中表格也是重要的。對於執行緒,有兩點很讓我感興趣的方面,一個是使用者空間中的執行緒模型和核心空間中的執行緒模型,不同的模型應用到了不同的實際作業系統中。另一個是程序之間的通訊和同步互斥機制,涉及到中斷機制、忙等待、原語、生產者-消費者模型、PV操作、互斥量、管程、屏障等概念。還有程序需要排程演算法來進行排程的,因為記憶體資源有限而且為了最大地提高執行效率最大的利用CPU而導致諸多排程演算法,例如先來先服務演算法、最短作業優先、最短剩餘時間優先、彩票排程等。哲學家就餐問題和讀者-寫者問題資料也很多。還有程序的互斥和同步、阻塞和非阻塞、同步和非同步之間的區別我找了半天才明白。

記憶體管理方面,涉及到虛擬記憶體機制、MMU、TLB、分頁和分段機制、頁面置換演算法等問題。我從這章深切體會到兩點:一,問題是充滿矛盾的,經常是沒有最終確定的答案,最重要的分析的過程,提出一種方案分析其涉及的方面,他的優點和缺點,有很多解決方法但是沒有完美方案,就像沒有銀彈一樣。哲學中矛盾是一大核心,也是其一些理論支撐的基礎,現實中矛盾是無時無刻不有的;第二,在作業系統中,程序/執行緒是對實際CPU的抽象,地址空間是對實體記憶體的抽象,檔案是對實體記憶體的抽象,I/O流是對硬體輸入輸出裝置的抽象。而抽象和模擬一直是我對計算機、網路、作業系統、語言等方面的核心認識,而在抽象之後就需要增刪改查、管理、優化演算法等方面,整個作業系統就是講這些東西。

檔案系統中涉及到磁碟、磁碟管理、檔案系統儲存模式、快取記憶體等。檔案系統就聯絡到資料結構中學到B樹、B+樹、B*樹等資料結構知識。

I/O處理方面,包括中斷處理系統、裝置驅動程式、與裝置無關的I/O軟體、使用者級I/O軟體等軟體方面內容和I/O硬體例如DMA、裝置驅動、裝置控制等。一大感受是DMA控制器中有地址暫存器、計數暫存器、控制暫存器,DMA可以進行獨立訪問匯流排,可以進行儲存,可以進行控制,不能進行計算,這不就相當於縮減版的CPU嗎?他確實分擔了部分CPU的工作使得CPU可以做其他工作以提高其利用率。這其中中斷起著關鍵作用,中斷控制器屬於計算機系統結構方面知識,可是他起著中斷接受、排隊、遮蔽等作用。

死鎖應該是最激動人心的方面,因為諸多演算法在其中啊。為了避免死鎖,設定安全狀態和非安全狀態,使用多維度軌跡路線演算法,使用銀行家演算法,並且建立了打破死鎖狀況的方法,當然書中坦言沒辦法避免死鎖,因為程序是動態,所需資源無法預計,資源是否能用不確定。我比較喜歡演算法研究,所以激動人心啊。

總之,作業系統是一種管理軟體,他特別像公司,公司的員工是硬體資源,而公司的制度便是這個系統,然而制度是為了做什麼的?為了有效配置人員,為了提高效率啊。作業系統也是啊,為了管理資源,為了最大的提高效率,為了給應用軟體提供介面。他是一個平臺,是軟體的根基,是一種先進的理念。