digital-garden/dev/fundamental/Переключение контекста.md
Struchkov Mark bd6b7c1492
All checks were successful
continuous-integration/drone/push Build is passing
Дочерние заметки
2024-09-14 23:38:42 +03:00

54 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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]]
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->