导航:首页 > 编程语言 > 内存管理模拟程序

内存管理模拟程序

发布时间:2021-04-21 09:55:00

⑴ 怎么用c++模拟内存管理(最坏使用算法)

csdn 文档里有 delphi的,楼主可以参考。

⑵ 要求编写一个动态分区分配管理程序实现一块模拟内存空间的管理,包括内存分配与回收功能。

1019734138@qq.com 我给你发

⑶ 利用C语言,实现存储分配算法,开发一个存储管理的模拟程序,对内存空间的管理和分配。

参考stl里面自动管理内存的部分

⑷ 操作系统内存管理模拟实验

#include<iostream.h>//预处理命令
#define M 30//定义M值为30
int N;//定义变量N
struct Pro//创建结构体 pro
{
int num,time;//定义变量num和time
};
int Input(int m,Pro p[M])//输入函数
{
cout<<"Please input the actual number of pages:"<<endl ;//利用count在屏幕上输出并且换行
do
{
cin>>m;//利用cin输入m的值
if(m>M)cout<<"Overload,Please enter again"<<endl;//当输入的m值大于M时候提示出错
else break;//否则停止
}
while(1);//while循环语句
cout<<endl<<"Please enter the page number"<<endl;//利用count在屏幕输文字
for(int i=0;i<m;i++)//for循环语句,定义i为字符类型初始值为0,当i<m时,i自加
{
cin>>p[i].num;//以数字输入各页面号
p[i].time=0;//给p[i].time赋值为0
}
return m;//正常结束向操作系统返回一个m值
}void print(Pro *page1)//在屏幕上显示当前的页面
{
Pro *page=new Pro[N];//使用指针进行赋值
page=page1;//将page1赋值为page
for(int i=0;i<N;i++)cout<<page[i].num<<" ";//定义i为字符类型初始值为0,当i<N时,i自加,
//并且在屏幕上输出页面号
cout<<endl;//在屏幕上显示换行
}
int Search(int e,Pro *page1 )//查找内存中是否存在要调入的页面
{
Pro *page=new Pro[N];//利用指针将page地址赋给pro[N]
page=page1;//将page的值赋给page1
for(int i=0;i<N;i++)if(e==page[i].num)return i;//使用for循环语句,定义i为字符类型,
//当i<N时,i自加,并且当e的值等于页面号时候返回i
return -1;//如果正常结束向操作系统返回一个-1值
}
int Max(Pro *page1)//找出离现在时间最长的页面
{
Pro *page=new Pro[N];//使用指针将page地址赋给pro[N]
page=page1;//赋值,将page值赋给page1
int e=page[0].time,i=0;
while(i<N)//使用while循环语句判断当i<N时
{
if(e<page[i].time)e=page[i].time;
i++;//i自加
}
for( i=0;i<N;i++)if(e==page[i].time)return i;//for循环语句i初值为0,当i<N的时候
//i自加,当e的值等于页面号的时候,正常结束返回一个i值
return -1;//如果正常结束向操作系统返回一个-1值
}int Compfu(Pro *page1,int i,int t,Pro p[M])//找到最久不使用的页面
{
Pro *page=new Pro[N];//使用指针进行赋值
page=page1;//将page值赋给page1

int count=0;//定义变量count并且赋值为0
for(int j=i;j<M;j++)//for循环语句定义j为字符类型,赋值为i,当j<M时候,j自加
{
if(page[t].num==p[j].num )break;//当二者值相等时候终止
else count++;//否则count自加
}
return count;//返回到conut

}
int main()//定义主函数首部
{

cout<<"available Memory page number:"<<endl;//利用count在屏幕上输出文字
cin>>N; //输入N的值
Pro p[M];
Pro *page=new Pro[N];//利用指针进行赋值
char c;//定义变量c
int m=0,t=0;//定义变量m和n并且赋值为0
float n=0;//定义双精度变量n并且赋值为0
m=Input(m,p);//输入函数
do{

for(int i=0;i<N;i++)//初试化页面基本情况
{
page[i].num=0;//将页面号赋值为0
page[i].time=2-i;//页面时间赋值为2-i
}
i=0;
cout<<"F:FIFO Page replacement"<<endl;//利用count输出文字并且换行
cout<<"L:LRU Page replacement"<<endl;//利用count输出文字并且换行
cout<<"O:OPT Page replacement"<<endl;//利用count输出文字并且换行
cout<<"Press any key end"<<endl;//利用count输出文字并且换行
cin>>c;//输入c的值

if(c=='F')//FIFO页面置换
{
n=1;
cout<<"the case of Page replacement: "<<endl;//利用count输出文字并且换行
while(i<m)//while循环语句当i<m时候
{
if(Search(p[i].num,page)>=0)i++;//找到相同的页面
else //否则
{
if(t==N)t=0;//if循环语句判断t
else
{
n++;//n自加
page[t].num=p[i].num;//赋值
print(page);//在屏幕上显示page值
t++;//t自加
}
}
}
cout<<"number of page lack:"<<n<<"Rate of page lack:"<<n/m<<endl;//利用count在屏幕上
//输出并且换行

}
if(c=='L')//LRU页面置换
{ n=1;
cout<<"the case of Page replacement: "<<endl; //利用count在屏幕上输出并且换行
while(i<m)//while循环语句判断i是否小于m
{
int k;//定义变量k
k=t=Search(p[i].num,page);
if(t>=0)//if循环语句判断t值
page[t].time=0;//给页面使用时间赋值
else//否则
{
n++; //n自加
t=Max(page);//赋值t

page[t].num=p[i].num;//赋值页面号
page[t].time=0;//赋值页面时间
}
if(t==0){page[t+1].time++;page[t+2].time++;}//if循环语句当t等于0时
if(t==1){page[2].time++;page[0].time++;}//if循环语句当t等于1时
if(t==2){page[1].time++;page[0].time++;}//if循环语句当t等于2时
if(k==-1) print(page);//if循环语句当t等于-1时
i++;//i自加
}
cout<<"number of page lack:"<<n<<"Rate of page lack:"<<n/m<<endl; //利用count在屏幕上输出并且换行
}
if(c=='O')//OPT页面置换
{
n=1;
while(i<m)//while循环语句当i<m时候
{
if(Search(p[i].num,page)>=0)i++;//if循环语句进行查找调入页面
else//否则
{
int temp=0,cn;//定义自变量temp
for(t=0;t<N;t++)//for循环语句t<N时候t自加
{
if(temp<Compfu(page,i,t,p))//使用if循环语句判断自变量temp
{
temp=Compfu(page,i,t,p);
cn=t;//赋值
}
}
page[cn]=p[i];//赋值
n++;//n自加
print(page);//在屏幕显示页面号
i++;//i自加
}
}
cout<<"number of page lack:"<<n<<"Rate of page lack:"<<n/m<<endl; //利用count在屏幕
//上输出并且换行
}

}while(c=='F'||c=='L'||c=='O');//利用while循环语句返回输入
return 0;//当程序正确运行结束,向操作系统返回一个0值
}

