- •Вопрос 1. Что такое ос
- •Вопрос 2. Краткая история эволюции вычислительных систем
- •Вопрос 3. Аппаратное обеспечение компьютера
- •Вопрос 4. Основные понятия, концепции ос
- •Вопрос 5. Архитектурные особенности ос
- •Вопрос 6. Классификация ос
- •Вопрос 7. Системные вызовы
- •Вопрос 8. Процессы
- •Вопрос 9. Потоки
- •Потоки в posix
- •Вопрос 10. Операции над процессами и связанные с ними понятия
- •Набор операций
- •Вопрос 11. Взаимное исключение с активным ожиданием
- •Вопрос 12. Семафоры. Решение проблемы producer-consumer с помощью семафоров
- •Вопрос 13. Мьютексы. Решение проблемы producer-consumer с помощью мьютексов
- •Вопрос 14. Мониторы Мониторы
- •Вопрос 15. Сообщения. Решение проблемы producer-consumer с помощью сообщений
- •Вопрос 16. Барьеры
- •Вопрос 17. Планирование процессов. Категории и задачи планирования
- •18. Алгоритмы планирования в пакетных системах Вытесняющее и невытесняющее планирование
- •Алгоритмы планирования
- •Вопрос 19. Алгоритмы планирования в интерактивных системах
- •Вопрос 20. Планирование потоков
- •Вопрос 21. Задача обедающих философов Постановка задачи
- •Проблемы
- •Решение задачи Официант
- •Иерархия ресурсов
- •Решение на основе монитора
- •Вопрос 22. Задача читателей-писателей
- •Вопрос 23. Понятие взаимоблокировки. Выгружаемый и невыгружаемый ресурс
- •Вопрос 24. Условия возникновения взаимоблокировки. Граф распределения ресурсов
- •2 Моделирование взаимоблокировок
- •Вопрос 25. Поиск взаимоблокировки при использовании одного ресурса каждого типа
- •Вопрос 26. Поиск взаимоблокировки при использовании нескольких ресурсов каждого типа
- •Вопрос 27. Алгоритмы восстановления работоспособности системы после обнаружения взаимоблокировки
- •Вопрос 28. Модель траектории ресурсов при уклонении от взаимоблокировок
- •Вопрос 29. Безопасное и небезопасное состояние при уклонении от взаимоблокировок
- •Вопрос 30. Алгоритм банкира для одного типа ресурса
- •Вопрос 31. Алгоритм банкира для нескольких типов ресурсов
- •Вопрос 32. Алгоритмы предотвращения взаимоблокировки
Вопрос 7. Системные вызовы
- управление процессами
- управление файлами и каталогами
- остальные
Системный вызов – интерфейс программ с ОС в виде вызовов процедур, методов или макросов, являющихся частью ОС. Способы передачи параметров системному вызову: через регистр, через таблицу, адрес которой в регистре, или через стек. Системные вызовы выполняют управление процессами, файлами, устройствами, выдают сопровождающую информацию, осуществляют коммуникации.
Управление процессами
Для создания процессов используются два системных вызова: fork() и exec. fork() создает новое адресное пространство, которое полностью идентично адресному пространству основного процесса. После выполнения этого системного вызова мы получаем два абсолютно одинаковых процесса - основной и порожденный. Функция fork() возвращает 0 в порожденном процессе и PID (Process ID - идентификатор порожденного процесса) - в основном. PID - это целое число.
Теперь, когда мы уже создали процесс, мы можем запустить программу с помощью вызова exec. Параметрами функции exec является имя выполняемого файла и, если нужно, параметры, которые будут переданы этой программе. В адресное пространство порожденного с помощью fork() процесса будет загружена новая программа и ее выполнение начнется с точки входа (адрес функции main).
Управление файлами и каталогами
Потоковая передача информации может осуществляться не только между процессами, но и между процессом и устройством ввода-вывода, например между процессом и диском, на котором данные представляются в виде файла. Поскольку понятие файла должно быть знакомо изучающим этот курс, а системные вызовы, использующиеся для потоковой работы с файлом, во многом соответствуют системным вызовам, применяемым для потокового общения процессов, мы начнем наше рассмотрение именно с механизма потокового обмена между процессом и файлом.
Как мы надеемся, из курса программирования на языке C вам известны функции работы с файлами из стандартной библиотеки ввода-вывода, такие как fopen(), fread(), fwrite(), fprintf(), fscanf(), fgets() и т.д. Эти функции входят как неотъемлемая часть в стандарт ANSI на язык C и позволяют программисту получать информацию из файла или записывать ее в файл при условии, что программист обладает определенными знаниями о содержимом передаваемых данных. Так, например, функция fgets() используется для ввода из файла последовательности символов, заканчивающейся символом '\n' – перевод каретки. Функция fscanf() производит ввод информации, соответствующей заданному формату, и т. д. С точки зрения потоковой модели операции, определяемые функциями стандартной библиотеки ввода-вывода, не являются потоковыми операциями, так как каждая из них требует наличия некоторой структуры передаваемых данных.
Вопрос 8. Процессы
- Создание и завершение процесса
- Демоны
- Иерархия процессов
- Состояния процесса
- Модель многозадачного режима
Процесс (process) - это пользовательская программа при ее исполнении в компьютерной системе. Для выполнения процесса требуется ряд ресурсов, включая время процессора, память, файлы, устройства ввода-вывода, сетевые устройства и др.
В классической схеме UNIX, при создании процесса для него создается новое пространство виртуальной памяти, т.е. таблица страниц для отображения виртуальных адресов в физические, своя для каждого нового процесса. При этом расходуются значительные ресурсы. Если учесть, что в UNIX каждая команда пользователя (например, ls – вывод содержимого текущей директории) запускается как отдельный процесс, то становится понятным, насколько "дорога" операция создания процесса в классическом смысле. Поэтому еще в 1980-х гг. появилась концепция облегченного процесса (lightweight process) – выполняемого в том же пространстве виртуальной памяти, что и процесс-родитель. При создании нового облегченного процесса ОС создает для него только стек – системный резидентный массив в памяти, предназначенный для поддержки выполнения процедур процесса и хранящий их локальные данные и связующую информацию между ними.
ОС отвечает за следующие действия, связанные с управлением процессами:
Создание и удаление процессов. При создании процесса необходимо создать в памяти соответствующие системные структуры (таблицу страниц, стек и др.). При удалении процесса память, занимаемая ими, освобождается, а также выполняется закрытие всех файлов и освобождение всех других ресурсов, которые использовал процесс, если последний не сделал этого явно.
Приостановка и возобновление процессов. Выполнение процесса приостанавливается при выполнении синхронного ввода-вывода, а также системного вызова или команды (типа suspend ). Сразу отметим, что использовать подобные операции явной приостановки процессов следует с осторожностью, так как приостанавливаемый процесс может находиться в своей критической секции – выполнять обработку общего ресурса, к которому каждому процессу предоставляется монопольный доступ, так что при его приостановке возникает ситуация тупика (deadlock ) – приостановленный процесс не может освободить ресурс, а конкурирующий процесс не может его получить. При приостановке процесса ОС сохраняет состояние его выполнения, а при возобновлении – восстанавливает.
Синхронизация процессов. Процессы работают параллельно и при этом конкурируют за общие ресурсы, а также должны в некоторые моменты вычислений ожидать наступления некоторых событий. Для предотвращения возможных конфликтов и несогласованностей, например, race condition - несогласованного доступа к общим данным, при котором один процесс читает старые данные, а другой их в этот же момент обновляет, - ОС предоставляет средства синхронизации (например, семафоры и мониторы, рассмотренные в следующем разделе).
Взаимодействие процессов.При своей параллельной работе процессам необходимо взаимодействие, с целью согласованного решения различных частей одной и той же задачи. Процессы могут взаимодействовать с помощью передачи сообщений друг другу, а также с помощью так называемых условных переменных и рандеву (все эти виды взаимодействия рассмотрены позже). ОС предоставляет все эти средства, в виде системных вызовов, для организации адекватного и удобного взаимодействия процессов.
Демоны?
Иерархия процессов?
Состояния процесса?
Модель многозадачного режима?