- •2 Теоретические вопросы кузнецов д.Б
- •1. Основные команды oc unix.
- •2.Команды для работы с текстовыми файлами
- •3.Тестирующие команды и работы с переменными
- •2. Поддержка многонитевого программирования.
- •3. Сокеты. Системные вызовы для работы с сокетами. Установка tcp-сединения.
- •4. Управление вводом-выводом, драйверы. Алгоритм обработки прерываний обращений к устройствам.
- •5. Диспетчеризация процессов. Алгоритмы планирования.
- •6. Взаимодействие процессов. Сигналы, именованные и неименованные каналы, ipc, сокеты.
- •7. Виды файловых систем. Типовые структуры каталогов в ос unix и Windows.
- •8. Средства разработки программ. Компилятор, средства разработки и отладки программ.
- •9. Системные вызовы для управления файлами. Открытие, чтение, запись, позиционирование, управление дескрипторами.
- •10. Назначение, функции, классификация операционных систем.
- •11. Пользовательский интерфейс операционной среды. Shell. Режимы командной строки и интерпретации программ.
- •12. Архитектура операционных систем. Понятие ядра и процесса. Состояния и контекст процесса.
- •13. Управление памятью в многозадачной операционной системе. Свопинг и подкачка по запросу.
- •14. Трансляторы. Структура компилятора. Лексический, синтаксический и семантический анализ.
- •15. Стандартный ввод-вывод. Переопределение стандартного ввода-вывода в Shell. Выполнение команд в конвеере.
12. Архитектура операционных систем. Понятие ядра и процесса. Состояния и контекст процесса.
Структура
UNIX - два слоя. Первый - ядро, взаимодействует
с железом и обеспечивает переносимость
всего остального ПО на компьютеры с
разным аппаратным обеспечением. Ядро
предоставляет программам определенный
набор системных API, а также файловый
ввод/вывод. Вторым слоем является
программное обеспечение, прикладное
или системное: командный интерпретатор,
графическая оболочка и т. д
Заглянем глубже в ядро системы. Оно позволяет всем остальным программам общаться с периферийными устройствами, регулирует доступ к файлам, управляет память и процессами. Ядро - это связной, к которому обращаются посредством системных вызовов (запрашивая какую-то услугу). Основным достоинством ядра является строгая стандартизация системных API. За счет этого во многом достигается переносимость кода между разными версиями и различным аппаратным обеспечением
Все обращения к ядру системы можно разделить на две категории: программа вызывает подсистему управления файлами или подсистему управления процессами. Первая отвечает за все, что связано с файлами: управление, размещение, доступ. Процессы же - это, в общем случае, любые запущенные программы. Поэтому подсистема управления процессами служит для их жизнеспособности, синхронизации и управления.
ПРОЦЕССЫ Ядро существует для обеспечения потребностей процессов. Программа в терминах UNIX представляет собой исполняемый файл. Это основа построения контекста процесса при его порождении. Порождение любого процесса в UNIX - это создание некоторой виртуальной машины. Она имеет свое собственное адресное пространство, куда помещаются процедурный сегмент и сегмент данных. Системные данные, используемые ядром для идентификации процесса, которые существуют в течении всего времени жизни процесса, образуют дескриптор (описатель) процесса. Множество дескрипторов образуют таблицу процессов.
Любой процесс в UNIX порождается с помощью системного вызова fork. После выполнения fork оба процесса продолжают выполнение с одной и той же точки.
Состояние процесса.У процесса есть 9 состояний:
1. Процесс выполняется в режиме задачи. 2. Процесс выполняется в режиме ядра. 3. Процесс не выполняется, но готов к запуску под управлением ядра. 4. Процесс приостановлен и находится в оперативной памяти. 5. Процесс готов к запуску, но программа подкачки должна загрузить его в оперативную память прежде чем он будет запущен под управлением ядра. 6. Процесс приостановлен, и программа подкачки выгрузила его во внешнюю память. 7. Процесс возвращён из режима ядра в режим задачи, ядро резервирует его. 8. Процесс вновь создан и находится в переходном состоянии. 9. Процесс существует, но не готов к выполнению, хотя и не приостановлен. 10. Процесс вызывает системную функцию exit и прекращает существование.
Контекст процесса
Системные данные, используемые при выполнении процесса (когда его образ загружен в RAM), составляют контекст процесса. Контекст процесса формально описан структурой 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, через которую поля контекста текущего процесса доступны подпрограммам ядра. Доступ к полям контекста процесса на уровне пользователя реализован через системные вызовы ядра, например, chdir, chroot, signal, ulimit.
