c語言分頁
這個程序我做過,現在給你!!寫了很久的!!
#include<stdafx.h>
#include<stdlib.h>
#include<stdio.h>
#define n 64//實驗中假定主存的長度
#define m 4//實驗中假定每個作業分得主存塊塊數
int p[m];//定義頁
int head=0;
struct
{
short int lnumber;//頁號
short int flag;//表示該頁是否在主存,"1"表示在主存,"0"表示不在主存
short int pnumber;//該頁所在主存塊的塊號
short int write;//該頁是否被修改過,"1"表示修改過,"0"表示沒有修改過
short int dnumber;//該頁存放在磁碟上的位置,即磁碟塊號
short int times;//被訪問的次數,用於LRU演算法
}page[n];//定義頁表
//各個函數的實現如下:
void computer()
{
int i;
for(i=0;i<n;i++)
{
page[i].lnumber = i;
page[i].flag = 0;
page[i].pnumber = 10000;//用10000表示為空
page[i].write = 0;
page[i].dnumber = i;
page[i].times = 0;
}//初始化頁表
for(i=0;i<m;i++)
{
page[i].pnumber = i;
}
for(i=0;i<m;i++)
{
p[i] = i;
page[i].flag = 1;
}//初始化頁
}
void showpagelist()
{
int i;
printf("\n頁號\t是否在主存中\t塊 號\t是否被修改過\t磁碟塊號\t訪問次數\n");
for(i=0;i<n;i++)
{
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",page[i].lnumber,page[i].flag,page[i].pnumber,page[i].write,page[i].dnumber,page[i].times);
}
}
void showpage()
{
int i;
for(i=0;i<m;i++)
{
printf("\t%d\n",p[i]);
}
}
void transformation() //缺頁中斷處理
{
unsigned logicAddress,logicNumber,innerAddress,physicsAddress,physicsNumber;
int i, fail = 0;
int method,temppage=0;
short int times = 10000;
printf("請輸入一個邏輯地址(四位十六進制數):");
scanf("%x",&logicAddress);//讀入邏輯地址
logicNumber = logicAddress >> 10;//得到頁號
printf("頁號為:%ld\n",logicNumber);
innerAddress = logicAddress & 0x03ff;//得到頁內地址
printf("頁內地址為:%ld\n",innerAddress);
for(i=0;i<n;i++)
{
if(logicNumber==(unsigned)page[i].lnumber)
{
if(page[i].flag == 1)
{
printf("請求的頁面在主存中!\n");
page[i].times++;
physicsNumber = page[i].pnumber;//由頁號得到塊號
printf("請求的主存塊號為:%ld\n",physicsNumber);
physicsAddress = physicsNumber << 10 |innerAddress;//得到物理地址
printf("請求的物理地址為:%ld",physicsAddress);//輸出物理地址
break;
}
else
{
printf("請求的頁面不在主存中! 將進行缺頁中斷處理!\n請選擇演算法!\n");
printf("1.先進先出\n2.最近最少用\n請選擇置換演算法:");
scanf("%d",&method);
if(method == 1) //採用先進先出演算法
{
printf("採用先進先出演算法!\n");
fail = p[head];
printf("第%d頁將被替換!\n",fail);
p[head] = logicNumber;
head = (head+1) % m;
if(page[fail].write == 1)
printf("第%d頁曾被修改過!\n",fail);
page[fail].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[fail].pnumber;
page[fail].pnumber = 10000;
page[logicNumber].times++;
break;
}
else if(method == 2) //採用最近最少用演算法
{
printf("採用最近最少用演算法!\n");
for(i=0;i<n;i++)
{
if(page[i].flag == 1)
{
if(page[i].times<times)
{
times = page[i].times;
temppage = page[i].lnumber;
}
}
}
printf("第%d頁將被替換!\n",temppage);
for(i=0;i<m;i++)
{
if(p[i] == temppage)
{
p[i] = logicNumber;
}
}
if(page[temppage].write == 1)
printf("第%d頁曾被修改過!\n",temppage);
page[temppage].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[temppage].pnumber;
page[temppage].pnumber = 10000;
page[logicNumber].times++;
break;
}
else
{
printf("你輸入有誤,即將退出!");
exit(1);
}
}
}
}
}
void main()
{
char c,d,flag='y';
printf("頁表正在初始化中...,3秒鍾後為你顯示頁和頁表!\n");
computer();
showpage();
showpagelist();
while(flag == 'y' || flag == 'Y')
{
transformation();
printf("是否顯示頁和頁表?(Y/N)");
c = getchar();
c = getchar();
if(c=='Y'||c=='y')
{
showpage();
showpagelist();
}
else
{
while(c=='N'||c=='n')
{
printf("\n是否繼續進行請求分頁?(Y/N)");
d = getchar();
d = getchar();
if(d=='Y'||d=='y')
{
transformation();
printf("\n是否顯示頁和頁表?(Y/N)");
c = getchar();
c = getchar();
if(c=='Y'||c=='y')
{
showpage();
showpagelist();
}
}
else if (d=='N'||d=='n')
exit(1);
else
printf("輸入錯誤!\n");
}
}
printf("\n是否繼續進行請求分頁?(Y/N)");
flag = getchar();
flag = getchar();
}
}
㈡ 分頁式存儲管理頁面置換演算法C語言描述,幫忙看一下錯誤
init裡面那個for循環,k沒有初始化就直接用,沒問題嗎?local variable不初始化,貌似不是默認初始化為0的。還有這個邏輯是什麼意思:
if(k<4){
pagelist[k].id=1;
pagelist[k].chid=0;
}
㈢ c語言的流程圖怎麼畫
如果會編程序而不會畫流程圖,建議先把自己的程序研究一遍。
若是畫主程序流程圖,那就需看懂主函數的程序,按照main()函數中的具體書寫過程來畫,例如:
程序開始---定義變數---初始化變數---使用選擇或者循環或者順序結構---調用某一個子函數(可以沒有)---程序結束
以上是最簡單的程序流程圖畫法。
若你是畫某一演算法或是某一模塊的流程圖,就要把相應的演算法或是模塊看懂。分析演算法或是模塊的具體走法,根據此走法就可以畫出對應的流程圖。
如果你是初學者,想根據流程圖的畫法而去嘗試編程,建議就一定要研究清楚每一個使用到的演算法,讀懂題目再開始編程。
下面是使VISO畫流程圖的幾個要點:
1、選擇下載一個合適版本的VISO
2、程序開始結束用膠囊
3、分頁用圓圈
4、輸入用平行四邊形
5、語句用方塊
6、判斷用菱形
7、列印用波浪
㈣ c語言中什麼是分隔符
分隔符:將表格轉換為文本時,用分隔符標識文字分隔的位置,或在將文本轉換為表格時,用其標識新行或新列的起始位置。 在word2003中,可以在插入>分隔符打開分隔符的窗口。 分隔符下有以下的選項: 分隔符類型 分頁符(P) 分欄符(C) 換行符(W) 分節符類型 下一頁(N) 連續(T) 偶數頁(E) 奇數頁(O) 說明 分頁符 在插入點處插入手動分頁符。 分欄符 在插入點處插入手動分欄符。 換行符 結束當前行,並強制文字在圖片、表格或其他項目的下方繼續。文字將在下一個空行(且該空行不包含與左邊距或右邊距對齊的表格)上繼續。 下一頁 插入分節符並分頁,下一節從下一頁頂端開始。 連續 插入分節符並開始新節,不插入分頁符。 偶數頁 插入分節符並在下一偶數頁開始下一節。如果分節符落入偶數頁,則 Word 將下一奇數頁留為空白。 奇數頁 插入分節符並在下一奇數頁開始下一節。如果分節符落入奇數頁,則 Word 將下一偶數頁留為空白。
