c資料庫分頁
邏輯地址轉換為物理地址
#include<stdio.h>
main()
{int p,d,la,pa,ps,a[100],n,i;/*pa為物理地址,la為物理地址,ps為頁面大小,a[100]存放頁表中對應主存的頁號,n為頁面數*/
printf("請輸入邏輯地址la=");/*輸入邏輯地址*/
scanf("%d",&la);
printf("請輸入頁面大小ps=");/*輸入頁面大小*/
scanf("%d",&ps);
printf("請輸入頁面數n=");/*輸入頁面數*/
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("輸入頁表中第%d頁項中主存頁號=",i);
scanf("%d",&a[i]);
}/*輸入頁表中主存的頁號*/
p=la/ps;d=la-p*ps;/*p為頁表項的頁號,d為頁內位移*/
pa=a[p]*ps+d;
printf("邏輯地址為%d的物理地址為%d",la,pa);
}
❷ 怎麼樣實現分頁管理的缺頁調度clock演算法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# 獲取資料庫內容分頁,求大神指點,在線等
有兩種方法:
1.使用資料庫,也就是使用SQL來實現。這部分,你網上一搜一大堆。所以,這里不回答了。
2.如果你使用的framework是大於.NET3.5以上的,那麼,非常簡單,使用linq即可。
效果圖:
privateDataTabledt=newDataTable();
privateinti=0;
privatevoidForm1_Load(objectsender,EventArgse)
{
dt.Columns.Add("id");
dt.Columns.Add("name");
for(inti=0;i<10;i++)
{
dt.Rows.Add(i.ToString(),"A"+i.ToString());
}
btnNext.PerformClick();
}
privatevoidbtnNext_Click(objectsender,EventArgse)
{
varquery=fromqindt.AsEnumerable()
whereConvert.ToInt32(q["id"])>=2*i&&Convert.ToInt32(q["id"])<=2*i+1
selectq;
dataGridView1.DataSource=query.AsDataView();
i++;
}