Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. int8_t& Memory::getMemoryContent(int logical, int pid)
  2. {
  3.     //przeglada wszystkie ramki, jesli znajdzie to zwraca jej adres.
  4.     //jesli nie ma jej w RAMie to
  5.     //probuje sprowadzic ja z pliku wymiany
  6.     //jesli jest to ja laduje, ale jesli jej nie ma rzucam wyjatek o zlym adresie logicznym
  7.     for (int i = 0; i < 8; i++)
  8.     {
  9.         if (FrameTable[i].pid == pid && logical / 16 == FrameTable[i].ProcessPageNr)
  10.         {
  11.             return ram[i * 16 + logical % 16];
  12.         }
  13.     }
  14.  
  15.     int frame = virtualMemory->getVictimFrameNumber();
  16.     this->FrameTable[frame];
  17.  
  18.     if (FrameTable[frame].dirtyflag == true)
  19.     {
  20.         VirtualMemory::Page page;
  21.         for (int i = 0; i < 16; i++)
  22.         {
  23.             page.data[i] = ram[frame * 16 + i % 16]; // tutaj modulo nie potrzebne
  24.         }
  25.         virtualMemory->updateSwapFilePage(pid, logical / 16, page); // tutaj pid to jest przeciez pid procesu, ktorego strona wchodzi, a nie procesu, ktorego strone aktualizujesz
  26.     }
  27.  
  28.  
  29.     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
  30.     {
  31.         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?
  32.         this->ram[logical % 16 + 16 * frame] = data; // czyli to jest bez sensu - lewo jest takie samo jak prawo
  33.     }
  34.     this->FrameTable[frame].dirtyflag = true; // dirty flaga zmieniasz na true tylko jak zapisuje sie cos do ramu przez writeInMem()
  35.     virtualMemory->updateQueue(frame);
  36.     this->FrameTable[frame].lastUse++; // co to jest?
  37.     this->FrameTable[frame].ProcessPageNr = logical / 16;
  38.     this->FrameTable[frame].pid = pid;
  39.     return ram[frame * 16 + logical % 16];
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement