文件I/O

文件描述符

http://blog.csdn.net/cywosp/article/details/38965239

  • 概念
    文件描述符(file descriptor)是內(nèi)核為了高效管理已被打開的文件所創(chuàng)建的索引誓斥,其是一個非負(fù)整數(shù)(通常是小整數(shù))朋腋,用于指代被打開的文件锻全,所有執(zhí)行I/O操作的系統(tǒng)調(diào)用都通過文件描述符屈暗。
  • 文件描述符限制
  • 文件描述符跟打開的文件之間的關(guān)系
    每一個文件描述符會與一個打開文件相對應(yīng)扶供,同時玻侥,不同的文件描述符也會指向同一個文件店雅。相同的文件可以被不同的進(jìn)程打開也可以在同一個進(jìn)程中被多次打開阵子。系統(tǒng)為每一個進(jìn)程維護(hù)了一個文件描述符表思杯,該表的值都是從0開始的,所以在不同的進(jìn)程中你會看到相同的文件描述符,這種情況下相同文件描述符有可能指向同一個文件色乾,也有可能指向不同的文件誊册。具體情況要具體分析,要理解具體其概況如何暖璧,需要查看由內(nèi)核維護(hù)的3個數(shù)據(jù)結(jié)構(gòu)案怯。
    1. 進(jìn)程級的文件描述符表
    2. 系統(tǒng)級的打開文件描述符表
    3. 文件系統(tǒng)的i-node表

進(jìn)程級的描述符表的每一條目記錄了單個文件描述符的相關(guān)信息。

  1. 控制文件描述符操作的一組標(biāo)志澎办。(目前嘲碱,此類標(biāo)志僅定義了一個,即close-on-exec標(biāo)志)
  2. 對打開文件句柄的引用

內(nèi)核對所有打開的文件的文件維護(hù)有一個系統(tǒng)級的描述符表格(open file description table)局蚀。有時麦锯,也稱之為打開文件表(open file table),并將表格中各條目稱為打開文件句柄(open file handle)琅绅。一個打開文件句柄存儲了與一個打開文件相關(guān)的全部信息扶欣,如下所示:

  1. 當(dāng)前文件偏移量(調(diào)用read()和write()時更新,或使用lseek()直接修改)
  2. 打開文件時所使用的狀態(tài)標(biāo)識(即奉件,open()的flags參數(shù))
  3. 文件訪問模式(如調(diào)用open()時所設(shè)置的只讀模式宵蛀、只寫模式或讀寫模式)
  4. 與信號驅(qū)動相關(guān)的設(shè)置
  5. 對該文件i-node對象的引用
  6. 文件類型(例如:常規(guī)文件、套接字或FIFO)和訪問權(quán)限
  7. 一個指針县貌,指向該文件所持有的鎖列表
  8. 文件的各種屬性,包括文件大小以及與不同類型操作相關(guān)的時間戳

下圖展示了文件描述符凑懂、打卡文件句柄(文件指針)煤痕、打開文件以及i-node之間的關(guān)系,其中接谨,三個進(jìn)程擁有多個打開的文件描述符摆碉。


Paste_Image.png

在進(jìn)程A中,文件描述符1和30都指向了同一個打開的文件句柄(標(biāo)號23)脓豪。這可能是通過調(diào)用dup()巷帝、dup2()、fcntl()或者對同一個文件多次調(diào)用了open()函數(shù)而形成的扫夜。
進(jìn)程A的文件描述符2和進(jìn)程B的文件描述符2都指向了同一個打開的文件句柄(標(biāo)號73)楞泼。這種情形可能是在調(diào)用fork()后出現(xiàn)的(即,進(jìn)程A笤闯、B是父子進(jìn)程關(guān)系)堕阔,或者當(dāng)某進(jìn)程通過UNIX域套接字將一個打開的文件描述符傳遞給另一個進(jìn)程時,也會發(fā)生颗味。再者是不同的進(jìn)程獨自去調(diào)用open函數(shù)打開了同一個文件超陆,此時進(jìn)程內(nèi)部的描述符正好分配到與其他進(jìn)程打開該文件的描述符一樣。
此外浦马,進(jìn)程A的描述符0和進(jìn)程B的描述符3分別指向不同的打開文件句柄时呀,但這些句柄均指向i-node表的相同條目(1976)张漂,換言之,指向同一個文件谨娜。發(fā)生這種情況是因為每個進(jìn)程各自對同一個文件發(fā)起了open()調(diào)用航攒。同一個進(jìn)程兩次打開同一個文件,也會發(fā)生類似情況瞧预。
下圖展示了文件描述符屎债、打開的文件句柄以及i-node之間的關(guān)系,圖中垢油,兩個進(jìn)程擁有諸多打開的文件描述符盆驹。

