- •1.Архитектура операционных систем
- •1.1Общие вопросы архитектуры операционных систем
- •1.2Архитектура Windows
- •1.2.1История возникновения Windows
- •1.2.2Архитектура ос Windows
- •1.2.3История возникновения ос Linux
- •1.2.4Архитектура Linux
- •1.2.5Интерфейсы системы unix
- •1.2.6Файловая система unix
- •1.2.7Аутентификация в unix
- •1.2.8Сценарии командной оболочки unix
- •1.3Операционная система qnx
- •1.3.1 Архитектура qnx
- •1.4Выводы
- •1.5Вопросы для самоконтроля
- •2.Типы и алгоритмы работы с оперативной памятью
- •2.1Общие принципы функционирования подсистемы памяти в ос
- •2.1.1Обобщённые принципы управления памятью
- •2.1.2Однозадачная система без подкачки на диск
- •2.1.3Многозадачность с фиксированными разделами
- •2.1.4Подкачка
- •2.1.5Управление памятью с помощью битовых массивов
- •2.1.6Управление памятью с помощью связанных списков
- •2.1.7Виртуальная память
- •2.1.8Многоуровневые таблицы страниц
- •2.1.9Алгоритмы замещения страниц
- •2.2Виртуальная память ос Windows
- •2.2.1Архитектура памяти в ос Windows
- •2.2.2Работа с виртуальной памятью в ос Windows
- •2.2.3Использование виртуальной памяти в приложениях
- •2.3Пример организации страничной памяти на примере linux
- •2.3.1Страничная организация памяти в Linux
- •2.3.2Права доступа к области памяти
- •2.3.3Работа с областями памяти в Linux
- •3.Процессы и потоки
- •3.1Процессы
- •3.1.1Модель процесса
- •3.1.2Создание процесса
- •3.1.3Завершение процесса
- •3.1.4Состояния процессов
- •3.1.5Реализация процессов
- •3.2Потоки
- •3.2.1Реализация потоков
- •3.2.2Реализация потоков на уровне ядра
- •3.2.3Смешанная реализация
- •3.2.4 Метод управления «Активация планировщика»
- •3.2.5Всплывающие потоки
- •3.3Межпроцессное взаимодействие
- •3.3.1Состояние состязания
- •3.3.2Критические секции (Критические области)
- •3.3.3Взаимное исключение с активным ожиданием
- •3.3.4Примитивы межпроцессного взаимодействия
- •3.4Семафоры
- •3.5Мьютексы
- •3.6Организация многопоточной обработки в среде Windows
- •3.6.1Объекты ядра Windows
- •3.6.2Потоки Windows
- •3.6.3Синхронизация потоков в Windows
- •3.6.4Синхронизация потоков с помощью объектов ядра
- •3.6.5Сравнение объектов, используемых для синхронизации потоков
- •3.7Организация процессов и потоков в Linux
- •3.7.1Среда окружения в Linux
- •3.7.2Создание нового процесса. Системный вызов exec.
- •3.7.3Потоки unix. Функции потоков стандарта posix.
- •3.8Синхронизация потоков в unix
- •3.8.1Мьютексы
- •3.8.2Семафоры
- •0,0,0, //Ожидать обнуления семафора
- •0,1,0 // Затем увеличить значение семафора на 1};
- •0,1, 0 // Увеличитьзначение семафора на 1};
1.2.5Интерфейсы системы unix
Системные вызовы - интерфейс между операционной системой и программами пользователя. СВ – сердце операционной системы, они говорят о том, что реально может сделать ОС. Системные вызовы, доступные в интерфейсе, меняются от одной операционной системы к другой, хотя концепция их одинакова.
Системные вызова похожи на реализацию процедур, только системный вызов выполняется в адресном пространстве ядра, а, значит, и в режиме ядра.
Пример: count= read(fd, buf, nbytes);
Системные вызовы выполняются за серию шагов. Сначала при подготовке к вызову библиотечной процедуры read вызывающая программа помещает параметры в стек (шаги 1-3). Затем : собственно вызов библиотечной процедуры (шаг 4).
Библиотечная процедура помещает номер системного вызова в регистр (где его ожидает операционная система) (шаг 5). Затем переход в режим ядра (шаг 6). Запускаемая программа ядра использует таблицу указателей на обработчики системных вызовов, индексированную по номерам вызовов.(шаг 7). Затем начинает функционировать обработчик вызовов (шаг 8). Как только он завершит свою работу, управление возвращается в пространство пользователя (шаг 9) к команде, следующей за системным вызовом.(шаг 10).
Чтобы закончить работу, программа пользователя должна очистить стек, как это и делается после каждого вызова процедуры (11). Стек растет вниз, значит указатель стека нужно увеличить настолько, чтобы удалить параметры, помещенные в стек под запросом read.
Теперь программа может продолжать свою работу.
Интерфейсы системы UNIX можно рассматривать в виде пирамиды (рис. 1.5) у основания пирамиды – аппаратура. Функция ОС управление аппаратным обеспечением, предоставление всем программам интерфейса системных вызовов. Системные вызовы позволяют программам создавать процессы, файлы, прочие ресурсы, а так же управлять ими.
Программы обращаются к системным вызовам, помещая аргументы в регистры центрального процессора (или в стек), выполняя команду эмулирования прерывания для передачи управления ОС и перехода из пользовательского режима в режим ядра. На С невозможно написать команду эмулированного прерывания, этим занимаются библиотечные функции, по одной на системный вызов. Каждая такая процедура помещает аргументы в нужное место и выполняет команду эмулированного прерывания TRAP. Таким образом, чтобы обратиться к системному вызову read, программа на С должна вызвать библиотечную функцию read. В стандарте POSIX определен именно интерфейс библиотечных функций, а не интерфейс системных вызовов, там даже не упоминаются фактические системные вызовы.
Помимо ОС и библиотеки системных вызовов все версии содержат большое количество стандартных программ, некоторые описаны в стандарте POSIX 1003.2, многие могут различаться в разных версиях. К этим программам относится программный процессор (оболочка), компиляторы , редакторы, утилиты для работы с файлами.
Таким образом, три интерфейса в системе UNIX:
1) интерфейс системных вызовов;
2) интерфейс библиотечных функций;
3) интерфейс, образованный стандартным набором обслуживающих программ (который не имеет никакого отношения к системе и может быть легко заменен).
Рис. 1.5. Интерфейсы системы UNIX
Рассмотрим далее более подробно некоторые принципы функционирования и основные команды UNIX.