
- •Понятие «Операционная система». (1-1)
- •Расположение ос в общей структуре компьютера
- •Функции ос
- •Блок управления процессом. Операции над процессом. (15-1, 28-1)
- •Машинные регистры
- •Ос поддерживает следующие операции над процессами:
- •Понятие прерывания. Схемы прерываний. (16-1)
- •Понятия файла, символьного набора, организации файлов. Средства файловой системы. (23-1, 26-1)
- •Блок управления файлом. (25-1)
- •Топология файловой системы. (26-1, 24-1)
- •Реализация файлов и каталогов. (9-1, 24-1)
- •Реализация файлов
- •Реализация каталогов
- •Стратегии управления памятью. Концепции распределения памяти. Алгоритмы замещения. (18-1)
- •Существует большое количество алгоритмов замещения:
- •Концепции распределения памяти:
- •Организация памяти при связном распределении. Оверлейные перекрытия. (19-1)
- •Организация памяти на основе мультипрограммирования. (20-1)
- •Организация памяти на основе мультипрограммирования с фиксированными разделами.
- •Организация памяти на основе мультипрограммирования с переменными разделами.
- •Организация памяти на основе свопинга. Битовые карты и связный список свободных и занятых блоков. (21-1) Свопинг
- •Битовые карты и связный список свободных и занятых блоков.
- •Концепция виртуальной памяти. (22-1)
- •Способы реализации вп
- •Преобразование V в ψ
- •Расслоение памяти. Регистр перемещений. Прерывания и опрос состояний. (2-1) Метод расслоения памяти (интерливинг)
- •Регистр перемещения
- •Прерывания и опрос состояний
- •Буферизация. Периферийные устройства. Защита памяти. (3-1) Буферизация
- •Периферийные устройства
- •Защита памяти
- •Таймер. Каналы ввода/вывода. Захват цикла. (4-1) Таймер и часы
- •Каналы ввода-вывода
- •Захват цикла
- •Относительная адресация. Режимы работы эвм. (5-1) Относительная адресация
- •Режим работы компьютера
- •Виртуальная память. Мультипроцессорная обработка. Прямой доступ к памяти. (6-1) Виртуальная память
- •Мультипроцессорная обработка
- •Прямой доступ к памяти
- •Программирование на машинном языке. Ассемблеры и макропроцессоры. Компиляторы. (7-1) Программирование на машинном языке
- •Ассемблеры и макропроцессоры
- •Компиляторы
- •Конвейеризация. Иерархия памяти. (8-1) Конвейеризация
- •Иерархия памяти
- •Система управления вводом/выводом. Спулинг. (10-1) Система управления вводом/выводом
- •По системы управления вводом/выводом (не надо)
- •Спулинг
- •Процедурно-ориентированные и проблемно-ориентированные языки. Интерпретаторы. (11-1) Процедурно-ориентированные и проблемно-ориентированные языки.
- •Интерпретаторы
- •Абсолютные и перемещающие загрузчики. Связывающие загрузчики и редакторы связей. (12-1) Абсолютные и перемещающие загрузчики
- •Связывающие загрузчики и редакторы связей
- •Микропрограммирование. Эмуляция. Горизонтальный и вертикальный микрокод. (13-1) Микропрограммы
- •Горизонтальный и вертикальный микрокод
- •Эмуляция
- •Основные характеристики ос unix. (27-2)
- •Достоинства Unix систем
- •Недостатки Unix систем
- •Структура ос unix. Ядро и процессы. (26-2)
- •Структура процесса ос unix. Состояние системы и виды взаимодействия в ос unix. (25-2) Состояние системы
- •Структура процесса
- •Дескриптор процесса в ос unix. Контекст процесса. (5-2)
- •Создание процессов в ос unix. (11-2)
- •Планирование процессов в ос unix. (13-2)
- •Информационные связи между процессами в ос unix. (10-2)
- •Управление памятью в ос unix на основе свопинга (1-2)
- •Управление памятью в ос unix на основе страничной подкачки. (2-2)
- •Алгоритм замещения страниц в ос unix. (3-2)
- •Типы файлов в файловой системе ос unix. Топология файловой системы. Последние изменения в файловой системе ос unix. (18-2)
- •Последние изменения в файловой системе ос unix
- •Индексный дескриптор файла в ос unix. Таблица файлов. (6-2)
- •Поддержка файлов ядром ос unix . (4-2)
- •Физическая и логическая организация файловой системы ос unix. (16-2)
- •Логическая и физическая организация системы управления вводом/выводом ос unix. (15-2)
- •Структурная организация системы управления вводом/выводом ос unix. (12-2)
- •Реализация системы управления вводом/выводом ос unix. (14-2)
- •Функционирование ос unix. (7-2, 19-2)
- •Начальная загрузка и выход на интерактивный режим в ос unix. (25-2)
- •Интерактивный режим работы в ос unix. (24-2)
- •Понятие системного вызова. Системные вызовы system и execl. (23-2)
- •Системныевызовыработысфайламиopen,creat,close,dup,dup2.(21-2, 19-2)
- •Системный вызов open
- •Системный вызов creat
- •Системные вызовы dup, dup2
- •Системные вызовы ввода/вывода. (20-2, 8-2)
- •Системный вызов read
- •Системный вызов write
- •Системный вызов close
- •Системный вызов pipe
- •Интерпретатор команд shell. (28-2)
- •Экранирование
- •Встроенные команды языка shell
- •Внешние команды
- •Сравнение чисел
Интерактивный режим работы в ос unix. (24-2)
Входим в систему и набираем ls имя команды + enter
Далее управление передается интерпретатору shell, который анализирует введенный текст. Если в этот момент будет зафиксирована ошибка, то интерпретатор проинформирует об этом пользователя, выдав соответствующее сообщение, и снова вернет приглашение для ввода командной строки.
Если команда была задана корректно, то shell по средствам системного вызова fork порождает новый процесс.
Ядром системы выполняются стандартные действия, в том числе в таблицу процессов заносится запись о новом процессе.
Затем из shell выполняется системный вызов exec. В каталоге /bin/ отыскивается файл с именем ls и загружается в основную память. Сразу после порождения нового процесса (4) оба они: и процесс-отец (shell) и процесс-сын (ls) – начинают конкурентную борьбу за ресурсы системы. Но shell, будучи особым процессом, порождает другие процессы с меньшим приоритетом. Поэтому после порождения процесса управление вернется в shell, и он сможет выполнить системный вызов exec.
После его выполнения уже нельзя с определенностью сказать, какой процесс shell или ls получит управление.
Если окажется, что shell, то его необходимо приостановить, чтобы дать возможность выполниться процессу ls. Приостановка shell достигается с помощью системного вызова wait. В этой точке выполнение процесса shell прекратится, и он будет ожидать завершения работы процесса ls. После остановки shell начинает работу ядро ОС. Диспетчер процессов определяет процесс, который надо активизировать следующим.
Т.к. в нашем случае других готовых к выполнению процессов кроме ls нет, ему и будет передано управление.
Процесс ls начинает работу по выполнению своих функций.
В то время процесс shell будет находиться в состоянии ожидания. При выполнении процесса ls ему надо будет вводить результаты свой работы на экран терминала.
Т.к. в ОС UNIX все программы выполняются последовательно, для их параллельного выполнения требуется создание новых процессов. Для вывода данных lsна терминал порождается новый процесс.
Выполнение процесса ls завершается системным вызовом exit.
Ядро системы по взаимодействию пары системных вызовов wait, exit переводит процесс shell в состояние готовности. Ввиду отсутствия других готовых процессов активизирует его.
Интерпретатор shell выполняет завершающее действие по обработке ls и выдает на экран терминала приглашение для ввода следующей команды.
Понятие системного вызова. Системные вызовы system и execl. (23-2)
(Здесь явно указать отличия этих двух системных вызовов)
Когда во время выполнения программы необходимо выполнить другую программу или предоставить пользовательскому процессу системные функции, используется аппарат системных вызовов.
Синтаксически, применение системного вызова похоже на вызов подпрограммы, однако исполняемый код системного вызова находиться в ядре ОС, а не в загрузочном модуле.
Системный вызовsystem
Простейшим способом вызвать другую программу из уже выполняющейся является системный вызов system:
int system(“Командная строка”);
Системный вызов execl
Вызывает новую программу, вместо уже выполняющейся без возврата в вызывающую программу:
int execl(“полное_имя_файла”, arg0, arg1,…,null);
Системные вызовы fork, wait, pipe. (22-2)
Системный вызов fork
Для того чтобы запустить параллельно новую программу, необходимо запускать параллельные процессы.
Для этого используется системный вызов fork:
int fork();
После выполнения системного вызова fork() программа делиться на две идентичные копии. Одна из копий получает код ответа 0 (процесс потомок). Другая копия (процесс отец) получает идентификатор процесса сына.
if(fork()==0)
{ процесс сын }
else
{ процесс родитель }
Системный вызов wait и _exit
После системного вызоваfork() процесс родитель может посредством системного вызова wait() приостановить свое выполнение до завершения процесса сына или продолжить выполнение независимо от процесса сына.
int wait(int* s);
Системный вызов wait() возвращает идентификатор завершаемого процесса сына, а в свой единственный аргумент записывает код завершения процесса сына.
Код завершения можно представить в виде следующей битовой маски:
7 младших битов (с 0 по 6) содержат нули, если процесс сын был завершен с помощью системного вызова _exit, или номер сигнала, завершившего процесс.
7-й бит равен 1, если из-за прерывания процесса сына был создан дамп образа процесса (core файл).
Если процесс был завершен с помощью системного вызова _exit, то биты с 8 по 15й содержат аргумент системного вызова _exit.
Системный вызов _exit:
void _exit(int status);
В случае параллельной работы, с помощью системного вызова signal процесс отец может выявить или игнорировать завершение процесса сына:
int signal(sigaction);