Как отобразить контейнер GUI LXC на физически подключенном дисплее без диспетчера окон?

Каждый процесс имеет собственный набор страниц страниц, охватывающий нижние 3 ГБ на 32 -битных машинах x86. Верхний 1 ГБ на 32 -битных машинах является общим для всех процессов и недоступен из пользовательского пространства. Верхний 1 ГБ зарезервирован для ядра и изначально содержал отображение всей физической оперативной памяти, смещенной на 3 ГБ. Это означает, что адрес физической памяти 0 виден по виртуальному адресу 0xc0000000, адрес физической памяти 1 виден по адресу 0xc0000001 и так далее. Когда объем памяти превысил лимит в 1 ГБ, доступ к избыточной физической памяти стал осуществляться через окно «highmem».

На x86 -64 верхняя половина адресного пространства зарезервирована для ядра, нижняя половина для пользовательского пространства. Обратите внимание, что текущее оборудование не позволяет использовать все 64 -битное адресное пространство :, обычно можно использовать только 48 битов адреса, старшие 16 бит должны быть либо нулями, либо единицами. (Точное количество используемых бит зависит от модели ЦП.)

При переключении контекста часть отображения пользовательского пространства заменяется отображением нового процесса, но часть ядра остается прежней. Все 4 ГБ памяти не отображаются, только те части, которые фактически используются. Это позволяет значительно уменьшить дерево таблицы страниц. Начальное отображение определяется файлом ELF, содержащим программу, которую нужно запустить. Таблицы страниц изменяются по мере необходимости, когда новая память выделяется динамически, отображается с помощью mmapили автоматически расширяется стек.

Планировщик не "запускается", так как это не отдельный процесс. Ядро перепланирует процессы, когда работающему процессу необходимо дождаться ввода или какого-либо другого события, или когда текущий процесс израсходовал свой квант времени. Каждый процесс находится в одном из нескольких состояний,например, ожидание какого-либо события, готовность к запуску или запуск. Когда ядро ​​выполняет изменение расписания, оно просматривает список готовых к запуску процессов и выбирает один (для каждого ЦП )для следующего запуска.

Кроме того, резервный буфер трансляции (TLB )не загружается непосредственно ядром (на процессорах x86 ). Программное обеспечение изменяет только таблицы страниц, а аппаратное обеспечение автоматически заполняет записи в TLB по мере необходимости во время выполнения. TLB можно сбросить с помощью программного обеспечения; это нужно сделать при переключении контекста.

О внутреннем устройстве ядра Linux написано несколько книг ("Понимание ядра Linux", например ), но большинство из них уже устарели. Но, даже если они больше не являются хорошими ссылками, многие из них содержат по-прежнему актуальную информацию, но вы должны иметь в виду, что многое изменилось.

0
17.11.2021, 22:47
1 ответ

Наконец-то я нашел ответ здесь.:Почему я не могу запускать приложения с графическим интерфейсом из 'root' :"Протокол не указан"?

Я только что побежал:

sudo startx & #I'm pretty sure it isn't ideal to startx as root
sudo -i
xhost si:localuser:MYUSERID
exit

, а затем, когда я зашел в свой контейнер и запустил xeyes, он появился на дисплее даже без оконного менеджера. Я не уверен, что еще я сделал, что также могло иметь значение. В этом раунде я установил свои драйверы, такие как:

sudo apt install --no-install-recommends nvidia-driver-470-server nvidia-utils-470-server nvidia-prime xfonts-base libc-dev libc6-dev fakeroot build-essential gnupg2 dbus-user-session mesa-vulkan-drivers

Я сомневаюсь во всем, что необходимо, но у меня нет ни времени, ни терпения, чтобы эмпирически отделить факты от суеверий. Если это работает, этого достаточно для меня.

0
19.11.2021, 10:59

Теги

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