Шпаргалка по "Системное програмное обеспечение"

Автор: Пользователь скрыл имя, 11 Марта 2012 в 17:48, шпаргалка

Краткое описание

Работа содержит ответы на 38 экзаменационных вопросов по дисциплине "Системное програмное обеспечение"

Оглавление

1. Виды программного обеспечения. Классификации.
2. Компоненты операционной системы.
3. Обзор операционных систем. Краткая история ОС UNIX.
4. Стандарт POSIX. Объекты стандартизации.
5. Ядро ОС. Назначение, функции.
6. Работа с файлами и директориями. Права пользователей.
7. Компиляторы. Назначение. Принципы работы.
8. Понятие процесса в UNIX. Контекст процесса.
9. Диаграмма состояний процесса.
10. Взаимодействующие процессы. Причины кооперации.
11. Параметры функции main() в языке C. Переменные среды окружения и аргументы командной строки.
12. Средства связи между процессами. Характеристики. Критерии надежности средств связи.
13. Способы адресации при использовании средств связи.
14. Буферизация.
15. Модели передачи данных по каналам связи. Организация взаимодействия процессов через pipe.
16. Модели передачи данных по каналам связи. Организация взаимодействия процессов через FIFO.
17. Организация работы с разделяемой памятью в UNIX.
18. Понятие нитей исполнения.
19. Преимущества и недостатки потокового обмена данными.
20. Дескрипторы System V IPC.
21. Синхронизация процессов и нитей исполнения.
22. Семафоры в UNIX.
23. Создание массива семафоров или доступ к уже существующему.
24. Сообщения, как средства связи и средства синхронизации.
25. Операции над очередями сообщений.
26. Мультиплексирование сообщений.
27. Организация файловой системы в UNIX.
28. Разделы носителя информации в UNIX.
29. Логическая структура файловой системы и типы файлов в UNIX.
30. Понятие индексного узла.
31. Организация директорий в UNIX.
32. Системные вызовы для работы с файлами.
33. Понятие о файлах, отображаемых в память.
34. Организация ввода-вывода в UNIX.
35. Файлы устройств.
36. Монтирование файловых систем.
37. Сигналы в UNIX.
38. Понятие о надежности сигналов.

Файлы: 1 файл

ответы СПО.doc

— 368.50 Кб (Скачать)

Описанная задача может различаться в зависимости от типа архитектуры ядра и способа её реализации.

Содержание

1 Типы архитектур ядер операционных систем

1.1 Монолитное ядро

1.2 Модульное ядро

1.3 Микроядро

1.4 Экзоядро

1.5 Наноядро

1.6 Гибридное ядро

2 Комбинация разных подходов

3 Примечания

4 Ссылки

5 Литература

Типы архитектур ядер операционных систем

Монолитное ядро

Основная статья: Монолитное ядро

Монолитное ядро предоставляет богатый набор абстракций оборудования. Все части монолитного ядра работают в одном адресном пространстве. Это такая схема операционной системы, при которой все компоненты её ядра являются составными частями одной программы, используют общие структуры данных и взаимодействуют друг с другом путём непосредственного вызова процедур. Монолитное ядро — старейший способ организации операционных систем. Примером систем с монолитным ядром является большинство Unix-систем.

Достоинства: Скорость работы, упрощённая разработка модулей.

Недостатки: Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.

Примеры: Традиционные ядра UNIX(такие как BSD), Linux; ядро MS-DOS, ядро KolibriOS.

Некоторые старые монолитные ядра, в особенности систем класса Unix/Linux, требовали перекомпиляции при любом изменении состава оборудования. Большинство современных ядер позволяют во время работы подгружать модули, выполняющие части функции ядра. В этом случае компоненты операционной системы являются не самостоятельными модулями, а составными частями одной большой программы, называемой монолитным ядром, которое представляет собой набор процедур, каждая из которых может вызвать каждую. Все процедуры работают в привилегированном режиме.

Модульное ядро

Основная статья: Модульное ядро

Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.

В отличие от «классических» монолитных ядер, считающихся ныне устаревшими, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).

Микроядро

Основная статья: Микроядро

