[LINUX]文件的讀取過程

文件打開和讀取的過程:在調用open之後,在內核全局區域生成一條文件表的項,並填寫了相關的運行時參數,然後,在進程的u區中在文件描述符表中也新生成了一個項,他的索引作爲fd的值,返回給用戶態,一般來看所有的系統調用如果失敗的話,返回的值恆爲-1,。所以open實際上是初始化兩張表中的兩條記錄(當然這中間還包括一個iname的邏輯,即通過文件的文件名對應到inode索引節點的記錄,找到這個inode的地址之後,才能夠建立上層的兩張表的數據),read調的過程就會比較簡單,其實就是將想要讀多少字節放到用戶態在那個內存中告訴內核,內核會根據用戶的“需求”,調用從磁盤-內核緩衝區-用戶態內存的順序將數據放到用戶態內存中。而這裏從磁盤-內核緩衝區,這個內核本來自己有很多地方就需要做,內核有很多東西自己都放在磁盤上存儲的,經常需要進行磁盤和內存之間的數據交換,比如inode的結構的數據,比如空閒磁盤索引節點的數據,所以這個算法內核本來就是自帶的,讀取的操作僅僅就是多了一個步驟,將數據從內核緩衝區拷貝到用戶態而已(當然,由於用戶數據作爲內核的調用的輸入,所以還會有數據檢查,以及一些較爲完備的重試和報錯機制,能夠cover一些用戶態常見的異常場景等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章