- •/Классификация операционных систем
- •Сравнительные характеристики ос.
- •/Процессы и примитивы.
- •Примитивы.
- •Процессы.
- •/Предполагаемая среда выполнения процессов.
- •/ Диаграмма переходов.
- •/Создание процессов.
- •/Уровневое представление ос unix
- •/Функции ядра операционной системы.
- •/Понятие прерываний в ос
- •/Структура ос
- •/Обзор подсистем ядра Unix
- •Описание подсистем ядра unix
- •Планирование но наивысшему приоритету (hpf)
- •Метод круговорота (карусель)
- •Очереди с обратной связно (fв)
- •Планирование в unix.
- •Типы многозадачности.
- •Состав планировщика
- •Зависимости подсистем ядра
- •Контроллер памяти (Метоrу Manager)
- •Механизм свопинга (Swapping)
- •Механизм пейджинга (Paging)
- •Внешний интерфейс
- •Verify_area()– проверка прав на доступ к выделенному региону памяти; get_free_page() / free_page() – выделение и освобождение физической памяти.
- •Реализация программ выделения памяти
- •Сборка мусора
- •Типы сборщиков памяти
- •Взаимодействие внутренних модулей мм
- •Архитектура vfs
- •Интерфейсы файловой системы
- •Ioctlo: установить атрибуты файла;
- •Защита файлов
- •Списки прав доступа
- •Механизмы обмена данными в vfs
- •Буферный кэш.
- •Механизмы обмена данными.
- •Логическая файловая система
- •Физическая организация файловой системы
- •Структура файла обычного типа
- •Примечания к физической организации vfs
- •Сетевая подсистема (Net)
- •Состав сетевой подсистемы
- •Представление и структуры данных
- •Внутренняя структура подсистемы
- •Зависимости сетевой подсистемы
- •Подсистема межпроцессного взаимодействия
/Процессы и примитивы.
Далее будем понимать под процессом целенаправленную последовательность вычислительных действий, которая характеризуется:
-
сопоставленной ему программой/подпрограммой, то есть упорядоченной последовательностью операций, реализующих действия, которые должки осуществляться процессом;
-
содержимым соответствующей ему памяти, а также тем множеством данных, которыми этот процесс может манипулировать;
-
дескриптором процесса и совокупностью числовых и текстовых сведений, определяющих состояние ресурсов, предоставленных процессу.
Все процессы находятся под управлением ОС, поэтому в них всегда имеется часть кода ее ядра (возможно и не находящегося в исполняемом файле!), например, при исполнении специально используемых авторами программы системных вызовов и в непредусмотренных особых ситуациях (например, при обработке внешних или внутренних прерываний).
Примитивы.
Таким образом, мы можем разделить программы на две категории: программы, для исполнения которых нет необходимости изменять состояние объектов опёрационной системы, и программы, для исполнения которых необходимо изменять состояние, объектов ОС.
Первые программы относятся к программам примитивам. Как правило, это программы, которые выполняют функции самой ОС. А именно, это функции обработки прерываний; программы, выполняющие функции диспетчера; программы синхронизации (включая программы с Р и V семафорами); программы управления памятью. Эти программы не требуют внесения изменений в записи, соответствующие высокоуровневым программам в очереди диспетчера, поскольку остальные программы могут продолжать свое выполнение только тогда, когда закончится выполнение примитива.
Процессы.
С другой стороны, существует большая категория программ, для которых специально выделяются ресурсы ОС, резервируется память, делаются записи в специальных структурах, отводится место в очереди диспетчера. Каждая такая программа выполняется независимо от других в своем собственном пространстве и своей программной среде. Будем называть программы, которым соответствуют отдельные записи в очереди диспетчера и отдельно выделенные ресурсы, процессами.
Процессы характеризуются следующей информацией: таблицей распределения памяти процесса; текущим статусом; приоритетом выполнения; ресурсами, которые использует процесс, маской обработки и владельцем.
Процессы в ОС могут быть запущены в различных случаях:
-
диспетчер вызывает некоторый глобальный процесс по истечении некоторого промежутка времени или при обнаружении некоторого события;
-
для получения оценки состояния ОС;
-
при запуске программы переформирования очереди диспетчера, с целью повышения производительности системы;
-
при вызове из программы пользователя другого клиентского приложения. В этом случае может потребоваться еще и синхронизация процессов;
-
запуск программы пользователя;
Характерные отличия процессов и примитивов.
|
№ |
Процессы |
Примитивы |
|
1 |
Процессы помещаются в очередь диспетчера следовательно, их выполнение может быть прервано и продолжено.
|
Примитив, если был запущен, то дол жен быть выполнен до конца. |
|
2 |
Процессам всегда приписываются не которые числовые полномочия, от личные от полномочий задач. Они определяют порядок перемещения процессов в очереди диспетчера. |
Для примитивов полностью отсутствуют какие либо числовые характеристики. |
|
3 |
Поскольку функции ОС имеют вид процессов, то в некоторой очереди диспетчера может находиться не сколько записей, относящихся к одной и той же функции. В результате одна и та же функция с помощью механизма семафоров может обслуживать не сколько прикладных программ. Уровень обслуживания определен диспетчером. |
Примитив в процессе выполнения может выполнять только одну функцию. |
/Нити
Большой объем информации, занимаемый процессом, делает дорогими (и смысле ресурсов) операции по их созданию и переключению. Однако в настоящее время существует потребность в выполнении параллельных операций внутри одного процесса. Например, в много процессорной системе одна задача может выполняться на многих процессорах. Создание для каждой ветви такой программы собственного процесса приведет к боль выполнения отдельных ветвей алгоритма внутри одного процесса, а такие ветви стали называть нитями, потоками (threads).
Пoтoк - некая совокупность кодов внутри процесса, получающая процессорное время для выполнения. В каждом процессе всегда есть минимум один поток. Этот первичный поток создается системой автоматически при создании процесса. Далее этот поток может породить другие потоки, те в свою очередь новые и т.д. Таким образом, один процесс может владеть несколькими потоками, и тогда они одновременно исполняют код в адресном пространстве процесса. Каждый поток имеет:
-
уникальный идентификатор потока;
-
содержимое набора регистров процессора, отражающих состояние процессора;
-
два стека, один из которых используется потоком при выполнении в режиме ядра, а другой - в пользовательском режиме;
-
закрытую область памяти, называемую локальной памятью потока (thread local storage, TLS) и используемую подсистемами, run-time библиотеками и DLL.
Эта методология предотвращает конкуренцию отдельных процессов между собой, позволяет экономить память и другие ресурсы, обеспечивает повышенную скорость переключения программы между такими нитями, не требует специальных механизмов синхронизации и обмена информации. Однако при использовании нитей возникает и ряд проблем-, которые программист должен учитывать.
К таким проблемам относится необходимость написания алгоритма с параллельными ветвями вычислений. Если при этом некоторые переменные доступны из всех нитей, то он должен контролировать и синхронизировать их значения при параллельном выполнении ветвей. С другой стороны, появление в программе отдельных нитей существенно ослабляет защиту программы, так как при их переключении возможны прерывания извне, а следовательно, возможно внедрение вирусов.