⑸ 如何实现模拟内存管理

这个可以运行,你可以自己测试研究下,希望对你有所帮助 #include<iostream.h>//预处理命令
#define M 40//定义M值为40
int N;//定义变量N
struct Pro//创建结构体 pro
{
int num,time;//定义变量num和time
};
int Input(int m,Pro p[M])//输入函数
{
cout<<"***请输入实际页数***:" ;//利用count在屏幕上输出并且换行
do
{
cin>>m;//利用cin输入m的值
if(m>M)cout<<"***数量超出,请重新输入***"<<endl;//当输入的m值大于M时候提示出错
else break;//否则停止
}
while(1);//while循环语句
cout<<endl<<"***请输入各页面号***"<<endl;//利用count在屏幕输文字
for(int i=0;i<m;i++)//for循环语句,定义i为字符类型初始值为0,当i<m时,i自加
{
cin>>p[i].num;//以数字输入各页面号
p[i].time=0;//给p[i].time赋值为0
}
return m;//正常结束向操作系统返回一个m值
}void print(Pro *page1)//在屏幕上显示当前的页面
{
Pro *page=new Pro[N];//使用指针进行赋值
page=page1;//将page1赋值为page
for(int i=0;i<N;i++)cout<<page[i].num<<" ";//定义i为字符类型初始值为0,当i<N时,i自加,
//并且在屏幕上输出页面号
cout<<endl;//在屏幕上显示换行
}
int Search(int e,Pro *page1 )//查找内存中是否存在要调入的页面
{
Pro *page=new Pro[N];//利用指针将page地址赋给pro[N]
page=page1;//将page的值赋给page1
for(int i=0;i<N;i++)if(e==page[i].num)return i;//使用for循环语句,定义i为字符类型,
//当i<N时,i自加,并且当e的值等于页面号时候返回i
return -1;//如果正常结束向操作系统返回一个-1值
}
int Max(Pro *page1)//找出离现在时间最长的页面
{
Pro *page=new Pro[N];//使用指针将page地址赋给pro[N]
page=page1;//赋值,将page值赋给page1
int e=page[0].time,i=0;
while(i<N)//使用while循环语句判断当i<N时
{
if(e<page[i].time)e=page[i].time;
i++;//i自加
}
for( i=0;i<N;i++)if(e==page[i].time)return i;//for循环语句i初值为0,当i<N的时候
//i自加,当e的值等于页面号的时候,正常结束返回一个i值
return -1;//如果正常结束向操作系统返回一个-1值
}int Compfu(Pro *page1,int i,int t,Pro p[M])//找到最久不使用的页面
{
Pro *page=new Pro[N];//使用指针进行赋值
page=page1;//将page值赋给page1

int count=0;//定义变量count并且赋值为0
for(int j=i;j<M;j++)//for循环语句定义j为字符类型,赋值为i,当j<M时候,j自加
{
if(page[t].num==p[j].num )break;//当二者值相等时候终止
else count++;//否则count自加
}
return count;//返回到conut

}
int main()//定义主函数首部
{

cout<<"***可用内存页面数***:"<<endl;//利用count在屏幕上输出文字
cin>>N; //输入N的值
Pro p[M];
Pro *page=new Pro[N];//利用指针进行赋值
char c;//定义变量c
int m=0,t=0;//定义变量m和n并且赋值为0
float n=0;//定义双精度变量n并且赋值为0
m=Input(m,p);//输入函数
do{

for(int i=0;i<N;i++)//初试化页面基本情况
{
page[i].num=0;//将页面号赋值为0
page[i].time=2-i;//页面时间赋值为2-i
}
i=0;
cout<<"***F:FIFO页面置换***"<<endl;//利用count输出文字并且换行
cout<<"***L:LRU页面置换***"<<endl;//利用count输出文字并且换行
cout<<"***O:OPT页面置换***"<<endl;//利用count输出文字并且换行
cout<<"按任意键结束"<<endl;//利用count输出文字并且换行
cin>>c;//输入c的值

if(c=='f')//FIFO页面置换
{
n=1;
cout<<"***页面置换情况***: "<<endl;//利用count输出文字并且换行
while(i<m)//while循环语句当i<m时候
{
if(Search(p[i].num,page)>=0)i++;//找到相同的页面
else //否则
{
if(t==N)t=0;//if循环语句判断t
else
{
n++;//n自加
page[t].num=p[i].num;//赋值
print(page);//在屏幕上显示page值
t++;//t自加
}
}
}
cout<<"***缺页次数***:"<<n<<"***缺页率***:"<<n/m<<endl;//利用count在屏幕上
//输出并且换行

}
if(c=='l')//LRU页面置换
{ n=1;
cout<<"***页面置换情况***: "<<endl; //利用count在屏幕上输出并且换行
while(i<m)//while循环语句判断i是否小于m
{
int k;//定义变量k
k=t=Search(p[i].num,page);
if(t>=0)//if循环语句判断t值
page[t].time=0;//给页面使用时间赋值
else//否则
{
n++; //n自加
t=Max(page);//赋值t

page[t].num=p[i].num;//赋值页面号
page[t].time=0;//赋值页面时间
}
if(t==0){page[t+1].time++;page[t+2].time++;}//if循环语句当t等于0时
if(t==1){page[2].time++;page[0].time++;}//if循环语句当t等于1时
if(t==2){page[1].time++;page[0].time++;}//if循环语句当t等于2时
if(k==-1) print(page);//if循环语句当t等于-1时
i++;//i自加
}
cout<<"***缺页次数***:"<<n<<"***缺页率***:"<<n/m<<endl; //利用count在屏幕上输出并且换行
}
if(c=='o')//OPT页面置换
{
n=1;
while(i<m)//while循环语句当i<m时候
{
if(Search(p[i].num,page)>=0)i++;//if循环语句进行查找调入页面
else//否则
{
int temp=0,cn;//定义自变量temp
for(t=0;t<N;t++)//for循环语句t<N时候t自加
{
if(temp<Compfu(page,i,t,p))//使用if循环语句判断自变量temp
{
temp=Compfu(page,i,t,p);
cn=t;//赋值
}
}
page[cn]=p[i];//赋值
n++;//n自加
print(page);//在屏幕显示页面号
i++;//i自加
}
}
cout<<"***缺页次数***:"<<n<<"***缺页率***:"<<n/m<<endl; //利用count在屏幕
//上输出并且换行
}

}while(c=='f'||c=='l'||c=='o');//利用while循环语句返回输入
return 0;//当程序正确运行结束,向操作系统返回一个0值
}

