Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОММСРВ - лекции.doc
Скачиваний:
32
Добавлен:
12.03.2016
Размер:
602.62 Кб
Скачать

Модули памяти

Унифицированный фрагмент памяти, в котором могут распологаться системные компоненты.

Категории модулей:

  • исполняемые (системное, прикладное ПО)

  • неисполняемые (данные)

Любой модуль состоит из:

  • заголовок

  • тело модуля

  • контрольная сумма (CRC)

Заголовок формируется построителем в момент создания модуля. В заголовке первым идёт слово $4AFC.

00

$4AFC

02

ID версии ОС

04

размер модуля в байтах (без учёта CRC)

08

пользователь/группа владельца

0C

смещение до ??? модуля (от начала модуля)

10

права доступа (три права: чтение, запись, исполнение; для всех модулей памяти)

12

тип и язык

14

атрибуты модуля и ревизия (версия) Номер редакции, смещение до строки комментариев, смещение до символьной таблицы

2E

CRC заголовка

Если модуль данных, то на этом заголовок заканчивается. Если же имеет место программный модуль, то заголовок содержит ещё и следующие поля

30

Смещение до точки входа

34

Смещение до точки входа в обработчик прерываний по умолчанию

38

Минимальный размер области данных

3C

Минимальный размер программного стека

40

Смещение на таблицу инициализации

44

Смещение на точку входа в таблицу инициализации

Системные модули памяти

  1. Ядро операционной системы (Kernal)

  2. Системный таймер (тик – величина настраиваемая)

  • Модуль параметров инициализации системы. Работает только во время перезагрузки системы.

  • Системная таблица (карта загрузки) – список модулей, которые надо создать, запустить. Работает как во время функционирования системы, так и во время начальной инициализации.

  • Администратор I/O. МенеджерI/O, модули конфигурации типов устройств, логической связи.

  • Драйверы устройств. Диспетчеры устройств.

  • И другие модули, необходимые для работы в каждом конкретном случае.

    Функции ядра при загрузке системы

    1. Инициализация системы после загрузки.

    После загрузки ядра, оно начинает сканировать адресное пространство по 16 К. Если какой-то модуль не откликнулся, этот модуль памяти считается недоступным.

    При генерации ОС можно задавать те банки памяти, которые являются доступными.

    Далее, в определённой памяти происходит поиск модулей, определение типов этих модулей.

    Идёт определение очерёдности запуска модулей и осуществляется запуск всех необходимых системных модулей.

    После этого ядро передаёт управление планировщику, который начинает работу по выделению ресурсов.

    1. Управлению памятью.

    0000 – младший адрес памяти.

    В них расположены векторы прерываний устройств, обнаруженных при инициализации.

    Далее расположены векторы особых событий (программные прерывания, порождаемые прикладными программами или системными компонентами).

    Далее создаётся область данных прикладных программ.

    Со старших адресов:

    • системные модули данных;

    • системные программные модули;

    • модули памяти прикладных программ.

    Младшие адреса – динамическая область данных. Она будет расти вверх.

    • Свободная память.

    Модуль памяти всегда занимает подряд идущие адреса памяти.

    В конце работы запускает планировщик и контролирует таблицу текущих задач и занимаемые ими ресурсы. А также контролирует таблицу ожидающих задач и их ресурсы. Планировщик занимается конкретным выделением памяти.

    В общем случае не существует защиты памяти. Однако, есть возможность при генерации ОС включить модуль защиты памяти, который чётко разделит память на участки.

    1. Совместное с планировщиком управление процессами.

    Планирование происходит через каждый тик таймера. Величина тика задаётся при генерации ОС и действует в течении всего времени (10 мс).

    Процессы могут находится в следующих состояниях:

    • состояние текущего запуска – процесс загружен в память, у него есть ресурсы и он использует время процесса. Определить статус можно только во время работы планировщика. Остальные процессы могут быть активными, но их не запускают, т.к. не подошло их время по возрасту и по приоритету.

    • Состояние ожидания. Процесс ждёт завершение другого.

    • Состояние сна. Ждёт наступления определённого времени или события.

    • Ожидание события. Может ждать набор событий.

    Все эти процессы находятся в очереди задач. Кроме этого, может быть процесс во взвешенном состоянии, т.е. он ждёт в явном виде реакции со стороны другого процесса. Он должен быть принудительно запущен.

    Когда процесс уничтожается, остаётся только модуль памяти, в котором хранилась данная задача.

    Процесс может стать или остаться текущим по двум причинам: приоритет и возраст.

    Если приоритет это величина неизменная и задаётся во время создания модуля памяти (эта величина показывает претензии), то возраст это число тактов ОС, в течении которых этот процесс был активным, но не работал. Максимальное значение возраста: FFFF.

    Максимальный приоритет: 64.

    Когда процесс переходит в состояние текущий запуск, его возраст становится раным 0, после каждого тика процессора, его возраст не изменяется, а возраст всех активных процессов увеличивается на 1. Если после тика возраст + приоритет у запущенного процесса меньше, чем у любого активного, то этот активный процесс запускается.

    d_age_min– минимальная величина возраста = 20 – обычная величина

    d_age_max– максимальная величина возраста – по достижению этой величины, возраст перестаёт инкрементироваться. Используется, если существуют процессы, которые не должны быть прерваны.

    На практике d_age_max= 0.5*FFFF.

  • Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]