Микроядро предоставляет только элементарные функции управления процессами и минимальный набор абстракций для работы с оборудованием. Бо?льшая часть работы осуществляется с помощью специальных пользовательских процессов, называемых сервисами. Решающим критерием «микроядерности» является размещение всех или почти всех драйверов и модулей в сервисных процессах, иногда с явной невозможностью загрузки любых модулей расширения в собственно микроядро, а также разработки таких расширений.

Достоинства: Устойчивость к сбоям оборудования, ошибкам в компонентах системы. Основное достоинство микроядерной архитектуры — высокая степень модульности ядра операционной системы. Это существенно упрощает добавление в него новых компонентов. В микроядерной операционной системе можно, не прерывая ее работы, загружать и выгружать новые драйверы, файловые системы и т. д. Существенно упрощается процесс отладки компонентов ядра, так как новая версия драйвера может загружаться без перезапуска всей операционной системы. Компоненты ядра операционной системы ничем принципиально не отличаются от пользовательских программ, поэтому для их отладки можно применять обычные средства. Микроядерная архитектура повышает надежность системы, поскольку ошибка на уровне непривилегированной программы менее опасна, чем отказ на уровне режима ядра.

Недостатки: Передача данных между процессами требует накладных расходов.

Классические микроядра предоставляют лишь очень небольшой набор низкоуровневых примитивов, или системных вызовов, реализующих базовые сервисы операционной системы.

Сервисные процессы (в принятой в семействе UNIX терминологии: «демоны») активно используются в самых различных ОС для задач типа запуска программ по расписанию (UNIX и Windows NT), ведения журналов событий (UNIX и Windows NT), централизованной проверки паролей и хранения пароля текущего интерактивного пользователя в специально ограниченной области памяти (Windows NT). Тем не менее не следует считать ОС микроядерными только из-за использований такой архитектуры.

Примеры: Symbian OS; Windows CE; Mach, используемый в GNU/Hurd и Mac OS X; QNX; AIX; Minix; ChorusOS; AmigaOS; MorphOS.

Экзоядро

Основная статья: Экзоядро

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

Возможность доступа к устройствам на уровне контроллеров позволит эффективней решать некоторые задачи, которые плохо вписываются в рамки универсальной ОС, например реализация СУБД будет иметь доступ к диску на уровне секторов диска, а не файлов и кластеров, что положительно скажется на быстродействии.

Наноядро

Основная статья: Наноядро

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

Гибридное ядро

Гибридные ядра — это модифицированные микроядра, позволяющие для ускорения работы запускать «несущественные» части в пространстве ядра. Имеют «гибридные» достоинства и недостатки.

Основная статья: Гибридное ядро

Комбинация разных подходов

Все рассмотренные подходы к построению операционных систем имеют свои достоинства и недостатки. В большинстве случаев современные операционные системы используют различные комбинации этих подходов. Так, например сейчас, ядро «Linux» представляет собой монолитную систему с отдельными элементами модульного ядра. При компиляции ядра можно разрешить динамическую загрузку и выгрузку очень многих компонентов ядра — так называемых модулей. В момент загрузки модуля его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться любые экспортируемые ядром функции.

Существуют варианты ОС GNU, в которых вместо монолитного ядра применяется ядро Mach (такое же, как в Hurd), а поверх него крутятся в пользовательском пространстве те же самые процессы, которые при использовании Linux были бы частью ядра. Другим примером смешанного подхода может служить возможность запуска операционной системы с монолитным ядром под управлением микроядра. Так устроены 4.4BSD и MkLinux, основанные на микроядре Mach. Микроядро обеспечивает управление виртуальной памятью и работу низкоуровневых драйверов. Все остальные функции, в том числе взаимодействие с прикладными программами, осуществляется монолитным ядром. Данный подход сформировался в результате попыток использовать преимущества микроядерной архитектуры, сохраняя по возможности хорошо отлаженный код монолитного ядра.

Смешанное ядро, в принципе, должно объединять преимущества монолитного ядра и микроядра: казалось бы, микроядро и монолитное ядро — крайности, а смешанное — золотая середина. В них возможно добавлять драйвера устройств двумя способами: и внутрь ядра, и в пользовательское пространство. Но на практике концепция смешанного ядра часто подчёркивает не только достоинства, но и недостатки обоих типов ядер.

 

6. Работа с файлами и директориями. Права пользователей

Мы не будем давать здесь определение файла, полагая, что интуитивное представление о файлах у вас имеется, а в лекции 11 (раздел "Введение") было введено понятие о файлах, как об именованных абстрактных объектах, обладающих определенными свойствами. При этом в пространстве имен файлов одному файлу могут соответствовать несколько имен.

В материалах семинаров 1-2 упрощенно говорилось о том, что файлы могут объединяться в директории, и что файлы и директории организованы в древовидную структуру. На нынешнем уровне знаний мы можем сформулировать это более аккуратно. В операционной системе UNIX существуют файлы нескольких типов, а именно:

обычные или регулярные файлы;

директории или каталоги;

файлы типа FIFO или именованные pip'ы;

специальные файлы устройств;

сокеты (sockets);

специальные файлы связи (link).

Файлы типа FIFO были представлены в семинаре 5, когда рассматривалась работа с именованными pip'ами (раздел "Понятие FIFO. Использование системного вызова mknod() для создания FIFO. Функция mkfifo()"). Файлы типа "связь" мы представим в этом семинаре, когда будем обсуждать операции над файлами (раздел "Операции над файлами и директориями") и соответствующие им системные вызовы (раздел "Системные вызовы и команды для выполнения операций над файлами и директориями"). О специальных файлах устройств будет рассказано в материалах семинаров 13–14, посвященных реализации в UNIX подсистемы ввода-вывода и передаче информации с помощью сигналов. Файлы типа "сокет" будут введены в семинарах 15–16, когда мы будем рассматривать вопросы сетевого программирования в UNIX.

Файлы всех перечисленных типов логически объединены в ациклический граф с однонаправленными ребрами, получающийся из дерева в результате сращивания нескольких терминальных узлов дерева или нескольких его нетерминальных узлов таким образом, чтобы полученный граф не содержал циклов. В нетерминальных узлах такого ациклического графа (т.е. в узлах, из которых выходят ребра) могут располагаться только файлы типов "директория" и "связь". Причем из узла, в котором располагается файл типа "связь", может выходить только ровно одно ребро. В терминальных узлах этого ациклического графа (т.е. в узлах, из которых не выходит ребер) могут располагаться файлы любых типов (см. рис. 11–12.1), хотя присутствие в терминальном узле файла типа "связь" обычно говорит о некотором нарушении целостности файловой системы.

Рис. 11-12.1.  Пример графа файловой системы

В отличие от древовидной структуры набора файлов, где имена файлов связывались с узлами дерева, в таком ациклическом графе имя файла связывается не с узлом, соответствующим файлу, а с входящим в него ребром. Ребра, выходящие из узлов, соответствующих файлам типа "связь", являются неименованными. Надо отметить, что практически во всех существующих реализациях UNIX-подобных систем в узел графа, соответствующий файлу типа "директория", не может входить более одного именованного ребра, хотя стандарт на операционную систему UNIX и не запрещает этого. Правила построения имен ребер (файлов) рассматривались в семинарах 1-2. В качестве полного имени файла может использоваться любое имя, получающееся при прохождении по ребрам от корневого узла графа (т.е. узла, в который не входит ни одно ребро) до узла, соответствующего этому файлу, по любому пути с помощью следующего алгоритма:

Если интересующему нас файлу соответствует корневой узел, то файл имеет имя "/".

Берем первое именованное ребро в пути и записываем его имя, которому предваряем символ "/".

Для каждого очередного именованного ребра в пути приписываем к уже получившейся строке справа символ "/" и имя соответствующего ребра.

Полное имя является уникальным для всей файловой системы и однозначно определяет соответствующий ему файл.

 

7. Компиляторы. Назначение. Принципы работы

Компиля́тор —

Программа или техническое средство, выполняющее компиляцию.

Машинная программа, используемая для компиляции.

Транслятор, выполняющий преобразование программы, составленной на исходном языке, в объектный модуль.

Программа, переводящая текст программы на языке высокого уровня в эквивалентную программу на машинном языке.

Программа, предназначенная для трансляции высокоуровневого языка в абсолютный код или, иногда, в язык ассемблера. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).

Компиляция —

Трансляция программы на язык, близкий к машинному.

Трансляция программы, составленной на исходном языке, в объектный модуль. Осуществляется компилятором.

Структура компилятора

Процесс компиляции состоит из следующих этапов:

Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.

Информация о работе Шпаргалка по "Системное програмное обеспечение"