Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int8_t& Memory::getMemoryContent(int logical, int pid)
- {
- //przeglada wszystkie ramki, jesli znajdzie to zwraca jej adres.
- //jesli nie ma jej w RAMie to
- //probuje sprowadzic ja z pliku wymiany
- //jesli jest to ja laduje, ale jesli jej nie ma rzucam wyjatek o zlym adresie logicznym
- for (int i = 0; i < 8; i++)
- {
- if (FrameTable[i].pid == pid && logical / 16 == FrameTable[i].ProcessPageNr)
- {
- return ram[i * 16 + logical % 16];
- }
- }
- int frame = virtualMemory->getVictimFrameNumber();
- this->FrameTable[frame];
- if (FrameTable[frame].dirtyflag == true)
- {
- VirtualMemory::Page page;
- for (int i = 0; i < 16; i++)
- {
- page.data[i] = ram[frame * 16 + i % 16]; // tutaj modulo nie potrzebne
- }
- virtualMemory->updateSwapFilePage(pid, logical / 16, page); // tutaj pid to jest przeciez pid procesu, ktorego strona wchodzi, a nie procesu, ktorego strone aktualizujesz
- }
- for (int i = 0; i < 16; i++) // co tu sie odjaniepawla - 16 razy robi sie to samo, wartosc 'i' nie ma zadnego wplywu wnetrze petli
- {
- int8_t data = virtualMemory->getPage(pid, logical / 16).data[logical % 16]; // skoro strona juz byla wczesniej sciagnieta z swapFile, to dlaczego bierzesz bajt ze swapFile zamiast z ramu?
- this->ram[logical % 16 + 16 * frame] = data; // czyli to jest bez sensu - lewo jest takie samo jak prawo
- }
- this->FrameTable[frame].dirtyflag = true; // dirty flaga zmieniasz na true tylko jak zapisuje sie cos do ramu przez writeInMem()
- virtualMemory->updateQueue(frame);
- this->FrameTable[frame].lastUse++; // co to jest?
- this->FrameTable[frame].ProcessPageNr = logical / 16;
- this->FrameTable[frame].pid = pid;
- return ram[frame * 16 + logical % 16];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement