

下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.三種存儲(chǔ)管理方式的地址換算摘要:操作系統(tǒng)(Operating System,OS)是方便用戶、管理和控制計(jì)算機(jī)軟硬件資源的系統(tǒng)軟件(或程序集合)。從用戶角度看,操作系統(tǒng)可以看成是對(duì)計(jì)算機(jī)硬件的擴(kuò)充;從人機(jī)交互方式來(lái)看,操作系統(tǒng)是用戶與機(jī)器的接口;從計(jì)算機(jī)的系統(tǒng)結(jié)構(gòu)看,操作系統(tǒng)是一種層次、模塊結(jié)構(gòu)的程序集合,屬于有序分層法,是無(wú)序模塊的有序?qū)哟握{(diào)用。操作系統(tǒng)在設(shè)計(jì)方面體現(xiàn)了計(jì)算機(jī)技術(shù)和管理技術(shù)的結(jié)合。操作系統(tǒng)是系統(tǒng)軟件的核心,、它控制程序的執(zhí)行和提供資源分配、調(diào)度、輸入/輸出控制和數(shù)據(jù)管理等任務(wù)。如DOS、UNIX、OS/2和Windows NT都是得到廣泛使用的操作的系統(tǒng)。 三種管理方式中,
2、分頁(yè)系統(tǒng)能有效地提高內(nèi)存利用率,分段系統(tǒng)則能很好地滿足用戶需要,而段頁(yè)式系統(tǒng)則是把前兩種結(jié)合起來(lái)形成的系統(tǒng)。這種新系統(tǒng)既具有分段系統(tǒng)的便于實(shí)現(xiàn)、分段可共享、易于保護(hù)、可動(dòng)態(tài)鏈接等一系列優(yōu)點(diǎn),有能像分頁(yè)系統(tǒng)那樣很好地解決內(nèi)存的外部碎片問(wèn)題,以及可為各個(gè)分段離散地分配內(nèi)存等問(wèn)題。關(guān)鍵字:分頁(yè)方式,分段方式,段頁(yè)式方式,操作系統(tǒng)。1. 引言:分頁(yè)存儲(chǔ)管理是將一個(gè)進(jìn)程的邏輯地址空間分成若干個(gè)大小相等的片,稱為頁(yè)面或頁(yè)。在分段存儲(chǔ)管理方式中,作業(yè)的地址空間被劃分為若干個(gè)段,每個(gè)段定義了一組邏輯信息。段的長(zhǎng)度由相應(yīng)的邏輯信息組的長(zhǎng)度決定,因而個(gè)段長(zhǎng)度不等。段頁(yè)式存儲(chǔ)管理方式是分段和分頁(yè)原理的結(jié)合,即先將用
3、戶程序分成若干個(gè)段,再把每個(gè)段分成若干個(gè)頁(yè),并為每一個(gè)段賦予一個(gè)段名。三種存儲(chǔ)管理都有其相應(yīng)的段表、頁(yè)表和地址變換機(jī)構(gòu)。2三種存儲(chǔ)管理方式地址換算描述: (1)分頁(yè)存儲(chǔ)管理方式為了實(shí)現(xiàn)從進(jìn)程的邏輯地址到物理地址的變換功能,在系統(tǒng)中設(shè)置了頁(yè)表寄存器,用于存放頁(yè)表在內(nèi)存中的始址和頁(yè)表的長(zhǎng)度。當(dāng)進(jìn)程要訪問(wèn)某個(gè)邏輯地址中的數(shù)據(jù)時(shí),分頁(yè)地址變換機(jī)構(gòu)會(huì)自動(dòng)地將有效地址(相對(duì)地址)分為頁(yè)號(hào)和頁(yè)內(nèi)地址兩部分,再以頁(yè)號(hào)為索引去檢索頁(yè)表。查找操作由硬件執(zhí)行。在執(zhí)行檢索之前,先將頁(yè)號(hào)與頁(yè)表長(zhǎng)度進(jìn)行比較,如果頁(yè)號(hào)大于或等于頁(yè)表長(zhǎng)度,則表示本次所訪問(wèn)的地址已超越進(jìn)程的地址空間。于是,這一錯(cuò)誤將被系統(tǒng)發(fā)現(xiàn)并產(chǎn)生一地址越界
4、中斷。若未出現(xiàn)越界錯(cuò)誤,則將頁(yè)表始址與頁(yè)號(hào)和頁(yè)表項(xiàng)長(zhǎng)度的乘積相加,便得到該表項(xiàng)在頁(yè)表中的位置,于是可從中得到該頁(yè)的物理塊號(hào),將之裝入物理地址寄存器中。與此同時(shí),再將有效地址寄存器中的頁(yè)內(nèi)地址送入物理地址寄存器的塊內(nèi)地址字段中。這樣便完成了從邏輯地址到物理地址的變換。(2)分段存儲(chǔ)管理方式為了實(shí)現(xiàn)從進(jìn)程的邏輯地址到物理地址的變換功能,在系統(tǒng)中設(shè)置了段表寄存器,用于存放段表始址和段表長(zhǎng)度TL。在進(jìn)行地址變換時(shí),系統(tǒng)將邏輯地址中的段號(hào)與段表長(zhǎng)度TL進(jìn)行比較。若S>TL,表示段號(hào)太大,是訪問(wèn)越界,于是產(chǎn)生越界中斷信號(hào);若未越界,則根據(jù)段表的始址和該段的段號(hào),計(jì)算出該段對(duì)應(yīng)段表項(xiàng)的位置,從中讀出該
5、段在內(nèi)存的起始地址,然后,再檢查段內(nèi)地址d是否超過(guò)該段的段長(zhǎng)SL。若超過(guò),即d>SL,同樣發(fā)出越界中斷信號(hào);若未越界,則將該段的基址與段內(nèi)地址d相加,即可得到要訪問(wèn)的內(nèi)存物理地址。(3)段頁(yè)存儲(chǔ)管理方式在段頁(yè)式系統(tǒng)中,為了便于實(shí)現(xiàn)地址變換,需配置一個(gè)段表寄存器,其中存放段表始址和段表長(zhǎng)TL。進(jìn)行地址變換時(shí),首先利用段號(hào)S,將它與段表長(zhǎng)TL進(jìn)行比較。若S>TL,表示未越界,于是利用段表始址和段號(hào)來(lái)球出該段所對(duì)應(yīng)的段表項(xiàng)在段表中的位置,從中得到該段的頁(yè)表始址,并利用邏輯地址中的段內(nèi)頁(yè)號(hào)P來(lái)獲得對(duì)應(yīng)表的頁(yè)表項(xiàng)位置,從中讀出該頁(yè)所在的物理塊號(hào)b,再利用塊號(hào)b和頁(yè)內(nèi)地址來(lái)構(gòu)成物理地址。3程序
6、模塊:*include <stdlib.h>*include <stdio.h>int settable1(int n,int k);/創(chuàng)建頁(yè)表 int printTable1(int n,int k);/顯示頁(yè)表 int transt(int n,int k,int add);/分頁(yè)地址換算 int defSect(int n,int *t);/創(chuàng)建段表 int printSect(int n);/輸出段表內(nèi)容 int transSect(int n,int s,int d);/進(jìn)行分段地址換算函數(shù) int setSectTable(int n,int k);/創(chuàng)建段
7、頁(yè)式內(nèi)容 int printSectTable(int n,int k);/顯示段頁(yè)內(nèi)容 int transSectPage(int n,int k,int s1,int s2,int s3);/段頁(yè)式地址換算 /定義頁(yè)表結(jié)構(gòu)體 typedef struct stable int y1;/頁(yè)號(hào) int y2;/塊號(hào) stable; struct stable setst512; /建立段表的結(jié)構(gòu)體 typedef struct setsect int d1;/段號(hào) int d2;/段長(zhǎng) int d3;/基址 setsect; struct setsect sets512;/定義段表的總長(zhǎng)度 /
8、建立段頁(yè)式內(nèi)的頁(yè)表的結(jié)構(gòu)體 typedef struct table int dy1;/頁(yè)號(hào) int dy2;/塊號(hào) table; /建立段頁(yè)式的結(jié)構(gòu)體 typedef struct setAll struct table c1512;/定義段內(nèi)頁(yè)表的結(jié)構(gòu)體 int c2;/段號(hào) int c3;/段長(zhǎng) int c4;/起始地址 setAll; struct setAll set512;/定義段頁(yè)式的總長(zhǎng)度 4三種存儲(chǔ)管理方式的地址變換機(jī)構(gòu)(1) 分頁(yè)系統(tǒng)的地址變換機(jī)構(gòu)頁(yè)表始址頁(yè)表長(zhǎng)度>頁(yè)號(hào)(3)頁(yè)內(nèi)地址1b頁(yè)表物理地址邏輯地址L越界中斷頁(yè)表寄存器頁(yè)號(hào)塊號(hào)0123. v.(2) 分段系統(tǒng)的
9、地址變換機(jī)構(gòu)段號(hào)S位移量W段表始址段表長(zhǎng)度>2100越界有效地址段號(hào)段長(zhǎng)基址0123物理地址(3) 段頁(yè)式系統(tǒng)中的地址變換機(jī)構(gòu)段表始址段表長(zhǎng)度段表寄存器>段超長(zhǎng)頁(yè)號(hào)P段號(hào)S頁(yè)內(nèi)地址0123段表長(zhǎng)度頁(yè)表始址0123b塊號(hào)b塊內(nèi)地址頁(yè)表段表. v.5結(jié)束語(yǔ):為期二周的操作系統(tǒng)課程設(shè)計(jì)很快就結(jié)束了,做為每個(gè)學(xué)期末的一項(xiàng)必修課,課程設(shè)計(jì)的目的就是要讓我們能夠更加深刻的理解課堂上所學(xué)的知識(shí),并能夠?qū)⑺鼈儜?yīng)用到實(shí)踐中去,讓知識(shí)能為實(shí)踐服務(wù)。這次操作系統(tǒng)的課程設(shè)計(jì),我是通過(guò)編程演示三種存儲(chǔ)管理方式的地址換算過(guò)程。通過(guò)這次課程設(shè)計(jì),加深了我對(duì)課堂上所學(xué)的三種存儲(chǔ)管理方式的地址換算的概念的理解,了解
10、了操作系統(tǒng)的工作原理已經(jīng)平時(shí)遇到的一些狀況是怎么樣產(chǎn)生的,通過(guò)這次操作系統(tǒng)的課程設(shè)計(jì),另我學(xué)到了很多在課堂上學(xué)不到的知識(shí),以及動(dòng)手能力,這次課程設(shè)計(jì)老師不限開(kāi)發(fā)工具,因此也鍛煉了我們對(duì)新的開(kāi)發(fā)工具的掌握能力。對(duì)于我們計(jì)算機(jī)專業(yè)的學(xué)生來(lái)說(shuō),在軟件更新如此之快的今天,對(duì)新的開(kāi)發(fā)工具的快速掌握能力也是一項(xiàng)必不可少的能力。當(dāng)然,在這次課程設(shè)計(jì)中,也暴露出來(lái)了一些問(wèn)題,就是我對(duì)開(kāi)發(fā)工具的使用,雖然大學(xué)三年基本是用C編寫程序比較多,但是還是感到了力不從心的感覺(jué),就是自己對(duì)一些C函數(shù)庫(kù)的了解不夠,導(dǎo)致自己在用的時(shí)候走了很多彎路,這也從間接讓我了解了許多平時(shí)學(xué)習(xí)不到的知識(shí)。課程設(shè)計(jì)不僅能鍛煉我們把知識(shí)應(yīng)用于實(shí)
11、踐的能力,還鍛煉了我們思維的邏輯性。編寫一個(gè)BUG盡可能少的程序,需要考慮很多方面的問(wèn)題,包括給別人試用,這就鍛煉了我們邏輯思維的能力,為今后走上工作崗位打下了堅(jiān)實(shí)的基礎(chǔ)。6參考文獻(xiàn):計(jì)算機(jī)操作系統(tǒng) 西安電子科技大學(xué)出版社C語(yǔ)言程序設(shè)計(jì)教程 機(jī)械工業(yè)出版社附:三種存儲(chǔ)管理方式地址換算程序清單如下:*include <stdlib.h> *include <stdio.h>int settable1(int n,int k);/創(chuàng)建頁(yè)表 int printTable1(int n,int k);/顯示頁(yè)表 int transt(int n,int k,int add);/
12、分頁(yè)地址換算 int defSect(int n,int *t);/創(chuàng)建段表 int printSect(int n);/輸出段表內(nèi)容 int transSect(int n,int s,int d);/進(jìn)行分段地址換算函數(shù) int setSectTable(int n,int k);/創(chuàng)建段頁(yè)式內(nèi)容 int printSectTable(int n,int k);/顯示段頁(yè)內(nèi)容 int transSectPage(int n,int k,int s1,int s2,int s3);/段頁(yè)式地址換算 /定義頁(yè)表結(jié)構(gòu)體 typedef struct stable int y1;/頁(yè)號(hào) int y
13、2;/塊號(hào) stable; struct stable setst512; /建立段表的結(jié)構(gòu)體 typedef struct setsect int d1;/段號(hào) int d2;/段長(zhǎng) int d3;/基址 setsect; struct setsect sets512;/定義段表的總長(zhǎng)度 /建立段頁(yè)式內(nèi)的頁(yè)表的結(jié)構(gòu)體 typedef struct table int dy1;/頁(yè)號(hào) int dy2;/塊號(hào) table; /建立段頁(yè)式的結(jié)構(gòu)體 typedef struct setAll struct table c1512;/定義段內(nèi)頁(yè)表的結(jié)構(gòu)體 int c2;/段號(hào) int c3;/段長(zhǎng) i
14、nt c4;/起始地址 setAll; struct setAll set512;/定義段頁(yè)式的總長(zhǎng)度 int main() int choice1,choice2; int truth=0,truth1; int jobAddr;/進(jìn)程的邏輯地址空間 int md;/頁(yè)面大小 int addr1;/輸入的邏輯地址 int dc;/定義段表的長(zhǎng)度 int dh,sAddr;/定義段表的邏輯地址的段號(hào)和段內(nèi)地址 int dyc;/段頁(yè)式的段表長(zhǎng)度 int jobs,jobt,joba;/段頁(yè)式邏輯段號(hào)、段內(nèi)頁(yè)號(hào)、頁(yè)內(nèi)地址 do printf(" 組員:符小平 崔健 王菲菲 王天渤n&q
15、uot;); printf("-操作系統(tǒng)課程設(shè)計(jì)題目:分頁(yè)、分段、段頁(yè)式地址換算-nn"); printf(" 總菜單n"); printf(" 1.分頁(yè)方式n"); printf(" 2.分段方式n");printf(" 3.段頁(yè)式n"); printf(" 4.結(jié)束nn"); printf("-n"); printf("請(qǐng)輸入您的選擇:n"); scanf("%d",&choice1); switch(c
16、hoice1) case 1:/分頁(yè)方式 do printf(" 分頁(yè)方式n"); printf("-n"); printf(" 1.隨機(jī)生成進(jìn)程大小n"); printf(" 2.進(jìn)程創(chuàng)建頁(yè)表n"); printf(" 3.顯示頁(yè)表的信息n"); printf(" 4.地址換算n"); printf(" 5.退出n"); printf("-nn"); printf("請(qǐng)輸入您的選擇:"); scanf("
17、%d",&choice2); switch(choice2) case 1: printf(" 隨機(jī)生成一個(gè)進(jìn)程(大小在1024K至2048K)n"); printf("-n"); do jobAddr=rand()%2048;/隨機(jī)產(chǎn)生進(jìn)程的邏輯地址空間 while(jobAddr<1024); printf("該進(jìn)程的邏輯地址空間是:%d(K)n",jobAddr); printf("頁(yè)面的大小:"); scanf("%d",&md); truth=1; pr
18、intf("-n"); break; case 2: if(truth=1) printf("n 進(jìn)程創(chuàng)建的頁(yè)表n"); printf("-nn");settable1(jobAddr,md); truth1=1; printf("nn-n"); else printf("nn-n"); printf("n還沒(méi)有創(chuàng)建進(jìn)程.請(qǐng)先選擇1創(chuàng)建進(jìn)程.nn"); printf("nn-n"); break; break; case 3: if(truth=1) if
19、(truth1=1) printf("n 顯示進(jìn)程創(chuàng)建的頁(yè)表n"); printf("-nn"); printTable1(jobAddr,md); printf("nn-n"); else printf("nn-n"); printf("n還沒(méi)有創(chuàng)建頁(yè)表.請(qǐng)先選擇2創(chuàng)建頁(yè)表.nn"); printf("nn-n"); break; else printf("nn-n"); printf("n還沒(méi)有創(chuàng)建進(jìn)程.請(qǐng)先選擇1創(chuàng)建進(jìn)程.nn")
20、; printf("nn-n"); break; break; case 4: if(truth=1) if(truth1=1) printf("n 地址換算n"); printf("-nn"); printf("請(qǐng)你輸入要進(jìn)行換算的邏輯地址(K):"); scanf("%d",&addr1); if(addr1>jobAddr) do printf("輸入的邏輯地址大于進(jìn)程地址空間,請(qǐng)重新輸入邏輯地址(K):"); scanf("%d",&
21、amp;addr1); while(addr1>jobAddr); transt(jobAddr,md,addr1); printf("nn-n"); else printf("nn-n"); printf("n還沒(méi)有創(chuàng)建頁(yè)表.請(qǐng)先選擇2創(chuàng)建頁(yè)表.nn"); printf("nn-n"); break; else printf("nn-n"); printf("n還沒(méi)有創(chuàng)建進(jìn)程.請(qǐng)先選擇1創(chuàng)建進(jìn)程.nn"); printf("nn-n"); brea
22、k; break; case 5: printf("-nn"); printf("退出分頁(yè)方式地址換算選項(xiàng),進(jìn)入總菜單.n"); printf("-nn"); break; default: printf("-n");printf("錯(cuò)誤提示:你輸入的選擇有錯(cuò),請(qǐng)重新選擇!n"); printf("-n"); while (choice2!=5); break; case 2:/分段方式 do printf(" 分段方式地址換算n"); printf(&q
23、uot;-n"); printf(" 1.創(chuàng)建段表n"); printf(" 2.顯示段表n"); printf(" 3.地址換算n"); printf(" 4.退出n"); printf("-nn"); printf("請(qǐng)輸入您的選擇:"); scanf("%d",&choice2); switch(choice2) case 1: printf(" 開(kāi)始創(chuàng)建段表n"); printf("-n")
24、; printf("請(qǐng)輸入你要?jiǎng)?chuàng)建的段表長(zhǎng)度(最大為512個(gè)):"); scanf("%d",&dc); defSect(dc,&truth); printf("-n"); break; case 2: if(truth=1) printf("n 顯示已經(jīng)創(chuàng)建的段表內(nèi)容n"); printf("-nn"); printSect(dc); printf("nn-n"); else printf("nn-n"); printf("n還
25、沒(méi)有創(chuàng)建段表.請(qǐng)先選擇1創(chuàng)建段表.nn"); printf("nn-n"); break; break; case 3: if(truth=1) printf(" 分段地址換算n"); printf("-n"); printf("請(qǐng)您輸入邏輯地址的段號(hào),段內(nèi)地址(K):"); scanf("%d,%d",&dh,&sAddr); transSect(dc,dh,sAddr); printf("-n"); else printf("-n&qu
26、ot;); printf("n還沒(méi)有創(chuàng)建段表.請(qǐng)先選擇1創(chuàng)建段表.nn"); printf("-n"); break; break; case 4: printf("-nn"); printf("退出分段方式地址換算選項(xiàng),進(jìn)入總菜單.n"); printf("-nn"); break; default: printf("-n"); printf("錯(cuò)誤提示:你輸入的選擇有錯(cuò),請(qǐng)重新選擇!n"); printf("-n"); while
27、(choice2!=4); break; case 3:/段頁(yè)式 do printf(" 段頁(yè)式地址換算n"); printf("-n"); printf(" 1.創(chuàng)建段頁(yè)式n"); printf(" 2.顯示段頁(yè)式結(jié)構(gòu)n"); printf(" 3.地址換算n"); printf(" 4.退出n"); printf("-nn"); printf("請(qǐng)輸入您的選擇:"); scanf("%d",&choice
28、2); switch(choice2) case 1: printf(" 開(kāi)始創(chuàng)建段頁(yè)式n"); printf("-n"); printf("請(qǐng)輸入你要?jiǎng)?chuàng)建的段表長(zhǎng)度(最大為512個(gè)):"); scanf("%d",&dyc); printf("頁(yè)面的大小K:"); scanf("%d",&md); setSectTable(dyc,md); truth=1; printf("-n"); break; case 2: if(truth=1)
29、 printf("n 顯示段頁(yè)式結(jié)構(gòu)n"); printf("-nn"); printSectTable(dyc,md); printf("nn-n"); else printf("nn-n"); printf("n還沒(méi)有創(chuàng)建段頁(yè)式.請(qǐng)先選擇1創(chuàng)建段頁(yè)式.nn"); printf("nn-n"); break; break; case 3: if(truth=1) printf(" 段頁(yè)式地址換算n"); printf("-n"); p
30、rintf("請(qǐng)輸入要查找的邏輯地址段號(hào):"); scanf("%d",&jobs); printf("段內(nèi)頁(yè)號(hào):"); scanf("%d",&jobt); printf("頁(yè)內(nèi)地址(K):"); scanf("%d",&joba); transSectPage(dyc,md,jobs,jobt,joba); printf("-n"); else printf("-n"); printf("n還沒(méi)有創(chuàng)
31、建段表.請(qǐng)先選擇1創(chuàng)建段頁(yè)式.nn"); printf("-n"); break; break; case 4: printf("-nn"); printf("退出段頁(yè)式地址換算選項(xiàng),進(jìn)入總菜單.n"); printf("-nn"); break; default: printf("-n"); printf("錯(cuò)誤提示:你輸入的選擇有錯(cuò),請(qǐng)重新選擇!n"); printf("-n"); while (choice2!=4); break; cas
32、e 4: printf("準(zhǔn)備退出程序!n"); break; default: printf("-n"); printf("錯(cuò)誤提示:你輸入的選擇有錯(cuò),請(qǐng)重新選擇!n"); printf("-n"); while (choice1!=4); return (0); /創(chuàng)建頁(yè)表 int settable1(int n,int k) int p;/頁(yè)號(hào) int d;/剩余地址 int i; int block;/塊號(hào) p=n/k;/求出邏輯地址空間總頁(yè)數(shù) d=n%k;/求出該頁(yè)大小 block=1024*1024/k
33、; /求出最大塊號(hào) for(i=0;i<p;i+) setsti.y1=i;/頁(yè)號(hào) setsti.y2=rand()%block;/定義隨機(jī)產(chǎn)生的塊號(hào)在1到(1M內(nèi)存/頁(yè)面大小)之間 printf("正在創(chuàng)建中···n"); if(d!=0) setstp.y1=p;/頁(yè)號(hào) setstp.y2=rand()%block;/定義隨機(jī)產(chǎn)生的塊號(hào)在1到(1M內(nèi)存/頁(yè)面大小)之間 printf("n頁(yè)表已經(jīng)創(chuàng)建成功!"); return (0); /顯示頁(yè)表 int printTable1(int n,int k) int p
34、; int d; int i; p=n/k;/求出總頁(yè)數(shù) d=n%k;/求出該頁(yè)大小 printf(" 進(jìn)程邏輯地址空間:%dK 頁(yè)面大小:%dKn",n,k); printf(" 頁(yè)表n"); if(d!=0) for(i=0;i<=p;i+) printf("頁(yè)號(hào):%d->塊號(hào):%dn",setsti.y1,setsti.y2); else for(i=0;i<p;i+) printf("頁(yè)號(hào):%d->塊號(hào):%dn",setsti.y1,setsti.y2); return (0); /
35、分頁(yè)地址換算 int transt(int n,int k,int add) int p1,d1; p1=add/k;/求出邏輯頁(yè)號(hào) d1=add%k;/求出邏輯頁(yè)內(nèi)地址 printf("n 分頁(yè)地址換算結(jié)果.n"); printf("-n"); printf("進(jìn)程邏輯地址空間=%dKn",n); printf("頁(yè)面大小=%dKn",k); printf("給定的邏輯地址=%dKn",add); printf("頁(yè)號(hào)=%dn",p1); printf("塊號(hào)=%
36、dn",setstp1.y2); printf("起始地址=%dKn",setstp1.y2*k); printf("頁(yè)內(nèi)地址=%dKn",d1);printf("物理地址=(起始地址+頁(yè)內(nèi)地址)=%dKn",setstp1.y2*k+d1);printf("n-n"); return (0); /創(chuàng)建段表 int defSect(int n,int *t) int i; printf("n 開(kāi)始給各個(gè)段號(hào)分配段長(zhǎng)和基址.n"); printf("-n"); for
37、(i=0;i<n;i+) setsi.d1=i; printf("定義第%d段的段長(zhǎng)(K):",i); scanf("%d",&setsi.d2);/自己定義段長(zhǎng) (1050) setsi.d3=rand()%2048;/定義隨機(jī)產(chǎn)生基址為1到2048之間 *t=1; printf("n-n"); return (0); /輸出段表 int printSect(int n) int i; printf(" 段表n"); for(i=0;i<n;i+) printf("n");
38、 printf("段號(hào):%d->段長(zhǎng):%dK->起始地址:%dK",setsi.d1,setsi.d2,setsi.d3); return (0); /進(jìn)行分段地址換算 int transSect(int n,int s,int d) int sum; printf(" 分段地址換算結(jié)果"); printf("n-n"); if(s<n)/段號(hào)與段表長(zhǎng)度比較 if(d<=setss.d2)/段內(nèi)地址與該段的段長(zhǎng)比較 sum=setss.d3+d; printf("查找段號(hào)=%dn",s);
39、printf("該段段長(zhǎng)=%dKn",setss.d2); printf("該段起始地址=%dKn",setss.d3); printf("分段地址中的段內(nèi)地址=%dKn",d); printf("物理地址=(起始地址+段內(nèi)地址)=%dKn",sum); else printf("輸入的段內(nèi)地址超過(guò)該段的段長(zhǎng),訪問(wèn)越界,產(chǎn)生越界中斷信號(hào)!n"); else printf("輸入的段號(hào)太大,訪問(wèn)越界,產(chǎn)生越界中斷信號(hào)n!"); printf("-nn");
40、return (0); /創(chuàng)建段頁(yè)式內(nèi)容 int setSectTable(int n,int k) int p,d; int i,j; int block; block=1024*1024*1024/k;/求出最大塊號(hào) for(i=0;i<n;i+) seti.c2=i; printf("定義第%d段的段長(zhǎng)(大于1024K,小于2048K):",i); scanf("%d",&seti.c3);/自己定義段長(zhǎng) p=seti.c3/k; d=seti.c3%k; seti.c4=rand()%1024;/定義隨機(jī)產(chǎn)生的起始地址在1到1024
41、之間 for(j=0;j<p;j+) seti.c1j.dy1=j;/頁(yè)號(hào) seti.c1j.dy2=rand()%block;/定義隨機(jī)產(chǎn)生的起始地址在1到(1G內(nèi)存/頁(yè)面大小)之間 if(d!=0) seti.c1p.dy1=p;/頁(yè)號(hào) seti.c1p.dy2=rand()%block;/定義隨機(jī)產(chǎn)生的起始地址在1到(1G內(nèi)存/頁(yè)面大小)之間 return (0); /顯示段頁(yè)式內(nèi)容 int printSectTable(int n,int k) int i,j; int s,p,d; printf(" 段表長(zhǎng)度:%d 頁(yè)面大小:%dKn",n,k); printf(" 段頁(yè)式:"); for(i=0;i<n;i+)printf("n段號(hào):%d->頁(yè)表大小:%dK->頁(yè)表起始地址:%dK->頁(yè)表n",i,seti.c3,seti.c4); s=seti.c3; p=s/k; d=s%k; /顯示段頁(yè)式結(jié)構(gòu)的內(nèi)容 if(d!=0) for(j=0;j<=p;j+) printf("頁(yè)號(hào):%d->塊號(hào):%dn",seti.c1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 惠州漢堡活動(dòng)方案
- 開(kāi)學(xué)延遲活動(dòng)方案
- 微信做集?;顒?dòng)方案
- 池州學(xué)院《工業(yè)微生物學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025屆上海市浦東新區(qū)建平香梅中學(xué)七上數(shù)學(xué)期末預(yù)測(cè)試題含解析
- 江蘇省海安縣2024-2025學(xué)年七年級(jí)數(shù)學(xué)第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 成都工業(yè)學(xué)院《SPSS軟件應(yīng)用實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025屆吉林省朝鮮族四校聯(lián)考數(shù)學(xué)七上期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 江西省上饒市2024-2025學(xué)年下學(xué)期期末檢測(cè) 英語(yǔ)試卷
- 心理發(fā)展規(guī)律與學(xué)習(xí)效果的關(guān)聯(lián)性研究
- 2024年江西省公安廳招聘警務(wù)輔助人員考試真題
- 2025年湖北省普通高中學(xué)業(yè)水平合格性考試模擬(三)歷史試題(含答案)
- 2025年高考全國(guó)二卷數(shù)學(xué)高考真題解析 含參考答案
- 2025年日歷表全年(打印版)完整清新每月一張
- DB32∕T 4111-2021 預(yù)應(yīng)力混凝土實(shí)心方樁基礎(chǔ)技術(shù)規(guī)程
- 通信管道施工三級(jí)-安全技術(shù)交底記錄表
- 橋梁荷載試驗(yàn)
- 化工原理教案.第一章
- 綜合布線報(bào)價(jià)清單范本
- 礦山行業(yè)生產(chǎn)制造執(zhí)行系統(tǒng)(MES)
- 中學(xué)教師專業(yè)標(biāo)準(zhǔn)(試行)
評(píng)論
0/150
提交評(píng)論