OS Design and Implementation讀書筆記(3)

系統調用(續)

目錄管理:
目錄的本質其實也就是文件,只不過其中存放的內容並非通常的數據,而是存放其每個子文件的文件名與i節點號之間的對應關係,即 <i節點號,文件名>

|| mkdir() / rmdir()。創建和刪除一個空目錄

|| link() / unlink()。類似於給文件名起別名,一個引用(本體仍是一份)

工作原理:每個文件都有一個i節點(i-node),i節點存放了文件所有者,文件在磁盤位置等重要信息。
i節點號 是i節點在i節點表上的索引值。link所做的事就是創建一個新的目錄項(在目錄中創建的一個新文件),
它有一個新的文件名,但i節點號仍是原來的那個文件的i節點號,故指向同一文件

|| mount()。該函數在前面的文件掛裝中提到過,可將兩個文件系統通過掛裝合併成一個

|| sync()。將塊緩存區的數據塊寫回磁盤中。若塊緩存區的數據塊被修改,寫回磁盤時將會造成系統崩潰數據丟失,故MINUX3會定時調用sync系統調用,定時寫回磁盤,刷新塊緩存區的內容

內存中有一個塊緩存區,專門保存最近訪問過的數據塊,作用是爲了減少重複訪問磁盤的次數。

保護:

|| chmod()。改變文件的保護模式,即改變文件11位的保護碼

現在解析以下最後兩位文件保護碼,分別是SETGID 與 SETUID(設置組標識與設置用戶標識)
當用戶執行了一個標有SETUID/SETGID的文件,那麼在該進程的運行期間,用戶的真實UID會臨時被設置爲超級
用戶的有效UID。一般用戶只有執行了有這兩個標記的程序才能臨時改變UID,暫時獲得超級用戶的權利,超級用
戶可隨便修改,無視所有系統的保護規則!

|| getuid() / getgid()。進程有時需要知道自己的UID GID是什麼。前者返回真實UID與有效UID,後者返回真實GID與有效GID。

時間管理:


第一章結束,解決以下學習筆記一中關於CPU狀態與系統調用的猜想

函數參數依次壓入棧中,並讀取read函數調用
控制流進入read庫函數(通常由彙編語言編寫),將將本次需要的系統調用編號傳給CPU中的某個寄存器
CPU結束這一條函數調用的指令後,檢查寄存器發現有情況,立刻執行TRAP指令,切換由用戶態切換爲內核態
處於內核態的CPU擁有了運行系統調用的權限,根據寄存器中存有的系統調用編號,查詢系統調用表獲悉系統調用處理程序的地址
CPU開始運行這個處理程序
處理完成後,CPU接着原指令處理下一條指令
發佈了38 篇原創文章 · 獲贊 66 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章