Понимание управления процессами Linux

У меня это работало в форме, показанной ниже (после загрузки / is rw, каталог, который я смонтировал второй точкой монтирования, - это /layers/rootfs ).

mount -o remount,ro /
mount --bind / /layers/rootfs
mount -o remount,rw /layers/rootfs

Цитата человека:

      Note that the filesystem mount options will remain the same as those  on  the  original
      mount  point, and cannot be changed by passing the -o option along with --bind/--rbind.
      The mount options can be changed by a separate remount command, for example:

             mount --bind olddir newdir
             mount -o remount,ro newdir
0
11.08.2019, 15:55
1 ответ

Каждый процесс имеет собственный набор страниц страниц, охватывающий нижние 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", например ), но большинство из них уже устарели. Но, даже если они больше не являются хорошими ссылками, многие из них содержат по-прежнему актуальную информацию, но вы должны иметь в виду, что многое изменилось.

2
28.01.2020, 02:29

Теги

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