- •История возникновения и развития ос
- •Основные версии unix.
- •Основные версии ос Windows
- •Установка unix-подобной ос Краткие сведения по установке Unix-подобных систем (на примере FreeBsd)
- •Установка ос Windows.
- •Ядро и вспомогательные модули ос
- •Ядро в привилегированном режиме
- •Микроядерная архитектура
- •Многослойная структура ос
- •Физическая память и виртуальное адресное пространство.
- •Виртуальное адресное пространство процесса
- •9.Способы доступа к памяти в защищенном режиме.
- •10. Многозадачность ос
- •11. Динамически подключаемая библиоте
- •Формат файлов dll придерживается тех же соглашений, что и формат исполняемых файлов, сочетая код, таблицы и ресурсы, отличаясь лишь интерпретацией некоторых полей. Цели введения
- •12) Файловая подсистема ос.
- •13) Типы файлов.
- •14) Блочные и символьные устройства
- •15) Файлы, проецируемые в память
- •16) Сокеты
- •17) Корневой каталог.
- •18) Права доступа к файлам в ос.
- •Возможные действия над файлом
- •Указание прав доступа с помощью буквенной нотации
- •Указание прав доступа с помощью числовой нотации
- •19. Системные процессы ос.
- •20. Прикладные процессы ос
- •21. Взаимодействие между процессами.
- •22. Сигналы межпроцессного взаимодействия
- •23. Алармымежпроцессного взаимодействия.
- •24. Каналы fifOмежпроцессного взаимодействия.
- •25. Сообщения межпроцессного взаимодействия.
- •Семафоры межпроцессорного взаимодействия. Семафоры
- •Командный интерпретатор ос.
- •Программирования на языке командного интерпретатора ос.
- •Команда в общем виде:
- •Цикл for
- •Операторы цикла while и until
- •Переменные в скриптах командного интерпретатора ос.
- •Перенаправление ввода/вывода командного интерпретатора ос.
- •Команды more и sort
- •Ветвления в скриптах командного интерпретатора ос. Оператор выбора
- •Условный оператор
- •Циклы в скриптах командного интерпретатора ос.
- •Цикл for
- •Операторы цикла while и until
- •33. Настройка локальной сети.
- •34. Протоколы tcp/ip сети.
- •35. Служба доменных имен.
- •36.Сетевая файловая система.
- •37. Методы управления локальной сетью.
- •38. Методы настройки служб ос.
- •39. Методы управления учетными записями пользователей ос.
- •Сервис печати ос.
- •Методы повышения отказоустойчивости ос.
- •Методы диагностики процесса загрузки ос.
- •Методы диагностики текущего состояния ос.
- •Актуальность защиты операционной системы.
- •Виды атак на ос.
- •Способы защиты ос от типовых атак.
23. Алармымежпроцессного взаимодействия.
Программа “Будильник”.
Программа “Будильник”. Существуют задачи, в которых необходимо прервать выполнение процесса по истечении некоторого количества времени. Средствами ОС “заводится” будильник, который будет поторапливать ввести некоторое имя. Системный вызов alarm(): #include unsignedintalarm(unsignedintseconds); инициализирует отложенное появление сигнала ^ SIGALRM - процесс запрашивает ядро отправить ему самому сигнал по прошествии определенного времени. #include #include #include voidalrm(ints) /*обработчик сигнала^ SIG_ALRM */ { printf(“\n жду имя \n”); alarm(5); /* заводим будильник */ signal(SIGALRM, alrm); /* переустанавливаем реакцию на сигнал */ } intmain(intargc, char **argv) { chars[80]; signal(SIGALRM, alrm); /* установка обработчика alrm на приход сигнала SIG_ALRM */ alarm(5); /* заводим будильник */ printf(“Введите имя \n”); for (;;) { printf(“имя:”); if (gets(s) != NULL) break; /* ожидаем ввода имени */ }; printf(“OK! \n”); return 0; } В начале программы мы устанавливаем реакцию на сигнал ^ SIGALRM - функцию alarm(), далее мы заводим будильник, запрашиваем “Введите имя” и ожидаем ввода строки символов. Если ввод строки задерживается, то будет вызвана функция alarm(), которая напомнит, что программа “ждет имя”, опять заведет будильник и поставит себя на обработку сигнала SIGALRM еще раз. И так будет до тех пор, пока не будет введена строка. Здесь имеется один нюанс: если в момент выполнения системного вызова возникает событие, связанное с сигналом, то система прерывает выполнение системного вызова и возвращает код ответа, равный «-1».
Двухпроцессный вариант программы “Будильник”.
#include #include #include #include void alr(int s) { printf(“\n Быстрее!!! \n”); signal(SIGALRM, alr); /* переустановка обработчика alr на приход сигнала^ SIGALRM */ } int main(intargc, char **argv) { char s[80]; intpid; signal(SIGALRM, alr); /* установкаобработчикаalrнаприходсигнала SIGALRM */ if (pid = fork()) { for (;;) { sleep(5); /*приостанавливаемпроцессна 5 секунд */ kill(pid, SIGALRM); /*отправляемсигнал SIGALRM процессу- сыну */ } } else { printf(“Введитеимя \n”); for (;;) { printf(“имя:”); if (gets(s) != NULL) break; /*ожидаемвводаимени*/ } printf(“OK!\n”); kill(getppid(), SIGKILL); /* убиваемзациклившегосяотца */ } return 0; } Вданномслучаепрограммареализуетсявдвухпроцессах.Как и в предыдущем примере, имеется функция реакции на сигнал alr(), которая выводит на экран сообщение и переустанавливает функцию реакции на сигнал, опять же на себя. В основной программе мы также указываем alr() как реакцию на SIGALRM. После этого мы запускаем сыновний процесс, и отцовский процесс (бесконечный цикл) “засыпает” на 5 единиц времени, после чего сыновнему процессу будет отправлен сигнал SIGALRM. Все, что ниже цикла, будет выполняться в процессе-сыне: мы ожидаем ввода строки, если ввод осуществлен, то происходит уничтожение отца (SIGKILL).