⑹ (4)虚拟内存程序设计,包括FIFO和LRU算法。 设计一个能模拟内存管理行为的系统程序,该系统至少应包括FI

#include"stdio.h"
#include"stdlib.h"
#include"time.h"

void FIFO(void);
void LRU(void);

char a;
int m=4,n=12,i,y[12]=; /*m为物理块数,n为要访问的页面数*/
typedef struct page{
int num;
int time;
}Page;
Page x[10];

int GetMax(page *x) /*求出那个物理块中的页面呆的时间最长,返回物理块号*/
{
int i;
int max=-1;
int tag=0;
for(i=0;i<m;i++)
{
if(x[i].time>max)
{ max=x[i].time;
tag=i;
}
}
return tag;
}

void Xunhuan()
{
printf("Please select 1:FIFO算法\n 2:LRU算法\n");
scanf("%s",&a);
printf("物理块数:4\n");
//scanf("%d",&m);
for(i=0;i<m;i++) /*将空的物理块中数据置为-1*/
{
x[i].num=-1;
}
printf("所要访问的页面数:12\n");
//scanf("%d",&n);
//srand(time(NULL));

printf("所要访问的页面号序列为:");
for(i=0;i<n;i++)
printf("%d ",y[i]);
printf("\n");
printf("页面置换步骤如下:\n");
switch(a)
{
case '1':FIFO();break;
case '2':LRU(); break;
}
}

