<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      20201321周慧琳

      教材12章閱讀筆記

      知識點歸納

      I/O緩沖區:內核中的一系列NBUF緩沖區用作緩沖區緩存。每個緩沖區用一個結構體表示。

      typdef struct buf{
          struct buf *next_free;	//freelist pointer
          struct buf *next_dev;	//dev_list pointer
          int dev,blk;	        //assigned disk block;
          int opcode;	        //READ|WRITE
          int dirty;	                //buffer data modified
          int async;	                //ASYNC write flag
          int valid;	                //buffer data valid
          int busy;	                //buffer is in use
          int wanted;		//some process needs this buffer
          struct, semaphore lock=l ;	//buffer locking semaphore; value=L
          struct semaphore iodone=0;	//for process to wait for I/O completion;
          char buf[BLKSIZE];	        //block data area
      } BUFFER;
      
      BUFFER buf[NBUF], *freelist; // NBUF buffers and free buffer list
      

      設備表:每個塊設備用一個設備表結構表示。

      struct devtab{
      u16 dev;           // major device number 
      BUFFER *dev_list;  // device buffer list 
      BUFFER*io_queue    // device I/0 queue 
      }devtab[NDEV];
      

      緩沖區初始化:當系統啟動時,所有I/O緩沖區都在空閑列表中,所有設備列表和T/O隊列均為空。

      緩沖區列表:當緩沖區分配給(dev,blk)時,它會被插入設備表的dev_list中。如果緩沖區當前正在使用,則會將其標記為BUSY(繁忙)并從空閑列表中刪除。

      PV算法

      BUFFER *getb1k(dev,blk):
      while(1){
      P(free);
      //get a free buffer first 
      if (bp in dev_1ist){
      if (bp not BUSY){
      remove bp from freelist;
      P(bp);
      // lock bp but does not wait
      return bp;
      // bp in cache but BUSY 
      V(free);
      // give up the free buffer
      P(bp);
      // wait in bp queue
      return bp;
      // bp not in cache,try to create a bp=(dev,blk)
      bp = frist buffer taken out of freelist;
      P(bp);
      // lock bp,no wait
      if(bp dirty){
      awzite(bp);
      // write bp out ASYNC,no wait
      continue;
      // continue from (1)
      reassign bp to(dev,blk);
      // mark bp data invalid,not dir 
      return bp;
      // end of while(1);
      brelse(BUFFER *bp),
      {
      iF (bp queue has waiter)( V(bp); return; }
      if(bp dirty && free queue has waiter){ awrite(bp);zeturn;}
      enter bp into(tail of) freelist;V(bp);V(free);
      }
      

      問題與解決思路

      從磁盤到緩沖區的數據讀寫是否也由CPU完成?

      如果每次讀緩沖區都沒有對應的數據,是否相當于直接磁盤I/O?

      數據的換入換出算法有哪些?

      實踐內容

      setvbuf()

      int setvbuf(FILE *stream, char *buffer, int mode, size_t size);
      

      _IOFBF
      全緩沖:對于輸出,數據在緩沖填滿時被一次性寫入。對于輸入,緩沖會在請求輸入且緩沖為空時被填充。
      _IOLBF
      行緩沖:對于輸出,數據在遇到換行符或者在緩沖填滿時被寫入,具體視情況而定。對于輸入,緩沖會在請求輸入且緩沖為空時被填充,直到遇到下一個換行符。
      _IONBF
      無緩沖:不使用緩沖。每個 I/O 操作都被即時寫入。buffer 和 size 參數被忽略。

      posted on 2022-11-06 17:38  20201321周慧琳  閱讀(22)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 精品国产乱弄九九99久久| 久久综合综合久久综合| 日本va欧美va欧美va精品| 国产91特黄特色A级毛片| 白丝乳交内射一二三区| 国产粉嫩区一区二区三区| 无码国产偷倩在线播放| 久久丫精品久久丫| 一本久久a久久精品综合| 你拍自拍亚洲一区二区三区| 欧美牲交a欧美牲交aⅴ免费真| 亚洲欧洲日产国无高清码图片| 久久精品夜夜夜夜夜久久| 日本高清成本人视频一区| 国产在线亚州精品内射| 日本视频精品一区二区| 激情伊人五月天久久综合| 亚洲熟妇在线视频观看| 国内揄拍国内精品人妻久久 | 99久久婷婷国产综合精品青草漫画| 一区二区亚洲人妻精品| 亚洲一区成人av在线| 亚洲成av人在线播放无码| 亚洲综合精品第一页| a级亚洲片精品久久久久久久| 九九热视频免费在线播放| 秋霞av鲁丝片一区二区| 国产亚洲真人做受在线观看| 精品偷拍一区二区三区| 涞水县| 热久久美女精品天天吊色| 狠狠人妻久久久久久综合九色| 一区二区三区国产亚洲网站| 亚洲线精品一区二区三区| 日本黄页网站免费观看| 中文字幕日韩区二区三区| 又白又嫩毛又多15p| 亚洲精品一区二区在线播| 色婷婷久久综合中文久久一本| 狠狠色噜噜狠狠狠狠777米奇| 麻豆精品久久久久久久99蜜桃|