Страница 1 из 1

Помогите разобраться с прогой

Добавлено: 30 дек 2010, 02:09
lasenas
Будьте добры помогите разобраться с прогой (программа Менеджер страничной памяти). Объясните мне если можно по подробнее про два выделенных жирным куска программы (что конкретно делаю, предназначение). Заранее благодарен.

Код программы:

Код: Выделить всё

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 ++;
	}
}