CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 3. Процессы. Начало
Сегодня поговорим о процессах операционной системы в контексте многозадачности.
Процесс - это экземпляр компьютерной программы. Если компьютерная программа представляет собой некий исполняемый файл на диске с инструкциями для процессора то процесс это экземпляр программы (а следовательно всех ее инструкций) в памяти. Из памяти инструкции передаются CPU.
Что из себя представляет процесс?
- Область виртуальной памяти с инструкциями для CPU.
- Ресурсы операционной системы связанные с данным процессом. (В основном речь про файлы / файловые дескрипторы)
- Текущее состояние программы с точки зрения CPU и его регистров (так как процессы могут не просто ставиться на паузу планировщиком OS а вытесняться из памяти на диск (swap / файл подкачки) нам требуется хранить state чтобы потом было к чему возвращаться.
В каких состояниях процесс может находиться?
- Создан
- Ожидание (ждет когда планировщик выделит процессорное время). В этом состоянии процесс может быть вытеснен в SWAP.
- Исполнение (связанный с процессом CPU молотит инструкции)
- Заблокирован (происходит когда нам попалась инструкция которой нужно взаимодействовать с чем то внешним например файл на локальном диске / ожидание ввода вывода / межпроцессное взаимодействие). В этом состоянии процесс может быть вытеснен в SWAP.
- Завершен. Процесс может завершиться сам с неким кодом ответа, либо его завершит ОС принудительно. Ресурсы связанные с процессором будут удалены.
Самым интересным для нас как разработчиков является состояние блокировки, так как именно код написанный нами приводит процесс в это состояние. И в наших интересах написать программу так чтобы она могла в случае попадания в такой статус могла внутри себя переключаться на другие ветви исполнения и делать полезную работу.
P.S. А что такое виртуальная память? Почему бы не обращаться напрямую?
Техника виртуальной памяти позволяет:
- Добавить дополнительный способ хранения состояний процессов (например упомянутый ранее SWAP, который по сути диск). За счет этого можем позволить ОС работать с большим количеством процессов. И выделять прцоессам больше памяти чем доступно в RAM.
- изолировать процессы друг от друга за счет выдачи непересекающихся виртуальных областей памяти.
- скрыть от разработчика ньюансы работы с памятью, например механики перемещения из RAM на диск и обратно. Процесс не знает вообще ничего о том какая модель памяти на компьютере.
Для большинства задач плюсы от использования виртуальной памяти перевешивают недостатки поэтому в большинстве ОС это работает из коробки. Но также важно отметить что есть сценарии в которых оверхэд на эту абстракцию настолько высок что взаимодействие с памятью идет напрямую (например системы реального времени и микроконтролеры).
На этом на сегодня всё, увидимся завтра, продолжим погружаться в процессы, уже c точки зрения кода😊
-----
Напоминаю, что моя личка открыта для всех, а если в личку неудобно то можно написать через Google Forms.
Предлагайте темы для будущих постов, задавайте вопросы или оставляйте отзывы/пожелания.😊
Post #308
3.37K
Евгений Козлов пишет про IT CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 2 - Bonus Перед тем как переходить от железяк к программированию для полноты картины стоит упомянуть технологию Hyper Threading от Intel с ее логическими ядрами. В чем ее суть?…
- 👍 22
- 🔥 10
- ❤ 5