Процессы и потоки
Вы разберёте разницу между программой и процессом, состояния процессов, распределение времени процессора и потоки. Познакомитесь с опасностями параллельной работы с общей памятью: состоянием гонки и взаимной блокировкой.
Список тем (1 из 2)
Глава 1. Операционные системы
Глава 2. Сетевые технологии
Программа — это пассивный набор кода и данных на диске, а процесс — её исполняемый экземпляр. Операционная система выделяет каждому процессу отдельное адресное пространство (код, данные, куча и стек) и список открытых файлов, а сведения о процессе хранит в блоке управления процессом (PCB). Благодаря этому один процесс не может напрямую изменить память другого, что обеспечивает устойчивость и безопасность системы.
За время жизни процесс проходит несколько состояний: новый, готовый, выполняющийся, ожидающий (например, завершения операции с диском) и завершённый. Время процессора между процессами распределяет планировщик (scheduler); один из простейших алгоритмов — Round Robin, при котором каждому процессу по очереди выделяется короткий квант времени. Передача процессора от одного процесса другому называется переключением контекста (context switch): регистры и PCB сохраняются, а данные нового процесса восстанавливаются, и всё это время полезная работа не выполняется.
Поток (thread) — это единица выполнения внутри процесса. Потоки одного процесса совместно используют адресное пространство и открытые файлы, но у каждого есть собственные стек, регистры и счётчик команд. Поэтому создавать потоки и переключаться между ними дешевле, чем для процессов, а обмен данными проще. На многоядерном процессоре потоки действительно работают параллельно, а на одном ядре выполняются поочерёдно.
Общая память удобна, но опасна: если два потока одновременно изменяют одну переменную, результат начинает зависеть от порядка выполнения — это называется состоянием гонки (race condition). Например, операция counter += 1 на самом деле состоит из трёх шагов: прочитать значение, увеличить его на единицу и записать; если два потока перемешают эти шаги, одно увеличение потеряется. Для защиты применяют средства синхронизации — мьютексы и семафоры, но их неправильное использование приводит к взаимной блокировке (deadlock): каждый поток ждёт ресурс, который удерживает другой.
Главное
- Программа — пассивный код на диске, а процесс — её выполняемый экземпляр со своим адресным пространством.
- Процесс проходит состояния: новый, готовый, выполняющийся, ожидающий и завершённый; переключение контекста требует времени.
- Потоки разделяют память и файлы процесса, но у каждого есть свой стек и регистры.
- Изменение общих данных без синхронизации приводит к состоянию гонки; от него защищают мьютексы и семафоры.
- Неправильная синхронизация может вызвать взаимную блокировку (deadlock).
Практические задания
- В терминале Linux выполните
ps aux(в Windows — «Диспетчер задач») и запишите в таблицу PID, состояние (STAT) и занимаемую память (RSS) не менее чем пяти процессов. - На Python с помощью
threadingсоздайте два потока: каждый читает общую переменнуюcounter, послеtime.sleep(0)увеличивает значение на единицу и записывает его обратно, повторяя это 10000 раз. Убедитесь, что итог меньше ожидаемых 20000, а затем исправьте ошибку с помощьюthreading.Lock. - Командой
ps -eLf(столбецNLWPпоказывает число потоков) выясните, из скольких потоков состоят процессы браузера, и объясните, почему браузер часто открывает каждую вкладку в отдельном процессе.
Вопросы для закрепления
Проверьте себя: сначала подумайте, потом откройте ответ.
1В чём главное отличие процесса от потока?Показать ответСкрыть ответ
У процесса собственное адресное пространство, он изолирован от других процессов; потоки одного процесса разделяют память и открытые файлы, и только стек и регистры у каждого свои.2Почему переключение контекста может снижать производительность?Показать ответСкрыть ответ
Каждый раз состояние процессора (регистры, PCB) сохраняется, а чужое восстанавливается, при этом данные в кэше могут оказаться бесполезными; всё это время полезная работа не выполняется.3Когда возникает состояние гонки и как его предотвратить?Показать ответСкрыть ответ
Оно возникает, когда два или более потоков изменяют общие данные без синхронизации; предотвращается защитой критической секции мьютексом или семафором.
Войдите на сайт
Слайды и PDF доступны только зарегистрированным пользователям: и просмотр, и скачивание. Вход бесплатный.
Войдите на сайт
Слайды и PDF доступны только зарегистрированным пользователям: и просмотр, и скачивание. Вход бесплатный.
Пройдено тем: 0 из 2
Войти и отметить