2014-10-09 3 views
0

Я должен преобразовать логический адрес в номер страницы и индекс, но я не знаю, как это сделать. Логический адрес - это пятизначный номер int (логический адрес указывается как десятичный). Любые подсказки?Перевести логический адрес на номер страницы и индекс

public byte read(int logicalAddress){ 
    //called by a process to read memory from its logical address 
    //this.pageNumber = pageNumber; 
    byte data=0; 

    //THIS IS THE PART I NEED HELP WITH ******* 

    //calculate pageNumber and index from the logical address 
    int pageNumber = (logicalAddress/NbrOfPages); 
    int index = (logicalAddress-(pageNumber*PageSize)); 

    //***************************************** 

    //check if we get a pageFault 
    if(pageTable[pageNumber]==-1){ 
     //call method to solve page fault 
     pageFault(pageNumber); 
     //the following two should be used in step 2 and 3 of the lab 
     //pageFaultFIFO(pageNumber); 
     //pageFaultLRU(pageNumber); 
    } 
    //read data from RAM 
    int frame=pageTable[pageNumber]; 
    int physicalAddress=frame*PageSize+index; 
    data=RAM[physicalAddress]; 
    //print result 
    System.out.print("Virtual address: "+logicalAddress); 
    System.out.print(" Physical address: "+physicalAddress); 
    System.out.println(" Value: "+data); 
    return data; 
} 
+0

Предполагая, что это bout x64 (Intel), для вас есть руководство по процессору Intel. –

+0

Это симуляция пейджинга, виртуальной памяти. – user3415034

ответ

0

Вам необходимо начать с размера таблицы страниц в битах. Из того, что вам нужно разбить адрес на два поля (индекс таблицы страниц и смещение байта):

unsigned long long MASK = PAGESIZE-1 ; 

Индекс страницы таблицы затем

unsigned long long index = (address & ~MASK)/PAGESIZE ; 

и смещение

unsigned long long offset = address & mask ; 

В качестве альтернативы:

unsigned long long index = address/PAGESIZE ; 
unsigned long long offset = address % PAGESIZE ; 
Смежные вопросы