- •С. Ф. Храпский операционные системы, среды и оболочки основные теоретические сведения
 - •Оглавление
 - •Предисловие
 - •Введение
 - •1. Управление процессами в автономных однопроцессорных вычислительных машинах
 - •1.1. Понятия вычислительного процесса и ресурса
 - •1.2. Планирование процессов
 - •1.3. Межпроцессное взаимодействие
 - •1.4. Понятия потока («нити») и многопоточности
 - •Контрольные вопросы и задания
 - •2. Управление ресурсами в автономных однопроцессорных компьютерах
 - •2.1. Управление памятью
 - •Управление вводом-выводом
 - •2.3. Управление файлами и файловая система
 - •Контрольные вопросы и задания
 - •3. Управление процессами и ресурсами в автономных многопроцессорных вычислительных машинах
 - •3.1. Реализация операционных систем многопроцессорных вычислительных машин
 - •Планирование и синхронизация в многопроцессорных вычислительных машинах
 - •Контрольные вопросы и задания
 - •4. Управление процессами и ресурсами в многомашинных вычислительных системах
 - •4.1. Способы организации управления процессами
 - •И ресурсами в многомашинных вычислительных системах
 - •4.2. Понятия сетевой и распределенной операционных систем
 - •4.3. Варианты реализации распределенных операционных систем
 - •Контрольные вопросы и задания
 - •5. Общие концепции разработки операционных систем
 - •5.1. Основные принципы построения операционных систем
 - •5.2. Архитектурные особенности проектирования операционных систем
 - •5.3. Принципы построения системных и прикладных программных интерфейсов
 - •Контрольные вопросы и задания
 - •6. История развития операционных систем и эволюция их функциональных характеристик
 - •6.1. Операционные системы разных этапов разработки вычислительных машин
 - •6.2. История развития и характеристики операционных систем unix
 - •6.3. История развития и характеристики операционных систем семейства Windows
 - •Контрольные вопросы и задания
 - •7. Пример практической реализации операционной системы: unix
 - •7.1. Обзор системы unix
 - •7.1.1. Общие представления
 - •7.1.2. Интерфейсы системы unix
 - •7.1.3. Оболочка и утилиты системы unix
 - •7.1.4. Структура ядра системы unix
 - •7.2. Процессы в unix
 - •7.2.1. Основные понятия
 - •7.2.2. Реализация процессов в unix
 - •7.2.3. Планирование в системе unix
 - •7.3. Управление памятью в unix
 - •7.3.1. Основные понятия
 - •7.3.2. Реализация управления памятью в unix
 - •7.4. Ввод-вывод в системе unix
 - •7.4.1. Основные понятия
 - •7.4.2. Реализация ввода-вывода в системе unix
 - •7.4.3. Потоки данных в unix
 - •7.5. Файловые системы unix
 - •7.5.1. Основные понятия
 - •7.5.2. Реализация классической файловой системы unix
 - •7.5.3. Реализация файловой системы Berkeley Fast
 - •7.5.4. Реализация файловой системы Linux
 - •7.5.5. Реализация файловой системы nfs
 - •7.6. Безопасность в unix
 - •7.6.1. Основные понятия
 - •7.6.2. Реализация безопасности в unix
 - •Контрольные вопросы и задания
 - •8. Пример практической реализации операционной системы: Windows 2000
 - •8.1. Обзор структуры операционной систем Windows 2000
 - •8.1.1. Структура системы
 - •8.1.2. Реализация объектов
 - •8.1.3. Подсистемы окружения
 - •8.2. Процессы и потоки в Windows 2000
 - •8.2.1. Основные понятия
 - •8.2.2. Межпроцессное взаимодействие
 - •8.2.3. Реализация процессов и потоков
 - •8.2.4. Загрузка Windows 2000
 - •8.3. Управление памятью в Windows 2000
 - •8.3.1. Основные понятия
 - •8.3.2. Реализация управления памятью
 - •8.4. Ввод-вывод в системе Windows 2000
 - •8.4.1. Основные понятия
 - •8.4.2. Реализация ввода-вывода в Windows 2000
 - •8.5. Файловые системы Windows 2000
 - •8.5.1. Файловые системы типа fat
 - •8.5.2. Файловая система типа ntfs
 - •8.6. Безопасность в Windows 2000
 - •8.6.1. Основные понятия
 - •8.6.2. Реализация защиты в Windows 2000
 - •Контрольные вопросы и задания
 - •Заключение
 - •Библиографический список
 - •Словарь терминов и определений
 - •Алфавитно-предметный указатель
 - •Храпский Сергей Филиппович операционные системы, среды и оболочки основные теоретические сведения
 - •644099, Омск, ул. Красногвардейская, 9
 
