Struchkov Mark
bd6b7c1492
All checks were successful
continuous-integration/drone/push Build is passing
54 lines
5.0 KiB
Markdown
54 lines
5.0 KiB
Markdown
---
|
||
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) -->
|