Чтобы определить страницу данного адреса памяти, возьмите первые цифры P бит (из N бит).
P = lg2 (numberOfPages)
В вашем примере P = lg2 (16) = 4
Таким образом, первые 4 бита данного адреса памяти сообщат нам страницу. Это означает, что остальное должно быть смещением от начала этой страницы.
Ваш примерный адрес, 51996, это 1100101100011100 в двоичном формате. То есть [1100: 101100011100].
1100 (12 в десятичном виде) - номер страницы
101100011100 (2844 в десятичном виде) это смещение
Теперь нам нужно найти, где находится страница 12.
Глядя на таблицу фреймов, кажется, что страница 12 находится в 6-м фрейме. В системе, где вся память является постраничной (т. Е. Нет ввода-вывода в памяти), 6-й фрейм страницы будет иметь значение (recordsPerPage * frameNum) -1
В этом случае 4000 * 6-1 = 23999 («-1» необходимо, поскольку память индексируется 0).
В этом случае 4096 * 6-1 = 24575 («-1» необходимо, поскольку память индексируется 0).
Теперь все, что нам нужно сделать, это добавить смещение, и у нас есть адрес физической памяти:
23999 + 2844 = 26843 = 0x68DB
24575 + 2844 = 27419 = 0x6B1B
Готово!
Надеюсь, что это (изменить) было полезно XD
Edit:
Спасибо Джелю за то, что он поймал мою ошибку :)
Спасибо user8 за то, что поймал мою вторую ошибку! (frameNum вместо pageNum).