void main()
{
char a;
Xunhuan();
while(1)
{
printf("Continue or Exit:C/Anykey:\n");
scanf("%s",&a);
if(a=='c'||a=='C')
Xunhuan();
else break;
}
exit(0);
}

void FIFO(void)
{
int i,j,u;
for(i=0;i<m;i++)
x[i].time=0;
x[0].num=y[0];
x[0].time=1;
printf(" %d \n",x[0].num);
for(i=1;i<n;i++)
{ u=0;
for(j=0;j<m;j++)
if(x[j].num==y[i])
{
u=1;
break;
}
if(u!=1&&x[m-1].num!=-1)
{
j=GetMax(x);
x[j].num=y[i];
x[j].time=0;
}
if(u!=1&&x[m-1].num==-1)
{
for(j=0;j<m;j++)
{
if(x[j].num==-1)
{x[j].num=y[i];
break;}
}
}
for(j=0;j<m;j++)
if(x[j].num!=-1)
x[j].time++;

for(j=0;j<m;j++)
if(x[j].num==-1)
printf("%2c ",32);
else
printf("%2d ",x[j].num);
printf("\n");
}
}

void LRU()
{
int i,j,u;
for(i=0;i<m;i++)
x[i].time=0;
x[0].num=y[0];
x[0].time=1;
printf(" %d \n",x[0].num);
for(i=1;i<n;i++)
{ u=0;
for(j=0;j<m;j++)
if(x[j].num==y[i]) /*物理块中存在相同页面*/
{
x[j].time=0; /*将相同的物理块的time置为0*/
u=1;
break;
}
if(u!=1&&x[m-1].num!=-1) /*物理块中无相同页面且物理块已填满*/
{
j=GetMax(x);
x[j].num=y[i];
x[j].time=0; /*将刚替换的页面所在的物理块time置为0*/
}
if(u!=1&&x[m-1].num==-1) /*物理块中无相同页面且物理块未填满*/
{
for(j=0;j<m;j++)
{
if(x[j].num==-1)
{x[j].num=y[i];
break;}
}
}
for(j=0;j<m;j++)
if(x[j].num!=-1)
x[j].time++; /*每执行完一次time加1*/

for(j=0;j<m;j++)
if(x[j].num==-1)
printf("%2c ",32);
else
printf("%2d ",x[j].num);
printf("\n"); /*格式化输出*/
}
}

