文件打開和讀取的過程:在調用open之後,在內核全局區域生成一條文件表的項,並填寫了相關的運行時參數,然後,在進程的u區中在文件描述符表中也新生成了一個項,他的索引作爲fd的值,返回給用戶態,一般來看所有的系統調用如果失敗的話,返回的值恆爲-1,。所以open實際上是初始化兩張表中的兩條記錄(當然這中間還包括一個iname的邏輯,即通過文件的文件名對應到inode索引節點的記錄,找到這個inode的地址之後,才能夠建立上層的兩張表的數據),read調的過程就會比較簡單,其實就是將想要讀多少字節放到用戶態在那個內存中告訴內核,內核會根據用戶的“需求”,調用從磁盤-內核緩衝區-用戶態內存的順序將數據放到用戶態內存中。而這裏從磁盤-內核緩衝區,這個內核本來自己有很多地方就需要做,內核有很多東西自己都放在磁盤上存儲的,經常需要進行磁盤和內存之間的數據交換,比如inode的結構的數據,比如空閒磁盤索引節點的數據,所以這個算法內核本來就是自帶的,讀取的操作僅僅就是多了一個步驟,將數據從內核緩衝區拷貝到用戶態而已(當然,由於用戶數據作爲內核的調用的輸入,所以還會有數據檢查,以及一些較爲完備的重試和報錯機制,能夠cover一些用戶態常見的異常場景等等。
[LINUX]文件的讀取過程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
CentOS 安裝 SVN1.7.7
dreamZhf
2020-07-08 12:36:10
ubuntu 常用設置
吉祥衰宝
2020-07-08 03:52:09
centos 下安裝iptraf流量監控軟件
ufocode
2020-07-08 00:31:35
【Linux】使用Ubuntu過程中遇到的問題
睿智的河水
2020-07-07 22:03:13
ubuntu 安裝 ibus-sunpinyin
亦木丶
2020-07-07 19:36:03
K8S結合NFS配置持久化存儲PV和PVC
ccagy
2020-07-07 18:04:23
Linux磁盤擴容分區根目錄
[root@host-172-16-13-33 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M
ccagy
2020-07-07 18:04:23
如何對K8S的PV 和PVC擴容
ccagy
2020-07-07 18:04:23
http協議裏面session的管理
wzbob
2020-07-07 14:44:02
Linux CentOS7 下搭建Java Web服務器環境
theUncle
2020-07-07 12:53:00
弄ROS可以不用裝雙系統或者買一臺電腦啥的, 可以直接U盤啓動
诗筱涵
2020-07-07 10:46:43
查看Linux系統當前時間的命令
hanchuang213
2020-07-07 06:03:39
運行firefox時提示“libGL error: unable to load driver: swrast_dri.so”有卡頓
运维自动化&云计算
2020-07-07 03:29:32