freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

08第八章設(shè)備與io管理1(編輯修改稿)

2025-02-12 02:11 本頁面
 

【文章內(nèi)容簡介】 o first block int c_cl。 //pointer to last block } struct buf //actually a buffer header, shared by all mounted disks { int b_flags。 //BUSY, ASYNC, DELWRI, DONE... struct buf *b_forw。 //headed by devtab struct buf *b_back。 struct buf *av_forw。 //position on free list struct buf *av_back。 int b_dev。 int b_wcount。 //transfer count char *b_addr。 //low order core (buffer) address char *b_xmem。 //high order core (buffer) address char *b_blkno //block on device char b_error。 char *b_resid。 //word not transferred after error }buf[NBUF] 塊型設(shè)備緩沖(頭部) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 B_READ/B_WRITE B_DONE B_ERROR B_BUSY B_WANTED B_RELOC B_ASYNC B_DELWRI b_flag: struct devtab //設(shè)備 IO隊列 { char d_active。 //busy flag char d_errt。 //error count struct buf *b_forw。 //first buffer for this dev struct buf *b_back。 //last buffer for this dev struct buf *d_actf。 //head of IO queue struct buf *d_actl。 //tail of IO queue } char buffers[NBUF][514]。 //塊型緩沖區(qū) struct buf bfreelist。 //緩沖區(qū)頭部的鏈頭 相關(guān)操作: getblk(dev,blkno) //assign a buffer for the given block bread(dev,blkno) //read a block(if necessary), return buf pointer breada(dev,blkno,rablkno) //read in first block, like read。 but also start io on second block bwrite(bp) //write the buffer, wait for pletion, then release bawrite(bp) //start the io, release buffer, no wait for pletion bdwrite(bp) //release buffer, mark it so that if it is grabbed for another purpose, it will be written out before being given up brelse(bp) //release the buffer, with no io implied getblk(dev,blkno) ? 參數(shù): dev:設(shè)備號, blkno: 設(shè)備塊號 ? 返回:緩沖區(qū)指針 bp ? 步驟: ? 塊在 b鏈中,且當(dāng)前空閑 ? 由 av鏈摘除,標記 BUSY, 返回緩沖塊指針 ? 塊在 b鏈中,但 BUSY(其它進程在用 ) ? sleep(空閑事件發(fā)生 ),由 av鏈摘除,標記 BUSY, 返回緩沖塊指針 ? 不在 b的鏈中,在 av鏈上取到延遲寫的塊 ? 寫出該塊,分配下一個緩沖區(qū) ? 不在 b的鏈中, av鏈已空 ? 等待任意緩沖區(qū)變空閑的事件 ? 不在 b的鏈中,在 av鏈上得到空緩沖 ? 分配,由 av鏈摘除,返回緩沖塊指針 brelse(bp) ? 參數(shù): bp: 緩沖區(qū)頭指針 ? 返回:無 ? 步驟: ? If 有等待者 (b_flagB_WANTED!=0),喚醒 。 ? Else ? bfreelist上有等待者 ,喚醒 ? bp入 av鏈 bread(dev,blkno) ? 參數(shù): dev:設(shè)備號, blkno: 設(shè)備塊號 ? 返回:載有信息的緩沖區(qū) bp ? 步驟: ? bp=getblk(dev,blkno) ? if (緩沖區(qū)數(shù)據(jù)有效 ) ? return(bp) //在 cache中得到 ? 啟動磁盤讀 (d_actf/d_actl鏈 ) ? sleep(等待讀盤完成事件 ) ? 中斷 ? bp入 b_forw/b_back鏈 , 標記 BUSY ? return(bp) breada(dev,blkno,rablkno) ? 參數(shù): dev:設(shè)備號, blkno:讀塊號, rablkno:預(yù)讀塊號 ? 返回: blk緩沖塊指針 rbp ? 步驟: ? rbp=getblk(dev,blkno) ? if(信息無效 ) ? 啟動設(shè)備讀入 (d_actf/d_actl鏈 ) ? rabp=getblk(dev,rablkno) ? if (B_DONE) //緩沖區(qū)從 b鏈得到 ? brelse(rabp) //入 av鏈 ? else //緩沖區(qū)從 av鏈得到 ? 啟動設(shè)備讀入 (d_actf/d_actl鏈 ) //中斷時入 b鏈和 av鏈 ? iowait(rbp) ? return(rbp) bwrite(bp) ? 參數(shù): bp:緩沖區(qū)指針 ? 步驟: ? 入設(shè)備 d_act隊列 (若設(shè)備不忙啟動設(shè)備 ) ? if(! B_ASYNC) ? sleep(等待 IO完成事件 ) ? 中斷 ? bp入 b鏈 , (b_forw/b_back) ? brelse(bp), (bp入 av鏈 ) bdwrite(bp) ? 參數(shù) : bp: 緩沖區(qū)指針 ? 返回 : 無 ? 步驟: ? 標記 b_flags =| B_DELWRI | B_DONE ? bp入設(shè)備 b_forw/b_back隊列 ? brelse(bp), (bp入 av鏈 ) bawrite(bp) ? 參數(shù): bp: 緩沖區(qū)頭指針 ? 返回:無 ? 步驟: ? bpb_flag =| B_ASYNC ? bwrite(bp) ? 中斷 ? (入 b_act隊列 ) ? 入 av隊列 輸入輸出進程 ? 專門負責(zé) IO傳輸?shù)倪M程 ? 另外一種 IO模式 —服務(wù)模式 ? C/S Model ? 特點 ? 界面清晰 ,方便使用 ? 兩次進程切換 ,速度問題 RAID技術(shù) ? RAID:
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1