Смекни!
smekni.com

Архитектура системы UNIX, общее описание, модель безопасности (стр. 3 из 5)

Ядро могло бы производить чтение и запись непосредственно с диска и на диск при всех обращениях к файловой системе, однако время реакции системы и производительность при этом были бы низкими из-за низкой скорости передачи данных с диска. По этой причине ядро старается свести к минимуму частоту обращений к диску, заведя специальную область внутренних информационных буферов, именуемую буферным кешеми хранящую содержимое блоков диска, к которым перед этим производились обращения.

Перед чтением информации с диска ядро пытается считать что-нибудь из буфера кеша. Если в этом буфере отсутствует информация, ядро читает данные с диска и заносит их в буфер, используя алгоритм, который имеет целью поместить в буфере как можно больше необходимых данных. Аналогично, информация, записываемая на диск, заносится в буфер для того, чтобы находиться там, если ядро позднее попытается считать ее. Ядро также старается свести к минимуму частоту выполнения операций записи на диск.

Плюсы и минусы КЕШ

+

Использование буферов позволяет внести единообразие в процедуру обращения к диску, поскольку ядру нет необходимости знать причину ввода-вывода, что упрощает проектирование системы.

Благодаря использованию буферного кеша, сокращается объем дискового трафика и время реакции и повышается общая производительность системы.

-

Так как ядро в случае отложенной записи не переписывает данные на диск немедленно, такая система уязвима для сбоев, которые оставляют дисковые данные в некорректном виде. Пользователь, запрашивающий выполнение операции записи, никогда не знает, в какой момент данные завершат свой путь на диск.

Использование буферного кеша требует дополнительного копирования.

При передаче большого количества данных дополнительное копирование отрицательным образом отражается на производительности системы, однако при передаче небольших объемов данных производительность повышается.

Представление файлов внутри системы

Систематизируя прошлую информацию, хочу отметить, что каждый файл в системе UNIX имеет уникальный индекс. Индекс содержит информацию, необходимую любому процессу для того, чтобы обратиться к файлу, например, права собственности на файл, права доступа к файлу, размер файла и расположение данных файла в файловой системе. Процессы обращаются к файлам, используя четко определенный набор системных вызовов.

У индексов можно выделить следующие поля:

-Идентификатор владельца файла. Права собственности разделены между индивидуальным владельцем и "групповым" и тем самым помогают определить круг пользователей, имеющих права доступа к файлу. Суперпользователь имеет право доступа ко всем файлам в системе.

-Тип файла. Файл может быть файлом обычного типа, каталогом, специальным файлом,

-Права доступа к файлу. Система разграничивает права доступа к файлу для трех классов пользователей: индивидуального владельца файла, группового владельца и прочих пользователей

-Таблица адресов на диске, в которых располагается информация файла.

-Размер файла

К примеру:

владелец sergey

группа test

тип - обычный файл

права доступа rwxr-wxr-x

последнее обращение 02 Сен 2009 13:45

последнее изменение 15 Сен 2009 10:30

коррекция индекса 23 Сен 2009 13:30

размер 70030 байт


Модель безопасности UNIX

По сути, я косвенно касался данной модели в прошлых разделах, преимущественно при описании файловой системы.

Модель безопасности UNIX довольно проста. В основе её лежитдискреционныймеханизм доступа - каждый объект в системе имеет владельца, который и устанавливает права доступа к объекту. Сами пользователи в системе фигурируют в виде процессов - программ, запущенных от их имени. Так как в операционной системе UNIX даже устройства представляются в виде файлов, достаточно для каждого из них хранить владельца и права на использование этого файла другими пользователями системы.

Но в операционной системе могут работать тысячи пользователей (а такая ситуация встречается и сейчас - на мэйнфреймах и других больших машинах). При этом списки доступа (ACL, Access Control List) для каждого файла разрастутся до гигантских размеров. Частично эту проблему решает добавлениегрупп пользователей, но ведь их число тоже может быть очень большим. Создатели UNIX придумали более элегантное решение: для каждого файла задаются три группы прав - прававладельца, правагруппы владельцаи права длявсех остальных. Таким образом, все права на файл занимают лишь несколько байт.

В UNIX существует три основных права доступа: чтение, запись и исполнение. Если права чтения и записи очевидны и понятны, то право исполнения трактуется по-разному для разных типов файлов. Для простых файлов оно определяет возможностьзапускасодержащейся в нём программы. В UNIX исполняемые файлы могут иметь не только любое расширение (часто они вообще не имеют в имени символа точки), но и содержимое - это может быть откомпилированная для данной архитектуры программа или скрипт на любом из поддерживаемых языков программирования. А вот для директории право исполнения означает возможность "войти" в неё.

