- •Кафедра автоматизації і комп’ютерних систем
- •Классификация архитектурных типов процессоров.
- •Традиционно машинный уровень.
- •Команды обращения к процедурам
- •Процедуры
- •Управление циклами
- •Представление данных
- •Управление процессами
- •Типы адресации
- •Поиск и сортировка
- •Сортировка данных
- •Межпроцессорное взаимодействие.
- •Критические области.
- •Методы синхронизации с пассивным ожиданием.
- •Решение задачи производительности потребителя с помощью мониторов.
- •Разработка систем с помощью передачи сообщений.
- •Классические проблемы межпроцессорного взаимодействия.
- •Планировщик процессов
- •Планирования в системах реального времени.
- •Организация виртуальной памяти.
- •Стратегии замещения страниц.
- •Алгоритм «2-я попытка»
- •Алгоритм «часы»
- •Алгоритм nfu (редко используемая страница)
- •Методы ускорения работы со страницами
- •Способы ассемблирования
- •Связывание программ
- •Структура объектного модуля
- •Атака системы безопасности
- •Принципы проектирования систем безопасности.
- •Аутентификация пользователей
- •Механизм защиты
- •Технические механизмы защиты
- •Защита информации при передаче
- •Основные понятия криптографии:
- •Криптографический протокол
- •Гибридные криптосистемы
- •Цифровая подпись
- •Сертификаты
- •Алгоритм des
- •Принципы аутентификации управления доступом
- •Аутентификация с использованием односторонних функций
- •Аутентификация по принципу "запрос-ответ"
- •Аутентификация управления доступом в Unix
- •Супер-пользователь Root
- •Теневые пароли
- •Поддержка возможностей в Linux.
- •Аутентификация.
- •Идентификаторы безопасности.
- •Одалживание прав.
- •Управление доступом Windows xp.
- •Аудит. Общие принципы.
- •Локальная безопасность.
- •Сетевая безопасность
Методы синхронизации с пассивным ожиданием.
Преймущества: не потребляет процессорное время, находясь в ожидании. Вместо циклов ожидания для реализации пассивного ожидания были предложены приметивы межпроцессорного взаимодействия slep(); и wakeup();
slep() – системный запрос в результате которго процесс блокируется пока его не запустит другой процесс.
wakeup() – это системный запрос, который разблокирует некоторый запрос. Для wakeup() нужен входной параметр, номер процесса для разблокировки.
Во время синхронизации 2-х и более процессов возникает такназываемая проблема ограниченного буфера.
#define №100
int count = 0;
void producer(void)
{
int item;
while(true)
{
item=produce_item();
if(count==N)slep();
incert_item(item);
count++;
if(count==1)wakeup(consummer);
}
}
void consummer(void)
{
int item;
while(true)
{
if(count==0)slep();
item=remove_item();
count--;
if(count==N-1)wakeup(produser);
consume_item(item);
}
}
Доступ к счетчику count не ограничен может возникнуть следущая ситуация: буфер пуст и потребитель толькочто считал count в этот момент планировщик задач передает управление производителю, производитель добавит переменную в буфер и увеличит переменную на 1. Производитель знает что для этого count=0, поэтому он будит потребителя, через 100 циклов производитель перейдет в режим ожидания.
Для 2-х процессов задача вполне разрешима, если в алгоритм будет добавлен бит ожидания N, но такой подход не приемлим т.к. состояние состязания не устраняется.
Проблемы производительности и потребителя при наличии 2-х и более процессов это решение с помощью симафоров и диикстры. Диикстра предложет использовать целочисленную переменную для подсчетов пропущеных сигналов по бутке. Эти переменные были названы симафорами.
Были предложены несколько други приметивы down() и up().
Операция down() сравнивает значение симафора с нулем, если симафор > 0 операция down() уго уменьшает и возвращает управление, если значение симафора = 0 процесс отправляетсяв состояние ожидания, все вышеуказанные операции должны проводится как неделимое действие, что достигается либо с помощью команды припывания или команд tsl.
Операция up() увеличивает значение симафора, если с этим симафором связано один или несколько ожидающих процессов вырабатывает сигнал побудки, а значение симафора не увеличивает, вместо этого уменьшается число ожидающих процессов на 1.
#define №100
typedefint semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;
void producer(void)
{
int item;
while(true)
{
item=produce_item();
down(&empty);
down(&mutex);
incert_item(item);
up(&mutex);
up(&full);
}
}
void consummer(void)
{
int item;
while(true)
{
down(&full);
down(&mutex);
item=remove_item();
up(&mutex);
up(&empty);
consume_item(item);
}
}
Решение задачи производительности потребителя с помощью мониторов.
Монитор – это некоторый приметив синхронизации, обладающий особыми свойствами, иными словами – это некоторая библиотека функций при обращении в любой момент времени может быть активен хотябы 1 процесс. Если при вызове процедуры есть хоть 1-н процесс, вызываемый процесс блокируется. В мониторах были предложены переменные состояния и примитивы wait() и signal().
Примитив wait() вызывается, когда процедура монитора обнаруживает что она не в состоянии продолжить операцию. Она вызывает блокировку процесса, что позволяет другому процессу войти в монитор.
Примитив signal() выполняет операцию побудки на его переменную состояния. Хоар предложил при этом немедленный запуск разбуженного процесса и остановку разбудившего, по решению Хансона, процесс, выполнивший signal() немедленно покидает мониторы.
