- •Введение. Основные понятия и определения.
- •Раздел 1. Организация программ.
- •1 .1. Модульный принцип разработки и организации программ
- •1.2. Связи между модулями.
- •Связь по управлению
- •Связь по данным
- •1.3. Структура объектного модуля
- •1.3.1. Принцип редактирования связей9.
- •1. Программы простой структуры
- •2. Структуры с перекрытиями12
- •1.4. Структура программ.
- •1.5. Первоначальная загрузка (Initial Program Loading) – ipl.
- •1.6. Замечание об адресных пространствах:
- •1.7. Динамическая организация программ
- •1.7.1. Загрузка модуля
- •1.7.2. Выделение памяти под загружаемый модуль
- •1.7.3. Реентерабельные14 программы
- •1.7.4. Замечание о динамических параллельных процессах:
- •Раздел 2. Организация мультиобработки
- •Типы систем обработки данных
- •Раздел 3. Управление процессами.
- •3.1 Понятие Процесс. Состояния процесса
- •3.2. Планирование процессов. Понятие очереди.
- •3.3. Взаимодействие процессов. Пользовательский уровень.
- •3.4. Планирование процессора.
- •3.4.1. Критерии планирования процессора.
- •3.4.2. Стратегии планирования процессора. Первый пришел – первый обслуживается (fifo). First Come – First Served (fcfs)
- •Стратегия наиболее короткая работа —sjf
- •Приоритетное планирование.
- •Планирование с использованием многоуровневой очереди.(Multilevel queue scheduling)
- •Планирование с использованием многоуровневой очереди с обратными связями (multilevel feedback queue sheduling)
- •3.5. Многопотоковые процессы
- •Раздел 4. Файловая система.
- •4.1. Основные понятия организации данных
- •4.2. Организация файла
- •4.2.1. Последовательная и произвольная обработка
- •4.3. Организация дисковой памяти
- •4.3.1. Диски – физическая структура
- •4.3.2. Диски – логическая структура
- •4.3.3. Распределение дискового пространства
- •4.3.4. Особенности жестких дисков
- •4.4. Древовидная файловая организация
- •4.4.1. Организация каталогов
- •4.4.2. Создание и удаление файла
- •4.5. Управление дисковым пространством и способы размещения файлов на поверхности
- •4.5.1. Непрерывное распределение
- •4.5.2. Распределение в разброс
- •2. Индексирование кластеров.
- •4.6. Связь программ с файлами.
- •4.6.1. Проблема обеспечения независимости программ от расположения и характеристик файлов
- •4.6.2. Действия open.
- •4.6.2. Действия close.
- •4.7.3. Логическая буферизация.
- •Раздел 5. Управление невиртуальной памятью.
- •5.1. Своппинг. (swapping)
- •5.2. Смежное размещение процессов.
- •5.2.1. Однопрограммный режим.
- •5.2.2 Мультипрограммный режим с фиксированными границами.
- •5.2.3. Мультипрограммирование с переменными разделами. (multiprogramming with a variable number of tasks (mvt).
- •5.2.4. Мультипрограммирование с переменными разделами и уплотнением памяти.
- •5.2.5. Основные стратегии заполнения свободного раздела.
- •5.3. Страничная организация памяти.
- •5.3.1. Базовый метод.
- •5.3.2. Аппаратная поддержка страничной организации памяти.
- •5.4. Сегментная организация памяти.
- •5.4.1. Базовый метод сегментной организации памяти.
- •5.4.2. Разделение сегмента между несколькими процессами.
- •5.4.3. Фрагментация.
- •Раздел 6. Управление виртуальной памятью.
- •6.1. Страничирование по запросу (demand paging).
- •6.2. Замещение страниц.
- •6.3.1. Fifo.
- •6.3.2. Оптимальный алгоритм.
- •6.3.3. Lru — алгоритм (least recently used)
1.7. Динамическая организация программ
Изначально, проблема, которая решается такими программами – это проблема выполнения программ в ограниченной физической памяти. Однако, позже выяснилось, что динамическая организация программ позволяет достичь других результатов: открытость систем. Это свойство важно для обеспечения развития и модификации сложных программ.
Программист, создавая динамические программы, указывает, что модуль, на который он ссылается, подключается динамически. Динамическое подключение осуществляется командой LINK <имя модуля> [параметры ], которая помещает вызываемый модуль в ОП. В отличии от оверлейных программ, программа не собирается полностью (т.е. она редактируется, но не собирается).
В прошлом динамическая и статическая форма вызова была разной.
CALL< имя модуля >< параметры > - ДУ с возвратом
LINK< имя модуля >< параметры > - ПУ с возвратом
Программист может часть модулей вызывать с помощью функции CALL, а часть подключать динамически (LINK).
В некоторых системах программирования вызовы могут иметь одинаковую форму. Программисту дается возможность указать, какие из вызовов обрабатываются статически, а какие следует подключать динамически. Появляются библиотечные модули (динамически подключаемые библиотеки - DLL).
Для реализации динамического подключения необходим специальный супервизор. Связывание осуществляет операционная система.
Функции LINK
прерывание к ОС
сохранение состояния программы и перевод в состояние ожидания
загрузка компонент
выполнение модуля
отключение
1.7.1. Загрузка модуля
Это функция возлагается на ОС. В качестве параметра передается имя модуля.
Вызывающая программа по системному вызову переводится в состояние ожидания. Для такой программы сохраняются не только общие, но и управляющие регистры, а также другая контекстная информация.
Далее надо осуществить динамическое подключение. Для этого надо знать , где находится модуль. Поиск вызываемого модуля осуществляется:
а) из общей системной библиотеки динамического подключения
б) пользовательские библиотеки
в) поиск модуля в ОП.
Затем необходимо загрузить модуль в память, что требует сначала выделения этой памяти (GETMEM).
После загрузки должен стать известен адрес перехода можно вернуться в остановленную программу и продолжить ее выполнение.
Когда модуль выполнен, память которую он занимал надо объявить свободной (FREEMEM), тем самым предоставив ее для дальнейшего использования
1.7.2. Выделение памяти под загружаемый модуль
Существует два подхода:
исполняемая программа сама выбирает область, в которую модуль будет загружен
область памяти выделяется не внутри адресного пространства программы, как для другой программы при мультизадачном режиме работы.
В первом случае программист должен резервировать память. Это дает контроль над использованием памяти и обеспечивает защиту.
Во втором случае модуль может быть доступен для нескольких программ, а не для одной. После загрузки модуля в адресное пространство, система заканчивает работу по этому модулю. Становится известен начальный адрес. Теперь можно выйти из ОС в пользовательский режим и выполнить этот модуль.Когда модуль отработал, то должны быть осуществлены обратные действия. Модуль должен быть отключен - в простом случае это означает, что должна сработать функция освобождения памяти. В более сложных случаях (совместное использование несколькими процессами одной копии загрузочного модуля) память не освобождается, модуль сохраняется, но учитывается тот факт, что данный процесс перестал использовать модуль. Если модуль используется несколькими процессами, то операционная система заводит счетчик, который говорит о том, сколько процессов его используют. При каждом завершении одного из процессов значение счетчика уменьшается на единицу. Когда значение счетчика становится равным нулю, модуль считается выгруженным.
Режим совместного использования одной копии модуля разными процессами - высокоэффективный режим.
Чтобы модуль мог обслуживать многие программы, он должен быть реентерабельным.
