《現代作業系統》精讀與思考筆記 第一章 引論
本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。
課後習題的選擇標準:儘量避免單純的概念考察(如:What is spooling?)或者簡單的數值計算,而是能夠引起思考加深理解的題目。為了保證解答的正確性,每道題都會附上作者的原文解答,而中文部分會適當加入自己的見解。原書答案下載地址(需註冊)
概念名稱回顧
硬體簡介:處理器、儲存器、磁碟、磁帶、I/O裝置、匯流排
各式各樣的作業系統:大型機OS、伺服器OS、多程序OS、個人電腦OS、手持電腦OS、嵌入式OS、實時OS、智慧卡OS
作業系統概念:程序、地址空間、檔案、I/O、保護策略、Shell
系統呼叫
作業系統結構:單一系統、層次化系統、微核心、C/S、虛擬機器、外核心
1.以count = read(fd,buffer,nbytes)為例,解析系統呼叫發生的過程
原書P50~52,左邊是原書呼叫流程表示,右邊是我根據正文進行的整理。一些翻譯可能不準確,標記了英文原文進行對照。
2.編寫一個簡單的shell
主要是為了展示程序操作的系統呼叫;同時,shell的基本工作方式通過這個解剖過程不再神祕。下面偽碼來自於原書P54圖1-19。
#define TRUE 1 while(TRUE) { /* repeat forever */ type_prompt(); /* display prompt on the screen */ read_command(command,parameters); /* read input from terminal */ if(fork()!=0) { /* fork off child process */ /* Parent code */ waitpid(-1,&status,0); /* wait for child to exit*/ } else { /* Child code */ execve(command,parameters,0); /* execute command */ } }
3.link原理
最初接觸unix時,是按照windows中“快捷方式”的形式理解link的。當然,這個是不全面不正確的。先看看MOS是上link的使用和原理介紹吧。(P57~58)
To see how link works, consider the situation of Fig. 1-21(a). Here are two users, ast and jim, each having his own directory with some files. If ast now executes a program containing the system call
link("/usr/jim/memo", "/usr/ast/note");
the file memo in jinn's directory is now entered into ast's directory under the name note. Thereafter, /usr/jim/memo and /usr/ast/note refer to the same file. As an aside, whether user directories are kept in /usr, /user, /home, or somewhere else is simply a decision made by the local system administrator.Understanding how link works will probably make it clearer what it does. Every file in UNIX has a unique number, its i-number, that identifies it. This i-number is an index into a table of i-nodes, one per file, telling who owns the file, where its disk blocks are, and so on. A directory is simply a file containing a set of (i-number, ASCII name) pairs. In the first versions of UNIX, each directory entry was 16 bytes-2 bytes for the i-number and 14 bytes for the name. Now a more complicated structure is needed to support long file names, but conceptually a directory is still a set of (i-number, ASCII name) pairs. In Fig. 1-21, mail has i-number 16, and so on. What link does is simply create a new directory entry with a (possibly new) name, using the i-number of an existing file. In Fig. 1-21(b), two entries have the same i-number (70) and thus refer to the same file. If either one is later removed, using the unlink system call, the other one remains. If both are removed, UNIX 00sees that no entries to the file exist (a field in the i-node keeps track of the number of directory entries pointing to the file), so the file is removed from the disk.
概括地說,是這樣的:每個UNIX下的檔案都有一個獨一無二的索引節點號i-number,並用它進行區分。這個i-number是索引節i-node的索引,而i-node標識了檔案資訊:擁有者、硬碟塊號等等。link後的產生檔案與原檔案具有相同的i-number,而檔名可以不同。實際上是對同一個檔案物件的引用。rm和unlink都只是把引用計數減一,直到為0時才真正的從硬碟上刪除。
另外上文提到的link,具體到Linux環境中,是硬連結。不過想起Linux一般用ln建立連結(預設為硬連結,帶-s選項是軟連結/符號連結),ln和link又有什麼異同?根據終端中輸入man link後的提示,輸入info coreutils 'link invocation'可見:
`link' creates a single hard link at a time. It is a minimalist interface to the system-provided `link' function. *Note Hard Links: (libc)Hard Links. It avoids the bells and whistles of the more commonly-used `ln' command (*note ln invocation::).
關於硬連結和軟連結/符號連結的區別,在這裡不贅述。
4.虛擬機器(P67~71)
這個概念如果只學作業系統這門課最多有個印象,如果和實際中最常見的應用VMware和JVM相聯絡,就非常好理解了。這裡不貼原文。
課後習題選
14.What is the key difference between a trap and an interrupt?
譯:trap指令和中斷的關鍵區別是什麼?)
Answer:
A trap is caused by the program and is synchronous with it. If the program is run again and again, the trap will always occur at exactly the same position in the instruction stream. An interrupt is caused by an external event and its timing is not reproducible.
分析:
trap是程式本身引起的,因此它是可重現的,每次執行到這個程式某一處都會發生;而中斷是外部事件導致的,因此它發生的時機是不可重複的(除非人為干預)。
順便複習下trap和interrupt,前者用於從使用者態轉化到核心態,以便於執行一些需要特權才能完成的操作;後者指處理器接收到來自硬體或軟體的訊號,提示發生了某個事件,應該被注意,這種情況就稱為中斷(維基連結)。在我看來,它們的共同之處在於都需要進行現場儲存、並在處理完返回。
16.Is there any reason why you might want to mount a file system on a nonempty directory? If so, what is it?
Answer:
Mounting a file system makes any files already in the mount point directory inaccessible, so mount points are normally empty. However, a system admin-istrator might want to copy some of the most important files normally located in the mounted directory to the mount point so they could be found in their
normal path in an emergency when the mounted device was being repaired.
分析:
將檔案系統掛載在某個目錄下會導致該目錄原先的檔案全部被隱藏而不可訪問,而在解除安裝後恢復。解答中的場景我不是很明白,下面是第二版中文版的答案
裝配檔案系統將使得裝配目錄中已有的任何檔案都不可訪問,因此裝配點通常都是空的。然而,系統管理人員可能需要將某些位於被裝配目錄中的非常重要的檔案複製到裝配點,使得他們在進行裝置檢查或修理時,可以在緊急事件中的普通路徑上找到這些檔案。
試了下,以/home/wy/test和/home/wy/test2為例,其中前者包括1.txt、2.txt兩個檔案,後者只有1.txt這個檔案,並且三者內容都不同。執行
sudo mount -B /home/wy/test /home/wy/test2
這時,test是被裝配目錄,test2是裝配點,無論哪個路徑都是test中的內容。執行
cp 1.txt /home/wy/test2
提示:cp: “1.txt” 及 “/home/wy/test2/1.txt” 為同一檔案
那麼使用
cp 1.txt /home/wy/test2/test1.txt
執行解除安裝
sudo umount /home/wy/test /home/wy/test2
可以發現,原來的test2中並無任何變化,新拷貝的檔案仍在test裡。個人理解解答的意思只是為了方便使用而已。
另,mount到root下只能重啟。
22.What is the essential difference between a block special file and a character special file?
譯:塊特殊檔案和字元特殊檔案的基本區別是什麼?
Answer:
Block special files consist of numbered blocks,each of which can be read or written independently of all the other ones. It is possible to seek to any block and start reading or writing. This is not possible with character special files.
分析:
特殊檔案(special file)將I/O裝置抽象成了檔案。
24.The client-server model is popular in distributed systems. Can it also be used in a single-computer system?
譯:客戶/伺服器模型在分散式系統中普遍使用,而對於單機系統是否可以使用?
Answer:
Yes it can, especially if the kernel is a message-passing system.
分析:
把程式之間的資訊互動視為通訊,那麼答案顯而易見。這就好比我們可以用socket()實現不同主機的程序通訊,也可以實現本機不同程序的通訊一樣。
30. Write a shell that is similar to Fig. 1-19 but contains enough code that it actually works so you can test it. You might also add some features such as redirection of input and output, pipes, and background jobs.
分析:
把圖1-19也就是本文第2條的簡易shell進行實現。可以增加一些特性如輸入輸出重定向、管道、後臺作業。
這個實現過程打算單獨成文。
31. If you have a personal UNIX-like system (Linux, MINIX, Free BSD, etc.) available that you can safely crash and reboot, write a shell script that attempts to create an unlimited number of child processes and observe what happens. Before running the experiment, type sync to the shell to flush the file system buffers to disk to avoid ruining the file system. Note: Do not try this on a shared system without first getting permission from the system administrator. The consequences will be instantly obvious so you are likely to be caught and sanctions may follow.
譯:在UNIX中寫個shell指令碼,建立無限個子程序並觀察發生了什麼。請確保你的行為獲得的了系統管理員的許可。
分析:
完成這個工作可以使用著名的fork炸彈,其程式碼如下:
:() { :|:& };:
輸入後我的XShell顯示[1] 20773並顯示提示符,但是輸入ps -a完全沒反應,我採取了強制重啟虛擬機器的解決方法。
相關推薦
《現代作業系統》精讀與思考筆記 第一章 引論
本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。 課後習題的選擇標準:儘量避免單純的概念考察
《現代作業系統》精讀與思考筆記 第四章 檔案系統
本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。 課後習題的選擇標準:儘量避免單純的概念
《現代作業系統》精讀與思考筆記 第五章 輸入/輸出
Read performance: RAID levels 0, 2, 3, 4, and 5 allow for parallel reads to service one read request. However, RAID level 1 further allows two read re-ques
《現代作業系統》精讀與思考筆記 第六章 死鎖
本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。 課後習題的選擇標準:儘量避免單純的概念
《現代作業系統》精讀與思考筆記 第七章 多媒體
第七章部分內容與前幾章內容關聯很大,比如程序排程、磁碟排程、檔案系統,而且多為實現細節,這裡不詳述。 1.幀數與閃爍(P476) 畫面動作的平滑性不是完全由每秒的幀數決定的,而是由每秒不同畫面的數目決定的。即使把20幀的視訊提高到80幀,而提高方式僅僅是把同樣一幀重複播放4次,那麼它仍然會不連
《現代作業系統》精讀與思考筆記 第十至十三章
本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。 第十章是關於Linux的簡略介紹。一百頁的
《現代作業系統》精讀與思考筆記 第三章 記憶體管理
本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。 課後習題的選擇標準:儘量避免單純的概念
《現代作業系統》精讀與思考筆記 第八章 多處理機系統 第九章 安全
兩章雖然篇幅不小,不過都是以介紹為主,這部分不是我讀這本書的重點,看得比較粗略,筆記內容也不多,乾脆合二為一。 第八章 多處理機系統 正如章節名,這章主要是關於多處理機、多計算機、虛擬化、分散式系統。由於非單機的多處理器系統和網路通訊關係密切,還講了一些計算機網路的內容。 1.非阻塞send
現代作業系統讀書筆記--第一章 引論
*引論*1.使用者與作業系統的互動方式(使用者介面程式):shell(基於文字),圖形使用者介面GUI(基於影象)2.主要部件簡化圖:*1.1 什麼是作業系統*1.作業系統任務:為程式設計師提供一個資源集的清晰抽象,管理這些硬體資源。1.1.1 作為擴充套件機器的作業系統1.
《現代作業系統(中文第四版)》筆記 第一章 引論
既然買了《現代作業系統》(《Modern Operating System》)這本書,那就好好學習一下吧,這是第一篇讀書筆記。 第一章 引論 計算機系統總的來說分為軟體和硬體,如下圖所示。多數計算機有兩種執行模式:核心態和使用者態。軟體中最基礎的部分是作業系
演算法設計技巧與分析筆記 第一章
1.搜尋:設A【1……n】為一個n個元素的陣列,判定給定元素x是否在A中 線性搜尋:直接掃描A中所有專案,將每個專案與x做比較。 二分搜尋: A【low……high】為有序非空陣列(假定為升序),A【mid】為中間元素 假定x>A【mid】,則丟棄A【low…mid】
《資料結構與演算法分析》學習筆記-第一章-引論
自述 自從工作之後,就沒有再寫部落格了,一方面是因為自己初入職場還不能很好的適應職場生活。另一方面也是對前途有些不知所措。現在工作已經快三年了,我慢慢找到了自己的節奏,也許還是有很多不成熟的地方,但是我已經想開啦。做自己真正喜歡的事就好了,遵循自己的內心。在職場的這些年我寫了很多筆記,但是沒有時間整理出來,後
隨機過程(方兆本,繆伯其)讀書筆記-第一章-引論
重要 聯合 時間差 給定 函數 完全 tro markdown 狀態 第一章 引論 1.1 引言 1.1.1 基本概念和例子 定義1.1: 隨機過程就是一族隨機變量${X(t), t \in T}$, 其中$t$ 是參數, 屬於某個指標集$T$, $T$ 稱為參數集. $t
概率論與數理統計筆記 第一章 概率論的基本概念
討論 公式 mooc set 滿足 log lin let 關閉 概率論與數理統計筆記 第一章 概率論的基本概念 概率論與數理統計筆記(計算機專業) 作者: CATPUB 課程:中國大學MOOC浙江大學概率論與數理統計 部分平臺可能無法顯示公式,若公式顯示不正常可以前往CS
《數據庫設計入門經典》讀書筆記——第一章:數據庫建模的過去與現在
port 混合 如果 執行 很好 創建表 規則 什麽 增長 《數據庫設計入門經典》,現在學習的是這本書,雖然以前就看過類似的書,可能由於之前經驗不足,書中說的某些東西只消化了一部分,現在重溫一邊好懂多了。所以說讀第一遍讀不懂不要緊,過個一年半載的再來讀,還是會讀不懂的,哈哈
作業系統概述第七版讀書筆記第一章
概述 作業系統是作為計算機硬體和計算機使用者之間的中介程式 目的是為使用者提供方便有效的執行程式的環境 是管理計算機硬體的軟體 作業系統做什麼 計算機系統組成部分:計算機硬體、作業系統、系統程式和應用程式、使用者 作業系統:控制使用者的應用程式對硬體的使用 作業系統是一直
《Linux命令列與shell指令碼程式設計大全》讀書筆記————第一章 初識Linux shell
本章內容 1、什麼是Linux 2、Linux核心的組成 1、1 什麼是Linux Linux課劃分為以下四部分 a)Linux核心 b)GNU工具 c)圖形化桌面環境 d)應用軟體 1.1.1 深入探究Linux核心
《高效能MySQL》讀書筆記---第一章:MySQL架構與歷史
本章描述了MySQL的伺服器架構、各種儲存引擎之間的主要區別,以及這些區別的重要性 1.1 MySQL邏輯架構 MySQL的邏輯架構如下圖所示: 第一層:該層的服務並不是MySQL獨有的,大多數基於網路的客戶端/伺服器的工具或者伺服器都有類似的架構。如連線處理、授權認證、安全等
現代作業系統 第一章 引論 習題
第1章 引論 習題 注:非引用部分,為自己思考後答案,非標準答案。 Q1:作業系統的主要兩大作用是什麼? A:考察作業系統有兩種觀點:資源管理觀點和擴充套件的機器觀點,對應著兩種功能:為使用者程式提供抽象和管理計算機資源。 Q2:在1.4節中描述了9中不
作業系統筆記第一章(2)
第一章:作業系統引論(2) <三>、作業系統的基本特徵 不同作業系統都具有各自不同的特徵: 批處理系統:有高的資源利用率和系統吞吐量 分時系統:能及時獲得響應 實時系統:具有實時特徵 他們有共同的基本特徵:併發,共享,虛擬,非同步(多道併發是最根本的