ядрах? Сейчас переписываю memory management в ядре, убираю там здоровенный маппинг нижних 4 ГБ "вверх", вместо этого мапится только образ ядра статическими таблицами. Интересно стало, как лучше делать все остальные маппинги — пока что я лезу в верхний уровень таблиц, беру физический адрес следующего уровня (если он есть), создаю временный статический маппинг, чтобы влезть в таблицу уровнем ниже, повторяю процесс, пока не дойду до маппинга уровня страницы, но вот эти промежуточные маппинги для меня выглядят субоптимальным подходом
То есть по сути, ядру нужно только два набор статически выделенных таблиц — 1 × L0 -> 1 × L1 -> N × L2 (2MiB) -> M × L3 (4KiB) для маппинга образа ядра в мапяти и 1 × L3 (4KiB) для "ранних маппингов", когда надо мапнуть физическую страницу, а выделение физической памяти для таблиц ещё не инициализировано (N, M определяются размером ядра)
ну ядру нужен а) маппинг себя в нужные адреса, б) маппинг всей физической памяти куда-нибудь (если ты хочешь уметь туда лазить из ядра, что ты наверное хочешь делать)
Ну вот я как раз не сильно хочу мапать прям всю физическую память, я от этого избавляюсь переписыванием этим
если у тебя само ядро (привелегированная часть) мелкое то чо бы и не замапить всю физпамять один раз и больше не париться об этом
Ну раньше у меня было так — нижние 4 гига памяти мапнуты вверх, там же и ядро исполняется
а если вместо пункта "б" просто мапить нужные физические адреса куда удобно, это вариант?
Тебе надо будет постоянно их то мапить то анмапить. Флашить тлб, вот это всё.
зачем постоянно? мап при инициализации драйвера, анмап при его отключении, если оно возможно
Ты в физ память не только за этим лазишь
а чем это мешает?
Обсуждают сегодня