
- •1.Структура ядра unix
- •2.Типы файлов в unix
- •3.Владельцы файлов
- •4.Права доступа к файлу
- •5.Атрибуты пользователя
- •6.Типы процессов
- •7.Атрибуты процесса
- •8.Жизненный путь процесса
- •9. Пользовательская среда в unix.
- •10. Подсистема управления процессом.
- •13 Пространство и контекст процесса
- •11. Инфраструктура процесса в unix.
- •12. Состояния процессов в unix.
- •14 Файловая система s5fs
- •15.Файловая система ffs
- •16.Примитивы доступа к файлам в ос unix
- •17.Параллельное программирование в unix.
- •18.Создание процесса с помощью fork
- •19.Приминение функции exec
- •20. Програмные каналы
- •21. Переназначение стандартного ввода/вывода.
- •23. Программные каналы как средство синхронизации процессов.
- •22.Использование канала fifo
- •24.Сигналы в unix
- •25.Обработка сигналов.
- •26. Использование обработчика сигналов для предотвращения появления процессов "зомби"
- •27. Посылка сигналов процессам.
- •29.Разделяемая память в unix
- •28.Завершение выполнения процесса.
- •Ожидание завершения выполнения процесса
- •30. Семафоры в unix
- •33. Cтандартный ввод стандартный вывод и стандартный вывод диагностики.
- •31. Очереди сообщения в unix
- •32.Блокировка записей
- •34. Cтандартная библиотека ввода/вывода.
- •35.Системное администрирование. Начальная загрузка ос
- •36.Взаимодействие пользователей с ос.
- •37. Задание системного времени(и даты).
- •38. Уровни выполнения: (команда init schutdown)
- •39.Системные каталоги и папки
- •41.Файл /etc/passwd/
- •43.Управление правами доступа
- •42. Управление пользовательской системной средой
- •40. Системные журналы и анализ производительности процесса.
29.Разделяемая память в unix
РП Позволяет множеству процессов отобразить часть своих виртуальных адресов в одну облачть реальных адресов. Любой процесс может записывать данные в разделяемую область памяти (РОП), а другие могут читать и изменять эти данные; но в РОП не предусмотрены методы управления доступом для процессов. Поэтому РП обычно используют совместно с семафорами. РП исключает такой недостаток очереди сообщений, как двойное копирование в память. Процесс, присоединившийся к РП, получает указатель на эту РП. В любой момент времени в системе может существовать множество РОП.
В адресном пространстве ядра имеется служебная таблица разделяемой памяти, в которой отслеживаются все области адресного пространства, которые создаются в системе. Каждый элемент таблицы содержит характеристики 1 из РОП.
Сегмент разделяемой памяти однозначно определяется положительным числом, называемым (идентификатором сегмента разделяемой памяти shmid). У каждого сегмента разделяемой памяти имеется структура данных struct shmid_ds, определенная в <sys/shm.h>, состоящая из следующих полей:
struct ipc_perm shm_perm;
{ int shm_segsz;/* размер сегмента */
ushort shm_cpid;/* идентификатор пользователя-создателя */
ushort shm_lpid;/* идентификатор процесса, последний раз работавшего с сегментом */
short shm_nattch;/* количество текущих подключений сегмента */
time_t shm_atime;/* время последнего подключения сегмента */
time_t shm_dtime;/* время последнего отключения сегмента */
time_t shm_ctime;/* время последнего изменения структуры */
} shm_perm;
SHMGET- присваивает идентификатор разделяемому сегменту памяти. shmget() возвращает идентификатор разделяемому сегменту памяти, соответствующий значению аргумента key. Создается новый разделяемый сегмент памяти с размером, округленным в большую сторону от величины size.
SHMCTL- производит операции по управлению разделяемыми сегментами памяти. shmctl() позволяет пользователю получать информацию о разделяемых сегментах памяти, устанавливать владельца, группу разделяемого сегмента, права на него; эта функция может также удалить сегмент. Информация о сегменте, которая находится в shmid, возвращается в структуру shmid_ds.
SHMOP- работает с разделяемой памятью. Функция shmat подстыковывает сегмент разделяемой памяти shmid к адресному пространству вызывающего процесса Функция shmdt отстыковывает сегмент разделяемой памяти, находящийся по адресу shmaddr, от адресного пространства вызвающего процесса. Отстыковываемый сегмент должен быть среди пристыкованных ранее функцией shmat. Параметр shmaddr должен быть равен значению, которое возвратила соответствующая функция shmat. При удачном выполнении системный вызов shmdt обновляет содержимое структуры shmid_ds, связанной с разделяемым сегментом.
28.Завершение выполнения процесса.
Процесс завершает свое выполнение с помощью функции exit. Эта функция может быть вызвана системным вызовом а если завершение процесса вызвано получением сигнала, функцию вызывает
само ядро. Функция exit() выполняет следующие действия:
Отключает все сигналы.
Закрывает все открытые файлы.
Сохраняет статистику ресурсов и код возврата в записи таблицы процессов.
Изменяет состояние процесса на "зомби".
Делает процесс родительским для всех потомков данного процесса.
Освобождает адресное пространство процесса, u-area, карты отображения и области свопинга, связанные с процессом.
Отправляет сигнал SIGCHLD родительскому процессу, уведомляя его о "смерти" потомка.
Пробуждает родительский процесс, если тот ожидает завершения потомка.
Запускает функцию переключения контекста, в результате чего высокоприоритетный процесс получает доступ к вычислительным ресурсам.
После завершения выполнения функции exit() процесс находится в состоянии "зомби". При этом от процесса остается запись в таблице процессов, содержащая статистику использования вычислительных ресурсов и код возврата. Эта информация может потребоваться родительскому процессу, поэтому освобождение структуры производит родитель с помощью системного вызова возвращающего статистику и код возврата потомка. Если родительский процесс заканчивает свое выполнение раньше потомка, "родительские права" переходят к процессу В этом случае после смерти потомка делает системный вызов
и освобождает структуру.
Exit(status), где status это значение возвращается в родительский процесс. Процесс переходит в состояние существования, освобождает ресурсы и ликвидирует свой процесс.