⑺ 大家好,我想问一个关于模拟内存管理的程序,大家能帮我看看吗

#include <iostream>
#include <iomanip>
using namespace std;

#define Success 1
#define Failure 0

struct PCB {
int number; //进程号
int need; //申请资源
};

struct job {
int ID;//内存块
int Address;//内存首地址
int Len;//
bool Process;//内存的状态,有无占用
int mark;//
};

template<class T>
struct Node {
T data;//数据域,存放表元素
Node *next;//指针域,指向下一个结点
};

template <class T>
class LinkList
{
private:
Node<T> *Head;// 链表头指针
void reCount();
public:
LinkList() ;
~LinkList();
void Insert(int i,T e);
void my_malloc(int i, int j);
int my_free(int handle);
void my_memlist();
};
template<class T>
LinkList<T>::LinkList()
{//构建函数,建一空链表
Head=new Node<T>;
Head->next=NULL;
}

template<class T>
LinkList<T>::~LinkList()
{//析构函数,释放链表所占空间
Node<T> *p;
while(Head)//从头结点开始,依次释放结点
{
p=Head;
Head=Head->next;
delete p;
}
Head=NULL;//头结点指向空
}

template<class T>
void LinkList<T>::reCount()
{
Node<T> *p = Head->next;
for(int count=1; p; p=p->next, count++)
(p->data).ID = count;
}

template<class T>
void LinkList<T>::Insert (int i,T e)
{//在指定位置插入元素
int j=0;
Node<T> *p;
p=Head;//工作指针初始化
while(p && j<i-1)//定位到插入点之前
{
p=p->next;//
j++;
}
if(!p||j>i-1) throw"位置异常";//插入位置不合理,i<0或i>表长
else
{
Node<T> *s;
s=new Node<T>;//
s->data=e;//
s->next=p->next;//结点S链接到p结点之后
p->next=s;//
}
}

template <class T>
void LinkList<T>::my_malloc(int i,int j)
{
Node<T> *p = NULL;
Node<T> *r = Head->next;
Node<T> *q = new Node<T>;
int minMem = 101;
while(r) {
if((r->data).Len >= j && !(r->data).Process && (r->data).Len < minMem) {
p = r;
minMem = (r->data).Len;
}
r = r->next;
}
if(p==NULL){cout<<"NULL"<<endl;return;}
(q->data).ID = 0;
(q->data).Len = (p->data).Len - j;
(q->data).Address = (p->data).Address + j;
(q->data).Process = false;
(p->data).Len = j;
(p->data).Process = true;
(p->data).mark = i;
q->next = p->next;
p->next = q;
if((q->data).Len == 0) {p->next = q->next; delete q;}
reCount();
cout<<(p->data).Address<<endl;
}

template<class T>
int LinkList<T>::my_free(int handle)
{
Node<T> *p = Head;
Node<T> *q = Head->next;
while((q->data).Address != handle) {
p=p->next;
q=q->next;
if(q==NULL)
return Failure;
}
(q->data).Process = false;
Node<T> *r = q->next;
if(r!=NULL&&!(r->data).Process) {
(q->data).Len += (r->data).Len;
q->next = r->next;
delete r;
}
if(p==Head){
reCount();
return Success;
}
if(!(p->data).Process) {
(p->data).Len += (q->data).Len;
p->next = q->next;
delete q;
}
reCount();
return Success;
}

