
- •1.Архитектура операционных систем
- •1.1Общие вопросы архитектуры операционных систем
- •1.2Архитектура Windows
- •1.2.1История возникновения Windows
- •1.2.2Архитектура ос Windows
- •1.2.3История возникновения ос Linux
- •1.2.4Архитектура Linux
- •1.2.5Интерфейсы системы unix
- •1.2.6Файловая система unix
- •1.2.7Аутентификация в unix
- •1.2.8Сценарии командной оболочки unix
- •1.3Операционная система qnx
- •1.3.1 Архитектура qnx
- •1.4Выводы
- •1.5Вопросы для самоконтроля
- •2.Типы и алгоритмы работы с оперативной памятью
- •2.1Общие принципы функционирования подсистемы памяти в ос
- •2.1.1Обобщённые принципы управления памятью
- •2.1.2Однозадачная система без подкачки на диск
- •2.1.3Многозадачность с фиксированными разделами
- •2.1.4Подкачка
- •2.1.5Управление памятью с помощью битовых массивов
- •2.1.6Управление памятью с помощью связанных списков
- •2.1.7Виртуальная память
- •2.1.8Многоуровневые таблицы страниц
- •2.1.9Алгоритмы замещения страниц
- •2.2Виртуальная память ос Windows
- •2.2.1Архитектура памяти в ос Windows
- •2.2.2Работа с виртуальной памятью в ос Windows
- •2.2.3Использование виртуальной памяти в приложениях
- •2.3Пример организации страничной памяти на примере linux
- •2.3.1Страничная организация памяти в Linux
- •2.3.2Права доступа к области памяти
- •2.3.3Работа с областями памяти в Linux
- •3.Процессы и потоки
- •3.1Процессы
- •3.1.1Модель процесса
- •3.1.2Создание процесса
- •3.1.3Завершение процесса
- •3.1.4Состояния процессов
- •3.1.5Реализация процессов
- •3.2Потоки
- •3.2.1Реализация потоков
- •3.2.2Реализация потоков на уровне ядра
- •3.2.3Смешанная реализация
- •3.2.4 Метод управления «Активация планировщика»
- •3.2.5Всплывающие потоки
- •3.3Межпроцессное взаимодействие
- •3.3.1Состояние состязания
- •3.3.2Критические секции (Критические области)
- •3.3.3Взаимное исключение с активным ожиданием
- •3.3.4Примитивы межпроцессного взаимодействия
- •3.4Семафоры
- •3.5Мьютексы
- •3.6Организация многопоточной обработки в среде Windows
- •3.6.1Объекты ядра Windows
- •3.6.2Потоки Windows
- •3.6.3Синхронизация потоков в Windows
- •3.6.4Синхронизация потоков с помощью объектов ядра
- •3.6.5Сравнение объектов, используемых для синхронизации потоков
- •3.7Организация процессов и потоков в Linux
- •3.7.1Среда окружения в Linux
- •3.7.2Создание нового процесса. Системный вызов exec.
- •3.7.3Потоки unix. Функции потоков стандарта posix.
- •3.8Синхронизация потоков в unix
- •3.8.1Мьютексы
- •3.8.2Семафоры
- •0,0,0, //Ожидать обнуления семафора
- •0,1,0 // Затем увеличить значение семафора на 1};
- •0,1, 0 // Увеличитьзначение семафора на 1};
0,0,0, //Ожидать обнуления семафора
0,1,0 // Затем увеличить значение семафора на 1};
Система производит вызов semop (semid, &sop_lock[0], 2); , обеспечивающий атомарное выполнение двух операций: 1) ожидание доступности ресурса, 2) запирание ресурса.
Операция, освобождающая ресурс выглядит следующим образом:
static struct sembuf sop_unlock[1]={
0, -1, 0 // обнулить значение семафора};
Система производит вызов semop (semid, &sop_unlock[0], 1);, который уменьшит значение семафора на 1, и он станет равным 0, что соответствует освобождению ресурса. Если какой- либо из процессов ожидает ресурса, он будет «разбужен» системой, и сможет в свою очередь запереть ресурс и работать с ним.
Пример №2: 1 – разрешающее значение; 0– запрещающее
Операция, запирающая ресурс выглядит следующим образом:
static struct sembuf sop_lock[1]={
0,-1,0 // ожидать разрешающего сигнала (1)
//затем обнулить семафор};
Система производит вызов semop (semid, &sop_lock[0], 1); , обеспечивающий запирание ресурса.
Операция, освобождающая ресурс выглядит следующим образом:
static struct sembuf sop_unlock[1]={
0,1, 0 // Увеличитьзначение семафора на 1};
Система производит вызов semop (semid, &sop_unlock[0], 1);
Во втором случае операции получились проще – код компактнее, однако этот подход имеет потенциальную опасность: при создании семафора, его значения устанавливаются равными 0, и во втором случае он сразу же запирает ресурс. Для преодоления данной ситуации процесс, первым создавший семафор, должен вызвать операцию sop_unlock, однако в этом случае процесс инициализации может быть прерван другим процессом. В итоге, значение семафора станет равным 2, что повредит нормальной работе с разделяемым ресурсом..
Функция semctl
#include<sys/types.h>
#include<sys/ips.h>
#include<sys/sem.h>
int semctl(int semfd, int num, int cmd,union semun arg);
С помощью этого API можно изменять управляющие параметры набора семафоров, указанного аргументом semfd, а также удаляет семафор.
semfd –это дескриптор набора семафоров, который берется из вызова функции semget.
Значение num – это индекс семафора, а следующий аргумент, cmd, задает операцию, которая должна быть выполнена над конкретным семафором данного набора.
Аргумент arg – это объект типа union, который может использоваться для задания или выборки управляющих параметров одного или нескольких семафоров в соответствии с аргументом cmd. Тип данных union semun определяется в заголовке <sys/sem.h>:
union semun{
int val;// значение семафора
struct semid_ds *mbuf;// управляющие параметры набора
ushort *array;//массив значений семафора}
рекомендованная литература
Ахо А. Дж Удльман Компиляторы: принципы, технологии инструменты – К.: «Вильямс» 2008 – 750 с
Круз И., Талер Л. Основы MAPI – М. Русская редакция, 1997
Олифер В.Г., Олифер Н.А. Сетевые операционные системы
Рихтер Дж. Windows для профессионалов – К.: Вильямс, 2007. – 702с.
Рихтер Дж. программирование серверных приложений для Microsoft Windows 2000 – М.: Русская редакция, 2001 – 592 с.
Роджерсон Д. Основы COM – К.: Вильямс, 2008
Романец Ю. В., Тимофеев П.А., Шаньгин В.Ф. Защита информации в компьютерных системах и сетях. – М.: Радио и связь, 2001 г. – 376 с.
Рочкинд Марк Дж. Программирование для UNIX. Наиболее полное руководство К.: BHV 2007 – 704 с.
Соколов А.И., Шаньгин В.Ф. Защита информации в распределённых корпоративных сетях и системах – М.: ДМК, 2002 . – 656 с.
Солдатов В.П. Программирование драйверов Windows – М.: Бином, 2004
Столлингс В. Современные операционные системы 2е изд – М.: Питер 2004 г.
Таненбаум Э. Современные операционные системы 2-е изд – М.: Питер, 2002 г. . - 1040с
Теренс Чан Системное программирование на С++ для UNIX К.: Изд. группа "BHV" .- 1997 . – 589 с.
1 Далее в конспекте термин "таблица страниц" (написанный строчными буквами) означает любую страницу, хранящую отображение линейных адресов в физические. В то же время термин "Таблица Страниц" (с заглавных букв) означает страницу на последнем уровне иерархии страничных таблиц.