![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Функции ядра при загрузке системы
После загрузки ядра, оно начинает сканировать адресное пространство по 16 К. Если какой-то модуль не откликнулся, этот модуль памяти считается недоступным. При генерации ОС можно задавать те банки памяти, которые являются доступными. Далее, в определённой памяти происходит поиск модулей, определение типов этих модулей. Идёт определение очерёдности запуска модулей и осуществляется запуск всех необходимых системных модулей. После этого ядро передаёт управление планировщику, который начинает работу по выделению ресурсов.
0000 – младший адрес памяти. В них расположены векторы прерываний устройств, обнаруженных при инициализации. Далее расположены векторы особых событий (программные прерывания, порождаемые прикладными программами или системными компонентами). Далее создаётся область данных прикладных программ. Со старших адресов: · системные модули данных; · системные программные модули; · модули памяти прикладных программ. Младшие адреса – динамическая область данных. Она будет расти вверх. · Свободная память. Модуль памяти всегда занимает подряд идущие адреса памяти. В конце работы запускает планировщик и контролирует таблицу текущих задач и занимаемые ими ресурсы. А также контролирует таблицу ожидающих задач и их ресурсы. Планировщик занимается конкретным выделением памяти. В общем случае не существует защиты памяти. Однако, есть возможность при генерации ОС включить модуль защиты памяти, который чётко разделит память на участки.
Планирование происходит через каждый тик таймера. Величина тика задаётся при генерации ОС и действует в течении всего времени (10 мс). Процессы могут находится в следующих состояниях: · состояние текущего запуска – процесс загружен в память, у него есть ресурсы и он использует время процесса. Определить статус можно только во время работы планировщика. Остальные процессы могут быть активными, но их не запускают, т.к. не подошло их время по возрасту и по приоритету. · Состояние ожидания. Процесс ждёт завершение другого. · Состояние сна. Ждёт наступления определённого времени или события. · Ожидание события. Может ждать набор событий. Все эти процессы находятся в очереди задач. Кроме этого, может быть процесс во взвешенном состоянии, т.е. он ждёт в явном виде реакции со стороны другого процесса. Он должен быть принудительно запущен. Когда процесс уничтожается, остаётся только модуль памяти, в котором хранилась данная задача. Процесс может стать или остаться текущим по двум причинам: приоритет и возраст. Если приоритет это величина неизменная и задаётся во время создания модуля памяти (эта величина показывает претензии), то возраст это число тактов ОС, в течении которых этот процесс был активным, но не работал. Максимальное значение возраста: FFFF. Максимальный приоритет: 64. Когда процесс переходит в состояние текущий запуск, его возраст становится раным 0, после каждого тика процессора, его возраст не изменяется, а возраст всех активных процессов увеличивается на 1. Если после тика возраст + приоритет у запущенного процесса меньше, чем у любого активного, то этот активный процесс запускается. d_age_min – минимальная величина возраста = 20 – обычная величина d_age_max – максимальная величина возраста – по достижению этой величины, возраст перестаёт инкрементироваться. Используется, если существуют процессы, которые не должны быть прерваны. На практике d_age_max = 0.5*FFFF.
|