0

Я очень новичок в программировании ядра или системы,Обработать виртуальное адресное пространство и адресное пространство ядра? Как?

У меня есть пара вопросов, связанных с виртуальной памятью. В основном относится к статическому времени и времени выполнения [т.е. ELF и загрузка/связывание и т. Д.], Для Linux-x86.

Мои пониманий может быть совершенно неправильно ...

Я знаю виртуальной памяти, и это разделить 1G/3G. где процесс не может получить доступ к адресу выше PAGE_OFFSET в пользовательском режиме - PAGE_OFFSET - это виртуальный адрес.

В статическое время ELF определяет процесс Виртуальное пространство?

  1. Если ELF определяет виртуальное адресное пространство, тогда ELF также определяет виртуальное адресное пространство ядра? Как? [Я полагаю, виртуальное адресное пространство ядра динамически отображается во время выполнения?]

  2. Если адресное пространство ядра отображается для обработки адресного пространства, то почему не обрабатывается размер (виртуальный), также включает размер ядра?

    • Когда и как это адресное пространство ядра отображается/связано? Как, В случае общей библиотеки конкретный файл указывается vm struct и т. Д.
    • Это когда поток кода попадает в системный вызов? Например.
  3. Выполняет ли размер исполняемого файла полностью (виртуальный) размер исполняемого файла? в каком контексте размеры отличаются или они совершенно разные.

Любая статья, объясняющая общий расход?

Compile -> ссылка/загрузки -> виртуальная структура памяти (адресное пространство ядра/общие объекты и т.д.)

Я знаю его очень огромна, но объяснение общего потока будет работать.

+0

Слишком много вопросов в одном сообщении, некоторые из них («Использует ли ядро ​​виртуальный адрес только для пользовательских процессов») задаются много раз раньше. – Tsyvarev

+0

Некоторые ответы, которые я получил здесь, и другие сообщения .. http://stackoverflow.com/questions/14540656/why-kernel-needs-virtual-addressing ..... Отредактированное сообщение соответственно –

ответ

1

Большинство систем определяют диапазоны логических адресов для адресных пространств ядра и пользователя. В некоторых системах диапазон полностью зависит от операционной системы (как она настраивает таблицы страниц), а в других - в аппаратном обеспечении.

Для прежних таблиц страниц обычно вложены. В этом случае несколько таблиц страниц имеют одинаковое значение.

Для последних обычно используются отдельные таблицы страниц для адресных пространств пользователя и ядра.

Если ELF определяет виртуальное адресное пространство, тогда ELF также определяет виртуальное адресное пространство ядра? Как? [Я полагаю, что виртуальное адресное пространство ядра динамически отображается во время выполнения?]

Исполняемый файл определяет только начальный макет адресного пространства пользователя.

Если адресное пространство ядра отображается для обработки адресного пространства, то почему не обрабатывается размер (виртуальный), включая размер ядра?

Это будет зависеть от системы и того, как она делает подсчет.

Когда и как это адресное пространство ядра отображается или связано? Например, в случае общей библиотеки конкретный файл указывается vm struct и т. Д.

Адресное пространство ядра не зависит от процессов. Как уже упоминалось выше, он отображается в процессе либо с помощью таблицы системных страниц, разделяемой всеми процессами, либо набора записей вложенной таблицы страниц, разделяемых всеми процессами.

Выполняет ли размер исполняемого файла полный размер (виртуальный)? в каком контексте различия различаются или они совершенно разные ».

Не совсем. Большие исполняемые файлы указывают на больший диапазон логических адресов. Однако небольшой EXE может легко описать большое количество нулевых страниц спроса. Кроме того, приложение может отображать логические страницы по мере их выполнения. EXE определяет только начальное состояние логического адресного пространства.

+0

Спасибо user3344003. получил смысл! в основном это похоже на то, что процесс инициализации первоначально сопоставляется с таблицами ячеек таблицы/каталогами, адресными пространствами ячеек ядра на более высоких адресах, а остальная часть процесса просто копирует эти записи в собственных таблицах/каталогах страниц. [В linux 32bit] http://www.tldp.org/LDP/khg/HyperNews/get/memory/linuxmm.html –