項目一:

| eax | 0xaa55 | 43605 |
| ecx | 0x0 | 0 |
| ebx | 0x0 | 0 |
項目二:
第零章: Operating system interfaces
作業系統的工作是(1)將電腦的資源在多個programs之間共享,並且提供一系列比硬體本身更有用的服務.(2)管理並abstracts底層硬件,如一個文字處理軟體不用去關心自己使用的是何種軟體.(3)多路復用硬件,使得多個程序可以同時運行.(4)給程序間提供一種受控的交互方式,使得程序之間可以共享數據共同工作.
而本章也說明了xv6系統服務的概貌像是-process,memory,file
descriptors,pipes,and file system.
第一章:
Process是一個抽象概念,它讓一個程序可以假設它獨佔一台機器.process向程序提供私有的,其他process無法讀寫得內存系統或地址空間,以及一顆僅執行該程序的CPU.
第一個地址空間是當電腦開機時,它會初始化自己然後從磁盤中載入boot loader道內存並運行,而boot loader1把xv6內存裝載到地址0x100000處並從entry開始執行(此時x86的paging硬碟還沒啟動,虛擬地址直接指向實體地址).
項目三:
File system的目的是組織和儲存數據,典型的文件系統之用戶和程序間的數據共享,並提供數據持久化的支援(即重啟之後的數據仍然可用).
Xv6的file system中使用了類似Unix的文件,file, directory,pathname,並且把數據存到一塊IDE磁盤上.
這個file system解決了幾個難題:
(1) 該文件續統需要磁盤上數據結構來表示目路樹和文件,紀錄每個文件用於儲存數據的塊,以及磁盤上哪些區域是空閒的.
(2) 該file system必須支持崩潰恢復,也就是說,如果系統崩潰了,file system必須保證在重啟後仍能正常工作.
(3) 不同的進程可能同時操作file system,要保證這種併行不會破壞file system的正常工作.
(4) 訪問磁盤比訪問內存要慢幾個數量級,所以file system需要維護一個內存的cache用於緩存常被訪問的塊.

Xv6的file system分7層實現,disk層讀寫了IDE上的區塊,Buffer層透過緩衝讀寫IDE硬碟,它同步了對磁碟的訪問,保證同時只有一個內存進程可以修改磁碟塊,logging層使得更高層的街口可以將磁盤的更新案會話包,通過會話的方式來保證這些操作是原子操作,Inode層提供無名文件,每一個這樣的文件由一個inode和一連串的數據塊組成.Directory層將目錄實現為一種特殊的inode,它的內容是一連串的目錄項,每一個目錄項包含一個文件名和對應的inode.Pathname層提供了層次路徑名,這一層通過遞迴的放是來調查路徑對應的文件.File descriptor層將許多UNIX的資源抽象為file system的街口,極大地簡化了程序員的工作.

文件系統必須設計好在磁盤上的什麼地方放置inode和數據塊.xv6把磁碟劃分成為幾個區塊,如圖6-2所示.file system不使用第0塊.第一塊叫做super;它包含了file system的元信息.從第2塊開始存放inode,每一塊能夠存放多個inode.接下來的塊存放空閒塊區圖.剩下的大部分塊是數據塊,它們保存了文件和目錄的內容.在磁盤的最後是日志塊,它們是會話塊的一部份.

logging(code interpret)
操作開始時呼叫begin_op,該function會檢查是否正在提交,如果正在則執行sleep,若不提交則進行increment的操作,當沒有任何進程操作log,則用commit提交
塊分配器:文件和目錄的內容存在磁盤塊中,磁盤塊都從一個空閒塊中分配出來.xv6的塊分配器包含一個磁盤上的空間塊位圖,每個塊位佔了一個位.引導區,超級塊,inode塊和位圖塊的位永遠都被置為有效.
inode這個術語可以有兩個意思.它可以指的是磁盤上的紀錄文件大小數據塊扇區號的數據結構.也可以指內存中的一個inode它包含了一個磁盤上inode的拷貝,以及一些內核需要的附加信息.
路徑名:路徑名查詢會對每一個路徑的每一個元素調用,它在最後一個元素之前停止,返回上級目錄的inode並且把最後一個元素拷貝到name中.
現實情況:
現實情況中操作系統地塊緩衝比xv6中要複雜許多,但依舊為兩個主要目的的服務:緩衝和同步到磁盤.xv6的塊緩衝,與v6的類似,使用簡單的LRU的回收策略;當然實現中還有很多其他相對複雜的策略,每種策略都用在某些方面有優勢而在其他方面有劣勢.