Темы для курсовых работ, рефератов, эссе
ТЕМА 1. ОБЩИЕ СВЕДЕНИЯ ОБ ОПЕРАЦИОННЫХ СИСТЕМАХ
Лекция 4. Архитектура компьютерной системы
План занятия:
1. Основные компоненты ОС.
2. Управление процессами
Основные компоненты ОС
Операционная система – весьма сложная по архитектуре программная система, в которой можно выделить следующие основные компоненты:
1. Управление процессами
2. Управление основной памятью
3. Управление файлами
4. Управление системой ввода-вывода
5. Управление внешней памятью
6. Поддержка сетей (networking)
7. Система защиты (protection)
8. Система поддержки командного интерпретатора.
9. Графическая оболочка.
Рассмотрим эти компоненты подробнее.
Управление процессами. Процесс – это программа пользователя в ходе ее выполнения в компьютерной системе. ОС управляет работой процессов, их распределением по процессорам и ядрам системы, порядком их выполнения и размещения в памяти, их синхронизацией при параллельном решении частей одной и той же задачи разными процессами.
Управление основной памятью.Основная (оперативная) память может рассматриваться как большой массив. Операционная система распределяет ресурсы памяти между процессами, выделяет память по запросу, освобождает ее при явном запросе или по окончании процесса, хранит списки занятой и свободной памяти в системе.
Управление файлами.Файл – это логическая единица размещения информации на внешнем устройстве, например, на диске. ОС организует работу пользовательских программ с файлами, создает файлы, выполняет их открытие и закрытие и операции над ними (чтение и запись), хранит ссылки на файлы в директориях (папках) и обеспечивает их поиск по символьным именам.
Управление системой ввода-вывода.Как уже отмечалось, в компьютерной системе имеется большое число внешних устройств (принтеры, сканеры, устройства управления компакт-дисками и др.), управляемых специальными контроллерами (спецпроцессорами) и драйверами – низкоуровневыми программами управления устройствами, выполняемыми в привилегированном режиме. ОС управляет всеми этими аппаратными ипрограммными компонентами, обеспечивая надежность работы внешних устройств, эффективность их использования, диагностику и реконфигурацию в случае их сбоев и отказов. Для этого ОС хранит и использует таблицу состояния устройств.
Управление внешней памятью.Как уже говорилось, внешняя (вторичная) память – это расширение оперативной памяти процессора более медленными, но более емкими и постоянно хранящими информацию видами памяти (диски, ленты и др.). При управлении внешней памятью ОС решает задачи, аналогичные задачам управления основной памятью, - выделение памяти по запросу, освобождение памяти, хранение списков свободной и занятой памяти и др. ОС поддерживает также использование ассоциативной памяти (кэш-памяти) для оптимизации обращения ко внешней памяти.
Поддержка сетей. Как неоднократно подчеркивалось, любая современная компьютерная система постоянно или временно находится в различных локальных и глобальных сетях. Операционная система обеспечивает использование сетевого оборудования (сетевых карт, или адаптеров), вызов соответствующих драйверов, поддержку удаленного взаимодействия с файловыми системами, находящимися на компьютерах сети, удаленный вход на другие компьютеры сети и использование их вычислительных ресурсов, отправку и получение сообщений по сети, защиту от сетевых атак.
Система защиты. Согласно современным принципам надежных и безопасных вычислений, при работе ОС должны быть обеспечены надежность и безопасность, т.е. защита от внешних атак, конфиденциальность личной и корпоративной информации, диагностика и исправления ошибок и неисправностей и др. ОС обеспечивает защиту компонент компьютерной системы, данных и программ, поддерживает фильтрацию сетевых пакетов, обнаружение и предотвращение внешних атак, хранит информацию обо всех действиях над системными структурами, полезную для анализа атак и борьбы с ними.
Система поддержки командного интерпретатора. Любая операционная система поддерживает командный язык (или набор командных языков), состоящих из пользовательских команд, выполняемых с пользовательского терминала (из пользовательской консоли). Типичные команды – это получение информации об окружении, установка и смена текущей рабочей директории, пересылка файлов, компиляция и выполнение программ, получение информации о состоянии системы и выполнении своих процессов и др. В системе Windows для выполнения команд по традиции используется окно пользовательской консоли MS DOS(MS DOS Prompt), в системе Linux – специальное окно "Терминал" (Start / System Tools / Terminal). Наиболее мощные командные процессоры имеются в системах типа UNIX (UNIX, Solaris, Linux и др.). Их командные языки позволяют писать скрипты– командные файлы, содержащие часто используемые последовательности команд ОС. В UNIX это наиболее удобно. Можно назвать такие командные языки UNIX, как sh (Bourne Shell), csh (C shell), ksh (Korn shell), bash.Каждый UNIX-программист имеет свой излюбленный командный язык и привыкает постоянно использовать скрипты и длинные нетривиальные последовательности команд, которые он выполняет с терминала. Что касается Windows, сравнительно недавно в ней появился мощный командный интерпретатор PowerShell,который и рекомендуется к использованию. Кроме того, для Windowsимеется система CygWin,позволяющая выполнять команды и командные файлы UNIX в среде Windows. Типичная последовательность команд в стиле UNIX: ps –a | grep saf, которая выводит в стандартный выводинформацию об активных процессах, причем только принадлежащих пользователю saf.Вертикальная черта (p1 | p2) обозначает операцию конвейер (pipe),позволяющую использовать стандартный вывод процесса p1 как стандартный ввод процесса p2, что и используется операцией grep (фильтрация строк, содержащих заданную последовательность).
Графическая оболочка– подсистема ОС, реализующая графический пользовательский интерфейс пользователей и системных администраторов с операционной системой. Разумеется, использование одного лишь командного языка и системных вызовов неудобно, поэтому простой и наглядный графический пользовательский интерфейс с ОС необходим. Имеется много известных графических оболочек для операционных систем, причем их возможности очень похожи друг на друга - настолько, что подчас не вполне понятно, какая именно ОС используется. Среди графических оболочек, используемых в системах типа UNIX, можно назвать CDE, KDE, GNOME. ОС Windows и MacOS имеют собственные, весьма удобные графические оболочки.
Управление процессами
Процесс (process) -это пользовательская программа при ее исполнении в компьютерной системе. Для выполнения процесса требуется ряд ресурсов, включая время процессора, память, файлы, устройства ввода-вывода, сетевые устройства и др.
В классической схеме UNIX, при создании процесса для него создается новое пространство виртуальной памяти, т.е. таблица страниц для отображения виртуальных адресов в физические, своя для каждого нового процесса. При этом расходуются значительные ресурсы. Если учесть, что в UNIX каждая команда пользователя (например, ls – вывод содержимого текущей директории) запускается как отдельный процесс, то становится понятным, насколько "дорога" операция создания процесса в классическом смысле. Поэтому еще в 1980-х гг. появилась концепция облегченного процесса(lightweight process) – выполняемого в том же пространстве виртуальной памяти, что и процесс-родитель. При создании нового облегченного процесса ОС создает для него только стек– системный резидентный массив в памяти, предназначенный для поддержки выполнения процедур процесса и хранящий их локальные данные и связующую информацию между ними.
ОС отвечает за следующие действия, связанные с управлением процессами:
Создание и удаление процессов. При создании процесса необходимо создать в памяти соответствующие системные структуры (таблицу страниц, стек и др.). При удалении процесса память, занимаемая ими, освобождается, а также выполняется закрытие всех файлов и освобождение всех других ресурсов, которые использовал процесс, если последний не сделал этого явно.
Приостановка и возобновление процессов. Выполнение процесса приостанавливается при выполнении синхронного ввода-вывода, а также системного вызова или команды (типа suspend ). Сразу отметим, что использовать подобные операции явной приостановки процессов следует с осторожностью, так как приостанавливаемый процесс может находиться в своей критической секции– выполнять обработку общего ресурса, к которому каждому процессу предоставляется монопольный доступ, так что при его приостановке возникает ситуация тупика (deadlock ) – приостановленный процесс не может освободить ресурс, а конкурирующий процесс не может его получить. При приостановке процесса ОС сохраняет состояние его выполнения, а при возобновлении – восстанавливает.
Синхронизация процессов. Процессы работают параллельно и при этом конкурируют за общие ресурсы, а также должны в некоторые моменты вычислений ожидать наступления некоторых событий. Для предотвращения возможных конфликтов и несогласованностей, например, race condition- несогласованного доступа к общим данным, при котором один процесс читает старые данные, а другой их в этот же момент обновляет, - ОС предоставляет средства синхронизации(например, семафорыи мониторы, рассмотренные в следующем разделе).
Взаимодействие процессов. При своей параллельной работе процессам необходимо взаимодействие, с целью согласованного решения различных частей одной и той же задачи. Процессы могут взаимодействовать с помощью передачи сообщенийдруг другу, а также с помощью так называемых условных переменныхи рандеву(все эти виды взаимодействия рассмотрены позже). ОС предоставляет все эти средства, в виде системных вызовов, для организации адекватного и удобного взаимодействия процессов.
Семафоры. В 1966 г. проф. Эдсгер Дейкстра предложил новый способ синхронизации процессов, ставший классическим, - семафоры.
Двоичный семафор (binary semaphore)– переменная S, которая может находиться в двух состояниях: "открыт" и "закрыт"; над S определены две операции ( "семафорные скобки"): P(S) – закрыть, V(S) – открыть. При попытке закрыть уже закрытый семафор происходит прерывание, и ОС добавляет текущий процесс в очередь к закрытому семафору. Операция V(S) активизирует первый стоящий в очереди к S процесс, который успешно завершает операцию P(S). Если семафор S уже открыт, операция V(S) не имеет никакого эффекта.
Таким образом, если предположить, что аппаратура и ОС поддерживают подобную концепцию семафора, то она является удобным инструментом для синхронизации по ресурсам. Назовем критической секциейкод, который может выполняться несколькими процессами параллельно и осуществляет доступ к некоторому общему для всех процессов ресурсу – глобальной области памяти, общему файлу и т.д. Обозначим кодкритической секции critical_section.Если допустить, что данный код может выполняться параллельно в нескольких процессах напрямую, то может возникнуть уже известная нам ситуация race condition (конкуренция за общие данные): один процесс может изменять ресурс, а второй в этот момент считывать его (некорректное) состояние, либо два процесса одновременно будут пытаться изменять один и тот же ресурс, что приведет к нарушению его целостности. Таким образом, для критических секций необходимо решить задачу взаимного исключения (mutual exclusion)– в каждый момент времени не более чем один изпараллельных процессов может выполнять критическую секцию. С помощью семафоров Дейкстры эта задача решается легко и изящно: код критической секции должен иметь вид
P(S); critical_section; V(S);
В самом деле, предположим, что несколько процессов выполняют данный код. Первый из них, который начал выполнять операцию P(S), закрывает семафор S и получает доступ к критической секции. Все остальные процессы, которые пытаются выполнить операцию P(S) над закрытым семафором S, прерываются и попадают в очередь к закрытому семафору. Когда первый процесс закончил работу с ресурсом, он открывает семафор S операцией V(S) для первого процесса из очереди, который, выполнив P(S), вновь закрывает семафор, и т.д.
Очень важное свойство операций P и V в следующем: они атомарны (atomic)для других процессов, т.е. если процесс начал выполнять операцию P(S) или V(S), то никакой другой процесс до ее завершения не может также начать выполнять аналогичную операцию.
Подведем итог: для синхронизации процессов по общему ресурсу необходимы взаимное исключение выполнения критических секций и атомарность операций синхронизации.
Однако следует заметить, что использование семафоров – далеко не идеальный способ синхронизации, с точки зрения надежности. При их неаккуратном использовании возможна ситуация тупика (взаимной блокировки, deadlock ), при которой образуется цепочка процессов, бесконечно ждущих друг друга. Простейший способ создать deadlock – использовать двасемафора S1 и S2, так, что первый параллельный процесс пытается выполнить код P(S1); P(S2),а второй – код P(S2); P(S1).Очевидно, что при любом соотношении времен выполнения операций будут закрыты оба семафора, на которых и будут "висеть" оба процесса, не в состоянии двинуться дальше. Как же избежать подобных ситуаций? Ведь ни компилятор, ни операционная система не подскажут программисту правильный способ использования семафоров. Очень легко также "забыть" вызов V(S) и, тем самым, сделать общий ресурс "навеки" недоступным для других процессов. Один из способов решения этой задачи заключается в том, чтобы использовать специальные инструменты и технологии, автоматически обеспечивающие "правильную" последовательность применения операций над семафорами. Один из таких инструментов – аспектно-ориентированное программирование.
Мониторы –еще один, более надежный способ синхронизации, предложенный в 1974 г. одним из классиков компьютерных наук профессором Чарльзом Хоаром.
Монитор– многовходовый модуль M, в котором определены общие для процессов данные D (скрытые) и (абстрактные) операции P1, … PN над этими данными (в виде процедур).
В каждый момент не более чем один из параллельных процессов может вызвать какую-либо из операций: M.Pi (X, Y, …)
Вызов каждой операции монитора – атомарен (как и операции над семафором).
Монитор – еще один удобный механизм синхронизации процессов по ресурсам. Он более надежен, чем семафоры, поскольку вызов операции монитора автоматически обеспечивает разблокировку ресурса после завершения вызова.
Мониторы включены Ч. Хоаром в разработанный им язык Concurrent Pascal для параллельного программирования и разработки операционных систем.
Подробнее о семафорах и мониторах – в специальных разделах курса, посвященных управлению процессами и синхронизации процессов.
Ключевые термины
Race condition- несогласованный доступ из параллельных процессов к общим данным.
Атомарная (atomic) операция– операция, такая, что, если один из параллельных процессов начал ее выполнять, никакой другой процесс до ее завершения не может также начать выполнять эту же операцию над теми же данными.
Графическая оболочка– подсистема ОС, реализующая графический пользовательский интерфейс пользователей и системных администраторов с операционной системой.
Взаимное исключение (mutual exclusion)– режим выполнения критической секции, в котором в каждый момент времени ее может выполнять не более чем один из параллельных процессов.
Двоичный семафор (binary semaphore)– системная переменная, над которой определены операции открытия и закрытия, обеспечивающая в закрытом состоянии прерывание процесса, пытающегося ее закрыть, и добавление его к очереди к закрытому семафору; используется для синхронизации процессов по общим ресурсам.
Конвейер (pipe)– конструкция командных языков (shell) системы UNIX, позволяющая использовать стандартный вывод процесса – первого аргумента как стандартный ввод процесса – второго аргумента.
Критическая секция- код, который может выполняться несколькими процессами параллельно и осуществляет доступ к некоторому общему для всех процессов ресурсу – например, глобальной области памяти или общему файлу.
Монитор (как средство синхронизации)– многовходовый модуль в котором определены общие для параллельных процесов данные и набор операций (в виде процедур) над ними, таких, что в каждый момент времени не более чем один из параллельных процессов может выполнять какую-либо операцию монитора.
Облегченный процесс(lightweight process) – процесс, выполняемый в том же пространстве виртуальной памяти, что и процесс-родитель.
Процесс (process) -пользовательская программа при ее исполнении в компьютерной системе.
Cкрипт (script)– командный файл, содержащий часто используемые последовательности команд ОС.
Стек– системный резидентный массив в памяти, создаваемый операционной системой для поддержки выполнения процедур некоторого процесса и хранящий их локальные данные и связующую информацию между ними.
Тупик (взаимная блокировка, deadlock ) – ситуация, при которой образуется циклическая цепочка блокированных процессов, бесконечно ждущих друг друга.
Краткие итоги
В данной и следующей лекциях рассмотрена архитектура операционных систем, включая следующие вопросы: компоненты системы; cервисы (службы) системы; системные вызовы; системные программы; cтруктура системы; виртуальные машины; проектирование и реализация системы; генерация системы.
Основные компоненты ОС следующие: управление процессами; управление основной памятью; управление файлами; управление системой ввода-вывода; управление внешней памятью; поддержка сетей; система защиты; система поддержки командного интерпретатора; графическая оболочка.
Процесс – программа пользователя при ее исполнении. ОС поддерживает средства создания, удаления, синхронизации, приостановки и возобновления, взаимодействия процессов. Облегченный процесс исполняется в том же пространстве виртуальной памяти, что и процесс-родитель.
Классические средства синхронизации процессов – семафоры и мониторы. Семафор может находиться в открытом и закрытом состояниях и в закрытом состоянии блокирует все, кроме одного, процессы, которым требуется доступ к общему ресурсу. Монитор содержит описание общих для процессов данных и операций над ними, таких, что в каждый момент не более чем один параллельный процесс может выполнять какую-либо операцию монитора.
Вопросы для самопроверки:
1. Назовите компоненты операционной системы.
2. Какие действия по управлению процессами выполняет ОС?
3. Какие действия по управлению основной памятью выполняет ОС?
4. Какие действия по управлению файлами выполняет ОС?
5. Какие действия по управлению системой ввода-вывода выполняет ОС?
6. Какие действия по управлению внешней памятью выполняет ОС?
7. Какие действия по поддержке сетей выполняет ОС?
8. В чем заключается система защиты ОС?
9. Что такое система поддержки командного интерпретатора ОС?
10. Что такое скрипт?
11. Назовите командные процессоры системы UNIX.
12. Что такое графическая оболочка ОС?
13. Что такое процесс?
14. Что такое стек процесса?
15. Что такое облегченный процесс?
16. Что такое семафор и какие операции над ним определены?
17. Что такое критическая секция?
18. В чем суть принципа взаимного исключения критических секций?
19. Что такое атомарная операция?
20. Что такое взаимная блокировка процессов (deadlock)?
21. Что такое монитор?
22. Какое условие для выполнения своих операций обеспечивает монитор?
Упражнения
1. Сформулируйте, в чем разница между файлами и системами ввода-вывода.
2. По аналогии с рассмотренным примером команды UNIX, использующей конвейер, напишите команду, которая выводит в стандартный вывод список файлов текущей директории, имена которых содержат последовательность data.
3. Пусть в системе имеется список свободных участков памяти с указанием их длин. Предложите оптимальный, с Вашей точки зрения, алгоритм выделения смежного участка памяти длины n. Дайте обоснование предложенного Вами алгоритма и оцените его сложность.
4. Пусть имеется два общих ресурса, работа с которыми реализована в виде критических секций C1 и C2. Введите семафоры S1 и S2 для работы с ними и запрограммируйте код обращения к каждому из ресурсов, синхронизация по которым выполняется с помощью этих семафоров.
5. Спроектируйте монитор для представления стека, являющегося общим ресурсом нескольких процессов, с операциями push и pop.
6. Почему, с Вашей точки зрения, стек процесса – это резидентный массив основной памяти?
7. Почему стандартный способ реализации команд ОС UNIX неэффективен?
8. На основе Вашего личного опыта, сформулируйте основные возможности, предоставляемые пользователю графической оболочкой операционной системы.
9. Почему семафоры как способ синхронизации процессов не вполне надежны? Назовите типичные возможные ошибки при использовании семафоров.
Темы для курсовых работ, рефератов, эссе
1. Обзор архитектуры ОС (реферат).
2. Обзор основных компонент ОС (реферат).
3. Семафоры как средство синхронизации процессов (реферат).
4. Мониторы как средство синхронизации процессов (реферат).
5. Реализация семафоров и операций над ними на известном Вам языке программирования (курсовая работа).
6. Реализация мониторов на известном Вам языке программирования (курсовая работа).