7.6.2. Реализация безопасности в unix
Когда пользователь входит в систему, программа регистрации login (которая является SETUID root) запрашивает у пользователя его имя и пароль. Затем она хэширует пароль и ищет его в файле паролей /etc/passwd, чтобы определить, соответствует ли хэш-код содержащимся в нем значениям. Хэширование применяется, чтобы избежать хранения пароля в незашифрованном виде где-либо в системе. Если пароль введен верно, программа регистрации считывает из файла /etc/passwd имя программы оболочки, которую предпочитает пользователь. Ей может быть программа sh, но это также может быть и другая оболочка, например csh или ksh. Затем программа регистрации использует системные вызовы setuld и setgid, чтобы установить для себя UID и GID. После этого программа регистрации открывает клавиатуру для стандартного ввода (файл с дескриптором 0) и экран для стандартного вывода (файл с дескриптором 1), а также экран для вывода стандартного потока сообщений об ошибках (файл с дескриптором 2). Наконец, она выполняет оболочку, которую указал пользователь, таким образом, завершая свою работу.
С этого момента начинает работу оболочка с установленными UID и GID, а также стандартными потоками ввода, вывода и ошибок, настроенными на устройства ввода-вывода по умолчанию. Все процессы, которые она запускает при помощи системного вызова fork (то есть команды, вводимые пользователем с клавиатуры), автоматически наследуют UID и GID оболочки, поэтому у них будет верное значение владельца и группы. Все файлы, создаваемые этими процессами, также будут иметь эти значения.
Когда любой процесс пытается открыть файл, система сначала проверяет биты защиты в i-узле файла для заданных значений рабочих UID и GID, чтобы определить, разрешен ли доступ для данного процесса. Если доступ разрешен, файл открывается и процессу возвращается дескриптор файла. В противном случае файл не открывается, а процессу возвращается значение –1. При последующих обращениях к системным вызовам read и write проверка не выполняется. В результате, если режим защиты файла изменяется уже после того, как файл открыт, новый режим не повлияет на процессы, которые уже успели открыть этот файл.
В операционной системе Linux защита файлов и ресурсов осуществляется так же, как и в UNIX.
Резюме
Операционная система UNIX широко используется на вычислительных машинах различных классов от ноутбуков до суперкомпьютеров. В операционной системе UNIX есть три интерфейса: оболочка, библиотека языка С и сами системные вызовы. Оболочка позволяет пользователям вводить команды и исполнять их. Это могут быть простые команды, конвейеры или более сложные структуры. Ввод и вывод могут перенаправляться. В библиотеке С содержатся системные вызовы, а также множество расширенных вызовов. Каждый из системных вызовов выполняет определенные необходимые функции.
К ключевым понятиям операционной системы UNIX относятся процесс, модель памяти, ввод-вывод и файловая система. Процессы могут создавать дочерние процессы, в результате чего формируются деревья процессов. Для управления процессами в UNIX используются две ключевые структуры данных: таблица процессов и структура пользователя. Таблица процессов постоянно находится в памяти, а структура пользователя может выгружаться на диск. При создании процесса дублируется запись в таблице процессов, а также образ памяти процесса. Для планирования применяется алгоритм, основанный на приоритетах, отдающий предпочтение интерактивным процессам.
Модель памяти состоит из трех сегментов для каждого процесса: для текста (исполняемого кода), данных и стека. Изначально для управления памятью использовался свопинг, но в большинстве современных версий системы UNIX для этого применяется страничная подкачка. Состояние каждой страницы отслеживается в карте памяти, а страничный демон поддерживает достаточное количество свободных страниц при помощи алгоритма часов.
Доступ к устройствам ввода-вывода осуществляется при помощи специальных файлов, у каждого из которых есть старший номер устройства и младший номер устройства. Для снижения числа обращений к диску в блочных устройствах ввода-вывода применяется буферный кэш. Для управления кэшем используется алгоритм LRU (Least-Recently-Used – «наиболее давнего использования»). Символьный ввод-вывод может осуществляться в обработанном и необработанном режимах. Для дополнительных возможностей символьного ввода-вывода применяются дисциплины линии связи или потоки.
Файловая система в UNIX – иерархическая, с файлами и каталогами. Все диски монтируются в единое дерево каталогов, начинающееся в одном корне. Отдельные файлы могут быть связаны с любым каталогом дерева. Чтобы пользоваться файлом, его нужно сначала открыть. При этом процессу, открывающему файл, возвращается дескриптор файла, который затем используется при чтении этого файла и записи в файл. Внутри файловая система использует три основные таблицы: таблицу дескрипторов файлов, таблицу дескрипторов открытых файлов и таблицу i-узлов. Из этих таблиц таблица i-узлов является наиболее важной. В ней содержится информация, необходимая для управления файлом и позволяющая найти его блоки.
Защита файлов основывается на регулировании доступа для чтения, записи и исполнения, предоставляемого владельцу файла, членам его группы и всем остальным пользователям. Для каталогов бит исполнения интерпретируется как разрешение поиска в каталоге.
