上海大學(xué)操作系統(tǒng)(二)實驗報告(全)_第1頁
上海大學(xué)操作系統(tǒng)(二)實驗報告(全)_第2頁
上海大學(xué)操作系統(tǒng)(二)實驗報告(全)_第3頁
上海大學(xué)操作系統(tǒng)(二)實驗報告(全)_第4頁
上海大學(xué)操作系統(tǒng)(二)實驗報告(全)_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

上海大學(xué)操作系統(tǒng)(二)實驗報告(全)評分:SHANGHAIUNIVERSITY操作系統(tǒng)實驗報告學(xué)院計算機工程與科學(xué)專業(yè)計算機科學(xué)與技術(shù)學(xué)號學(xué)生姓名2、調(diào)度程序應(yīng)包含2~3種不同的調(diào)度算法,運行時可任意選一種,以利于各種算法的分析比較。3、系統(tǒng)應(yīng)能顯示或打印各進程狀態(tài)和參數(shù)的變化情況,便于觀察諸進程的調(diào)度過程。操作過程:1、本程序可選用優(yōu)先數(shù)法或簡單輪轉(zhuǎn)法對五個進程進行調(diào)度。每個進程處于運行R(run)、就緒W(wait)和完成F(finish)三種狀態(tài)之一,并假設(shè)起始狀態(tài)都是就緒狀態(tài)W。為了便于處理,程序進程的運行時間以時間片為單位計算。進程控制塊結(jié)構(gòu)如下:進程控制塊結(jié)構(gòu)如下:PCB進程標(biāo)識數(shù)鏈指針優(yōu)先數(shù)/輪轉(zhuǎn)時間片數(shù)占用CPU時間片數(shù)進程所需時間片數(shù)進程狀態(tài)進程控制塊鏈結(jié)構(gòu)如下:其中:RUN—當(dāng)前運行進程指針;HEAD—進程就緒鏈鏈?zhǔn)字羔?;TAID—進程就緒鏈鏈尾指針。2、算法與框圖(1)優(yōu)先數(shù)法。進程就緒鏈按優(yōu)先數(shù)大小從高到低排列,鏈?zhǔn)走M程首先投入運行。每過一個時間片,運行進程所需運行的時間片數(shù)減1,說明它已運行了一個時間片,優(yōu)先數(shù)也減3,理由是該進程如果在一個時間片中完成不了,優(yōu)先級應(yīng)該降低一級。接著比較現(xiàn)行進程和就緒鏈鏈?zhǔn)走M程的優(yōu)先數(shù),如果仍是現(xiàn)行進程高或者相同,就讓現(xiàn)行進程繼續(xù)進行,否則,調(diào)度就緒鏈鏈?zhǔn)走M程投入運行。原運行進程再按其優(yōu)先數(shù)大小插入就緒鏈,且改變它們對應(yīng)的進程狀態(tài),直至所有進程都運行完各自的時間片數(shù)。(2)簡單輪轉(zhuǎn)法。進程就緒鏈按各進程進入的先后次序排列,進程每次占用處理機的輪轉(zhuǎn)時間按其重要程度登入進程控制塊中的輪轉(zhuǎn)時間片數(shù)記錄項(相當(dāng)于優(yōu)先數(shù)法的優(yōu)先數(shù)記錄項位置)。每過一個時間片,運行進程占用處理機的時間片數(shù)加1,然后比較占用處理機的時間片數(shù)是否與該進程的輪轉(zhuǎn)時間片數(shù)相等,若相等說明已到達輪轉(zhuǎn)時間,應(yīng)將現(xiàn)運行進程排到就緒鏈末尾,調(diào)度鏈?zhǔn)走M程占用處理機,且改變它們的進程狀態(tài),直至所有進程完成各自的時間片。(3)程序框圖運行結(jié)果:Priority算法:RoundRobin算法:實驗代碼://操作系統(tǒng)實驗--進程調(diào)度#include<cstdio>#include<ctime>#include<cstring>#include<cstdlib>constlongn=5;structpcbtype //進程控制塊結(jié)構(gòu){ longid,priority,runtime,totaltime; charstatus; //R,W,F->運行,就緒,完成}PCB[n+1]; longlink[n+1]; //鏈表結(jié)構(gòu) longRUN,HEAD,TAIL;//選擇算法 longChooseAlgo() { chars[128]; printf("PleasetypetheAlgorithm(Priority\\RoundRobin):"); gets(s); if(s[0]=='P'||s[0]=='p') return1; return0; }//初始化 voidinit() { longi; for(i=1;i<=n;i++) { PCB[i].id=i; PCB[i].priority=rand()%4+1; PCB[i].runtime=0; PCB[i].totaltime=rand()%8+1; PCB[i].status='W'; } }//顯示進程調(diào)度狀況 voidshowit() { longi; printf("=====================================================\n"); printf("%-25s","ID"); for(i=1;i<=n;i++)printf("%4ld",PCB[i].id); printf("\n%-25s","PRIORITY//TURNTIME"); for(i=1;i<=n;i++)printf("%4ld",PCB[i].priority); printf("\n%-25s","CPUTIME"); for(i=1;i<=n;i++)printf("%4ld",PCB[i].runtime); printf("\n%-25s","ALLTIME"); for(i=1;i<=n;i++)printf("%4ld",PCB[i].totaltime); printf("\n%-25s","STATUS"); for(i=1;i<=n;i++)printf("%4c",PCB[i].status); printf("\n=====================================================\n"); if(RUN!=-1)printf("RUNNINGPROCESS:%ld\n",RUN); elseprintf("RUNNINGPROCESS:NULL\n"); printf("WAITINGQUEUE:"); for(i=HEAD;i!=-1;i=link[i])printf("%ld",i); printf("\n\n"); }//優(yōu)先數(shù)調(diào)度算法 voidmain_priority() { longi,j,k;longsort[n+1]; init(); //設(shè)置就緒鏈 for(i=1;i<=n;i++) { sort[i]=i; } for(i=1;i<=n;i++) //根據(jù)優(yōu)先數(shù)排序 { for(j=n;j>i;j--) { if(PCB[sort[j]].priority>PCB[sort[j-1]].priority) { k=sort[j];sort[j]=sort[j-1];sort[j-1]=k; } } } HEAD=sort[1]; for(i=1;i<n;i++) { link[sort[i]]=sort[i+1]; } TAIL=sort[n]; link[TAIL]=-1; RUN=-1; //就緒鏈設(shè)置完畢 RUN=HEAD; PCB[RUN].status='R'; HEAD=link[HEAD]; //運行鏈?zhǔn)走M程 while(RUN!=-1) { showit(); PCB[RUN].totaltime--; PCB[RUN].priority-=3;//優(yōu)先級減3 PCB[RUN].runtime++; if(PCB[RUN].totaltime==0) //進程運行完成 { PCB[RUN].status='F'; RUN=HEAD; if(HEAD!=-1) HEAD=link[HEAD]; PCB[RUN].status='R'; } else { if(HEAD!=-1&&PCB[RUN].priority<PCB[HEAD].priority) { k=HEAD; PCB[RUN].status='W'; //尋找等待鏈中的合適位置 while(k!=TAIL&&PCB[link[k]].priority>PCB[RUN].priority) k=link[k]; if(k==TAIL) { link[k]=RUN; //插入鏈尾之后 TAIL=RUN; link[RUN]=-1; RUN=HEAD; HEAD=link[HEAD]; PCB[RUN].status='R'; } else { link[RUN]=link[k]; //插入鏈中 link[k]=RUN; RUN=HEAD; //鏈?zhǔn)走M程開始運行 HEAD=link[HEAD]; PCB[RUN].status='R'; } } } } showit(); }//輪轉(zhuǎn)調(diào)度算法 voidmain_round_robin() { longi; init(); //設(shè)置就緒鏈 HEAD=1; for(i=1;i<n;i++) { link[i]=i+1; } TAIL=n; link[TAIL]=-1; RUN=-1; //就緒鏈設(shè)置完畢 RUN=HEAD; PCB[RUN].status='R'; HEAD=link[HEAD];//運行首進程 while(RUN!=-1) { showit(); PCB[RUN].totaltime--; PCB[RUN].runtime++; if(PCB[RUN].totaltime==0)//進程運行完成 { PCB[RUN].status='F'; RUN=HEAD; if(HEAD!=-1) HEAD=link[HEAD]; PCB[RUN].status='R'; } else { if(HEAD!=-1&&PCB[RUN].runtime%PCB[RUN].priority==0)//輪轉(zhuǎn)時間到 { PCB[RUN].status='W'; //插入鏈尾 link[TAIL]=RUN; link[RUN]=-1; TAIL=RUN; RUN=HEAD;//鏈?zhǔn)走M程開始運行 HEAD=link[HEAD]; PCB[RUN].status='R'; } } } showit(); }//主函數(shù) intmain() { longalgo; srand(time(NULL)); algo=ChooseAlgo(); if(algo==1) { main_priority();//優(yōu)先數(shù)法 } else { main_round_robin();//簡單輪轉(zhuǎn)法 } printf("SYSTEMFINISHED\n"); return0; }實驗體會:通過寫代碼的過程更加清晰地了解了兩種算法的思想和用處,對算法的了解加深的同事也鍛煉了寫代碼的能力?!队嬎銠C操作系統(tǒng)》實驗三報告實驗三題目:請求頁式存儲管理姓名:張佳慧學(xué)號:12122544實驗日期:2015.1實驗環(huán)境:MicrosoftVisualStudio實驗?zāi)康模航陙?,由于大?guī)模集成電路(LSI)和超大規(guī)模集成電路(VLSI)技術(shù)的發(fā)展,使存儲器的容量不斷擴大,價格大幅度下降。但從使用角度看,存儲器的容量和成本總受到一定的限制。所以,提高存儲器的效率始終是操作系統(tǒng)研究的重要課題之一。虛擬存儲技術(shù)是用來擴大內(nèi)存容量的一種重要方法。學(xué)生應(yīng)獨立地用高級語言編寫幾個常用的存儲分配算法,并設(shè)計一個存儲管理的模擬程序,對各種算法進行分析比較,評測其性能優(yōu)劣,從而加深對這些算法的了解。實驗內(nèi)容:為了比較真實地模擬存儲管理,可預(yù)先生成一個大致符合實際情況的指令地址流。然后模擬這樣一種指令序列的執(zhí)行來計算和分析各種算法的訪問命中率。本實驗采用頁式分配存儲管理方案,并通過分析計算不同頁面淘汰算法情況下的訪問命中率來比較各種算法的優(yōu)劣。另外也考慮到改變頁面大小和實際存儲器容量對計算結(jié)果的影響,從而可為算則好的算法、合適的頁面尺寸和實存容量提供依據(jù)。實驗是按下述原則生成指令序列的:(1)50%的指令是順序執(zhí)行的。(2)25%的指令均勻散布在前地址部分。(3)25%的指令均勻散布在后地址部分。示例中選用最佳淘汰算法(OPT)和最近最少使用頁面淘汰算法(LRU)計算頁面命中率。公式為假定虛存容量為32K,頁面尺寸從1K至8K,實存容量從4頁至32頁。(1)最佳淘汰算法(OPT)這是一種理想的算法,可用來作為衡量其他算法優(yōu)劣的根據(jù),在實際系統(tǒng)中是難以實現(xiàn)的,因為它必須先知道指令的全部地址流。由于本示例中已預(yù)生成了全部的指令地址流,故可計算出最佳命中率。該算法的準(zhǔn)則是淘汰已滿頁表中不再訪問或是最遲訪問的的頁。這就要求將頁表中的頁逐個與后繼指令訪問的所有頁比較,如后繼指令不在訪問該頁,則把此頁淘汰,不然得找出后繼指令中最遲訪問的頁面淘汰??梢娮罴烟蕴惴ㄒㄙM比較長的運算時間。(2)最近最少使用頁淘汰算法(LRU)這是一種經(jīng)常使用的方法,有各種不同的實施方案,這里采用的是不斷調(diào)整頁表鏈的方法,即總是淘汰頁表鏈鏈?zhǔn)椎捻?,而把新訪問的頁插入鏈尾。如果當(dāng)前調(diào)用頁已在頁表內(nèi),則把它再次調(diào)整到鏈尾。這樣就能保證最近使用的頁,總是處于靠近鏈尾部分,而不常使用的頁就移到鏈?zhǔn)?,逐個被淘汰,在頁表較大時,調(diào)整頁表鏈的代價也是不小的。操作過程:編寫程序:#include<iostream>#include<process.h>#include<cstdlib>#include<algorithm>#include<ctime>#include<cstdlib>#include<cstring>#include<cstdio>#include<cmath>usingnamespacestd;intadress[32];//全局變量數(shù)組,地址流intp;//全局變量p是一共有多少地址流voidinit(){//初始化函數(shù),intt; srand(time(0));//隨機產(chǎn)生指令序列p=12+rand()%32;cout<<"地址流個數(shù)P="<<p<<endl; cout<<"隨機產(chǎn)生的地址流序列\(zhòng)n"; for(inti=0,j=0;i<p;i++,j++){ t=1+rand()%9; adress[i]=t;//將隨機產(chǎn)生的指令數(shù)存入頁面流printf("a[%d]=%d",i,t);j=j%5;if(i<10)printf("");if(j==4)printf("\n"); } cout<<endl;}voidOPT(intn){//FIFO算法,n是M的值 inte,q=p,m=n-1; intflag; intflag1; intqueye=0; intleaflink[32];memset(leaflink,0,sizeof(leaflink)); for(intx=0;x<q;x++){ e=x; flag=0; for(inti=0;i<n;i++){ if(leaflink[i]==adress[x]){ flag=1; flag1=i; printf("有相同\n"); break; } } if(flag==0){intk=0;for(intj=0;j<m;j++){//012 leaflink[k]=leaflink[k+1];k++; }leaflink[m]=adress[e];if(e>=m){queye++; } } if(flag==1){inttemp[10]={0};for(inti=0;i<=m;i++){for(inta=e+1;a<q;a++){if(leaflink[i]==adress[a]){temp[i]++;}}}intindex=0;for(inti=0;i<m;i++){intmin=temp[0];if(min>temp[i]){min=temp[i];index=i;}}intl=leaflink[index];leaflink[index]=leaflink[0];leaflink[0]=l; }for(intj=0;j<n;j++)printf("leaflink[%d]=%d",j,leaflink[j]);cout<<endl;} cout<<"M="<<n<<"時FIFO的命中率為:"<<(1-((double)queye/p))*100<<"%"<<""<<endl;}voidLRU(intn){//LRU算法 inti; intm=n-1; intq=p; inte; intqueye=0; intflag; intflag1; inty; intleaflink[32]; memset(leaflink,0,sizeof(leaflink)); for(intx=0;x<q;x++){ flag=0; e=x; for(i=0;i<n;i++){ if(leaflink[i]==adress[x]){ flag=1; flag1=i; printf("X=%d,lru[%d]=adress[%d]=%d,flag=1\n",x,i,x,adress[x]); break; } } if(flag==0){intk=0; for(intj=0;j<m;j++){//012 leaflink[k]=leaflink[k+1];k++; } leaflink[m]=adress[e]; queye++; } elseif(flag==1){y=flag1; for(intj=0;j<m;j++){ leaflink[flag1]=leaflink[flag1+1]; flag1++;} leaflink[3]=adress[e]; printf("發(fā)現(xiàn)相同后,改變leaflink[%d]=%d\n",m,leaflink[3]);} for(intj=0;j<n;j++)printf("leaflink[%d]=%d",j,leaflink[j]);cout<<endl; } cout<<"發(fā)生替換次數(shù):"<<queye<<endl; cout<<"M="<<n<<"時LRU的命中率為:"<<(1-((double)queye/p))*100<<"%"<<endl;}intmain(){ init(); charc; printf("請輸入選擇算法(O:最佳淘汰L:最近最少使用):"); cin>>c; if(c=='O') for(inti=3;i<4;i++){ OPT(i); } elseif(c=='L'){for(inti=4;i<5;i++){ LRU(i); cout<<endl; } } return0;}運行結(jié)果:最近最少使用:最佳淘汰:實驗體會:通過這次實驗,我了解了采用頁式分配存儲管理方案,并對頁式分配存儲管理的兩個算法最佳淘汰算法和最近最少使用頁淘汰算法有了更深入的了解,為之后的學(xué)習(xí)奠定了基礎(chǔ)。《計算機操作系統(tǒng)》實驗四報告實驗四題目:文件操作與管理姓名:張佳慧學(xué)號:12122544實驗日期:2015.1實驗環(huán)境:MicrosoftVisualStudio實驗?zāi)康模弘S著社會信息量的極大增長,要求計算機處理的信息與日俱增,涉及到社會生活的各個方面。因此,文件管理是操作系統(tǒng)的一個極為重要的組成部分。學(xué)生應(yīng)獨立地用高級語言編寫和調(diào)試一個簡單的文件系統(tǒng),模擬文件管理的工作過程。從而對各種文件操作命令的實質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解,掌握它們的實施方法,加深理解課堂上講授過的知識。實驗內(nèi)容:1.要求:(1)實際一個n個用戶的文件系統(tǒng),每個用戶最多可保存m個文件。(2)限制用戶在一次運行中只能打開l個文件。(3)系統(tǒng)應(yīng)能檢查打入命令的正確性,出錯要能顯示出錯原因。(4)對文件必須設(shè)置保護措施,如只能執(zhí)行,允許讀、允許寫等。在每次打開文件時根據(jù)本次打開的要求,再次設(shè)置保護級別,即可有二級保護。(5)對文件的操作至少應(yīng)有下述幾條命令:creat建立文件。delete刪除文件。open打開文件。close關(guān)閉文件。read讀文件。write寫文件。2.示例:(1)程序采用二級文件目錄,即設(shè)置了主文件目錄(MFD)和用戶文件目錄(UFD)。前者應(yīng)包含文件主(即用戶)及他們的目錄區(qū)指針;后者應(yīng)給出每個文件主占有的文件目錄,即文件名,保護碼,文件長度以及他們存放的位置等。另外為打開文件設(shè)置了運行文件目錄(AFD),在文件打開時應(yīng)填入打開文件號,本次打開保護碼和讀寫指針等。3.算法與框圖(1)因系統(tǒng)小,文件目錄的檢索使用了簡單的線性搜索,而沒有采用Hash等有效算法。(2)文件保護簡單實用了三位保護碼,對應(yīng)于允許讀、允許寫和運行執(zhí)行,如下所示:111允許寫允許讀允許執(zhí)行如對應(yīng)位為0,則不允許。實驗源碼:#include<iostream>#include<cstdlib>#include<algorithm>#include<ctime>#include<cstring>#include<cstdio>#include<cmath>usingnamespacestd;structUFD{intfname;intlen;intprocode[3];}ufd[10];structMFD{intuser;UFDp[5];}mfd[10];intmain(){intx,n=10,flag1=1,flag2=1,flag3=1;if(flag1){for(inti=0;i<10;i++){ufd[i].fname=i;intt=100+rand()%900;ufd[i].len=t;for(intj=0;j<3;j++)ufd[i].procode[j]=rand()%2;}srand((unsigned)time(NULL));boolf[10];for(inti=0;i<10;i++){mfd[i].user=i;memset(f,0,sizeoff);for(intj=0;j<5;j++){intt;dot=rand()%10;while(f[t]);f[t]=1;mfd[i].p[j]=ufd[t];}}}while(n--&&flag2){cout<<"inputuser:"<<endl;cin>>x;if(x<0||x>=10){cout<<"tryagain"<<endl;break;}for(intj=0;j<5;j++)cout<<mfd[x].p[j].fname<<""<<mfd[x].p[j].len<<""<<mfd[x].p[j].procode[0]<<mfd[x].p[j].procode[1]<<mfd[x].p[j].procode[2]<<endl;cout<<"inputthecommand:"<<endl;cout<<"creat1;delete2;open3;bye4;close5;read6;write7"<<endl;ints,index,flag=1;while(flag){cin>>s;switch(s){case1:if(flag3){cout<<"輸入你要創(chuàng)建的文件的名字:"<<endl;cin>>mfd[x].p[0].fname;cout<<"輸入你要創(chuàng)建的文件的長度:"<<endl;cin>>mfd[x].p[0].len;cout<<"輸入你要創(chuàng)建的文件的權(quán)限:"<<endl;for(inti=0;i<3;i++)cin>>mfd[x].p[0].procode[i];for(intj=0;j<5;j++)cout<<mfd[x].p[j].fname<<""<<mfd[x].p[j].len<<""<<mfd[x].p[j].procode[0]<<mfd[x].p[j].procode[1]<<mfd[x].p[j].procode[2]<<endl;cout<<"inputthecommand:"<<endl;}else{cout<<"輸入你要創(chuàng)建的文件的名字:"<<endl;cin>>mfd[x].p[index].fname;cout<<"輸入你要創(chuàng)建的文件的長度:"<<endl;cin>>mfd[x].p[index].len;cout<<"輸入你要創(chuàng)建的文件的權(quán)限:"<<endl;for(inti=0;i<3;i++)cin>>mfd[x].p[index].procode[i];for(intj=0;j<5;j++)cout<<mfd[x].p[j].fname<<""<<mfd[x].p[j].len<<""<<mfd[x].p[j].procode[0]<<mfd[x].p[j].procode[1]<<mfd[x].p[j].procode[2]<<endl;cout<<"inputthecommand:"<<endl;}break;case2:flag3=0;cout<<"輸入要刪除的文件:"<<endl;intt;cin>>t;for(inti=0;i<5;i++){if(mfd[x].p[i].fname==t){index=i;mfd[x].p[i].fname=0;mfd[x].p[i].len=000;memset(mfd[x].p[i].procode,0,sizeof(mfd[x].p[i].procode));}}for(intj=0;j<5;j++)cout<<mfd[x].p[j].fname<<""<<mfd[x].p[j].len<<""<<mfd[x].p[j].procode[0]<<mfd[x].p[j].procode[1]<<mfd[x].p[j].procode[2]<<endl;cout<<"inputthecommand:"<<endl;break;case3:cout<<"輸入要打開的文件:"<<endl;intfile;cin>>file;for(inti=0;i<5;i++){if(mfd[x].p[i].fname==file){if(mfd[x].p[i].procode[2]==0)cout<<"你沒有權(quán)限"<<endl;elsecout<<"可以打開"<<endl;}}cout<<"inputthecommand:"<<endl;break;case4:for(intj=0;j<5;j++)cout<<mfd[x].p[j].fname<<""<<mfd[x].p[j].len<<""<<mfd[x].p[j].procode[0]<<mfd[x].p[j].procode[1]<<mfd[x].p[j].procode[2]<<endl;cout<<"goodbye~"<<endl;flag=0;flag2=0;flag1=0;break;case5:flag=0;flag1=0;break;case6:cout<<"輸入要讀的文件:"<<endl;intfile1;cin>>file1;for(inti=0;i<5;i++){if(mfd[x].p[i].fname==file1){if(mfd[x].p[i].procode[1]==0)cout<<"你沒有權(quán)限"<<endl;elsecout<<"可以讀"<<endl;}}cout<<"inputthecommand:"<<endl;break;case7:cout<<"輸入要寫的文件:"<<endl;intfile2;cin>>file2;for(inti=0;i<5;i++){if(mfd[x].p[i].fname==file2){if(mfd[x].p[i].procode[0]==0)cout<<"你沒有權(quán)限"<<endl;elsecout<<"可以寫"<<endl;}}cout<<"inputthecommand:"<<endl;break;}}}return0;}實驗結(jié)果:實驗體會:本次實驗主要是模擬了一下文件系統(tǒng),文件是我們平時接觸最多也是最廣的形式,即便是不會計算機的人們也可以通過這種操作文件來很方便地完成操作,而本次實驗讓我了解到了文件系統(tǒng)的內(nèi)部實現(xiàn),雖然僅僅是通過C++模擬的,但還是讓我對它的原理有了更好的理解,也是對我們上課的內(nèi)容的一個鞏固?!队嬎銠C操作系統(tǒng)》實驗六報告實驗六題目:FAT文件系統(tǒng)實驗姓名:張佳慧學(xué)號:12122544實驗日期:2015.1實驗環(huán)境:win95虛擬機實驗?zāi)康模簭南到y(tǒng)分析的角度出發(fā),了解FAT文件系統(tǒng)的組織結(jié)構(gòu)和文件的存儲方式。進一步理解操作系統(tǒng)文件管理的基本思想。實驗內(nèi)容:1.了解3吋軟盤的FAT文件系統(tǒng)結(jié)構(gòu)。2.察看文件分配表的簇號鏈。3.察看文件目錄表中文件目錄結(jié)構(gòu)。4.了解用簇號鏈映射的文件鏈?zhǔn)酱鎯Y(jié)構(gòu)。5.分析目錄文件的組成。實驗步驟:1.進入DEBUG環(huán)境,裝入FAT文件系統(tǒng)結(jié)構(gòu)。執(zhí)行命令:L00021說明:將0號驅(qū)動器中,邏輯扇區(qū)號從0開始的共21H個扇區(qū)讀入內(nèi)存,放在DS:0000為起始的地址中。2.觀察1.44M軟盤中FAT12文件系統(tǒng)結(jié)構(gòu)。執(zhí)行命令:D0000連續(xù)執(zhí)行D命令,每次顯示128個字節(jié),可見文件系統(tǒng)結(jié)構(gòu)。FAT文件系統(tǒng)結(jié)構(gòu)如下:邏輯扇區(qū)號其中:Boot引導(dǎo)程序FAT文件分配表FDT文件目錄表1.44M軟盤邏輯扇號與物理扇區(qū)的對應(yīng)關(guān)系邏輯扇號0#——0道0面1扇邏輯扇號1H~11H——0道0面2~18扇邏輯扇號12H~23H——0道1面1扇~18扇邏輯扇號24H~35H——1道0面1扇~18扇軟盤有兩面,每面80個磁道,每個磁道18個扇區(qū),每個扇區(qū)512個字節(jié),所以軟盤的容量是2*80*18*512=1474560,1474560/1024/1024大約為1.44M。3.分析文件分配表結(jié)構(gòu),了解用簇鏈映射的文件的鏈?zhǔn)酱鎯Y(jié)構(gòu)。執(zhí)行命令:D200思考:上面屏幕顯示首簇號為003的文件共包括幾個扇區(qū)?它分布在哪幾個物理扇區(qū)上?答:首簇號為003的文件共包括2個扇區(qū),它分布在0道0面2、3扇。4.觀察1.44M軟盤中文件目錄表FDT以及文件目錄結(jié)構(gòu)執(zhí)行命令:L00021說明:將邏輯扇區(qū)0H開始的共21H個物理扇區(qū)裝入DS:0000H起始的內(nèi)存。執(zhí)行命令:D2600說明:顯示從2600H地址開始的FDT文件表。思考:①計算1.44M的軟盤根目錄最多可以容納多少文件?答:1.44MB軟盤的文件目錄表FDT共14個扇區(qū),每個文件的目錄登記項占用32個字節(jié),用作目錄的一個扇區(qū)(512字節(jié))最多只能裝入512/32=16個文件。因此,1.44MB軟盤的根目錄下最多可建文件或子目錄224個。②上圖屏幕顯示的文件的目錄項中標(biāo)示該文件的首簇號在何處?該文件是什么屬性?答:首簇號在第2行的1A~1B字節(jié)處,首簇號為002,該文件屬于歸檔文件。書上顯示的文件首簇號在第6行的1A~1B字節(jié)處,首簇號為091,屬歸檔文件。③書上面的屏幕顯示第1~2行目錄項表示的是什么項目?答:第1~2目錄項表示卷標(biāo)。5.觀察1.44M軟盤中文件目錄表的長文件名目錄結(jié)構(gòu)思考:①書上面屏幕顯示的2~3行是什么目錄項?答:長名的第一項,也是最后一項。②若有一個文件名共長34個字符,要占多少目錄項?答:四個目錄項,三個長目錄項和一個短目錄項。6.自己動手做:①觀察測試軟盤的FDT區(qū),找到名為BAK的文件目錄。該文件是什么類型的

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論