- •Ос в общей структуре компьютера.
- •История операционных систем.
- •Классификация современных ос. Задачи современных ос.
- •6. Понятие процесса – ключевое понятие ос.
- •8. Трансляторы: компиляторы и интерпретаторы.
- •9. Иерархия зу (запоминающих устройств).
- •10. Управление оперативной памятью (оп). Менеджер памяти; swapping; виртуальная память.
- •11. Модели организации виртуальной памяти.
- •12. История ос unix.
- •13. Общая архитектура unix. Основные подсистемы ядра.
- •14. Пользовательская среда unix.
- •Командный интерпретатор shell.
- •16. Система каталогов в oс unix. Управление с помощью команд языка Bourn shell.
- •17. Управление файлами с помощью команд языка Bourn shell. Перенаправление ввода/вывода.
- •19. Обработка аргументов командной строки. Переменные окружения.
- •20. Пользователь и группа. Права доступа к файлу.
- •21. Системные вызовы и функции стандартных библиотек. Обработка ошибок.
- •22.Структура программы на языке с. Параметры главной функции (пример).
- •23. Файловая система ос unix: монтирование, индексные дескрипторы, жесткие и символические ссылки, файлы устройств.
- •24.Системные вызовы для работы с файлами
- •25. Понятие «процесс» в ос unix. Контекст процесса; свойства процесса; состояние процесса.
- •26.Создание процессов и упр-е ими.
- •27. Запуск внешней программы
- •29.Общая классификация средств взаимодействия процессов в ос unix.
- •30.Иерархия процессов в ос unix. Понятие сеанса. Фоновые процессы.
- •31.Каналы – средства взаимодействия процессов. Неименованные каналы. Организация конвейера (пример программы).
- •33.Сигналы как средство взаимодействия процессов в ос unix. Диспозиция сигналов.
- •34.Ограничения для процесса в ос unix (по ресурсам). Связь со свойствами процесса.
- •36.Отображение файлов в виртуальное адресное пространство. Разделяемая память.
- •37. Взаимодействие процессов через псевдотерминал.
- •38. Недостатки потокового взаимодействия процессов. Средства System vipc. Пространство имен. Общие принципы работы со средствами System vipc.
- •39. Организация очереди сообщений в ос unix. Структура сообщения. Отправка и принятие сообщений.
- •40.Семафоры, как средство взаимодействия процессов System vipc. Понятие атомарной операции. Массив семафоров.
- •41.Разделяемая память, как средство взаимодействия процессов System vipc.
- •42.Взаимодействие по сети. Понятие протокола. Семейства адресации и типы взаимодействия. Создание сокета в ос unix.
- •45. Потоковые сокеты. Клиент – серверная модель.
- •46. Проблема очередности действий и ее решение.
- •47. Процессы-демоны. Система журнализации.
- •48. Загрузка и жизненный цикл в ос unix.
- •49. Взаимоисключения. Понятие критической секции. Устаревшие подходы к организации взаимного исключения.
- •50.Поддержка взаимоисключения на уровне ос. Мьютексы и семафоры (Дейкстры). Команда ассемблера tsl.
- •51.Проблема тупиков. Граф ожидания
- •52. Нити исполнения (pthreads) в ос unix. Мьютексы pthreads.
- •53.Графический интерфейс в ос unix. Базовые принципы построения x_window.
- •54.Файловая подсистема. Общая структура. Методы выделения дискового пространства. Управление дисковым пространством.
- •55.Файловая подсистема. Структура файловой системы на диске. Реализация директорий. Поиск в директории (хеширование).
- •56.Подсистема ввода/вывода. Схема взаимодействия подсистем ос. Понятие драйвера. Типы драйверов.
29.Общая классификация средств взаимодействия процессов в ос unix.
Средства взаимодействия:
Сигналы не несут никакой информации, кроме номера – целое число из предост множества.
Для перед данных можно использовать однонаправленные каналы – именованые и неименованые.
Сист вызов MMAP позволяет создать область памяти дост нескольк процессам.
При отладке используют режим трассировки, при кот один процесс контролир отладку.
Терминал может имитировать пользовательский процесс.Вз-е такого процесса с процессом для кот имитируется терминал называется вз-ем через вирт терминал.
30.Иерархия процессов в ос unix. Понятие сеанса. Фоновые процессы.
В качестве узлов в иерарх деревьях выступают сами процессы. А связями будут служить отнош родитель-потомок.
Принято разделять на группы процессов или семьи:
Группы вкл 1 или больше процессов и сущ пока сущ хотя бы один процесс в ней.
Каждый процесс включается в какую либо группу. При порожд нового процесса он попадает в ту же где и родитель. Процессы могут мигрир из группы в группу. ( по своему жел или по жел других проц) Группы объед в сеансы, образуя кланы семей. С кажд сеансом связан терминал, через него проц общаются с пользователем, у сеанса не мб >1 терминала. Установка идентиф сеанса:
Int setsid(void);
Примен процессом, кот не явл лидером.
Приводит к созданию новой группы, кот будет сост из проц вызвавшего set и он будет лидером. И образуется новый сеанс, идент кот совп с id процесса.
При попытке вв/вывода фонового процесса через упр терминал этот процесс получ сигнал, кот привед к прекр раб процесса. Передавать упр терминал может только лидер сеанса. При заверш работы лидера все процессы получают SIGNUP, они завершаются и дальше будут работать только фоновые процессы.
Эффективный идентиф пользователя: EUID – пользователь от имени которого процесс пользуется полномочиями.
31.Каналы – средства взаимодействия процессов. Неименованные каналы. Организация конвейера (пример программы).
Канал – объект ядра, предст собой ср-во однонапр передачи данных. Канал имеет 2 конца – один для записи, другой для чтения. С кажд концом связан файловый дескриптор. Неименованный канал:
Int pipe(int fd[2]);
Единственный способ подкл к одному из концов – создать копию процесса. Исп неим канал могут только родств проги.
Далее родительский процесс закрывает свой экземпляр дескриптора, в перв доч процессе закрывают для чтен, во втором для записи.
В системе присутств откр деск обоих концов канала: при попытке чтения из канала в кот никто не писал читающий проц будет заблок пока туда кто нить не запишет. Либо все деск на запись окажутся закрытыми. Если канал дост только для чтения: тогда read вернет управление немедленно.
Попытка записи в канал, из которого никто не читает: пока не заполнится внутр буфер (4кб), после очередного write Заблок процесс пока кто нибудь не прочитает оттуда.
Если Все дескр связ с одним из концов канала окажутся закрытыми, то его никогда не удастся использ.
Чтение сначала прочитает внутренний буфер канала, а затем возвратит 0 (конец файла). (Если закр все дескрипторы на запись)
Если закрыты все дескрипторы на чтение, то первая запись в канал приведет к тому, что процесс получит SIGPIPE(заверш процесса).
Конвеер с помощью pipe:
>ls–lR/grep ‘^d’
Int main();
Int fd[2];
Pipe(fd);
If (fork()==0) {close(fd[0]);
Dup2(fd[1],1); close(fd[1]);
Execlp(“ls”,”ls”,-lR”,NULL);
Perror(“ошибка”); exit(1);
If (fork()==0) {close(fd[10]);
Dup2(fd[0],0); close(fd[0]);
Execlp(“grep”,”grep”,”^d”,NULL);
Perror(“ошибка”); exit(2);
Close(fd[0]),close(fd[1]);wait(NULL);wait(NULL);return(0)
Организация именованного канала FIFO в ОС UNIX (пример программы).
Именованому каналу соотв файл спец вида (фифо). Размещается в файл системе, к именованому каналу могут присоед неродств процессы.
Закрытие родит поцесса не означает что канал закроется.
Int mkfifo(const char*pathname, int permission – права доступа)
Не создает сам объект канала, он создается когда кто то откр файл фифо с помощью open. Сущ пока сущ хотя бы 1 свзя с ним дескриптор. Уничт канала не означ уничтожение файла фифо.
Если открыть один конец канала, то блокируется до открытия другого конца. Тогда если в канал пишет и читает, то нужно использ файл O_NONBLOCK
Fd=open(“fd1”,O_WRONLY| O_NONBLOCK);
При закрытии дескрипторов одного из концов канала полная аналогия с неимен каналами.
В системе присутств откр деск обоих концов канала: при попытке чтения из канала в кот никто не писал читающий проц будет заблок пока туда кто нить не запишет. Либо все деск на запись окажутся закрытыми. Если канал дост только для чтения: тогда read вернет управление немедленно.
Попытка записи в канал, из которого никто не читает: пока не заполнится внутр буфер (4кб), после очередного write Заблок процесс пока кто нибудь не прочитает оттуда.
Если Все дескр связ с одним из концов канала окажутся закрытыми, то его никогда не удастся использ.
Чтение сначала прочитает внутренний буфер канала, а затем возвратит 0 (конец файла). (Если закр все дескрипторы на запись)
Если закрыты все дескрипторы на чтение, то первая запись в канал приведет к тому, что процесс получит SIGPIPE(заверш процесса).
Разница в ситуации конец файла, что след вызов может прочесть данные, если друг процесс туда что-то записал.
Int main() {
Char buf[80]; int d;
If (mkfifo(“fd”,S_IFIFO|0660)==-1)
{perror();exit1;}
D=open(“fd”, O_WRONLY| O_NONBLOCK);
Write(D,buf,sizeof(buf));
Close(D); unlink(“fd”);
Return(0);}