版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課 程 設 計</b></p><p> 課程名稱 操作系統(tǒng) </p><p> 學 院 計算機學院 </p><p> 專 業(yè) 軟件工程 </p><p> 年級班別
2、 </p><p> 學 號 </p><p> 學生姓名 </p><p> 指導教師 </p><p> 2013 年 1 月 7 日<
3、;/p><p> 操作系統(tǒng) 課程設計任務書</p><p><b> 設計思想說明 </b></p><p><b> 1.1 設計環(huán)境 </b></p><p> 在實現(xiàn)地址轉換的程序實現(xiàn)時,運用了C++6.0來實現(xiàn),因為對C語言程序的編寫稍微熟悉點,可以很好的編寫及調試。程序很容易看懂,輸入
4、條件在后邊備注。</p><p><b> 1.2 設計思想</b></p><p> 編程演示三種存儲管理方式的地址換算過程,分別為分頁方式的地址換算,分段方式的地址換算,段頁式的地址換算。分頁方式通過邏輯地址算出頁號與葉內地址,然后通過頁表來實現(xiàn)向物理地址的轉換。分段方式通過段號和段內地址得到物理地址。段葉式通過段號得到頁表首地址,通過頁號得到塊號,進而得到物
5、理地址。</p><p><b> 2、系統(tǒng)結構</b></p><p> 程序主要有三個功能,分別是分頁方式的地址換算,分段方式的地址換算,段頁式的地址換算。Switch函數(shù)包含3個case語句,分別用page,Segment,SegPagt完成分頁方式的地址換算,分段方式的地址換算,段頁式的地址換算。</p><p><b>
6、 3、數(shù)據(jù)結構的說明</b></p><p> typedef struct segtable</p><p><b> {</b></p><p> int segf[256];</p><p> int segl[256];</p><p> }segtable;<
7、;/p><p> struct segtable st;</p><p> typedef struct segpagt</p><p><b> {</b></p><p> int segf[256];</p><p> int segl[256];</p><p&g
8、t; int ptl[256];</p><p> int pt[256];</p><p> int pf[256];</p><p><b> int pl;</b></p><p><b> }segpagt;</b></p><p> struct seg
9、pagt sp; </p><p><b> 4、算法流程圖</b></p><p><b> 分頁式:</b></p><p><b> 分段式:</b></p><p><b> 段頁式:</b></p><p><
10、;b> 主要函數(shù)列表</b></p><p><b> 6、測試與分析</b></p><p> 分頁式地址換算結果:</p><p> 分頁式地址越界中斷:</p><p> 分段式地址轉換結果:</p><p> 分段式地址段號越界中斷:</p>&
11、lt;p> 分段式地址段內越界中斷:</p><p> 段頁式地址轉換結果:</p><p> 段頁式地址轉換段號越界中斷:</p><p> 段頁式地址轉換頁號越界中斷:</p><p> 段頁式地址轉換段內地址越界中斷:</p><p><b> 結束:</b></p&
12、gt;<p><b> 用戶使用說明</b></p><p> 根據(jù)提示輸入1-4,然后有相應的提示說明,分別輸入,錯誤的時候有提示,正確的輸入會輸出相應的正確的結果。</p><p><b> 附錄:</b></p><p> #include <stdlib.h></p>
13、<p> #include <stdio.h></p><p> int page(int A,int L );</p><p> int Segment(int sn,int sl);</p><p> int SegPagt(int sn,int pn,int pd);</p><p> typedef
14、struct segtable</p><p><b> {</b></p><p> int segf[256];</p><p> int segl[256];</p><p> }segtable;</p><p> struct segtable st;</p>&
15、lt;p> typedef struct segpagt</p><p><b> {</b></p><p> int segf[256];</p><p> int segl[256];</p><p> int ptl[256];</p><p> int pt[256];
16、</p><p> int pf[256];</p><p><b> int pl;</b></p><p><b> }segpagt;</b></p><p> struct segpagt sp; </p><p> int main()</p>
17、<p><b> {</b></p><p><b> int code;</b></p><p> int pl,pa,sn,sd,pd,pn,pc;</p><p> //const int ptl ;</p><p><b> int temp;</b&
18、gt;</p><p><b> do{</b></p><p> printf("----------------地址換算過程----------------------------\n\n");</p><p> printf("******本程序由陳泳鑫設計--2013年1月3號*****\n"
19、;);</p><p> printf(" 1.分頁式地址換算\n");</p><p> printf(" 2.分段式地址換算\n");</p><p> printf(" 3.段頁式地址換算\n");</p><p> printf(" 4.結束運行\(zhòng)n
20、\n");</p><p> printf("--------------------------------------------------------\n");</p><p> printf("請輸入1-4:");</p><p> scanf("%d",&temp);&l
21、t;/p><p> switch(temp)</p><p><b> {</b></p><p><b> case 1: </b></p><p> printf("預設頁表長度為256\n");</p><p> page(pl,pa);<
22、;/p><p><b> break;</b></p><p><b> case 2: </b></p><p> int pl,pa;</p><p> printf("預設段表長度為256\n");</p><p> printf("
23、;請輸入您的邏輯地址段號:");</p><p> scanf("%d",&pl);</p><p> printf("請輸入您的頁內地址:");</p><p> scanf("%d",&pa);</p><p> if(pl>256)<
24、;/p><p> printf("段號%d大于段表長度256,越界中斷\n",pl);</p><p><b> else{</b></p><p> if(pa>256)</p><p> printf("段內地址%d大于段長度256,越界中斷\n",pa);</
25、p><p><b> else</b></p><p><b> {</b></p><p> Segment(pl,pa);</p><p><b> } </b></p><p><b> }</b></p>
26、<p><b> break;</b></p><p><b> case 3:</b></p><p> printf("預設段表長度為256,頁面大小為256\n");</p><p> printf("請輸入您的邏輯地址段號:");</p>&
27、lt;p> scanf("%d",&pl);</p><p> printf("請輸入您的頁號:");</p><p> scanf("%d",&pa); </p><p> printf("請輸入您的頁內地址:");</p>&
28、lt;p> scanf("%d",&pc);</p><p> if(pl>256)</p><p> printf("段號%d大于段表長度256,越界中斷\n",pl);</p><p><b> else{</b></p><p> if(pa&g
29、t;256)</p><p> printf("頁號長度%d大于頁表長度256,越界中斷\n",pa);</p><p><b> else</b></p><p><b> {</b></p><p> if(pc>256)</p><p>
30、; printf("頁內地址%d大于頁面長度256,越界中斷\n",pc);</p><p><b> else</b></p><p> SegPagt(pl,pa,pc);</p><p><b> }</b></p><p><b> }</b&g
31、t;</p><p><b> break;</b></p><p><b> }</b></p><p> }while(temp != 4);</p><p><b> return 0;</b></p><p><b> }&l
32、t;/b></p><p> //分頁式地址換算部分:</p><p> int page(int A,int L)</p><p><b> {</b></p><p> int pl,pa;</p><p> printf("請輸入您的邏輯地址:");&l
33、t;/p><p> scanf("%d",&pl);</p><p> printf("請輸入您的頁面大?。?quot;);</p><p> scanf("%d",&pa);</p><p> if(pl>256)</p><p> pri
34、ntf("頁號%d大于頁表長度256,越界中斷\n",pl);</p><p><b> else{</b></p><p> int d,P,kd,i;</p><p><b> int WD;</b></p><p> int PT[256];</p>
35、<p> for(i=0;i<256;i++)</p><p><b> {</b></p><p> PT[i]=rand() %512;//定義隨機產生的快號在1到512之間</p><p><b> }</b></p><p> P=A/L;//頁號等于邏輯地址/頁面
36、大小</p><p> d=A%L;//頁內地址=邏輯地址%頁面大小</p><p> if(P>=256) printf("頁號大于頁表長度,越界中斷\n\n");//如果頁號大于頁表長度,輸出越界中段</p><p><b> else {</b></p><p> printf(&
37、quot;頁號=邏輯地址/頁面大小=%d,頁內地址=邏輯地址%頁面大小=%d\n",P,d);//輸出頁號和頁內地址</p><p> kd=PT[P];//根據(jù)頁號隨機產生快號</p><p> printf("根據(jù)頁號%d得到塊號%d\n",P,kd);</p><p> WD=kd*L+d;//計算物理地址的公式</p
38、><p> printf("物理地址=塊號*頁面大小+頁內地址\n");</p><p> printf("物理地址=%d*%d+%d\n",kd,L,d);//輸出物理地址=塊號*頁面大小+頁內地址</p><p> printf("邏輯地址%d換算后的物理地址=%d\n\n",A,WD);//輸出物理
39、地址的結果</p><p> return (0);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //分段式地址換算部分:</p><p
40、> int Segment(int sn,int sd)</p><p><b> {</b></p><p><b> int i,wd;</b></p><p> for(i=0;i<255;i++)</p><p><b> {</b></p&
41、gt;<p> st.segf[i]=rand()%255;//定義隨機產生段首地址為1到255之間</p><p> st.segl[i]=rand()%2048;//定義隨機產生段長度為1到2048之間</p><p><b> }</b></p><p> if(sn>256) printf("段號%
42、d大于段表長度256,越界中斷\n\n",sn);//如果段號大于段表長度,輸出越界中斷</p><p> else if(sd>st.segl[sn]) printf("段內地址%d大于段長度%d,越界中斷\n\n",sd,st.segl[sn]);//如果段內地址大于段長度,輸出越界中斷</p><p><b> else{</b
43、></p><p> printf("根據(jù)段號找到段首地址%d\n",st.segf[sn]);</p><p> printf("物理地址=段首地址+段內地址\n");</p><p> printf("物理地址=%d+%d\n",st.segf[sn],sd); //輸出物理地址=段首地址+
44、段內地址</p><p> wd=st.segf[sn]+sd;//計算物理地址的算法</p><p> printf("換算得到的物理地址=%d\n\n",wd);//輸出物理地址</p><p><b> }</b></p><p> return (0);</p><
45、p><b> }</b></p><p> //段頁式地址換算部分:</p><p> int SegPagt(int sn,int pn,int pd)</p><p><b> {</b></p><p><b> int i,wd;</b></p&g
46、t;<p> sp.pl=256;</p><p> for(i=0;i<255;i++)</p><p><b> {</b></p><p> sp.pf[i]=sp.segf[i]=rand()%26624;//定義隨機產生的數(shù)在1到26624之間</p><p> sp.ptl[i]
47、=sp.segl[i]=rand()%512;//定義隨機產生的數(shù)在1到512之間</p><p> sp.pt[i]=rand()%256;//定義隨機產生的數(shù)在1到256之間</p><p><b> }</b></p><p> if(sn>=256) </p><p> printf("段
48、號%d大于段表長度256,越界中斷\n\n",sn);//如果段號大于段表長度256,輸出越界中斷</p><p><b> else </b></p><p> if(pn>=256) </p><p> printf("頁號%d大于頁表長度256,越界中斷\n\n",pn);//如果頁號大于頁表長度
49、,輸出越界中斷</p><p><b> else </b></p><p> if(pd>sp.pl) </p><p> printf("頁內地址%d大于頁面長度%d,中斷\n\n",pd,sp.pl);//如果頁內地址大于頁面長度,輸出中斷</p><p><b> el
50、se{</b></p><p> printf("通過段號%d找到頁表首地址%d\n通過頁號%d找到塊號%d\n",sn,sp.pf[sn],pn,sp.pt[pn]);//輸出頁表首地址和塊號</p><p> printf("物理地址=頁表首地址+塊號*頁面長度+頁內地址\n");</p><p> pr
51、intf("物理地址=%d+%d*%d+%d\n",sp.pf[sn],sp.pt[pn],sp.pl,pd);//輸出物理地址=頁表首地址+快號*頁面長度+頁內地址</p><p> wd=sp.pf[sn]+sp.pt[pn]*sp.pl+pd;//計算物理地址的公式</p><p> printf("物理地址為:%d\n\n",wd);//
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機專業(yè)操作系統(tǒng)課程設計 存儲管理地址換算演示
- 操作系統(tǒng)課程設計存儲管理
- 操作系統(tǒng)課程設計---請求頁式存儲管理的頁面置換算法
- 頁面置換算法操作系統(tǒng)課程設計
- 頁面置換算法操作系統(tǒng)課程設計
- 模擬頁式存儲管理-操作系統(tǒng)課程設計
- 模擬頁式存儲管理 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計--請求頁式存儲管理
- 操作系統(tǒng)課程設計--請求頁式存儲管理
- 操作系統(tǒng)課程設計--- 請求調頁存儲管理
- 操作系統(tǒng)課程設計--請求頁式存儲管理
- 虛擬存儲器管理系統(tǒng)操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計---文件加密存儲
- 操作系統(tǒng)課程設計——操作系統(tǒng)課程設計模擬操作系統(tǒng)
- 課程設計--請求調頁存儲管理方式的模擬
- 操作系統(tǒng)常用頁面置換算法課程設計
- 內存管理(操作系統(tǒng))操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計---動態(tài)分區(qū)分配存儲管理
- 操作系統(tǒng)課程設計--模擬實現(xiàn)可變分區(qū)存儲管理
- 操作系統(tǒng)原理課程設計報告-可變分區(qū)存儲管理
評論
0/150
提交評論