此外:


文件描述符和打開的文件之間的關(guān)系

其中:
Process 1中,文件描述符3和21都指向了同一個文件a滩愁,這可能是通過dup()躯喇、dup2()、fcntl()或?qū)ν粋€文件多次調(diào)用open()函數(shù)形成的;
Process 1文件描述符21和Process 2中文件描述符35都指向文件a绍移,但是卻對應(yīng)兩個不同打開文件句柄(文件指針)净响,二者打開模式不同(O_RDONLY與O_WRDONLY)。這種情形可能是調(diào)用fork()后創(chuàng)建子進(jìn)程正压,或某個進(jìn)程通過UNIX套接字將一個打開的文件描述符傳遞給另一個進(jìn)程,或兩個獨立的進(jìn)程分別open()打開同一個文件责球。
Process 1和Process 3中文件描述符3分別對應(yīng)文件a和文件b焦履。

同步/異步,阻塞/非阻塞

圖解能很清楚的明白:http://www.cnblogs.com/Anker/p/3254269.html

實際上同步與異步是針對應(yīng)用程序與內(nèi)核的交互而言的雏逾。同步過程中進(jìn)程觸發(fā)IO操作并等待或者輪詢的去查看IO操作是否完成嘉裤。異步過程中進(jìn)程觸發(fā)IO操作以后,直接返回栖博,做自己的事情屑宠,IO交給內(nèi)核來處理,完成后內(nèi)核通知進(jìn)程IO完成

當(dāng)進(jìn)程調(diào)用一個阻塞的系統(tǒng)函數(shù)時仇让,該進(jìn)程被置于睡眠(Sleep)狀態(tài)典奉,這時內(nèi)核調(diào)度其它進(jìn)程運行,直到該進(jìn)程等待的事件發(fā)生了(比如網(wǎng)絡(luò)上接收到數(shù)據(jù)包妹孙,或者調(diào)用sleep指定的睡眠時間到了)它才有可能繼續(xù)運行

進(jìn)程的狀態(tài)

http://blog.csdn.net/nilxin/article/details/7437671

linux內(nèi)核調(diào)度算法

上篇:http://www.cnblogs.com/parrynee/archive/2010/05/16/1736679.html
下篇:http://www.cnblogs.com/parrynee/archive/2010/05/16/1736682.html

另一個秋柄,linux調(diào)度分析(代碼講的比較多)
https://www.ibm.com/developerworks/cn/linux/kernel/l-kn26sch/

內(nèi)核的調(diào)度算法是基于優(yōu)先級和時間片的,而且會根據(jù)每個進(jìn)程的運行情況動態(tài)調(diào)整它的優(yōu)先級和時間片蠢正,讓每個進(jìn)程都能比較公平地得到機(jī)會執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骇笔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笨触,老刑警劉巖懦傍,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芦劣,居然都是意外死亡粗俱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門虚吟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寸认,“玉大人,你說我怎么就攤上這事串慰∑” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵邦鲫,是天一觀的道長灸叼。 經(jīng)常有香客問我,道長庆捺,這世上最難降的妖魔是什么古今? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮滔以,結(jié)果婚禮上捉腥,老公的妹妹穿的比我還像新娘。我一直安慰自己你画,他們只是感情好但狭,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撬即,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呈队。 梳的紋絲不亂的頭發(fā)上剥槐,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機(jī)與錄音宪摧,去河邊找鬼粒竖。 笑死,一個胖子當(dāng)著我的面吹牛几于,可吹牛的內(nèi)容都是我干的蕊苗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼沿彭,長吁一口氣:“原來是場噩夢啊……” “哼朽砰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤瞧柔,失蹤者是張志新(化名)和其女友劉穎漆弄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體造锅,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡撼唾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哥蔚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倒谷。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖糙箍,靈堂內(nèi)的尸體忽然破棺而出渤愁,到底是詐尸還是另有隱情,我是刑警寧澤倍靡,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布猴伶,位于F島的核電站,受9級特大地震影響塌西,放射性物質(zhì)發(fā)生泄漏他挎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一捡需、第九天 我趴在偏房一處隱蔽的房頂上張望办桨。 院中可真熱鬧,春花似錦站辉、人聲如沸呢撞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殊霞。三九已至,卻和暖如春汰蓉,著一層夾襖步出監(jiān)牢的瞬間绷蹲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工顾孽, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留祝钢,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓若厚,卻偏偏與公主長得像拦英,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子测秸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容