- •Введение
- •1 Тема 1. Назначение и функции ОС
- •1.1 ОС как базовая часть систем обработки данных (СОД)
- •1.2 Серверные ОС и рабочие станции
- •1.3 Многослойная структура ОС
- •1.4 ОС как базовая часть ПО ЭВМ
- •1.5 Режимы ядра и пользователя
- •1.6 Ядро и модули ОС
- •1.7 Три базовых концепции ОС: файл, пользователь, процесс
- •1.8 Системные вызовы fork(...) и exec*(…)
- •1.9 Дистрибутивы ОС
- •1.10 Лабораторная работа по теме №1
- •1.10.1 Рабочий стол УПК АСУ
- •1.10.2 Работа с личным архивом студента на flashUSB
- •1.10.3 Изучение рабочей среды пользователя upk
- •2 Тема 2. BIOS, UEFI и загрузка ОС
- •2.1 Архитектура х86
- •2.2 BIOS и его функции
- •2.3 Этапы и режимы POST
- •2.4 UEFI и его стандартизация
- •2.5 Блочные и символьные устройства компьютера
- •2.6 Винчестер и загрузочные устройства
- •2.7 Загрузочный сектор MBR, его назначение и архитектура
- •2.8 GRUB как универсальный загрузчик ОС
- •2.9 Меню и функции GRUB
- •2.10 Лабораторная работа по теме №2
- •2.10.1 Установка ПО GRUB на устройство flashUSB
- •2.10.2 Создание аварийного варианта ОС УПК АСУ
- •2.10.3 Практика настройки файла конфигурации grub.cfg
- •3 Тема 3. Языки управления ОС
- •3.1 Языки программирования и командные интерпретаторы
- •3.2 Базовый язык shell (sh)
- •3.3 Среда исполнения программ
- •3.4 Командная строка: опции и аргументы
- •3.5 Переменные shell
- •3.6 Специальные символы и имена файлов
- •3.7 Стандартный ввод/вывод и переадресация
- •3.8 Программные каналы
- •3.9 Сценарии
- •3.10 Фоновый и приоритетный режимы
- •3.11 Отмена заданий
- •3.12 Прерывания
- •3.13 Завершение работы ОС
- •3.14 Лабораторная работа по теме №3
- •3.14.1 Среда исполнения программ
- •3.14.2 Переменные, опции и аргументы командной строки
- •3.14.3 Стандартный ввод/вывод и переадресация
- •3.14.4 Программные каналы и сценарии
- •3.14.5 Работа с процессами и заданиями среды
- •3.14.6 Сценарии ПО GRUB
- •4 Тема 4. Управление файловыми системами ОС
- •4.1 Устройства компьютера
- •4.2 BOOT-сектор и разделы винчестера
- •4.3 Загрузочные сектора разделов
- •4.4 Структура файловой системы FAT32 (VFAT)
- •4.5 Структура файловой системы EXT2FS
- •4.6 Сравнение файловых систем
- •4.7 Стандартизация структуры ФС
- •4.8 Модули и драйверы ОС
- •4.9 Системные вызовы ОС по управлению устройствами и ФС
- •4.10 Три концепции работы с устройствами
- •4.11 Разделы дисков и работа с ними
- •4.12 Монтирование и демонтирование устройств
- •4.13 Файловые системы loopback, squashfs, overlayfs и fuse
- •4.14 Дисковые квоты
- •4.15 Лабораторная работа по теме №4
- •4.15.1 Типы, имена и узлы устройств
- •4.15.2 Структура винчестера и файловые системы
- •4.15.3 Стандартизация структуры ФС
- •4.15.4 Модули и драйверы ОС
- •5.15.5 Концепции работы с устройствами
- •4.15.6 FUSE и другие специальные ФС
- •4.15.7 Подключение рабочей области пользователя upk
- •5 Тема 5. Управление пользователями ОС
- •5.1 Пользовательские режимы работы ОС
- •5.2 Разграничение прав пользователей
- •5.3 Login и система доступа Linux-PAM
- •5.4 Команды управления пользователями
- •5.5 Лабораторная работа по теме №5
- •5.5.1 Инфраструктура управления пользователями
- •5.5.2 Реалные и эффективные права пользователя
- •5.5.3 Инфраструктура PAM
- •5.5.4 Команды управления пользователями
- •6 Тема 6. Теоретическая часть
- •6.1 Подсистема управления процессами
- •6.2 Главный родительский процесс init
- •6.3 Состояния процессов в ядре ОС
- •6.4 ОС реального времени
- •6.5 Алгоритм разделения времени
- •6.6 Четыре подхода к управлению процессами
- •6.7 Стандарты POSIX и сигналы
- •6.8 Работа пользователя с процессами
- •6.9 Системные вызовы ОС по управлению процессами
- •6.10 Подсистема управления оперативной памятью
- •6.11 Системные вызовы и разделяемая память
- •6.12 Передача сообщений
- •6.13 Лабораторная работа по теме №6
- •6.13.1 Сценарий загрузки ОС
- •6.13.2 Разные подходы к управлению процессами
- •6.13.3 Сигналы и средства IPC
- •Заключение
- •Список использованных источников
23
цессу присваивается номер на 1 больше, чем максимальный номер существующего или существовавшего с момента запуска ОС процесса.
1.8 Системные вызовы fork(...) и exec*(…)
Ядро ОС самостоятельно запускает только один процесс init. Все остальные процессы режима пользователя являются дочерними относительнопроцесса init.
Запуск любой программы в режиме пользователя осуществляется с помощью двух системных вызовов: fork(...) и exec(...).
Вызов функции fork(...) из программы на языке С, имеет вид:
#include <unistd.h> pid_t fork(void);
Функция fork(...) полностью дублирует существующий процесс, вместе со всеми открытыми файлами, порождая новый (дочерний) процесс с новым PID. Программист различает родительский и дочерний процессы только по целочисленному значению, которое возвращает функция fork(...):
-1 — ошибка, дочерний процесс не создан; 0 - дочерний процесс;
> 0 — родительский процесс, которому передано значение PID дочернего процесса.
Замечание
Родительский процесс обязан дождаться завершения дочернего процесса, иначе контроль передается по иерархии выше. Процесс init является родителем для всех остальных процессов.
Если дочерний процесс создан для запуска некоторой программы, то используется одна из разновидностей системной функции exec(...):
#include <unistd.h> extern char **environ;
int execl(const char |
*path, const char *arg, ...); |
||||
int execp(const char |
*file, const char |
*arg, |
...); |
||
int execle(const char |
*path, const char |
*arg, |
…, char * const envp[]); |
||
int execv(const char |
*path, |
const |
*char argv[]); |
||
int execvp(const char |
*file, |
const |
*char argv[]); |
int execvpe(const char *file, const *char argv[], char * const envp[]);
Хорошо видно, что любой вызов имеет ссылку на файл, в качестве аргумента. После всех проверок на права запуска, указанный файл загружается в пространство дочернего процесса. Загруженной программе передаются все ресурсы дочернего процесса, включая открытые и созданные файлы.
24
Замечание
Обратите внимание, что родительский процесс продолжает контролировать работу уже новой программы и имеет право принудительно завершить ее работу.
1.9 Дистрибутивы ОС
Когда говорят, что на ЭВМ установлена некоторая ОС, то обычно подразумевают некоторый ее дистрибутив, включающий конкретное ядро ОС и другое системное ПО, а также прикладное ПО и системы разработки.
Выбор конкретного дистрибутива предполагает учет многих факторов:
производитель дистрибутива;
тип процессора, на который рассчитан дистрибутив;
лицензия дистрибутива и ценовая политика дистрибьютора;
поддержка национальных языков;
типы носителей, на которых распространяется дистрибутив;
особенности инсталляции;
сопровождение дистрибутива;
наличие документации.
Учет всех перечисленных факторов может оказаться довольно сложной задачей и выходит за рамки нашей дисциплины. Более того, каждому дистрибутиву и его версиям посвящены отдельные сайты, а многие дистрибутивы постоянно обсуждаются на форумах в Интернете.
Для целей обучения выбран 64-битный базовый дистрибутив Arch Linux. На его основе создан набор ПО, организованный как учебный программный комплекс кафедры АСУ (УПК АСУ).
Структура УПК АСУ ориентирована не только на задачи курса «Операционные системы», но имеет все необходимое ПО для его изучения и организации лабораторных работ.