Помимо комбинации из этих девяти прав доступа, каждый файл может иметь дополнительные флаги доступа: sticky-бит, специфичный для директорий, и suid-бит, применяемый для исполняемых файлов. Если пометить директорию sticky-битом, удалять файл в ней смогут только владельцы, а не все те, кто имеют права записи на эту директорию - это необходимо в "общих директориях", где создавать и удалять файлы может любой. Suid-бит - большая головная боль системных администраторов, он нужен для повышения прав программы на время запуска.

Распределение основной (оперативной) памяти

Алгоритм планирования использования процессорного времени в сильной степени зависит от выбранной стратегии управления памятью. Процесс может выполняться, если он хотя бы частично присутствует в основной памяти; ЦП не может исполнять процесс, полностью выгруженный во внешнюю память. Тем не менее, основная память - чересчур дефицитный ресурс, который зачастую не может вместить все активные процессы в системе. Если, например, в системе имеется основная память объемом 8 Мбайт, то девять процессов размером по 1 Мбайту каждый уже не смогут в ней одновременно помещаться. Какие процессы в таком случае следует размещать в памяти (хотя бы частично), а какие нет, решает подсистема управления памятью, она же управляет участками виртуального адресного пространства процесса, не резидентными в памяти. Она следит за объемом доступного пространства основной памяти и имеет право периодически переписывать процессы на устройство внешней памяти, именуемое устройством выгрузки, освобождая в основной памяти дополнительное место. Позднее ядро может вновь поместить данные с устройства выгрузки в основную память.

В ранних версиях системы UNIX процессы переносились между основной памятью и устройством выгрузки целиком и, за исключением разделяемой области команд, отдельные независимые части процесса не могли быть объектами перемещения. Такая стратегия управления памятью называется свопингом (подкачкой). Такую стратегию имело смысл реализовывать на машине типа PDP-11, где максимальный размер процесса составлял 64 Кбайта. При использовании этой стратегии размер проце исса ограничивается объемом физической памяти, доступной в системе.

Система BSD (версия 4.0) явилась главным полигоном для применения другой стратегии, стратегии "подкачки по обращению" (demand paging), в соответствии с которой основная память обменивается с внешней не процессами, а страницами памяти; эта стратегия поддерживается и в последних редакциях версии V системы UNIX. Держать в основной памяти весь выполняемый процесс нет необходимости, и ядро загружает в память только отдельные страницы по запросу выполняющегося процесса, ссылающегося на них.

Преимущество стратегии подкачки по обращению состоит в том, что благодаря ей отображение виртуального адресного пространства процесса на физическую память машины становится более гибким: допускается превышение размером процесса объема доступной физической памяти и одновременное размещение в основной памяти большего числа процессов. Преимущество стратегии свопинга состоит в простоте реализации и облегчении "надстроечной" части системы.

Demandpaging

В машинах с объемом физической памяти 1 и 2 Мбайта могут исполняться процессы размером 4 или 5 Мбайт. Ограничение на виртуальный размер процесса, связанное с объемом адресуемой виртуальной памяти, остается в силе и здесь. Поскольку процесс может не поместиться в физической памяти, ядру приходится динамически загружать в память отдельные его части и исполнять их, несмотря на отсутствие остальных частей. В механизме подкачки страниц все открыто для пользовательских программ, за исключением разрешенного процессу виртуального размера.

Процессы стремятся исполнять команды небольшими порциями, которые именуются программными циклами или подпрограммами.

Когда процесс обращается к странице, отсутствующей в его рабочем множестве, возникает ошибка, при обработке которой ядро корректирует рабочее множество процесса, в случае необходимости подкачивая страницы с внешнего устройства. По мере выполнения процесса его рабочее множество видоизменяется в соответствии с используемыми процессом указателями страниц; увеличение размера памяти влечет за собой увеличение рабочего множества и, с другой стороны, сокращение числа ошибок в выполнении процесса.

Подсистема ввода/вывода

Подсистема управления вводом-выводом позволяет процессам поддерживать связь с периферийными устройствами, такими как накопители на магнитных дисках, терминалы, принтеры и сети, с одной стороны, и с модулями ядра, которые управляют устройствами и именуются драйверами устройств, с другой. Между драйверами устройств и типами устройств обычно существует однозначное соответствие: в системе может быть один дисковый драйвер для управления всеми дисководами, один терминальный драйвер для управления всеми терминалами и один ленточный драйвер для управления всеми ленточными накопителями. Если в системе имеются однотипные устройства, полученные от разных изготовителей - например, две марки ленточных накопителей, - в этом случае можно трактовать однотипные устройства как устройства двух различных типов и иметь для них два отдельных драйвера, поскольку таким устройствам для выполнения одних и тех же операций могут потребоваться разные последовательности команд. Один драйвер управляет множеством физических устройств данного типа. Например, один терминальный драйвер может управлять всеми терминалами, подключенными к системе. Драйвер различает устройства, которыми управляет: выходные данные, предназначенные для одного терминала, не должны быть посланы на другой.