template <class T>
void LinkList<T>::my_memlist()
{
Node<T> *p;
p=Head->next;
while(p!=NULL)
{
cout<<(p->data).ID<<setw(10)<<(p->data).Address<<setw(10)<<(p->data).Len<<setw(10);
if ((p->data).Process)
{
cout<<(p->data).mark;
}
else cout<<"NULL";
cout<<endl;
p=p->next;
}
}

void Display()
{

cout<<"1--分配内存:"<<endl;
cout<<"2--回收内存:"<<endl;
cout<<"3--查看内存:"<<endl;
cout<<"4------退出:"<<endl;
cout<<"请输入选择 :";
}

int main(void)
{
LinkList<job> memory;
job Empty;
Empty.Address = 0;
Empty.ID = 0;
Empty.Len = 100;
Empty.Process = false;
memory.Insert(1,Empty);
int handle;
PCB thread;

Display();
int choice;
cout.setf(ios::right);
do {
cin>>choice;
switch (choice) {
case 1:
cout<<"请输入进程号:";
cin>>thread.number;
cout<<"请输入工作需要内存数:";
cin>>thread.need;
memory.my_malloc(thread.number, thread.need);
break;
case 2:
cout<<"请输入需要回收的首地址:";
cin>>handle;
memory.my_free(handle);
break;
case 3:
cout<<"ID"<<setw(10)<<"Address"<<setw(10)<<"Len"<<setw(10)<<"Process"<<endl;
memory.my_memlist();
break;
}
cin.clear();
fflush(stdin);
} while (choice != 4);
return 0;
}

⑻ 急求模拟内存管理源代码

右击我的电脑。属性,高级,性能设置,高级,下面有个虚拟内存,改大点就好了。

⑼ 模拟内存管理程序,求大神帮看看错在哪

#include<stdio.h>

int main(void)
{
double T = 0.00;
double K = 0.00;
int A = 0;
printf("If you want to temperatures from Celsius to Fahrenheit,please enter 1\n");
printf("If you want to temperatures from Fahrenheit to Celsius,please enter 2\n");
scanf(" %d",&A);

switch ( A )
{
case 1:
printf("Please enter a Celsius temperature scale :");
scanf("%lf",&T);
K = 1.8*T+32;
printf("You entered a Centigrade temperature scale %lf ,and can be converted to Fahrenheit scale %lf ", T,K);
break;

case 2:
printf("Please enter a Fahrenheit temperature scale :");
scanf("%lf",&K);
T = (K - 32)* 5/9;
printf("You entered a Fahrenheit temperature scale %lf ,and can be converted to Celsius temperature scale %lf ", K ,T);
break;
default:
printf("Please select the correct temperature conversion");
break;
}
printf("按任意键结束!");
getchar();
getchar();
return 0;
}
我加了两个
getchar();
getchar();
第一个是接收你输入1或2后的回车,第二个是等待你的任意键,然后到return 0;结束整个程序。
求给力!

阅读全文

与内存管理模拟程序相关的资料

热点内容
2010word删除页眉横线 浏览:208
小程序名称问题 浏览:821
win10网吧专版 浏览:453
数据线哪个颜色的是txrx 浏览:664
微信打飞机有数据库吗 浏览:162
是什么编程世界 浏览:564
四川大数据成果 浏览:937
文件读取软件 浏览:72
业务人员如何看懂财务数据 浏览:250
大数据有什么资格证 浏览:407
兆芯支持哪些网络芯片 浏览:450
itunes怎么把程序同步到手机 浏览:787
授权的苹果手机u盘 浏览:983
cad如何跨文件复制保持尺寸 浏览:240
苹果手机显示在桌面的按键圆圈 浏览:229
班级怎么创建网站 浏览:26
win10系统重装只剩c盘 浏览:972
句馆app怎么用 浏览:98
极速下载管家的文件路径 浏览:535
网站产品是什么意思 浏览:183

友情链接