<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 53, 文章 - 0, 評論 - 3, 引用 - 0
    數據加載中……

    Linux 內核源碼閱讀 - write 系統調用的實現

    最近在看write系統調用的實現,雖然還有一下細節不是很清楚,但是大致的實現機理還是有一定的理解了。總結如下:
    這里假設最普通的情況,不考慮Direct IO 的情況。從全家的高度看,要往一個文件中寫入內容,需要一下幾步。
    1. sys_write 將用戶進程要寫的內容寫入到內核的文件頁面緩沖中。sys_write 本身到此就結束了。
    2. pdflush 內核線程(定期或者由內核閾值觸發)刷新臟的頁面緩沖,其實只是提交IO請求給底層的驅動。
    3. IO請求并不是同步執行的,而是由底層的驅動調度執行,發出DMA操作指令。
    4. 物理IO完成之后會中斷并通知內核,內核負責更新IO的狀態。
    先要去陪兒子睡覺了。有空會繼續細化各個部分的實現。

    sys_write 的調用過程。(我的linux內核版本為2.6.24,文件系統為ext3)
    asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count)

    vfs_write(file, buf, count, &pos);

    file->f_op->write(file, buf, count, pos);
    這里的file->fop 是在open一個文件是初始化的函數指針,ext3文件系統對應的函數為do_sync_write。
    下面是其實現的要點。
     for (;;) {
    300                 ret = filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos);
    301                 if (ret != -EIOCBRETRY)
    302                         break;
    303                 wait_on_retry_sync_kiocb(&kiocb);
    304         }
    305
    306         if (-EIOCBQUEUED == ret)
    307                 ret = wait_on_sync_kiocb(&kiocb);
     filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos); 是實現的核心,其函數指針指向ext3_file_write。
    307行的作用在于等待IO的完成。這里的IO完成指的是進入IO的隊列而已,不是物理IO的完成。

    generic_file_aio_write(iocb, iov, nr_segs, pos);

    __generic_file_aio_write_nolock(iocb, iov, nr_segs,  &iocb->ki_pos);

    generic_segment_checks(iov, &nr_segs, &ocount, VERIFY_READ);

    generic_file_buffered_write(iocb, iov, nr_segs, pos,ppos,count,written);

    generic_file_direct_IO(WRITE, iocb, iov, pos, *nr_segs);

    以下的調用序列還很長,一時還消化不了。僅供自己參考。

    posted on 2008-06-02 21:43 InPractice 閱讀(2602) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 无码人妻精品中文字幕免费东京热| 国产成人高清亚洲一区91| 亚洲丝袜美腿视频| 亚洲AV日韩AV永久无码下载| 亚洲欧洲美洲无码精品VA| 亚洲综合伊人久久综合| 亚洲精品无码精品mV在线观看| 亚洲精品美女久久久久99| 国产精品久久久亚洲| 久久亚洲国产成人亚| 久久精品国产亚洲AV电影| 亚洲国产成人久久综合一| 精品日韩亚洲AV无码一区二区三区| 久久久亚洲裙底偷窥综合| 亚洲视频在线观看网址| 亚洲五月综合网色九月色| 亚洲日韩中文字幕一区| 成人精品国产亚洲欧洲| 一个人看的www视频免费在线观看| 中文字幕免费观看视频| 久久精品免费观看国产| 日韩欧毛片免费视频| 国产精品自在自线免费观看| 国产91精品一区二区麻豆亚洲 | 久99久无码精品视频免费播放| 中文字幕在线观看免费| 中文字幕视频免费| 手机在线免费视频| 亚洲国产一级在线观看| 国产亚洲综合成人91精品| 亚洲国产精品成人综合色在线婷婷| 久久久久亚洲国产| 无码毛片一区二区三区视频免费播放 | 黑人精品videos亚洲人| 久久精品国产亚洲AV无码娇色| 亚洲一级毛片免费看| 羞羞漫画页面免费入口欢迎你| 中文字幕无码日韩专区免费| 成人免费黄色网址| 亚洲国产精品成人综合色在线婷婷 | 无码区日韩特区永久免费系列|