




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、12.6設(shè)備管理 打開一個設(shè)備文件即相當(dāng)于申請對應(yīng)的設(shè)備, 如該設(shè)備已處于打開狀態(tài)則等待 關(guān)閉一個設(shè)備文件即相當(dāng)于釋放對應(yīng)的設(shè)備, 如有等待者則喚醒一個 讀寫一個設(shè)備文件就相當(dāng)于對所對應(yīng)的設(shè)備執(zhí)行I/O操作緩沖與緩存n 塊型設(shè)備緩沖n 用于磁盤、磁帶等設(shè)備的I/O傳輸n 每個緩沖區(qū)的長度與塊型物理設(shè)備中一個塊的長度相同, 即為512字節(jié)n 緩沖區(qū)為所有塊型設(shè)備公用, 其總數(shù)為15個塊型設(shè)備緩沖struct bufint b_flags;/* see definition below */struct buf *b_forw;/* headed by devtab of b_dev */ str
2、uct buf *b_back;/* 設(shè)備b鏈向后指針 */struct buf *av_forw;/* av鏈向前指針 */struct buf *av_back;/* av鏈向后指針 */ int b_dev;/* 設(shè)備名 */int b_wcount;/* 傳送字?jǐn)?shù) */char *b_addr;/* 內(nèi)存地址(低位) */ char *b_xmem;/* 內(nèi)存地址(高位) */ char *b_blkno;/* 設(shè)備物理塊號 */ char b_error;/* 返回出錯信息 */ char *b_resid;/* 傳送剩余字節(jié) */bufNBUF;設(shè)備控制結(jié)構(gòu)struct devta
3、b塊型char d_active;/* busy flag */ char d_erncnt;/* error count */struct buf *b_forw;/* first buffer for this dev */structbuf*b_back;/*lastbuffer for this dev */structbuf*d_actf;/*headof IO queue */structbuf*d_actl;/*tailof IO queue */塊緩沖數(shù)據(jù)讀寫磁盤塊緩沖區(qū)內(nèi)存區(qū)iomovebread,breadabwrite,bawrite,bdwrite字符型設(shè)備緩沖n 緩沖
4、池struct cblockstruct cblock *c_next;/* pointer */char info6;/* info container */n 讀操作n 寫操作預(yù)先讀與延遲寫n 預(yù)先讀(read ahead)n 將以后即將使用的塊讀入緩沖區(qū)中n 以后進(jìn)程需要該塊時便可在緩沖區(qū)中直接得到, 不必等待設(shè)備I/O傳輸n 基于文件順序訪問的假設(shè)n 預(yù)先讀函數(shù)breada(dev,blkno,rablkno)n rablkno鏈入d鏈n IO完成放入b鏈和av鏈n 延遲寫(delayed write)n 當(dāng)一個緩沖塊尚未寫滿時, 暫不將其寫到外存n 以后繼續(xù)寫時, 不必將該塊由外存讀
5、入內(nèi)存n 延遲寫函數(shù)bdwrite(bp)n 將bp對應(yīng)的緩沖區(qū)鏈入b鏈和av鏈, 若以后還需要讀寫, 可在緩沖區(qū)中得到.n 緩沖區(qū)在av鏈上取到用作其它用途前, 由b鏈換到d鏈, 寫回外存.12.7 系統(tǒng)調(diào)用 地位 操作系統(tǒng)API One of Programmer Interface The other being System Libs 主要包括 Process manipulation File manipulation Communication Others.7.1 有關(guān)進(jìn)程的系統(tǒng)調(diào)用命令12n 相關(guān)系統(tǒng)調(diào)用n 創(chuàng)建子進(jìn)程n Pid = fork()n 子進(jìn)程是父進(jìn)程的復(fù)制品n 返
6、回值:父進(jìn)程為子進(jìn)程編號,子進(jìn)程為0n 加載并執(zhí)行新程序n execl(prog, arg0,argn-1,0)n 以arg0,argn-1為參數(shù)執(zhí)行progn 覆蓋原來程序,從第一條指令開始執(zhí)行.7.1有關(guān)進(jìn)程的系統(tǒng)調(diào)用命令12n 進(jìn)程自我結(jié)束n exit(status)n Status為終止?fàn)顟B(tài)n 喚醒父進(jìn)程n 等待子進(jìn)程終止n pid=wait(&status)n 返回終止子進(jìn)程編號n 參數(shù)為子進(jìn)程的終止?fàn)顟B(tài)fork() 創(chuàng)建子進(jìn)程父進(jìn)程子進(jìn)程oc結(jié)構(gòu)prp_pid=9p_ppid=5 user結(jié)構(gòu)子進(jìn)程號(0整數(shù))聯(lián)系pid = fork();if(pid = 0) /*不成立*/*子
7、進(jìn)程代碼*/else/*父進(jìn)程代碼*/proc結(jié)構(gòu)p_pid=12 p_ppid=9user結(jié)構(gòu)復(fù)制恒為0pid = fork();if(pid = 0) /*成立*/*子進(jìn)程代碼*/else/*父進(jìn)程代碼*/execl() 加載并執(zhí)行新程序父進(jìn)程子進(jìn)程proc結(jié)構(gòu)p_pid=9 p_ppid=5user結(jié)構(gòu)pid=fork(); if(pid=0) /*不成立*/execl(“P”,0);else/*父進(jìn)程代碼*/proc結(jié)構(gòu)p_pid=12p_ppid=9 user結(jié)構(gòu)pid=fork(); if(pid=0) /*成立*/execl(“P”,0);else/*父進(jìn)程代碼*/execl()
8、 加載并執(zhí)行新程序父進(jìn)程子進(jìn)程proc結(jié)構(gòu)p_pid=9 p_ppid=5user結(jié)構(gòu)pid=fork(); if(pid=0) /*不成立*/proc結(jié)構(gòu)p_pid=12 p_ppid=9user結(jié)構(gòu)execl(“P”,0);else程序P (覆蓋原來程序)/*父進(jìn)程代碼*/exit() 進(jìn)程自我終止proc結(jié)構(gòu)p_pid=9 p_ppid=5user結(jié)構(gòu)pid=fork(); if(pid=0) /*不成立*/proc結(jié)構(gòu)p_pid=12 p_ppid=9user結(jié)構(gòu)程序P (覆蓋原來程序)execl(“P”,0);else/*父進(jìn)程代碼*/ id=wait(&s)父進(jìn)程exit(2)子進(jìn)
9、程k,execl,wait,exit系統(tǒng)調(diào)用描述之P1for例子: 設(shè)有8個程序,執(zhí)行次序如下圖所示,試用P5P6P7P2P3P4P8main()int pid1,pid2,pid3,pid4,pid5,pid6,pid7,pid8;int end_p1=end_p2=end_p3=end_p4=end_p5=end_p8=0; int pid, status;if(pid1=fork()= =0) execl(P1,0); wait(&status);if(pid2=fork()= =0) execl(P2,0);if(pid3=fork()= =0) execl(P3,0);if(pid4
10、=fork()= =0) execl(P4,0);do/等待P2結(jié)束pid=wait(&status); if(pid= =pid2) end_p2=1; if(pid= =pid3) end_p3=1; if(pid= =pid4) end_p4=1;while(end_p2= =0);if(pid5=fork()= =0) execl(P5,0);if(pid6=fork()= =0) execl(P6,0); do/等待P3和P6結(jié)束pid=wait(&status);if(pid= =pid3) end_p3=1; if(pid= =pid4) end_p4=1; if(pid= =p
11、id5) end_p5=1; if(pid= =pid6) end_p6=1;while(end_p3= =0|end_p6= =0);if(pid7=fork()= =0) execl(P7,0); do /等待P4,P5,P7結(jié)束pid=wait(&status);if(pid= =pid4) end_p4=1; if(pid= =pid5) end_p5=1; if(pid= =pid7) end_p7=1;while(end_p4= =0|end_p5= =0|end_p7= =0); if(pid8=fork()= =0) execl(P8,0); wait(&status);exi
12、t(0);ork 與 forkn fork 功能vfn 復(fù)制地址空間(code+data+stack)n 復(fù)制控制結(jié)構(gòu)(proc,user)n 特點n 父子進(jìn)程之間有兩個各自獨立的數(shù)據(jù)拷貝n 問題n 不加載新程序n 不能實現(xiàn)數(shù)據(jù)共享,不能描述諸如“有界緩沖區(qū)”問題n 若加載新程序n 復(fù)制沒有意義,浪費時間和空間ork與forkvfn vforkn 只復(fù)制控制結(jié)構(gòu)(proc+user);n 不復(fù)制地址空間(code+data)n 父子進(jìn)程共享地址空間n 使用n 父進(jìn)程使用 vfork 創(chuàng)建子進(jìn)程;n 子進(jìn)程與父進(jìn)程共享地址空間;n 子進(jìn)程使用 execve 改變其虛擬地址空間.7.2有關(guān)文件的系
13、統(tǒng)調(diào)用命令文件 fd=creat(path_name,mode) 創(chuàng)建12n 分配一個inoden 填寫目錄項n 以寫方式打開該文件n 返回文件描述符n 打開文件 fd=open(path_name,mode) n 查目錄找到inoden 權(quán)限檢查(mode, i_mode, i_uid, i_gid, u_uid, u_gid)n 在file表中分配一個表項,指向該內(nèi)存inoden 在u_ofile中取一表目,指向file表中對應(yīng)表目n 返回文件描述符fd有關(guān)文件的系統(tǒng)調(diào)用命令n 關(guān)閉文件 close(fd) n 由fd查u_ofile找到對應(yīng)入口n 由u_ofilefd找到file表對應(yīng)入
14、口n f_count-n 若f_count=0, i_count n 若i_count=0,且i_node修改過, i_node寫回外存n u_ofilefd=-1(空閑標(biāo)志)有關(guān)文件的系統(tǒng)調(diào)用命令n 讀命令 n_rd=read(fd,buf,bytes) n 由u_ofilefd,找到file表對應(yīng)入口n 檢查訪問權(quán)限(f_flag, READ)n 由f_inode找到內(nèi)存inode入口n 由f_offset, count和i_addr計算磁盤塊號(可能多個塊)(bmap函數(shù))n 啟動I/O設(shè)備讀取盤塊到系統(tǒng)緩沖區(qū)中(如buffer無, 切換進(jìn)程)n 緩沖區(qū)信息復(fù)制到進(jìn)程空間(iomove)
15、n 返回實際傳輸字節(jié)數(shù)nrd有關(guān)文件的系統(tǒng)調(diào)用命令n 寫文件 n_wt=write(fd,buf,bytes) n 由u_ofilefd,找到file表對應(yīng)入口n 檢查訪問權(quán)限(f_flag, WRITE)n 由f_inode找到內(nèi)存inode入口n 由f_offset, count和i_addr計算磁盤地址塊號(可能分配盤塊)n 申請系統(tǒng)緩沖區(qū),將buf起始count數(shù)據(jù)送到緩沖 區(qū)中(可多次)n 緩沖區(qū)鏈到設(shè)備I/O鏈上, 如設(shè)備空閑啟動設(shè)備n 修改inode中文件長度i_sizen 返回實際傳輸字節(jié)數(shù)nwt有關(guān)文件的系統(tǒng)調(diào)用命令n 文件指針定位 seek(fd,offset,origin
16、) n 由u_ofilefd找到file表入口n 由f_inode找到內(nèi)存inoden 檢查參數(shù) (i_size0, i_size1, f_offset, offset)n 按參數(shù)要求調(diào)整f_offset指針有關(guān)文件的系統(tǒng)調(diào)用命令n 建立文件鏈接 link(old_name,new_name)n 查目錄找到oldpathname(inode)n 查目錄找到newpathname的末級目錄n 檢查操作 n Inode的i_nlink+n (name, i_number) 末級目錄n 斷開文件鏈接 unlink(path_name)n 查目錄找到pathname(inode)n i_nlink-;
17、 如結(jié)果為0, 釋放所有磁盤塊 (刪除文件)n 清除末級文件名在末級目錄中的登記有關(guān)文件的系統(tǒng)調(diào)用命令n 建立管道 pipe(fd)n 分配一個inode,(i_flag標(biāo)志為PIPE文件,i_count=2)n 分配2個file表目(f_flag分別為R和W,讀/ 寫指針為0)n 分配2個u_ofile表目, 分別指向2個file表目n 返回2個文件描述符fd0,fd1, 分別為u_ofile中的2個入口有關(guān)文件的系統(tǒng)調(diào)用命令n 安裝文件卷 smount( ) n 檢查是否超級用戶n 找到special_pathname文件的inode(用makenode建立)檢查(特殊塊型文件)n 找到d
18、irectory_pathname節(jié)點的inoden 如非目錄或引用數(shù)大于,錯返n 讀入super block到buf,按filesys格式解釋n 分配一個mount表項,填寫(m_dev,m_bufp,m_inodep)n 安裝節(jié)點inode的i_addr0=設(shè)備文件i_addr0n 安裝節(jié)點inode的i_flag =| IMOUNT有關(guān)文件的系統(tǒng)調(diào)用命令n 卸下文件卷 sumount(special_name) n 查目錄找到special_pathname的inode,取dev(i_addr0)n 釋放特殊文件的inoden 由dev查mount表(m_dev)找到對應(yīng)super blockn 系統(tǒng)緩沖區(qū)延遲寫塊寫回n 該卷所有更新inode寫回n super block寫回n 釋放super block所占用的緩沖區(qū)n 由m_inodep找到安裝節(jié)點的inoden 安裝
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房屋贈與與城市更新合同范本
- 二零二五年度標(biāo)準(zhǔn)畢業(yè)生實習(xí)合同(國際貿(mào)易)
- 2025年度旅游行業(yè)知識產(chǎn)權(quán)保護與免責(zé)責(zé)任協(xié)議
- 二零二五年度住宅小區(qū)戶外停車位租賃協(xié)議書樣本
- 二零二五年度順豐快遞員勞動合同職業(yè)培訓(xùn)與發(fā)展基金合同
- 2025年度籃球運動員國際比賽參賽合同
- 二零二五年度資質(zhì)借用及知識產(chǎn)權(quán)保護協(xié)議
- 二零二五年度企業(yè)信息安全管理文員責(zé)任協(xié)議
- 二零二五年度主播商業(yè)代言授權(quán)合同
- 二零二五年度國際貿(mào)易資金監(jiān)管服務(wù)協(xié)議
- 科技成果查新檢索基本情況表
- 新媒體藝術(shù)設(shè)計交互融合元宇宙
- 家長會課件:七年級家長會優(yōu)質(zhì)課件
- 《AutoCAD 中文版實例教程(AutoCAD 2020) (微課版)(第 2 版)》課件 馬連志 第1、2章 AutoCAD 2020 中文版入門、繪圖設(shè)置
- 小學(xué)一年級硬筆書法入門班教學(xué)課件
- 社會工作-心理學(xué)視角下的校園欺凌認(rèn)知與對策研究論文
- 面神經(jīng)炎臨床路徑
- 月光奏鳴曲全面版
- 2022年湖北省中小學(xué)教師高級職稱專業(yè)水平能力測試模擬題
- 數(shù)控車床操作培訓(xùn)課件
- 工程經(jīng)濟學(xué)-邵穎紅-第五版-課后作業(yè)
評論
0/150
提交評論