Система UNIX – многопользовательская. Каждому пользователю после регистрации предоставляется виртуальный компьютер, в котором есть все необходимые ресурсы: процессор (процессорное время выделяется на основе «карусельной» диспетчеризации – RR и с использованием динамических приоритетов), память, устройства, файлы. Текущее состояние такого виртуального компьютера называется образ. Образ состоит из:
· образа памяти;
· значений общих регистров процессора;
· состояния открытых файлов;
· текущего директория (каталога файлов) и другой информации.
Образ процесса во время его выполнения размещается в основной памяти.
Образ памяти делится на три логических сегмента:
· сегмент реентерабельных процедур – начинается с нулевого адреса в виртуальном адресном пространстве процесса;
· сегмент данных – располагается сразу за сегментом процедур;
· сегмент стека – начинается со старших адресов и растет в сторону младших.
Чтобы войти в систему пользователь должен со свободного терминала ввести свое учетное имя (account name) и, возможно, пароль (password). Каждый зарегистрированный пользователь получает неограниченный доступ к своему домашнему (home) каталогу.
Традиционный способ взаимодействия пользователя с системой UNIX – использование командных языков. Но сейчас работают все чаще с графическим интерфейсом X Window. Общее название для любого командного интерпретатора ОС UNIX – shell (оболочка). Вызванный командный интерпретатор выдает приглашение на ввод пользователем командной строки, которая может содержать простую команду, конвейер команд или последовательность команд.
Оболочкой (shell) называют механизм взаимодействия между пользователем и системой. Любой командный язык семейства shell состоит из трех частей:
· служебных инструкций;
· встроенных команд, выполняемых интерпретатором командного языка;
· команд, представляемых отдельными выполняемыми файлами.
Процессы в ОС UNIX понимаются в классическом смысле этого термина, т.е. как программа, выполняемая в собственном виртуальном адресном пространстве. Когда пользователь входит в систему, автоматически создается процесс. Для создания нового процесса и запуска в нем программы используются два системных вызова API – fork() и exec(имя_выполняемого_файла). Каждый процесс, за исключением нулевого, порождается в результате запуска другим процессом операции fork(). Каждый процесс имеет одного родителя, но может породить много процессов. Процесс с идентификатором 1, известный под именем unit является предком любого другого процесса в системе и связан с каждым процессом особым образом.