Код программы:
Код: Выделить всё
int alloc(int size) // занять кусок памяти размером size
{
int i = 0;
int n = 0;
int m = 0;
int tblid = 0;
while(alc->data[tblid][0] != -1)
{
tblid ++;
}
if(tblid > PCNT)return -1;
while(size > 0)
{
size -= PSZ;
i = PCNT;
m = -1;
while(i--)
{
if(info->rwCnt[i] == -1)
{
m = info->id[i];
info->rwCnt[i] = 0;
i = 0;
}
}
if(m == -1)return -1;
alc->data[tblid][n] = m;
n ++;
}
return tblid;
}
Код: Выделить всё
void write(int id,int size,int offset,char* data) // пишем
{
sPage* tmp;
int start = offset / PSZ;
int start_offset = offset - start * PSZ;
int cur = 0;
int sp = start_offset; // позиция для записи
int pp = start; // номер страницы
if(alc->data[id][pp] != -1)
tmp = getPageForReadOrWrite(alc->data[id][pp]);
else
return;
while(size--)
{
if(sp >= PSZ)
{
sp = 0;
pp ++;
if(alc->data[id][pp] != -1)
tmp = getPageForReadOrWrite(alc->data[id][pp]); // получаем адрес страницы
else
return;
}
if(pp >= PCNT)return;
//
tmp->data[sp] = data[cur];
cur++;
//
sp ++;
}
}