Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Основные концепции операционной системы UNIX

Покупка
Новинка
Артикул: 842174.01.99
Доступ онлайн
800 ₽
В корзину
Операционная система UNIX - современная многозадачная и многопользовательская система, которая ориентирована на программирующих профессионалов, а не рядовых пользователей, как семейство Windows. Ее главная отличительная особенность - мобильность исходного кода, позволяющая портировать систему на компьютеры различной архитектуры. Другая особенность UNIX - высокая технологичность, которая достигается поддержкой многочисленных инструментальных средств для разработки прикладного и системного программного обеспечения. Состав и реализация основных концепций UNIX определяют внутреннее устройство системы, однако их организация малоизвестна широкому кругу начинающих пользователей UNIX из доступной литературы. Данное пособие содержит начальные сведения о внутреннем устройстве UNIX, которые необходимы для более профессионального использования возможностей этой операционной системы. Рекомендуется для студентов 2-5-го курсов всех специальностей.
Волосатова, Т. М. Основные концепции операционной системы UNIX : учебное пособие / Т. М. Волосатова, С. В. Грошев, С. В. Грошев. - Москва : Изд-во МГТУ им. Баумана, 2010. - 96 с. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2169352 (дата обращения: 11.10.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Московский государственный технический университет
имени Н.Э. Баумана
Т.М. Волосатова, С.В. Грошев, С.В. Родионов
ОСНОВНЫЕ КОНЦЕПЦИИ
ОПЕРАЦИОННОЙ СИСТЕМЫ UNIX
Рекомендовано Научно-методическим
советом МГТУ им. Н. Э. Баумана
в качестве учебного пособия
Москва
Издательство МГТУ им. Н.Э. Баумана
2010


УДК 681.3.066
ББК 32.973-018.2
В67
Рецензенты: Ю.Г. Веселов, М.В. Филиппов
В67
Волосатова Т.М.
Основные концепции операционной системы UNIX : учеб.
пособие / Т.М. Волосатова, С.В. Грошев, С.В. Родионов. – М.:
Изд-во МГТУ им. Н.Э. Баумана, 2010. – 94, [2] с. : ил.
Операционная система UNIX — современная многозадачная и многопользовательская система, которая ориентирована на программирующих профессионалов, а не рядовых пользователей, как семейство Windows. Ее главная отличительная особенность — мобильность
исходного кода, позволяющая портировать систему на компьютеры
различной архитектуры. Другая особенность UNIX — высокая технологичность, которая достигается поддержкой многочисленных инструментальных средств для разработки прикладного и системного
программного обеспечения.
Состав и реализация основных концепций UNIX определяют внутреннее устройство системы, однако их организация малоизвестна
широкому кругу начинающих пользователей UNIX из доступной литературы. Данное пособие содержит начальные сведения о внутреннем устройстве UNIX, которые необходимы для более профессионального использования возможностей этой операционной системы.
Рекомендуется для студентов 2—5-го курсов всех специальностей.
УДК 681.3.066
ББК 32.973-018.2
c
⃝МГТУ им. Н.Э. Баумана, 2010


ПРЕДИСЛОВИЕ
Настоящее учебное пособие посвящено описанию внутреннего устройства и ресурсов операционной системы UNIX, знание
которых необходимо для эффективного системного и прикладного программирования. В основу пособия лег материал курса лекций, читаемых авторами на кафедре «Системы автоматизированного проектирования» с целью подготовки студентов в предметной
области теории и практики современных операционных систем.
Пособие состоит из пяти глав. В первой главе рассматривается организация процессов операционной системы UNIX. Описаны
механизмы диспетчеризации и синхронизации процессов, а также
организация их виртуального адресного пространства. Во второй
показано взаимодействие процессов в ОС UNIX. Особое внимание
уделено механизму коммуникации процессов, обеспечивающему
передачу данных. В третьей главе рассматриваются файловая система UNIX и внутренняя структура ее основных частей. В четвертой главе — различные типы файлов в ОС UNIX. В пятой главе
описаны системные вызовы и интерфейсы ввода-вывода.


1. ОРГАНИЗАЦИЯ ПРОЦЕССОВ UNIX
1.1. Понятия ядра и процесса
Резидентная в памяти часть OC UNIX называется ядром. Программа ядра оформлена как выполняемый файл, который хранится
в корневом каталоге корневой файловой системы UNIX и имеет
имя, однозначно выделяющее его среди других файлов. Ядро считывается в RAM программой начальной загрузки, начиная с нулевого адреса. После загрузки ядро постоянно находится в RAM,
обеспечивая управление подсистемами UNIX посредством соответствующих ядерных подпрограмм, системных таблиц и буферов.
Все работы вне ядра оформлены в виде процессов выполнения
системных и прикладных программ. Под процессом понимается
единица вычислительной работы, потребляющая ресурсы, предоставляемые ядром, для обработки системных и прикладных программ, которые оформлены как командные или выполняемые файлы на внешнем устройстве. Процесс и выполняемая им программа — принципиально разные категории. Программа — статическое
понятие, процесс — динамическая категория, отражающая ход выполнения программы. Это различие принципиально, так как в ходе
выполнения одного и того же процесса может неоднократно происходить замена программы.
Процессы могут взаимодействовать между собой посредством
программных каналов или сигналов и обращаться к подпрограммам ядра через системные вызовы. Ядро поддерживает иерархию процессов, предоставляет необходимое адресное пространство для их выполнения, обеспечивает диспетчеризацию и внутреннюю синхронизацию процессов, осуществляет переключение
фазы выполнения процесса, реализует механизм своппинга и пейджинга процессов.
4


1.2. Адресное пространство процесса и ядра
Каждый процесс выполняется в собственном виртуальном пространстве адресов. Размер виртуального адресного пространства
фиксирован, но может отличаться в реализациях UNIX на разных платформах. Совокупность участков оперативной памяти, отображаемых виртуальными адресами, составляет образ процесса.
Образ процесса складывается из следующих сегментов: процедурного (text), инициализированных данных (data), неинициализированных данных (bss) и стека (stack). Расположение сегментов в
виртуальном адресном пространстве процесса показано на рис. 1.1.
Рис. 1.1. Структура виртуального адресного пространства процесса
Начальные размеры сегментов образа процесса определяет заголовок файла программы процесса. Сегменты text и data загружаются из файла программы процесса. Сегменты bss и stack создаются в образе процесса и не занимают места в файле программы
процесса, так как по умолчанию начальные значения составляющих их данных равны нулю.
Сегмент text содержит машинные инструкции и константы.
Его состав не изменяется при выполнении процесса. Сегмент data
содержит внешние и статические переменные, инициализированные при компиляции программы процесса. Сегмент bss содержит внешние и статические переменные, неинициализированные
при компиляции программы процесса. Сегмент stack используется
для хранения значений автоматических переменных и параметров
функций, а также для организации рекурсивных вызовов функций.
Между нижней границей стека и сегментов данных обычно существует адресный зазор, который может быть использован для
расширения стека и сегментов данных при выполнении процесса,
пока не исчерпано пространство свободных адресов. Изменение
размера сегментов данных реализуется системными вызовами динамического распределения памяти brk и sbrk.
5


Хотя ядро не является самостоятельной вычислительной единицей, однако программа ядра, как и программы процессов, хранится в выполняемом файле формата a.out. Резидентный образ ядра
располагается в памяти, начиная с нулевого адреса, и состоит из
набора сегментов, который идентичен образу процесса. В частности, процедурный сегмент ядра составляют коды подпрограмм
управления процессами, файлами и вводом-выводом, а также драйверы периферийных устройств. Сегмент данных ядра составляют
системные таблицы и переменные, используемые подпрограммами
процедурного сегмента, а также область отображения контекста текущего процесса. Стек ядра используется для размещения параметров ядерных функций и системных вызовов. Образу ядра соответствует виртуальное адресное пространство, которое по структуре
аналогично виртуальному адресному пространству процесса.
Образы процессов и ядра не пересекаются в памяти. Также не
пересекаются образы процессов, выполняющих разные программы. Образы процессов, которые выполняют одинаковые программы, могут разделять, т. е. совместно использовать, общий процедурный сегмент. Разделяем или нет процедурный сегмент, определяет магическое число в заголовке файла программы процесса, которое может принимать одно из трех значений: 0407, 0410
и 0411 (0413). Если магическое число 0407, то процедурный сегмент не разделяется процессами, которые одновременно выполняют данную программу, хотя они имеют абсолютно идентичные
процедурные сегменты.
Если магическое число процесса 0410, то процедурный сегмент
разделяется всеми процессами, которые выполняют эту программу.
Разделяемый процедурный сегмент часто называют сегментом чистого кода, а программу, которая его содержит, — повторно входимой или реентерабельной. Процедурный сегмент реентерабельной
программы может быть повторно выполнен любыми процессами
без повторной загрузки в RAM. Если магическое число процесса
0411 (0413), то процедурный сегмент также является разделяемым,
но располагается в отдельном виртуальном адресном пространстве. Использование разделяемых процедурных сегментов позволяет эффективно экономить ресурсы памяти при обработке идентичных программ.
6


1.3. Фазы выполнения процесса
В каждый момент выполнения процесс может находиться в
фазе «пользователь» или в фазе «система». В фазе «пользователь»
выполняются инструкции из адресного пространства процесса, в
фазе «система» — инструкции ядра. Текущая фаза отслеживается
в регистре PS. Выполнение процесса в фазе «пользователь» может быть прервано для перехода в фазу «система» по одной из
следующих причин: системный вызов, внутреннее (синхронное)
прерывание (ловушка), внешнее (асинхронное) аппаратное прерывание. После отработки любой из указанных причин прерывания
следует возврат в фазу «пользователь».
Прерывание системным вызовом сознательно инициируется
процессом в фазе «пользователь» для обращения к необходимым
подпрограммам из адресного пространства ядра. Внутренние прерывания (ловушки) связаны с обработкой подпрограммами ядра
аварийных ситуаций, возникающих синхронно при нарушении
границ сегментов в адресном пространстве процесса, ошибке
косвенной адресации в программе процесса, десятичном переполнении или делении на нуль и переполнении стека. Результатом
обработки является посылка процессу соответствующего сигнала,
который стандартно вызывает аварийное завершение процесса с
фиксацией дампа памяти в файле core.
Внешние прерывания связаны с активизацией работы периферийных устройств, контроллеры которых имеют более высокий
уровень приоритета, чем процессор, выполняющий инструкции
программы процесса в фазе «пользователь». Внешние прерывания
возникают независимо от хода выполнения программы процесса,
т. е. асинхронно. При этом управление передается соответствующей подпрограмме обработки внешнего прерывания из адресного
пространства ядра. Во всех перечисленных случаях процессор переключается на выполнение подпрограмм из адресного пространства ядра, доступного процессу только в фазе «система».
При переходе процесса в фазу «система» из фазы «пользователь» выполняются следующие действия:
— сохранение специальных (PS, PC, SP) и рабочих регистров
в блоке управления области контекста процесса (u_pcb), которая
отображает контекст текущего процесса в адресном пространстве
ядра;
7


— изменение текущего режима в регистре PS на фазу «система»;
— загрузка в регистр PC адреса подпрограммы обработки прерывания из системной таблицы векторов прерываний для активизации ее выполнения. В частности, векторы системных вызовов
находятся в системной таблице sysent, где они упорядочены по
номерам системных вызовов;
— восстановление регистров, сохраненных при переходе в фазу
«система». Восстановление регистра PS означает возврат в фазу
«пользователь», восстановление регистра PC заставляет процесс
возобновить выполнение, начиная с точки прерывания.
1.4. Контекст процесса
Системные данные, используемые при выполнении процесса
(когда его образ загружен в память), составляют контекст процесса.
Контекст процесса формально описан структурой struct user в
файле /usr/include/sys/user.h. Эта структура включает следующие
основные поля:
u_procp — адрес дескриптора процесса в таблице процессов;
u_ofile — адрес таблицы открытых файлов процесса;
u_signal — адрес таблицы сигналов;
u_pcb — блок управления процессом;
u_cdir — текущий каталог процесса;
u_rdir — корневой каталог процесса;
u_textvaddr — виртуальный адрес процедурного сегмента;
u_datavaddr — виртуальный адрес сегмента инициализированных данных;
u_bssvaddr — виртуальный адрес сегмента неинициализированных данных.
Область контекста процесса имеет фиксированный размер и
не входит в виртуальное адресное пространство процесса. В пространстве физических адресов контекст процесса располагается
перед процедурным сегментом или перед сегментом данных в случае разделяемого процедурного сегмента.
Контекст текущего процесса отображается в область текущего
процесса виртуального адресного пространства ядра. Адрес этой
области сохраняет системная переменная u, через которую поля
8


контекста текущего процесса доступны подпрограммам ядра. Доступ к полям контекста процесса на уровне пользователя реализован через системные вызовы ядра, например, chdir, chroot, signal,
ulimit.
1.5. Идентификатор процесса
Каждый процесс имеет уникальный целочисленный номер,
называемый идентификатором. Он позволяет однозначно указать
нужный процесс в командах пользователя или системных вызовах. Идентификаторы процессов сохраняют свою уникальность от
момента образования процесса до очередной перезагрузки UNIX.
Уникальность идентификаторов гарантируется ядром.
Идентификаторы процессов динамически назначаются ядром
из диапазона 1. . .
. . .
. . . 30000 в порядке образования процессов. Идентификатор процесса никак не связан с именем файла программы его
выполнения. Процессы не имеют предопределенных идентификаторов. Исключение составляют диспетчерский процесс (swapper)
с идентификатором 0 и процесс инициализации (init) с идентификатором 1, которые образуются первыми при начальной загрузке UNIX. Процесс имеет возможность узнать свой идентификатор
системным вызовом getpid и идентификатор процесса-предка системным вызовом getppid.
Кроме индивидуальной идентификации процессов в ОС UNIX
предусмотрена идентификация групп процессов. Группу процессов образует их множество, запущенных с одного терминала в
течение одного сеанса. Все процессы группы имеют одинаковый
идентификатор, совпадающий с идентификатором лидера. Лидером группы обычно является процесс интерпретатора команд, который открывает сеанс работы с терминалом, так называемый login
shell. Идентификатор группы процесса позволяет узнать системный вызов getpgrp.
Личные и групповые идентификаторы могут быть использованы для коммуникации между процессами, в частности для персонифицированной и распределенной посылки сигналов системным
вызовом kill или для порождения уникальных имен вр´
еменных
файлов.
9


1.6. Дескриптор процесса
Системные данные, используемые ядром в течение времени жизни процесса, составляют дескриптор процесса. Дескриптор процесса резервируется ядром при образовании процесса и
освобождается по его завершении. Дескриптор процесса формально описан структурой struct proc в заголовочном файле
/usr/include/sys/proc.h. Основные поля структуры struct proc могут быть классифицированы по характеру данных следующим
образом.
• Поля идентификации процесса:
p_pid
—
личный идентификатор;
p_ppid
—
идентификатор процесса-предка;
p_pgrp
—
идентификатор группы;
p_uid
—
реальный идентификатор владельца;
p_gid
—
реальный идентификатор группы владельца;
p_suid
—
эффективный идентификатор владельца;
p_sgid
—
эффективный идентификатор группы
владельца.
• Поля диспетчеризации процессов:
p_pri
—
приоритет;
p_cpu
—
системная составляющая приоритета;
p_nice
—
пользовательская составляющая приоритета;
p_time
—
время нахождения в RAM или в области своппинга.
• Поля внутренней синхронизации процессов:
p_stat
—
статус;
p_wchan
—
идентификатор ожидаемого события.
10


Доступ онлайн
800 ₽
В корзину