Операционная система UNIX
Операционная система UNIX читать книгу онлайн
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Рис. 2.13. Связь между управляющим терминалом, сеансом и группами
Если командный интерпретатор не поддерживает управление заданиями, оба процесса станут членами той же группы, что и сам shell. В этом случае командный интерпретатор должен позаботиться об игнорировании сигналов
SIGINT
SIGQUIT
Ограничения
UNIX является многозадачной системой. Это значит, что несколько процессов конкурируют между собой при доступе к различным ресурсам. Для "справедливого" распределения разделяемых ресурсов, таких как память, дисковое пространство и т.п., каждому процессу установлен набор ограничений. Эти ограничения не носят общесистемного характера, как, например, максимальное число процессов или областей, а устанавливаются для каждого процесса отдельно. Для получения информации о текущих ограничениях и их изменения предназначены системные вызовы getrlimit(2) и setrlimit(2):
#include <sys/time.h>
#include <sys/resource.h>
int getrlimit{int resource, struct rlimit *rlp);
int setrlimit(int resource, const struct rlimit *rlp);
Аргумент
resource
rlimit
rlim_t rlim_cur;
rlim_t rlim_max;
определяющих, соответственно, изменяемое (soft) и жесткое (hard) ограничение. Первое определяет текущее ограничение процесса на данный ресурс, а второе — максимальный возможный предел потребления ресурса. Например, изменяемое ограничение на число открытых процессом файлов может составлять 64, в то время как жесткое ограничение равно 1024.
Любой процесс может изменить значение текущего ограничения вплоть до максимально возможного предела. Жесткое ограничение может быть изменено в сторону увеличения предела потребления ресурса только процессом с привилегиями суперпользователя. Обычные процессы могут только уменьшить значение жесткого ограничения. Обычно ограничения устанавливаются при инициализации системы и затем наследуются порожденными процессами (хотя в дальнейшем могут быть изменены).
Вообще говоря, максимальный возможный предел потребления ресурса может иметь бесконечное значение. Для этого необходимо установить значение
rlim_max
RLIM_INFINITY
Различные ограничения и связанные с ними типы ресурсов приведены в табл. 2.21.
Таблица 2.21. Ограничения процесса (значения аргумента resource)
Ограничение | Тип ресурса | Эффект |
---|---|---|
RLIMIT_CORE | Максимальный размер создаваемого файла core, содержащего образ памяти процесса. Если предел установлен равным 0, файл core создаваться не будет. | После создания файла core запись в этот файл будет остановлена при достижении предельного размера. |
RLIMIT_CPU | Максимальное время использования процессора в секундах. | При превышении предела процессу отправляется сигнал SIGXCPU |
RLIMIT_DATA | Максимальный размер сегмента данных процесса в байтах, т.е. максимальное значение смещения брейк-адреса. | При достижении этого предела последующие вызовы функции brk(2) завершатся с ошибкой ENOMEM |
RLIMIT_FSIZE | Максимальный размер файла, который может создать процесс. Если значение этого предела равно 0, процесс не может создавать файлы. | При достижении этого предела процессу отправляется сигнал SIGXFSZ EFBIG |
RLIMIT_NOFILE | Максимальное количество назначенных файловых дескрипторов процесса. | При достижении этого предела, последующие попытки получить новый файловый дескриптор закончатся с ошибкой EMFlLE |
RLIMIT_STACK | Максимальный размер стека процесса. | При попытке расширить стек за установленный предел отправляется сигнал SIGSEGV |
RLIMIT_VMEM | Максимальный размер отображаемой памяти процесса в байтах. (Предел определен в версиях System V.) | При достижении этого предела последующие вызовы brk(2) или mmap(2) завершатся с ошибкой ENOMEM |
RLIMIT_NPROC | Максимальное число процессов с одним реальным UID. Определяет максимальное число процессов, которые может запустить пользователь. (Предел определен в версиях BSD UNIX.) | При достижении этого предела, последующие вызовы fork(2) для порождения нового процесса завершатся с ошибкой EAGAIN |
RLIMIT_RSS | Максимальный размер в байтах резидентной части процесса (RSS — Resident Set Size). Определяет максимальное количество физической памяти, предоставляемой процессу. (Предел определен в версиях BSD UNIX.) | Если система ощущает недостаток памяти, ядро освободит память за счет процессов, превысивших свой RSS. |
RLIMIT_MEMLOCK | Максимальный физической памяти (физических страниц) в байтах, который процесс может заблокировать с помощью системного вызова mlock(2). (Предел определен в версиях BSD UNIX.) | При превышении предела системный вызов mlock(2) завершится с ошибкой EAGAIN |