Загрузка данных


Продолжаю. Ниже **Часть 2** — тоже в том же стиле, чтобы просто вставлять в Word подряд после первой части. Здесь я добавил блоки про планирование, очереди, переключение контекста, межпроцессное взаимодействие и синхронизацию, чтобы реферат реально рос по объёму.[1][2][3][4]

***

## Планирование процессов

Одной из важнейших задач операционной системы является планирование процессов. Поскольку процессор не может одновременно физически выполнять бесконечное количество задач, система должна решать, какой процесс и в какой момент получит доступ к вычислительным ресурсам. Этой задачей занимается специальная часть операционной системы — планировщик.

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

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

## Очереди процессов

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

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

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

## Диспетчеризация

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

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

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

## Алгоритмы планирования

Существует несколько базовых алгоритмов планирования процессов. Одним из самых простых является FIFO, или First In First Out. В этом случае процесс, который первым попал в очередь, первым и получает процессорное время. Такой метод прост для реализации, но не всегда эффективен, так как длинные задачи могут задерживать короткие.

Другой распространённый алгоритм — Round Robin. При этом каждому процессу выделяется небольшой квант времени, после чего управление передается следующему процессу в очереди. Если процесс не завершился за свой квант, он возвращается в конец очереди. Такой подход обеспечивает более равномерное распределение ресурсов и хорошо подходит для интерактивных систем.

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

## Вытесняющая и невытесняющая многозадачность

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

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

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

## Переключение контекста

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

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

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

## Межпроцессное взаимодействие

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

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

Межпроцессное взаимодействие особенно важно в серверных системах, сетевых приложениях и распределённых вычислениях. Например, один процесс может принимать запросы от пользователя, а другой — обрабатывать данные и возвращать результат. Такое разделение повышает гибкость системы, но требует хорошей организации обмена данными.

## Синхронизация процессов и потоков

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

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

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

## Взаимоблокировки

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

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

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

***

Если хочешь, я сразу продолжу **Частью 3** — там будут **потоки в современных ОС, модели потоков, преимущества и недостатки многопоточности, а также практические примеры**, чтобы реферат уверенно приближался к 30 страницам.

Источники
[1] Планирование процессов - Основы операционных систем https://intuit.ru/studies/courses/2192/31/lecture/972
[2] Основы современных операционных систем. Лекция 8 https://intuit.ru/studies/courses/641/497/lecture/11280?page=4
[3] [PDF] Операционные системы: взаимодействие процессов. https://iit.cs.msu.ru/media/media/educational_materials/Operatsionnye_sistemy_vzaimodeystvie_protsessov.pdf
[4] Процессы ОС и их планирование https://www.youtube.com/watch?v=v7gsUPKcCQc
[5] Межпроцессное взаимодействие — Википедия https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5
[6] Планирование процессов - Основы операционных систем https://intuit.ru/studies/courses/2192/31/lecture/972?page=2
[7] 42)Диспетчеризация процессов. Планировщики процессов. https://studfile.net/preview/7352308/page:5/
[8] Межпроцессное взаимодействие (IPC) в ОС https://www.guru99.com/ru/inter-process-communication-ipc.html
[9] Операционные системы, урок 8: Планирование выполнения задач. Диспетчеризация. | Хекслет https://www.youtube.com/watch?v=jFUQp9DkRL4
[10] Архитектура операционных систем. Процессы и потоки - online presentation https://en.ppt-online.org/190349