Перейти к основному содержимому
Informatik.uz
Бакалавриат · 3-й курсГлава 1. Операционные системы

Процессы и потоки

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

Тема 1 из 2Чтение: 2 минОбновлено: 27 октября 2026 г.
Список тем (1 из 2)

Глава 1. Операционные системы

  1. 1Процессы и потоки

Глава 2. Сетевые технологии

  1. 2Протокол HTTP и REST API

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

За время жизни процесс проходит несколько состояний: новый, готовый, выполняющийся, ожидающий (например, завершения операции с диском) и завершённый. Время процессора между процессами распределяет планировщик (scheduler); один из простейших алгоритмов — Round Robin, при котором каждому процессу по очереди выделяется короткий квант времени. Передача процессора от одного процесса другому называется переключением контекста (context switch): регистры и PCB сохраняются, а данные нового процесса восстанавливаются, и всё это время полезная работа не выполняется.

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

Общая память удобна, но опасна: если два потока одновременно изменяют одну переменную, результат начинает зависеть от порядка выполнения — это называется состоянием гонки (race condition). Например, операция counter += 1 на самом деле состоит из трёх шагов: прочитать значение, увеличить его на единицу и записать; если два потока перемешают эти шаги, одно увеличение потеряется. Для защиты применяют средства синхронизации — мьютексы и семафоры, но их неправильное использование приводит к взаимной блокировке (deadlock): каждый поток ждёт ресурс, который удерживает другой.

Главное

  • Программа — пассивный код на диске, а процесс — её выполняемый экземпляр со своим адресным пространством.
  • Процесс проходит состояния: новый, готовый, выполняющийся, ожидающий и завершённый; переключение контекста требует времени.
  • Потоки разделяют память и файлы процесса, но у каждого есть свой стек и регистры.
  • Изменение общих данных без синхронизации приводит к состоянию гонки; от него защищают мьютексы и семафоры.
  • Неправильная синхронизация может вызвать взаимную блокировку (deadlock).

Практические задания

  1. В терминале Linux выполните ps aux (в Windows — «Диспетчер задач») и запишите в таблицу PID, состояние (STAT) и занимаемую память (RSS) не менее чем пяти процессов.
  2. На Python с помощью threading создайте два потока: каждый читает общую переменную counter, после time.sleep(0) увеличивает значение на единицу и записывает его обратно, повторяя это 10000 раз. Убедитесь, что итог меньше ожидаемых 20000, а затем исправьте ошибку с помощью threading.Lock.
  3. Командой ps -eLf (столбец NLWP показывает число потоков) выясните, из скольких потоков состоят процессы браузера, и объясните, почему браузер часто открывает каждую вкладку в отдельном процессе.

Вопросы для закрепления

Проверьте себя: сначала подумайте, потом откройте ответ.

  1. 1В чём главное отличие процесса от потока?
    У процесса собственное адресное пространство, он изолирован от других процессов; потоки одного процесса разделяют память и открытые файлы, и только стек и регистры у каждого свои.
  2. 2Почему переключение контекста может снижать производительность?
    Каждый раз состояние процессора (регистры, PCB) сохраняется, а чужое восстанавливается, при этом данные в кэше могут оказаться бесполезными; всё это время полезная работа не выполняется.
  3. 3Когда возникает состояние гонки и как его предотвратить?
    Оно возникает, когда два или более потоков изменяют общие данные без синхронизации; предотвращается защитой критической секции мьютексом или семафором.

Пройдено тем: 0 из 2

Войти и отметить