Что такое облегченный процесс
4.1.1 Понятие процесса
С каждым процессом связывается его адресное пространство, из которого он может читать и в которое он может писать данные.
Адресное пространство содержит:
данные к программе
С каждым процессом связывается набор регистров, например:
Во многих операционных системах вся информация о каждом процессе, дополнительная к содержимому его собственного адресного пространства, хранится в таблице процессов операционной системы.
Некоторые поля таблицы:
Время начала процесса
Использованное процессорное время
Указатель на текстовый сегмент
Указатель на сегмент данных
Указатель на сегмент стека
4.1.2 Модель процесса
В многозадачной системе реальный процессор переключается с процесса на процесс, но для упрощения модели рассматривается набор процессов, идущих параллельно (псевдопараллельно).
Рассмотрим схему с четырьмя работающими программами.
В каждый момент времени активен только один процесс
С права представлены параллельно работающие процессы, каждый со своим счетчиком команд. Разумеется, на самом деле существует только один физический счетчик команд, в который загружается логический счетчик команд текущего процесса. Когда время, отведенное текущему процессу, заканчивается, физический счетчик команд сохраняется в памяти, в логическом счетчике команд процесса.
4.1.3 Создание процесса
Три основных события, приводящие к созданию процессов (вызов fork или CreateProcess):
Работающий процесс подает системный вызов на создание процесса
Запрос пользователя на создание процесса
Во всех случаях, активный текущий процесс посылает системный вызов на создание нового процесса.
4.1.4 Завершение процесса
Четыре события, приводящие к остановке процесса (вызов exit или ExitProcess):
Плановое завершение (окончание выполнения)
Плановый выход по известной ошибке (например, отсутствие файла)
Выход по неисправимой ошибке (ошибка в программе)
Уничтожение другим процессом
Таким образом, приостановленный процесс состоит из собственного адресного пространства, обычно называемого образом памяти (core image), и компонентов таблицы процессов (в числе компонентов и его регистры).
4.1.5 Иерархия процессов
В UNIX системах заложена жесткая иерархия процессов. Каждый новый процесс созданный системным вызовом fork, является дочерним к предыдущему процессу. Дочернему процессу достаются от родительского переменные, регистры и т.п. После вызова fork, как только родительские данные скопированы, последующие изменения в одном из процессов не влияют на другой, но процессы помнят о том, кто является родительским.
Дерево процессов для систем UNIX
4.1.6 Состояние процессов
Три состояния процесса:
Выполнение (занимает процессор)
Готовность (процесс временно приостановлен, чтобы позволить выполняться другому процессу)
Ожидание (процесс не может быть запущен по своим внутренним причинам, например, ожидая операции ввода/вывода)
Возможные переходы между состояниями.
1. Процесс блокируется, ожидая входных данных
2. Планировщик выбирает другой процесс
3. Планировщик выбирает этот процесс
4. Поступили входные данные
Переходы 2 и 3 вызываются планировщиком процессов операционной системы, так что сами процессы даже не знают о этих переходах. С точки зрения самих процессов есть два состояния выполнения и ожидания.
На серверах для ускорения ответа на запрос клиента, часто загружают несколько процессов в режим ожидания, и как только сервер получит запрос, процесс переходит из «ожидания» в «выполнение». Этот переход выполняется намного быстрее, чем запуск нового процесса.
4.2 Потоки (нити, облегченный процесс)
4.2.1 Понятие потока
Каждому процессу соответствует адресное пространство и одиночный поток исполняемых команд. В многопользовательских системах, при каждом обращении к одному и тому же сервису, приходится создавать новый процесс для обслуживания клиента. Это менее выгодно, чем создать квазипараллельный поток внутри этого процесса с одним адресным пространством.
Сравнение многопоточной системы с однопоточной
Потоки (threads) и многопоточное выполнение программ (multi-threading)
Потоки в Windows 2000
Как уже отмечалось, в системе Windows реализована модель многопоточности «один / один». Каждый поток содержит:
Потоки в Linux
В системе Linux потоки называются tasks (задачами),а не threads. Поток создается системным вызовом clone (). Данный системный вызов позволяет дочерней задаче использовать общее адресное пространство с родительской задачей (процессом).
Потоки в Java
Как уже отмечалось, Java – первая платформа для разработки программ, в которой многопоточность поддержана на уровне языка и базовых библиотек. Потоки в Java могут быть созданы следующими способами:
Возможные состояния потоков в Java изображены на рис. 10.7. Подобно потокам в ОС, поток в Java создается и находится в состоянии новый, затем – выполняемый ; при вызове методов типа wait, sleep и др. поток переходит в состояние ожидания; при завершении метода run поток завершается.
Ключевые термины
Mac C- threads – пользовательские потоки в системе MacOS.
Solaris threads – пользовательские потоки в ОС Solaris.
Задача (task) – название потока в Linux.
Исключение (exception) – высокоуровневый механизм обработки ошибочных ситуаций в объектно-ориентированных языках и операционных системах.
Модель многопоточности – способ отображения пользовательских потоков в потоки ядра.
Модель один / один – модель многопоточности, при которой каждый пользовательский поток отображается в один определенный поток ядра.
Облегченный процесс (lightweight process) – процесс, работающий в общем пространстве виртуальной памяти с процессом-родителем.
Сигналы (в UNIX ) – низкоуровневый механизм обработки ошибочных ситуаций.
«Тяжеловесный» (heavyweight) процесс – название классического процесса, работающего в собственном адресном пространстве, в противоположность облегченному процессу.
Краткие итоги
Многопоточность (multi- threading ) – современное направление программирования, особенно актуальное в связи с широким распространением параллельных компьютерных архитектур. Поток – особый вид процесса, выполняемый в общем адресном пространстве с процессом-родителем. Поток характеризуется своим стеком, потоком управления и значениями регистров. Облегченный процесс (lightweight process) – механизм, с помощью которого реализуются потоки в ОС.
Архитектура потоков – многоуровневая: потоки пользовательского уровня реализуются с помощью системных потоков (потоков ядра). Существуют различные модели многопоточности (способы отображения пользовательских потоков в системные) – один-один, один-много, много-один.
Многопоточность ставит ряд интересных проблем: семантика системных вызовов fork и exec ; прекращение потоков; обработка сигналов ; структуризация потоков в группы; поддержка локальных данных потока ( TLS ); синхронизация потоков ; тупики (взаимная блокировка потоков) и их предотвращение.
Потоки в ОС Solaris отличаются тем, что явно присутствует понятие облегченного процесса, наряду с понятиями пользовательского и системного потоков. Каждый традиционный процесс хранит список созданных в нем облегченных процессов. Используется модель многопоточности «много-много».
В Windows 2000 используется модель многопоточности «один-один». Каждый поток содержит свой номер, набор регистров, отдельные стеки для пользовательских и системных процедур, локальную память потока ( TLS ).
Потоки (threads) и многопоточное выполнение программ (multi-threading)
Потоки в Windows 2000
Как уже отмечалось, в системе Windows реализована модель многопоточности «один / один». Каждый поток содержит:
Потоки в Linux
В системе Linux потоки называются tasks (задачами),а не threads. Поток создается системным вызовом clone (). Данный системный вызов позволяет дочерней задаче использовать общее адресное пространство с родительской задачей (процессом).
Потоки в Java
Как уже отмечалось, Java – первая платформа для разработки программ, в которой многопоточность поддержана на уровне языка и базовых библиотек. Потоки в Java могут быть созданы следующими способами:
Возможные состояния потоков в Java изображены на рис. 10.7. Подобно потокам в ОС, поток в Java создается и находится в состоянии новый, затем – выполняемый ; при вызове методов типа wait, sleep и др. поток переходит в состояние ожидания; при завершении метода run поток завершается.
Ключевые термины
Mac C- threads – пользовательские потоки в системе MacOS.
Solaris threads – пользовательские потоки в ОС Solaris.
Задача (task) – название потока в Linux.
Исключение (exception) – высокоуровневый механизм обработки ошибочных ситуаций в объектно-ориентированных языках и операционных системах.
Модель многопоточности – способ отображения пользовательских потоков в потоки ядра.
Модель один / один – модель многопоточности, при которой каждый пользовательский поток отображается в один определенный поток ядра.
Облегченный процесс (lightweight process) – процесс, работающий в общем пространстве виртуальной памяти с процессом-родителем.
Сигналы (в UNIX ) – низкоуровневый механизм обработки ошибочных ситуаций.
«Тяжеловесный» (heavyweight) процесс – название классического процесса, работающего в собственном адресном пространстве, в противоположность облегченному процессу.
Краткие итоги
Многопоточность (multi- threading ) – современное направление программирования, особенно актуальное в связи с широким распространением параллельных компьютерных архитектур. Поток – особый вид процесса, выполняемый в общем адресном пространстве с процессом-родителем. Поток характеризуется своим стеком, потоком управления и значениями регистров. Облегченный процесс (lightweight process) – механизм, с помощью которого реализуются потоки в ОС.
Архитектура потоков – многоуровневая: потоки пользовательского уровня реализуются с помощью системных потоков (потоков ядра). Существуют различные модели многопоточности (способы отображения пользовательских потоков в системные) – один-один, один-много, много-один.
Многопоточность ставит ряд интересных проблем: семантика системных вызовов fork и exec ; прекращение потоков; обработка сигналов ; структуризация потоков в группы; поддержка локальных данных потока ( TLS ); синхронизация потоков ; тупики (взаимная блокировка потоков) и их предотвращение.
Потоки в ОС Solaris отличаются тем, что явно присутствует понятие облегченного процесса, наряду с понятиями пользовательского и системного потоков. Каждый традиционный процесс хранит список созданных в нем облегченных процессов. Используется модель многопоточности «много-много».
В Windows 2000 используется модель многопоточности «один-один». Каждый поток содержит свой номер, набор регистров, отдельные стеки для пользовательских и системных процедур, локальную память потока ( TLS ).
Архитектура ОС. Управление процессами: Основные понятия. Семафоры и мониторы
Ключевые термины
Атомарная (atomic) операция – операция, такая, что, если один из параллельных процессов начал ее выполнять, никакой другой процесс до ее завершения не может также начать выполнять эту же операцию над теми же данными.
Графическая оболочка – подсистема ОС, реализующая графический пользовательский интерфейс пользователей и системных администраторов с операционной системой.
Монитор (как средство синхронизации) – многовходовый модуль в котором определены общие для параллельных процесов данные и набор операций (в виде процедур) над ними, таких, что в каждый момент времени не более чем один из параллельных процессов может выполнять какую-либо операцию монитора.
Облегченный процесс (lightweight process) – процесс, выполняемый в том же пространстве виртуальной памяти, что и процесс-родитель.
Стек – системный резидентный массив в памяти, создаваемый операционной системой для поддержки выполнения процедур некоторого процесса и хранящий их локальные данные и связующую информацию между ними.
Краткие итоги
В данной и следующей лекциях рассмотрена архитектура операционных систем, включая следующие вопросы: компоненты системы; cервисы (службы) системы; системные вызовы; системные программы ; cтруктура системы; виртуальные машины ; проектирование и реализация системы; генерация системы.
Процесс – программа пользователя при ее исполнении. ОС поддерживает средства создания, удаления, синхронизации, приостановки и возобновления, взаимодействия процессов. Облегченный процесс исполняется в том же пространстве виртуальной памяти, что и процесс-родитель.
Классические средства синхронизации процессов – семафоры и мониторы. Семафор может находиться в открытом и закрытом состояниях и в закрытом состоянии блокирует все, кроме одного, процессы, которым требуется доступ к общему ресурсу. Монитор содержит описание общих для процессов данных и операций над ними, таких, что в каждый момент не более чем один параллельный процесс может выполнять какую-либо операцию монитора.
Потоки (threads) и многопоточное выполнение программ (multi-threading)
Потоки в Windows 2000
Как уже отмечалось, в системе Windows реализована модель многопоточности «один / один». Каждый поток содержит:
Потоки в Linux
В системе Linux потоки называются tasks (задачами),а не threads. Поток создается системным вызовом clone (). Данный системный вызов позволяет дочерней задаче использовать общее адресное пространство с родительской задачей (процессом).
Потоки в Java
Как уже отмечалось, Java – первая платформа для разработки программ, в которой многопоточность поддержана на уровне языка и базовых библиотек. Потоки в Java могут быть созданы следующими способами:
Возможные состояния потоков в Java изображены на рис. 10.7. Подобно потокам в ОС, поток в Java создается и находится в состоянии новый, затем – выполняемый ; при вызове методов типа wait, sleep и др. поток переходит в состояние ожидания; при завершении метода run поток завершается.
Ключевые термины
Mac C- threads – пользовательские потоки в системе MacOS.
Solaris threads – пользовательские потоки в ОС Solaris.
Задача (task) – название потока в Linux.
Исключение (exception) – высокоуровневый механизм обработки ошибочных ситуаций в объектно-ориентированных языках и операционных системах.
Модель многопоточности – способ отображения пользовательских потоков в потоки ядра.
Модель один / один – модель многопоточности, при которой каждый пользовательский поток отображается в один определенный поток ядра.
Облегченный процесс (lightweight process) – процесс, работающий в общем пространстве виртуальной памяти с процессом-родителем.
Сигналы (в UNIX ) – низкоуровневый механизм обработки ошибочных ситуаций.
«Тяжеловесный» (heavyweight) процесс – название классического процесса, работающего в собственном адресном пространстве, в противоположность облегченному процессу.
Краткие итоги
Многопоточность (multi- threading ) – современное направление программирования, особенно актуальное в связи с широким распространением параллельных компьютерных архитектур. Поток – особый вид процесса, выполняемый в общем адресном пространстве с процессом-родителем. Поток характеризуется своим стеком, потоком управления и значениями регистров. Облегченный процесс (lightweight process) – механизм, с помощью которого реализуются потоки в ОС.
Архитектура потоков – многоуровневая: потоки пользовательского уровня реализуются с помощью системных потоков (потоков ядра). Существуют различные модели многопоточности (способы отображения пользовательских потоков в системные) – один-один, один-много, много-один.
Многопоточность ставит ряд интересных проблем: семантика системных вызовов fork и exec ; прекращение потоков; обработка сигналов ; структуризация потоков в группы; поддержка локальных данных потока ( TLS ); синхронизация потоков ; тупики (взаимная блокировка потоков) и их предотвращение.
Потоки в ОС Solaris отличаются тем, что явно присутствует понятие облегченного процесса, наряду с понятиями пользовательского и системного потоков. Каждый традиционный процесс хранит список созданных в нем облегченных процессов. Используется модель многопоточности «много-много».
В Windows 2000 используется модель многопоточности «один-один». Каждый поток содержит свой номер, набор регистров, отдельные стеки для пользовательских и системных процедур, локальную память потока ( TLS ).