《現代操做系統》精讀與思考筆記 第十至十三章

  本系列博文是《現代操做系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄和課後習題精解,所以不會事無鉅細的全面摘抄,僅僅根據我的狀況進行記錄和推薦。因爲是英文版,部份內容會使用英文原文。數組

  第十章是關於Linux的簡略介紹。一百頁的篇幅致使介紹不可能面面俱到,也不如專門的Linux書籍(好比LKD、APUE、UNP)精細深刻。不過一些習題不錯,有助於理解Linux的某些細節的設計意圖。ide

  接下來的兩章「實例研究2:Windows Vista和」「實例研究3:Symbian」我的暫時沒有研究的興趣,僅僅粗略翻了下,不打算專門作筆記。oop

  對於第十三章「操做系統設計」,基本是對全書的回顧,這裏僅僅整理最有幫助的「機制與策略」部分。學習

 

第十章

1./proc文件系統(P796)

  Linux的/proc目錄實際上是一個文件系統,其思想源於4.4BSD和System V,基本概念是爲每個進程在這個目錄下建立一個目錄,名稱即PID的十進制表示,該目錄下是和這個進程相關的信息。之前經過/proc來查看過進程信息,不過沒想到它是一種文件系統。這些文件在磁盤上其實是不存在的。this

  另外,非特權用戶能夠經過/proc來了解進程信息,甚至能夠經過寫入的方式改變系統參數。spa

 

習題

10. Why do you think the designers of Linux made it impossible for a process to send a signal to another process that is not in its process group?

譯:操作系統

  你認爲是什麼緣由促使Linux的設計者不容許一個進程向和它不是同一個進程組的進程發送信號?線程

Answer:設計

  Malicious users could wreak havoc with the system if they could send signals to arbitrary unrelated processes. Nothing would stop a user from writing a program consisting of a loop that sent a signal to the process with PID i for all i from 1 to the maximum PID. Many of these processes would be unprepared for the signal and would be killed by it. If you want to kill off your own processes, that is all right, but killing off your neighbor’s processes is not acceptable.blog

答案譯文:

  惡意用戶能夠經過向不相關的進程發送信號以形成系統災難。沒法阻止一個用戶編寫一個循環地向全部PID進程發送信號的程序。大量的進程將因未作好處理信號的準備而崩潰。kill掉本身的進程是合理的,可是kill其餘用戶的進程是沒法接受的。

分析:

  除非是系統管理員,不然不該該容許一個用戶kill掉另外一個用戶的進程。

 

14. In every process' entry in the task structure, the PID of the parent is stored. Why? 

譯:

  爲何進程的任務結構中須要保存父進程的PID?

Answer:

  When the process exits, the parent will be given the exit status of its child.The PID is needed to be able to identify the parent so the exit status can be

transferred to the correct process.

分析:

  進程退出時,其父進程須要得到它的退出狀態,所以進程須要父進程PID來肯定應該把它的退出狀態傳給誰。

 

25. Is it possible that with the buddy system of memory management it ever occurs that two adjacent blocks of free memory of the same size co-exist without being merged into one block? If so, explain how. If not, show that it is impossible.

譯:

  夥伴系統中是否有可能存在兩個一樣大小的鄰接塊爲空,但不會被合併成一個塊?解釋你的答案。

Answer:

  It is possible if the two blocks are not buddies. Consider the situation of Fig. 10-17(e). Two new requests come infor eight pages each. At this point the bottom 32 pages of memory are owned by four different users, each with eight pages. Now users 1 and 2 release their pages, but users 0 and 3 hold theirs. This yields a situation with eight pages used, eight pages free, eight pages free, and eight pages used. We have two adjacent blocks of equal size that cannot be merged because theyare not buddies.

分析:

  答案描述的是下圖的情形,兩個塊雖然相鄰,但它們並不是來自同一個16個頁面的塊,於是不能合併。

  若是仍然不理解爲什麼不可這樣合併,那麼設想一下:若是這種狀況是容許的,那麼這64個頁面的塊可能會被分爲16-32-16的分割,而合併的兩個塊大小應該同樣,顯然沒法合併,不能造成更大(64)的空閒塊,這是不合理的。

 

第12章

中文版勘誤

1.P525圖12-1,「顯式」應爲「顯示」。

 

第13章

1.機制與策略(P975)

  原先在學習《Linux內核設計與實現》時,沒搞清楚機制與策略究竟是什麼差異。做爲UNIX的一大特點,「機制與策略相分離」在《現代操做系統》中被仔細分析,值得研讀一番。

  先來看看《現代操做系統》上提到的機制與策略分離的好處:有助於體系結構一致性、有助於使系統保持小型和良好的結構。那麼,所謂的「分離」,即指:「將機制放入操做系統而將策略留給用戶進程,從而在改變策略時系統保持不變」。退一步地,「即便策略模塊必須保留在內核時,若是可能也應與機制相隔離」。

  再看看書中提到的幾個例子,首先是兩個現實中的例子。

  例1,一家大型公司,擁有負責向員工發放薪水的工資部門,該部門擁有計算機、軟件、空白支票、與銀行的契約及更多機制,以便準確地發出薪水。然而,策略——肯定誰該得到多少薪水——是徹底與機制分開的,而且是由管理部門決定的,工資部門只是作他們被要求作的事。

  例2,一家飯店,擁有提供餐飲的機制,包括餐桌、餐具、服務員、充滿設備的廚房、與信用卡公司的契約等等。策略是由廚師長設定的,他來決定菜單上有什麼。若是決定撤掉豆腐換上牛排,那麼這一新的策略仍然能夠由原有機制來處理。

  接下來是操做系統的例子。

  例3,考慮線程調度,優先級調度器用於選出最高優先級的線程,其機制是一個數組,以優先級爲索引。而策略是設定優先級,能夠存在不一樣的策略:優先I/O、根據用戶級別決定、根據運行狀況動態改變、甚至由用戶設定。

  例4,分頁。機制涉及MMU管理、維護使用頁面和空閒頁面的列表、將頁面移入移出磁盤的代碼,而策略是頁面故障時作什麼:基於LRU仍是FIFO的或是其它某種。

  例5,容許模塊裝載到內核中。機制關係它們如何被插入、連接、能夠發生什麼調用、對它們能夠發出什麼調用,策略是肯定容許誰(哪些用戶)將模塊裝載到內核之中以及裝載哪些模塊。可能只有超級用戶能夠裝載模塊,也許任何用戶均可以裝載被適當權威機構數字簽名的模塊。

  這樣,個人理解即是:機制是一系列配套設施,用來完成各類工做;而策略來代表如何使用這套設施來完成怎麼樣的工做。

 

勘誤

1.P961第二段末尾多出一個"The"。

相關文章
相關標籤/搜索