- •Раздел 1. Операционная система unix. Введение в операционную систему unix
- •Отличительные черты ос unix
- •Основы архитектуры операционной системы unix Модель системы unix.
- •Структура ядра ос unix.
- •Основы файловой системы ос unix
- •Типы файлов
- •Структура файловой системы unix
- •Владельцы файлов
- •Права доступа к файлу
- •Дополнительные атрибуты файлов
- •Устройства
- •Маска создания файла
- •Программы Oc unix
- •Процессы ос unix
- •Типы процессов
- •Атрибуты процесса
- •Процесс создания и запуска программ
- •Системный вызов завершения процесса exit
- •Системные функции типа exec
- •Обработка ошибок
- •Ограничения для процессов
- •Пользователи системы, Атрибуты пользователя
- •Средства ВзаимодействиЯ между процессАми
- •Сигналы
- •Посылка сигналов.
- •Int raise (int sig); // посылает сигнал вызывающему процессу (т.Е. Самому себе).
- •Обработка сигналов.
- •Набор сигналов.
- •Файловая подсистема ос unix
- •Индексный дескриптор
- •Блоки хранения данных
- •Недостатки и ограничения файловой системы s5fs
- •Файловая система ffs (Fast File System)
- •Основные отличия ffs от s5fs
- •Ограничения ffs
- •Каталоги ffs
- •Раздел 2. Взаимодействие процессов. Процесс, Понятие и классификация
- •Ресурсы, Понятие и классификация
- •Взаимодействие процессов Задача взаимного исключения
- •Integer очередь;
- •ОБобщенная задача взаимного исключения
- •Integer очередь;
- •Синхронизирующие примитивы (семафоры)
- •Процесс 1 :
- •Процесс 2 :
- •V(свободно);
- •Задача “производитель-потребитель” применение ОбщиХ семафорОв
- •Задача “производитель-потребитель” (буфер ограниченНый)
- •Взаимодействие через переменные состояния
- •Integer array желание[1:n], сп[1:n];
- •Integer чпб, бб, рб, чсеб, I;
- •Integer разм_п, n, max, nmax;
- •Проблема тупиков
- •Алгоритм банкира
- •Integer Св_Деньги; boolean Безопасно;
- •If ((Завершение_под_сомнением [I]) and
- •Применение алгоритма банкира
- •V(Взаимн_искл);
- •V(Возвращенные_Талеры[Номер_Клиента[m]]);
- •If (Попытка_выдать_талер_клиенту(h))
- •Монитороподобные средства синхронизации
- •Механизм типа «критическая область»
- •Механизм типа «условная критическая область»
- •Var s : semaphore; считывание : boolean; m : t;
- •Раздел 3. Вычислительные структуры. Машины, управляемые контроллерами (устройствами управления)
- •Усовершенствованная структура вычислительной машины, управляемой контроллерОм
- •Системы с операционным конвейером
- •Мультипроцессорные системы
- •Транспьютеры
- •Распределение памяти в транспьютерах
- •Диспетчеризация процессов
- •Организация ВводА / выводА в транспьютере.
- •Гарвардская архитектура на примере процессоров семейства adsp
Атрибуты процесса
Атрибут обеспечивает возможность ОС по управлению работойпроцесса. К ним относятся:
Идентификатор процесса PID (Process ID). Каждый процесс имеет уникальный идентификатор, позволяющий ядру системы различать процессы. Когда создается новый процесс, ядро присваивает ему следующий свободный идентификатор. Присваивание идентификаторов происходит по возрастанию, т.е. идентификатор следующего процесса больше идентификатора процесса, созданного перед ним. Если идентификатор достиг максимально возможного значения, то следующий процесс получит минимальный свободный идентификатор и цикл выделяет индетификатор повторно. Когда процесс завершит свою работу, ядро освобождает занятый им идентификатор. Т.о.:
Принципиально в ОС можно породить ограниченное число процессов.
Ограничение на максимальное число процессов одного пользователя.
С каждым процессом связано уникальное имя.
Есть система идентификатора для процессов.
Чтобы создать новый процесс, необходимо освобождать идентификатор завершения процессов.
Идентификатор родительского процесса PPID(Parent Process ID) идентификатор процесса, породившего данный процесс.
Приоритет процесса Vice Number - относительный приоритет процесса, учитываемый планировщиком процессов при очерёдности запуска. Фактически распределение процессорных ресурсов определяется приоритетом выполнения, зависящим от нескольких факторов (в том числе и от относительного приоритета процессов). Относительный приоритет не изменяется системой на всём протяжении жизни процесса, но может быть изменён пользователем или администратором,в отличие от приоритета выполнения,динамически обновляемого ядром.
Терминальная линия TTY это терминал (псевдотерминал), ассоциированный с процессом,если таковой существует. Демоны не имеют ассоциированного терминала.
Реальный (RID) и эффективный (EUID) идентификаторы пользователя. Реальный идентификатор это идентификатор пользователя, запустившего процесс, а эффективный идентификатор используется для определения прав доступа процесса к системным ресурсам, в первую очередьк рессурсам файловой системы. В большинстве случаев, реальный и эффективный идентификаторы совпадают, однако есть возможность задать процессу более широкие права, путём установки специального флага SUID. В этом случае эффективный идентификатор пользователя получит значение идентификатора владельца выполняемого файла.
Реальный (RGID) и эффективный (EGID) идентификаторы группы. Реальный идентификатор группы равен идентификатору первичной группы пользователя, запустившего процесс. Эффективный идентификатор служит для определения прав доступа к системным ресурсам по классу доступа групп. Также можно его модифицировать с помощью SUID.
Процесс создания и запуска программ
#include <sys\types.h> #include <unistd.h>
pid_t fork(void);
pid_t getpid (void); //функция, возвращающая идентификатор данного процесса.
pid_t getppid (void); //системный вызов, возвращающий идентификатор процесса-отца для текущего процесса.
sh PID=324 PPID=1
#include <sys/types.h>
#include <unistd.h>
main( )
{
int pid;
pid = fork( );
if (pid == -1)
{
printf(“Ошибка создания процесса”);
exit(-1);
}
if (pid == 0)
{
printf(“\n Процесс-потомок”);
}
else
{ printf(“\nПроцесс-родитель”);
. . .
}
}
Новый процесс порождается с помощью системного вызова fork. Процесс, сделавший вызов fork называется родительским, а вновь созданный процесс – дочерним (или процессом-сыном).
Новый процесс является точной копией породившего его процесса. Он имеет те же инструкции и данные, что и его родитель. Выполнение родительского и дочернего процесса начинается с одной и той же инструкции (команды), следующей за вызовом fork.
Процесс сын следующие атрибуты родительского процесса:
идентификатор пользователя и группы
переменные окружения
диспозиция сигналов и их обработчики
ограничения, накладываемые на процесс
текущий и корневой каталоги
маска создания файлов
все файловые дескрипторы, включая файловые указатели
управляющий терминал.
Но между порождающим и порожденным процессом имеются отличия:
процессу-сыну присваивается уникальный идентификатор PID
родительские идентификаторы для процесса-отца и процесса-сына различны
дочерний процесс свободен от сигналов, ожидающих доставки.
значение, возвращаемое системным вызовом fork, различно для процесса-отца и процесса-сына. Отцу возвращается значение, равное идентификатору PID сына, а процессу-сыну возвращается значение 0. При ошибке возвращается значение –1.
При этом могут обнаруживаться две ошибочные ситуации, которые записываются в глобальную переменную errno:
ENOMEM для создания нового процесса не хватает памяти.
EAGAIN количество текущих процессов превышает допущенные в системе ограничения.
CHILD_MAX – количество процессов, созданных одним пользователем.
MAXPID – количество процессов, одновременно существующих во всей системе.