Как я могу использовать таблицу страниц для преобразования виртуального адреса в физический?

Как уже было сказано, вам нужен не метод DateTime, а метод строки.

дидактически, я бы сделал это:

string dt = DateTime.Now.ToString("MM-dd-yyyy");
Console.WriteLine($"current date is {dt}".ToUpperInvariant());

Если вы хотите знать, почему toUpperInvariant (), а не toUpper ():

это потому, что мы не будем рассматривать культуру окалы ( В C # в чем разница между ToUpper () и ToUpperInvariant ()? )

13
задан Zifre 6 May 2009 в 20:21
поделиться

2 ответа

Если я правильно понимаю ваш вопрос (вероятно, нет), вы хотите знать, как найти физический адрес из виртуального адреса с помощью таблицы страниц. структур. В этом случае представьте, что вы процессор. Используйте 10 старших разрядов адреса, чтобы найти таблицу страниц в каталоге страниц (таблица страниц верхнего уровня). Следующие 10 бит - это индекс в таблице страниц (таблица страниц нижнего уровня). Используйте адрес в этой записи таблицы страниц, чтобы найти физический адрес страницы. Последние десять бит - это байтовый адрес страницы.

Кстати, вы, вероятно, найдете намного больше людей, которые поймут этот тип вопросов на сайте, ориентированном на ОС, таком как OSDev . Я не мог вдаваться в подробности в этом ответе, потому что я не делал таких вещей уже много лет.

1
ответ дан 1 December 2019 в 21:53
поделиться

Чтобы определить страницу данного адреса памяти, возьмите число первых битов P (из N битов).

P = lg2 (numberOfPages)
В вашем примере P = lg2 (16) = 4

Таким образом, первые 4 бита данного адреса памяти сообщают нам страницу. Это означает, что остаток должен быть смещением от начала этой страницы.

Ваш примерный адрес, 51996, равен 1100101100011100 в двоичном формате. То есть [1100: 101100011100].

1100 (12 в десятичном формате) - это номер страницы
101100011100 (2844 в десятичной системе) - это смещение

Теперь нам нужно найти в памяти место страницы 12.
Глядя на вашу таблицу фреймов, кажется, что страница 12 находится в 6-м фрейме. В системе, где вся память является страничной (т. Е. Без отображения ввода-вывода в память), 6-й страничный фрейм будет иметь адрес (entryPerPage * frameNum) -1

В этом случае 4000 * 6-1 = 23999 («- 1 "необходим, поскольку память проиндексирована 0.)

В этом случае 4096 * 6-1 = 24575 (" -1 "необходим, поскольку память индексируется 0.)

Теперь все, что нам нужно сделать, это добавить смещение, и у нас есть адрес физической памяти:

23999 + 2844 = 26843 = 0x68DB

24575 + 2844 = 27419 = 0x6B1B

Готово!

Надеюсь, это (править) было полезно XD

Редактировать: Спасибо Джел за то, что поймал мою ошибку :) Спасибо user8 за то, что поймал мою вторую ошибку! (frameNum вместо pageNum).

21
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: