- •Введение
- •1. Основные понятия системного программного обеспечения
- •1.1. Понятия прикладного и системного программного обеспечения
- •1.2. Состав системного программного обеспечения
- •2. Состав и архитектура операционных систем
- •2.1. Состав операционных систем
- •2.2. Архитектура ос
- •3. Процессы и потоки
- •3.1. Концепция процессов и потоков
- •3.2. Многозадачность. Формы программной работы
- •3.3. Подсистема управления процессами и потоками
- •3.4. Роль процессов, потоков и волокон в многозадачности
- •3.5. Создание процессов
- •3.6. Потоки и их модели
- •3.7. Планирование и синхронизация процессов и потоков
- •3.7.1. Виды планирования
- •3.7.2. Алгоритмы планирования потоков
- •3.7.3. Алгоритмы приоритетного планирования
- •3.7.4. Взаимоисключения
- •3.7.5. Семафоры
- •3.7.6. Тупики
- •4. Управление памятью
- •4.1. Функции ос по управлению памятью
- •4.2. Классификация методов распределения памяти
- •4.3. Распределение памяти без использования внешней памяти
- •4.4. Методы структуризации виртуальной памяти
- •4.4.1. Страничная организация виртуальной памяти
- •4.4.2. Сегментная организация виртуальной памяти
- •4.4.3. Странично-сегментная организация памяти
- •5. Файловые системы
- •5.1. Цели и задачи файловой системы
- •5.2. Организация файлов и доступ к ним
- •5.3. Логическая организация файла
- •5.4. Каталоговые системы
- •5.5. Основные возможности файловой системы ntfs
- •5.6. Структура тома с файловой системой ntfs
- •5.7. Возможности ntfs по ограничению доступа к файлам и каталогам
- •6. Управление вводом-выводом
- •6.1. Физическая организация устройств ввода-вывода
- •6.2. Организация программного обеспечения ввода-вывода
- •6.3. Обработка прерываний
- •6.4. Драйверы устройств
- •6.5. Независимый от устройств слой ос
- •6.6. Пользовательский слой программного обеспечения
- •7. Построение операционных систем
- •7.1. Принципы построения операционных систем
- •7.1.1. Принцип модульности
- •7.1.2. Принцип функциональной избирательности
- •7.1.3. Принцип генерируемости ос
- •7.1.4. Принцип функциональной избыточности
- •7.1.5. Принцип виртуализации
- •7.1.6. Принцип независимости программ от внешних устройств
- •7.1.7. Принцип совместимости
- •7.1.8. Принцип открытой и наращиваемой ос
- •7.1.9. Принцип мобильности
- •7.1.10. Принцип обеспечения безопасности вычислений
- •7.2. Построение интерфейсов операционных систем
- •7.3. Интерфейс прикладного программирования
- •7.3.1. Реализация функций api на уровне ос
- •7.3.2. Реализация функций api на уровне системы программирования
- •7.3.3. Реализация функций api с помощью внешних библиотек
- •7.4. Классификация системных вызовов
- •7.5. Интерфейс пользователя
- •7.6. Пользовательский интерфейс приложений
- •7.7. Архитектура, управляемая событиями
- •8. Семейство операционных систем unix
- •8.1. Основные понятия системы unix
- •8.1.1. Виртуальная машина
- •8.1.2. Пользователь
- •8.1.3. Интерфейс пользователя
- •8.1.4. Привилегированный пользователь
- •8.1.5. Команды
- •8.1.6. Процессы
- •8.1.7. Выполнение процессов
- •8.1.8. Структура файловой системы
- •8.2. Операционная система Linux
- •9.1.2. Определение компилятора. Отличие компилятора от транслятора
- •9.1.3. Определение интерпретатора. Разница между интерпретаторами и трансляторами
- •9.1.4. Этапы трансляции. Общая схема работы транслятора
- •9.1.5. Понятие прохода. Многопроходные и однопроходные компиляторы
- •9.2. Таблицы идентификаторов. Организация таблиц идентификаторов
- •9.2.1. Назначение таблиц идентификаторов
- •9.2.2. Принципы организации таблиц идентификаторов
- •9.2.3. Простейшие методы построения таблиц идентификаторов
- •9.2.4. Построение таблиц идентификаторов по методу бинарного дерева
- •9.2.8. Комбинированные способы построения таблиц идентификаторов
- •9.3. Лексические анализаторы
- •9.3.1. Назначение лексического анализатора
- •9.3.2. Принципы построения лексических анализаторов
- •9.3.3. Определение границ лексем
- •9.3.4. Выполнение действий, связанных с лексемами
- •9.4. Формальные языки и грамматики
- •9.4.1. Первичные понятия
- •9.4.2. Примеры, иллюстрирующие первичные понятия
- •9.4.3. Типы формальных языков и грамматик
- •9.4.3.1. Грамматики типа 0
- •9.4.3.2. Грамматики типа 1
- •9.4.3.3. Грамматики типа 2
- •9.4.3.4. Грамматики типа 3
- •9.4.3.5. Вывод в кс-грамматиках и правила построения дерева вывода
- •9.4.3.6. Синтаксический разбор
- •9.4.3.7. Левый и правый выводы
- •9.4.3.8. Неоднозначные и эквивалентные грамматики
- •9.4.4. Способы задания схем грамматик
- •9.4.4.1. Форма Наура-Бэкуса
- •9.4.4.2. Итерационная форма
- •9.4.4.3. Синтаксические диаграммы
- •9.4.5. Построение грамматик и грамматики, описывающие основные конструкции языков программирования
- •9.4.5.1. Рекомендации по построению грамматик
- •9.4.5.2. Описание списков
- •9.4.5.3. Пример построения грамматик
- •9.4.5.4. Грамматики, описывающие целые числа без знака и идентификаторы
- •9.4.5.5. Грамматики для арифметических выражений
- •9.4.5.6. Грамматика для описаний
- •9.4.5.7. Грамматика, задающая последовательность операторов присваивания
- •9.4.5.8. Грамматики, описывающие условные операторы и операторы цикла
- •9.4.5.9. Бесскобочные выражения
- •9.4.5.10. Префиксная польская запись
- •9.4.5.11. Вычисление префиксных польских записей
- •9.4.5.12. Постфиксная польская запись
- •9.4.5.13. Вычисление постфиксных записей
- •9.5. Конечные автоматы и регулярные грамматики
- •9.6. Макроязыки и макрогенерация
- •9.6.1. Определения макрокоманд и макрогенерации
- •9.6.2. Примеры макрокоманд
- •9.6.3. Макроязыки и препроцессоры
- •Заключение
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
ФГБОУ ВПО «Воронежский государственный технический университет»
О.Б. Кремер М.Ю. Сергеев
СИСТЕМНОЕ ПРОГРАММНОЕ
ОБЕСПЕЧЕНИЕ
Утверждено Редакционно-издательским советом
университета в качестве учебного пособия
Воронеж 2012
УДК 681.3
Кремер О.Б. Системное программное обеспечение: учеб. пособие / О.Б. Кремер, М.Ю. Сергеев. Воронеж: ФГБОУ ВПО «Воронежский государственный технический университет», 2012. 255 с.
В учебном пособии рассматриваются основы организации операционных систем и принципы управления системными ресурсами.
Издание соответствует требованиям Федерального государственного образовательного стандарта высшего профессионального образования по направлению подготовки бакалавров 230100 «Информатика и вычислительная техника», профилю «Вычислительные машины, комплексы, системы и сети», дисциплине «Системное программное обеспечение».
Пособие подготовлено в электронном виде в текстовом редакторе MS Word 2003 и содержится в файле СПО_ЗО.doc.
Табл. 18. Ил. 42. Библиогр.: 9 назв.
Научный редактор д-р техн. наук, проф. С.Л. Подвальный
Рецензенты: |
кафедра вычислительной математики и прикладных информационных технологий Воронежского государственного университета (зав. кафедрой, д-р техн. наук, проф. Т.М. Леденева); канд.техн.наук, доцент С.А. Олейникова |
-
©
©
Кремер О.Б., Сергеев М.Ю., 2012
Оформление. ФГБОУ ВПО
«Воронежский государственный
технический университет», 2012
Введение
Одним из наиболее актуальных и важных направлений разработки системного программного обеспечения является создание программных приложений для управления ресурсами операционной системы. Для решения данной задачи следует знать основные принципы построения операционных систем, специфику их архитектуры, классификацию системных ресурсов и способы управления ими.
К задачам создания системного программного обеспечения также относится разработка элементов инструментальных программных сред. Особое внимание уделяется разработке трансляторов и компиляторов для систем программирования, а также изучению правил построения грамматик для языков программирования.
В первых главах данного пособия рассматриваются основные понятия, связанные с системным программным обеспечением. Изложены основные принципы построения архитектуры операционных систем, состав и функции типовой операционной системы.
Далее рассматриваются вопросы: организация и управление памятью; создание процессов и потоков и управление ими; особенности функционирования файловых систем; принципы построения интерфейсов современных операционных систем; классификация системных вызовов.
В заключительной части пособия приведены особенности построения трансляторов и компиляторов, рассмотрены вопросы построения формальных языков и грамматик, применяющихся в современных языках программироваия.
Пособие соответствует типовой программе по дисциплине «Системное программное обеспечение» и предназначено для студентов заочной полной и сокращенной форм обучения.
1. Основные понятия системного программного обеспечения
1.1. Понятия прикладного и системного программного обеспечения
Программное обеспечение (ПО) – совокупность программ системы обработки информации и программных документов, необходимых для эксплуатации этих программ.
Таким образом, ПО – это комплекс программ, обеспечивающих обработку или передачу данных и предназначенных для многократного использования и применения разными пользователями.
Программное обеспечение является одним из видов обеспечения вычислительной системы, наряду с аппаратным, математическим, информационным, лингвистическим, организационным и методическим обеспечением.
В зависимости от функционального назначения можно выделить следующие виды программного обеспечения:
– прикладное программное обеспечение;
– системное программное обеспечение.
Прикладное программное обеспечение представляет собой комплекс программ для выполнения задач пользователя в какой-либо предметной области, ориентированных на непосредственное взаимодействие с пользователем.
Системное программное обеспечение предназначено для выполнения двух категорий задач:
– эффективное управление компонентами вычислительной системы (процессор, оперативная память, носители информации, устройства ввода вывода, сетевое оборудование и т.д.);
– разработка нового программного обеспечения.
В некоторых случаях, для акцентирования роли средств, выполняющих последнюю группу задач, их выделяют в специальную категорию, называемую инструментальное программное обеспечение.
1.2. Состав системного программного обеспечения
В англоязычной технической литературе термин System Software (системное программное обеспечение) означает программы и комплексы программ, являющиеся общими для всех, кто совместно использует технические средства компьютера, и применяемые как для автоматизации разработки (создания) новых программ, так и для организации выполнения программ существующих. С этих позиций системное программное обеспечение может быть разделено на следующие пять групп:
1) операционные системы;
2) системы управления файлами;
3) интерфейсные оболочки для взаимодействия пользователя с ОС и программные среды;
4) инструментальные среды программирования;
5) утилиты.
Охарактеризуем кратко вышеперечисленные группы.
Операционная система (ОС) – комплекс управляющих и обрабатывающих программ, который, с одной стороны, выступает как интерфейс между аппаратурой компьютера и пользователем с его задачами, а с другой – предназначен для наиболее эффективного использования ресурсов вычислительной системы и организации надежных вычислений.
Любой из компонентов прикладного программного обеспечения обязательно работает под управлением ОС. Операционная система изолирует аппаратное обеспечение компьютера от прикладных программ пользователей, которые взаимодействуют со своими программами через интерфейс ОС. Любые команды пользователя, прежде чем попасть в прикладную программу, сначала проходят через ОС.
Основными функциями, которые выполняет ОС, являются следующие:
– прием от пользователя (или от оператора системы) заданий или команд, сформулированных на соответствующем языке: в виде директив (команд) оператора или в виде указаний (своеобразных команд) с помощью соответствующего манипулятора (например, с помощью мыши), – и их обработка;
– прием и исполнение программных запросов на запуск, приостановку, остановку других программ;
– загрузка в оперативную память подлежащих исполнению программ;
– распределение памяти, а также организация виртуальной памяти;
– запуск программы (передача ей управления, в результате чего процессор исполняет программу);
– идентификация всех программ и данных;
– прием и исполнение различных запросов от выполняющихся приложений (операционная система умеет выполнять очень большое количество системных функций или сервисов, которые могут быть запрошены из выполняющейся программы). Обращение к подобным сервисам осуществляется по ряду правил, которые и определяют интерфейс прикладного программирования (Application Program Interface, API) этой операционной системы;
– обслуживание всех операций ввода-вывода;
– обеспечение работы систем управлений файлами (СУФ) и/или систем управления базами данных (СУБД), что позволяет резко увеличить эффективность всего программного обеспечения;
– обеспечение режима многозадачности (мультипрограммирования), то есть выполнение двух или более программ на одном процессоре, создающее видимость их одновременного исполнения;
– планирование и диспетчеризация задач в соответствии с заданными стратегией и дисциплинами обслуживания;
– организация механизмов обмена сообщениями и данными между выполняющимися программами;
–обеспечение взаимодействия связанных между собой компьютеров (для сетевых ОС);
– защита одной программы от влияния другой, обеспечение сохранности данных, а также защита самой операционной системы от исполняющихся на компьютере приложений;
– аутентификация и авторизация пользователей (аутентификация – процедура проверки имени пользователя и его пароля на соответствие значениям, которые хранятся в его учетной записи; авторизация – назначение пользователю, прошедшему аутентификацию, определенных прав и привилегий, определяющих его доступ к тем или иным системным ресурсам);
– удовлетворение жестким ограничениям на время ответа в режиме реального времени;
– предоставление услуг на случай частичного сбоя системы;
– обеспечение работы систем программирования, с помощью которых пользователи готовят свои программы.
Назначение системы управления файлами – организация более удобного доступа к данным, организованным как файлы. Именно благодаря системе управления файлами вместо низкоуровневого доступа к данным с указанием конкретных физических адресов нужной нам записи используется логический доступ с указанием имени файла и записи в нем.
Как правило, все современные ОС имеют соответствующие системы управления файлами, а также позволяют работать с несколькими файловыми системами. В этом случае говорят о монтируемых файловых системах (дополнительную систему управления файлами можно установить), и в этом смысле они самостоятельны.
Следует понимать, что любая система управления файлами не существует сама по себе – она разработана для работы в конкретной операционной системе и с конкретной файловой системой. Можно сказать, что известная в прошлом (и сейчас) файловая система FAT (file allocation table) имеет множество реализаций как система управления файлами, например FAT-16 для самой MS-DOS, FAT32 для Windows 9x и NT и т. Д (в целом, подобное можно сказать и о NTFS). Другими словами, для работы с файлами, организованными в соответствии с некоторой файловой системой, для каждой ОС должна быть разработана соответствующая система управления файлами; и эта система управления файлами будет работать только в той ОС, для которой она и создана.
Для удобства взаимодействия с ОС могут использоваться дополнительные интерфейсные оболочки. Их основное назначение – либо расширить возможности по управлению ОС, либо изменить встроенные в систему возможности. В качестве классических примеров интерфейсных оболочек и соответствующих операционных сред выполнения программ можно назвать различные варианты графического интерфейса X Window в системах семейства UNIX, разнообразные варианты интерфейсов для семейства ОС Windows компании Microsoft. Следует отметить, что в семействе ОС компании Microsoft с общим интерфейсом заменяемой является только интерфейсная оболочка, в то время как сама операционная среда остается неизменной – она интегрирована в ОС. Другими словами, операционная среда определяется программными интерфейсами, то есть API (application program interface). Интерфейс прикладного программирования (API) включает в себя управление процессами, памятью и вводом/выводом.
Инструментальная среда программирования может состоять из следующих компонентов:
– система программирования – система, образуемая языком программирования, компиляторами или интерпретаторами программ, представленных на этом языке, соответствующей документацией, а также вспомогательными средствами для подготовки программ к форме, пригодной для выполнения;
– язык программирования высокого уровня – формализованный язык для описания решения алгоритма, решения задачи на ПК, понятия и структура которого удобны для восприятия человеком;
– алгоритмический язык – искусственный язык, предназначенный для выражения алгоритмов;
– проблемно-ориентированный язык – язык программирования, который соответствует понятиям определенного класса прикладных задач. Проблемно-ориентированный язык обычно имеет набор специфических изобразительных средств;
– машинный язык – язык программирования, предназначенный для представления программ в форме, позволяющей выполнять ее непосредственно техническими средствами обработки информации. Для выполнения программы на машинном языке не требуется применение трансляторов, компиляторов и интерпретаторов;
– язык ассемблера – язык программирования, который представляет собой символьную форму машинного языка с рядом возможностей, характерных для языков высокого уровня.
Любая система программирования может работать только в соответствующей ОС, под которую она и создана, однако при этом она может позволять разрабатывать программное обеспечение и под другие ОС.
К утилитами относятся специальные системные программы, с помощью которых можно как обслуживать саму операционную систему, так и подготавливать для работы носители данных, выполнять перекодирование данных, осуществлять оптимизацию размещения данных на носителе и производить некоторые другие работы, связанные с обслуживанием вычислительной системы. К утилитам следует отнести и программу разбиения жестких дисков на логические разделы, и программу форматирования, и программу переноса основных системных файлов самой ОС.