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