2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结
2018-2019-1 20165203 《信息安全系統設計基礎》第六周學習總結
教材學習內容總結
重要知識點
- I/O:在主存和外部設備(例如磁盤存儲器、終端和網絡)之間復制數據的過程。
- 輸入操作:從I/O設備復制數據到主存。
- 輸出操作:從主存復制數據到I/O設備。
Unix I/O
- Unix I/O:所有I/O設備都被模型化為文件,而所有的輸入和輸出都被當作對相應文件的讀和寫來執行,這種將設備優雅地映射為文件的方式,允許Linux內核引出一個簡單、低級的應用接口,稱為Unix I/O。
- 執行過程:
- 打開文件:用描述符(內核打開文件返回的小的非負整數)來標識這個文件,程序只需記住這個描述符。
- 終端shell在每個進程開始時打開三個文件:標準輸入(0)、標準輸出(1)和標準錯誤(2)。
- 改變當前的文件位置:對每個打開的文件,內核保持一個文件位置k(字節偏移量),初始為0。
- 讀寫文件:讀(從文件復制字節到內存),寫(從內存復制字節到文件)
- 關閉文件:關閉打開的文件釋放它們的內存資源。
文件
- 普通文件:包含任意數據。
- 文本文件:只含有ASCII或Unicode字符的普通文件
- 二進制文件:所有其他文件。
- 目錄:包含一組連接的文件。
- 套接字:用來與另一個進程進行跨網絡通信的文件。
- 路徑名:
- 絕對路徑名:以一個斜杠開始,表示從根節點開始的路徑。
- 相對路徑名:以文件名開始,表示從當前工作目錄開始的路徑。
打開和關閉文件
- [x] 打開或創建新文件:
- open函數:格式如圖所示
- filename:文件名
- flags參數:
- flags參數:
- mode參數:指定了新文件的訪問權限位
- mode參數:指定了新文件的訪問權限位
- [x] 關閉打開的文件:
- close函數:格式如圖所示
讀和寫文件
格式如圖所示:
- read函數:從描述符為fd的當前文件位置復制最多n個字節到內存位置buf。返回值表示的是實際傳送的字節數量。
- write函數:從內存位置buf復制至多n個字節到描述符fd的當前文件位置。
用RIO包健壯地讀寫
- RIO包主要提供:
- 無緩沖的輸入輸出函數:用于將二進制數據讀寫到網絡和從網絡讀寫二進制數據。
- 帶緩沖的輸入函數:用于從文件中讀取文本行和二進制數據。
- RIO的無緩沖的輸入輸出函數:
- rio_readn 和 rio_writen函數,使用格式如下:
- rio_readn 和 rio_writen函數,使用格式如下:
- RIO的帶緩沖的輸入輸出函數:
- rio_readlineb函數:從一個內部讀緩沖區復制一個文本行,當緩沖區變空時,會自動地調用read重新填滿緩沖區。
- rio_readnb:rio_readn帶緩沖區的版本。
- rio_readinitb函數:從文件rp讀出下一個文本行(包括\n),將它復制到內存位置usrbuf,并且用null字符來結束這個文本行,使用格式如圖所示。
- rio_readinitb函數:從文件rp讀出下一個文本行(包括\n),將它復制到內存位置usrbuf,并且用null字符來結束這個文本行,使用格式如圖所示。
- RIO讀程序的核心是rio_read函數。
讀取文件元數據
stat和fstat函數:檢索到關于文件的信息(文件的元數據)。使用格式如圖所示。
stat函數:以文件名作為輸入,并填寫stat數據結構中的各個成員。
fstat函數:以文件描述符作為輸入。
讀取目錄內容
以readdir系列函數來讀取目錄的內容。
opendir函數: 以路徑名為參數,返回指向目錄流的指針。使用格式如圖所示
- readdir函數:調用返回指向流dirp中下一個目錄項的指針,如果沒有更多目錄項則返回null。
closedir函數:關閉并釋放其所有資源。
共享文件
內核用三個相關的數據結構來表示打開的文件
- 描述符表:它的表項是由進程打開的文件描述符來索引。
- 文件表:所有的進程共享這一張表。
- v-node表:
- 沒有共享文件,并且每個描述符對應一個不同的文件。
- 多個描述符也可以通過不同的文件表表項來引用同一個文件。
I/O重定向
工作過程:
- 使用dup2函數:復制描述符表項oldfd到描述符newfd,覆蓋描述符表表項new-fd以前的內容。使用過程如圖所示。
標準I/O及函數的使用
I/O包的總結:如圖所示
指導原則:
- 只要有可能就使用I/0。
- 不要使用scanf或rio_readlineb來讀二進制文件。
- 對網絡套接字的I/O使用RIO函數。
- 建議在網絡套接字上不要使用標準I/O函數來進行輸入和輸出,而要使用健壯的RIO函數。
教材學習中的問題和解決過程
問題:當學習到教材635頁時,看到如圖的fork,不太懂fork是什么意思?
解決方案:自己查閱了一下百度,看到了關于fork()函數的資料。它的功能是創建一個子進程。
父進程調用fork()系統調用,然后陷入內核,進行進程復制,如果成功:
1,則對調用進程即父進程來說返回值為剛產生的子進程pid,因為進程PCB沒有子進程信息,父進程只能通過這樣獲得。
2,對子進程(剛產生的新進程),則返回0,
這時就有兩個進程在接著向下執行
如果失敗,則返回0,調用進程繼續向下執行
------詳情請見fork函數的介紹
代碼托管
(statistics.sh腳本的運行結果截圖)
上周考試錯題總結
錯題1:有關緩存的說法,正確的是()
A .LRU策略指的是替換策略的緩存會選擇最后被訪問時間距現在最遠的塊
B .不同層之間以字節為傳送單元來回復制
C .緩存不命時,決定哪個塊是犧牲塊由替換策略來控制
D .空緩存的不命中叫沖突不命中
答案:AC
解析:我漏選了C,教材P423中介紹了決定哪個塊是由緩存的替換策略來控制的。
例如隨機替換策略的緩存會隨機選擇一個犧牲塊。
LRU替換策略的緩存會選擇最后被訪問的那個塊。
錯題2:有關RAM的說法,正確的是()
A .SRAM和DRAM掉電后均無法保存里面的內容。
B .DRAM將一個bit存在一個雙穩態的存儲單元中
C .一般來說,SRAM比DRAM快
D .SRAM常用來作高速緩存
E .DRAM將每一個bit存儲為對一個電容充電
F .SRAM需要不斷刷新
G .DRAM被組織為二維數組而不是線性數組
答案:ACDEG
解析:我漏選了C和D。
SRAM比DRAM要快,成本也高。SARM也用作高速緩存存儲器,既可以在芯片上也可以在芯片下。
其他(感悟、思考等,可選)
本周主要學習了Unix I/O模型及它的系統級函數,了解了Linux內核的三個數據結構及其文件的打開方式。第一次接觸了描述符的概念,且描述符的表項指向打開文件表中的表項,而打開文件表中的表項又指向v-node表中的表項。還了解標準I/O庫,經過書中的了解,標準I/O庫的確是優于I/O庫的選擇。
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 200/200 | 2/2 | 20/20 | |
| 第二周 | 300/500 | 2/4 | 18/38 | |
| 第三周 | 500/1000 | 3/7 | 22/60 | |
| 第四周 | 300/1300 | 2/9 | 30/90 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什么這么難,軟件工程 估計方法
參考資料
- 《深入理解計算機系統V3》學習指導
轉載于:https://www.cnblogs.com/20165203-xyx/p/9904790.html
總結
以上是生活随笔為你收集整理的2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: undefined reference
- 下一篇: 3.2自定义方法