Переключение контекста процесса linux

Русские Блоги

Влияние переключения контекста процессора Linux на производительность

Несколько процессов, конкурирующих за ЦП, также увеличат среднюю нагрузку, что вызвано переключением контекста ЦП.

1. Контекст процессора

Linux — многозадачная операционная система. Система будет выделять временные интервалы ЦП для задач за очень короткий промежуток времени. Из-за короткого временного интервала у людей будет ощущение одновременной работы (десятки сотен раз в секунду) ,

Перед выполнением каждой задачи ЦП должен знать, откуда загружается задача и где запускать ЦП, а также восстанавливаться из регистра и переходить к месту, указанному счетчиком программы.

  1. Регистр ЦП: это память с небольшой встроенной емкостью, но очень быстрой скоростью.
  2. Счетчик программы: используется для сохранения позиции инструкции, выполняемой ЦПУ, или позиции следующей инструкции, которая будет выполнена.

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

Переключение контекста ЦП: сохранить контекст ЦП (регистр ЦП и программный счетчик) предыдущей задачи, затем загрузить контекст новой задачи в регистр и программный счетчик, перейти к месту, указанному программным счетчиком, и приступить к выполнению задачи.

Сценарий переключения контекста процессора делится на следующие сценарии в зависимости от различных задач:

  1. Переключение контекста процесса
  2. Переключение контекста потока
  3. Переключение контекста прерывания (вызвано аппаратным прерыванием)
  4. Переключение в привилегированном режиме (через системный вызов)

Во-вторых, переключатель режима привилегий

В соответствии с уровнем привилегий, Linux можно разделить на четыре уровня, обозначенных как 0-3. В большинстве операционных систем

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

Процесс перехода из режима пользователя в режим ядра требует системного вызова. В этом процессе также происходит переключение контекста ЦП: при переключении сначала сохраняется позиция команды режима пользователя в регистре ЦП, а затем обновляется до позиции команды ядра. Когда системный вызов завершается, регистр ЦП восстанавливается до первоначального состояния пользователя. Один системный вызов, произошли два переключения контекста процессора.

Читайте также:  Восстановление загрузчика альт линукс

Этот переключатель не переключает процессы и не задействует ресурсы виртуальной пользовательской памяти, такие как виртуальная память.

Три, переключение контекста процесса

Ресурсы процесса состоят из четырех частей:

  • Текстовый раздел содержит текст программы, то есть инструкции машинного языка, составленные из программы.
  • Статический раздел содержит переменные, выделенные компилятором, включая глобальные переменные и локальные переменные, объявленные с использованием static.
  • Секция стека содержит стек времени выполнения, который состоит из кадров стека, а каждый кадр стека содержит параметры функций, локальные переменные и другие.
  • Сегмент кучи содержит блоки памяти, выделенные во время выполнения, и обычно выделяется путем вызова функции стандартной библиотеки C malloc.

1. Потенциальная стоимость производительности процесса переключения контекста

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

Переключение контекста процесса: сохранение виртуальной памяти, стека и других ресурсов процесса в пользовательском режиме, а также ведение регистров состояния ядра и процессора текущего процесса, после загрузки состояния ядра следующего процесса необходимо обновить виртуальную память нового процесса и Пользовательский стек.

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

Linux использует TLB (Translation Lookaside Buffer) для управления отношениями отображения между виртуальной памятью и физической памятью. Когда виртуальная память обновляется, TLB также должен быть обновлен, и доступ к памяти также будет соответственно замедляться. Особенно в многопроцессорной системе кэш-память используется несколькими процессорами, и обновление кеш-памяти не только повлияет на текущий процессорный процесс, но и на процессы других процессоров, совместно использующих кэш-память.

Читайте также:  Обновить qt creator linux

2. Когда будет запланирован запуск процесса на процессоре

  1. Чтобы обеспечить правильное планирование всех процессов, время ЦП делится на сегменты временных сегментов, и эти временные сегменты затем распределяются для каждого процесса по очереди. Когда временной интервал процесса исчерпан, он будет приостановлен системой и переключен на другие процессы, ожидающие запуска ЦП.
  2. Если у системы недостаточно системных ресурсов (например, недостаточно памяти), процесс не может быть запущен до тех пор, пока ресурсы не будут удовлетворены. В это время процесс также будет приостановлен, и система планирует другие процессы для запуска.
  3. Когда процесс активно приостанавливается через функцию сна, он, естественно, будет перенесен.
  4. Когда запущен процесс с более высоким приоритетом, чтобы обеспечить работу процесса с более высоким приоритетом, текущий процесс будет приостановлен и запущен процессом с более высоким приоритетом.
  5. Когда происходит аппаратное прерывание, процесс в ЦП приостанавливается этим прерыванием, и вместо этого выполняется подпрограмма обслуживания прерывания в ядре.

Как только возникает проблема с производительностью переключения контекста, она вызывается описанным выше сценарием.

Четыре, переключение контекста потока

Процесс является основной единицей распределения ресурсов, а поток является основной единицей планирования ресурсов.

Планирование задач в ядре, фактический объект планирования является потоком, и процесс предоставляет потоку только ресурсы, такие как виртуальная память и глобальные переменные.

  • Когда процесс имеет только один поток, процесс можно считать равным потоку.
  • Когда процесс имеет несколько потоков, эти потоки будут использовать одну и ту же виртуальную память, глобальные переменные и другие ресурсы. Эти ресурсы не нужно изменять во время переключения контекста.
  • Потоки также имеют свои собственные личные данные, такие как стеки и регистры, которые необходимо сохранять во время переключения контекста.

Переключение контекста потока можно разделить на два случая

  1. Два потока до и после принадлежат разным процессам. В это время, поскольку ресурсы не используются совместно, процесс переключения такой же, как и процесс переключения контекста.
  2. Два потока до и после принадлежат одному и тому же процессу. В это время, поскольку виртуальная память является общей, при переключении ресурсы виртуальной памяти остаются неизменными, и только не общие данные, такие как личные данные и регистры потока, должны переключаться.
Читайте также:  Linux отправить post запрос

Поэтому переключение потоков в одном и том же процессе потребляет меньше ресурсов, чем переключение между несколькими процессами, и это также является преимуществом многопоточности (пула потоков) вместо нескольких процессов.

Пять, прерывание переключения контекста

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

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

Контекст прерывания: включает только состояние, необходимое для выполнения программы обслуживания прерываний состояния ядра, включая регистры ЦП, стек ядра, параметры аппаратного прерывания и т. Д.

Для того же ЦП обработка прерываний имеет более высокий приоритет, чем процессы, поэтому переключение контекста прерывания не происходит одновременно с переключением контекста процесса. Кроме того, поскольку прерывания прерывают планирование и выполнение обычных процессов, большинство обработчиков прерываний являются короткими и лаконичными, поэтому выполнение может завершиться как можно быстрее.

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

6. Резюме

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

Источник

Оцените статью
Adblock
detector