--- aliases: - context switch - переключению контекстов - переключение контекстов - переключения контекста - переключению контекста tags: - maturity/🌱 date: - - 2024-01-28 zero-link: - "[[../../meta/zero/00 Разработка|00 Разработка]]" parents: - "[[Многозадачность ЦПУ]]" linked: --- Переключение контекстов происходит, когда [[../../../../knowledge/dev/pc/Операционная система|операционная система]] останавливает выполнение одной задачи и начинает выполнение другой ([[Concurrency|Concurrency]]). Этот процесс включает в себя сохранение текущего состояния задачи (контекста), включая значения регистров процессора, указатель инструкций и другие связанные с задачей данные, чтобы впоследствии можно было возобновить выполнение задачи с того места, где она была остановлена. Этот процесс происходит настолько быстро и эффективно, что пользователи и приложения воспринимают систему как способную выполнять множество операций одновременно, несмотря на то, что физически одно [[Ядро процессора|ядро]] процессора в данный момент может выполнять только один поток. В настоящее время все программы запускаются в так называемом "защищенном режиме", когда одна программа не имеет доступа к данным другой программы. В этом режиме указатели программы содержать не настоящий адрес на область памяти, а виртуальный, который маппится на настоящий, таким образом в двух разных программах может использоваться один и тот же адрес памяти, но на самом деле это будут разные области памяти. В защищенном режиме каждая программа считает, что выполняется только она, про другие программы она не знает. Когда программа не может дальше выполняться, то она сохраняет свое состояние и уступает ресурсы [[Центральный процессор|ЦПУ]] другой программе. - Сохранение регистров процессора - Сохранение общей информации: pid, tid, uid. gid, euid, egid и т.д. - Сохранение состояния процессора/потока - Сохранение прав доступа - Сохранение используемых потоком ресурсов и блокировок - Сохранение счетчиков использования ресурсов - Сохранение регионов памяти, выделенных процессору - Очистка конвейера команд и данных процессора - Очистка TLB, отвечающая за страничное отображение линейных адресов на физические Переключение контекста занимает какое-то время (~1 мкс). Для примера выполнение одной строчки кода занимает ~0.5 нс. Переключение контекста может происходить как у процессов, так и у потоков. ![](../../meta/files/images/Pasted%20image%2020240128143015.png) Чем больше [процессов](Процесс%20ОС.md), тем больше будет переключений. Время на процессы и паузы будут не измены, но пауз станет больше. *** ## Мета информация **Область**:: [[../../meta/zero/00 Разработка|00 Разработка]] **Родитель**:: [[Многозадачность ЦПУ|Многозадачность ЦПУ]] **Источник**:: **Автор**:: **Создана**:: [[2024-01-28]] ### Дополнительные материалы - [[../../meta/zero/00 Архитектура ЭВМ|00 Архитектура ЭВМ]] - [[Concurrency|Concurrency]] ### Дочерние заметки ```dataview LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) ```