Автор: Пользователь скрыл имя, 15 Июня 2012 в 14:25, лабораторная работа
Продумайте систему сегментного хранения информации. Исходные данные:
Программа на Cи (Си++), под Windows, Консольное приложение.
Вся доступная память представлена массивом 10 КБайт. Все операции с выделением, доступом и освобождением памяти проводятся только с памятью внутри этого массива.
}
}
void FreeMemory(int MemoryHandle)
{
struct Block *tmp;
tmp=(struct Block*)&Ar[sizeof(I)];
while(!(tmp->Handle==
for(int i=tmp->Adres; i<tmp->Adres+tmp->Size; i++)
{
Ar[tmp->Adres]='\
}
tmp->Bit=0;
}
int WriteMemory(int MemoryHandle, int Offset, int Size, void *Data)
{
char *m=(char*)Data;
struct Block *tmp;
tmp=(struct Block*)&Ar[sizeof(I)];
while(!(tmp->Handle==
if(Offset>=tmp->Size) return 1;
if((Offset+Size)>=tmp->
if(Offset<0) return 1;
if(Size<=0) return 1;
for(int i=0; i<Size;i++)
{
Ar[tmp->Adres+
Offset++;
*m++;
}
tmp->Bit=1;
return 0;
}
int ReadMemory(int MemoryHandle, int Offset, int Size, void *Data)
{
char *m=(char*)Data;
struct Block *tmp;
tmp=(struct Block*)&Ar[sizeof(I)];
while(!(tmp->Handle==
if(Offset>=tmp->Size) return 1;
if((Offset+Size)>=tmp->
if(Offset<0) return 1;
if(Size<=0) return 1;
for(int i=0; i<Size; i++)
{
*m=Ar[tmp->Adres+
Offset++;
*m++;
}
Data=(void*)m;
}
void DumpMemory(void)
{
int m;
struct Block *tmp,*tmp1;
tmp=(struct Block*)&Ar[sizeof(I)];
tmp1=tmp;
m=tmp1->Adres;
tmp1=tmp1->next;
while(tmp1)
{
if(m>tmp1->Adres)
m=tmp1->
tmp1=tmp1->next;
}
while(tmp)
{
if (tmp->Handle)
{
printf("H:%d
B:%d S:%d F:%d %c,%c,%c,%c,%c,%c,%c,%c,%c,%c\
}
tmp=tmp->next;
}
int k=*(int*)&Ar[0];
printf("Free memory %d from %d to %d\n\n",k,m-k,m);
}
void SortMemory(void)
{
int m=0;
int f=0;
struct Block *t;
t=(struct Block*)&Ar[sizeof(I)];
while(t)
{
f++;
t=t->next;
}
int z=*(int*)&Ar[0];
int k=10000;
struct Block *b,*b1;
b=(struct Block*)&Ar[sizeof(I)];
b1=(struct Block*)&Ar[sizeof(I)];
while(b)
{
if(k>b->Adres)
{
k=b->Adres;
}
b=b->next;
}
while(b1->next)
{
if (!b1->Bit)
{
for(int
j=1;j<=b1->Adres-k;j++) Ar[b1->Adres+b1->Size-j]=Ar[
struct Block *tmp;
tmp=b1->
while(tmp)
{
if(b1-
tmp->
tmp=
}
z+=b1->Size;
for(int
i=0; i<=(sizeof(I)+f*sizeof(Block)-
{
Ar[siz
Ar[siz
}
for(int i=0; i<sizeof(Block);i++)
Ar[siz
struct Block *Bl,*Bl1;
Bl=(struct Block*)&Ar[sizeof(I)];
for(int i=1;i<f-1;i++)
{
Bl1=(s
Bl->
Bl=Bl-
}
Bl->next=
m++;
f--;
}
else b1=b1->next;
}
*(int*)&Ar[0]=z+m*sizeof
}
Информация о работе Отчет по дисциплине Операционные системы