Ответы к экзамену

2019-05-11СтудИзба

Описание файла

Документ из архива "Ответы к экзамену", который расположен в категории "". Всё это находится в предмете "конструирование ядра ос" из 5 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "Ответы к экзамену"

Текст из документа "Ответы к экзамену"

1.) Процесс загрузки и инициализации персональных ЭВМ архитектуры x86. Функции загрузчика. Загрузка ядра JOS.

После включения персонального компьютера (ПК) на базе процессора семейства Intel 80x86, его процессор начинает работу в реальном режиме адресации с сегментной организацией и выполнение инструкций процессора с адреса FFFF:0, инициализированного в паре регистров CS:IP (Code Segment : Instruction Pointer) после снятия сигнала RESET. В конце доступного процессору адресного пространства оперативной памяти из ПЗУ материнской платы отображен загрузчик базовой системы ввода-вывода (BIOS), на который передается выполнение по инструкции безусловного перехода, отображенной по адресу FFFF:0.

Программа инициализации BIOS с помощью программы POST проверяет, что устройства компьютера работают корректно и инициализирует их.

Затем BIOS опрашивает по порядку устройства из заранее сформированного (в консольной утилите CMOS SETUP) списка загрузочных устройств, пока не найдет загрузочное устройство. Если такое устройство не будет найдено, BIOS выведет на консоль ПК сообщение об ошибке и процесс загрузки будет остановлен. При обнаружении BIOS’ом загрузочного устройства, с последнего будет произведена попытка чтения данных его нулевого сектора (512 байт, в которых, как предполагается, должна находиться загрузочная запись). После успешного завершения чтения данных нулевого сектора загрузочного устройства в оперативную память по начальному адресу 0000:7С00, BIOS передает на этот адрес дальнейшее исполнение инструкций процессора.

Нулевой сектор загрузочного жесткого диска содержит так называемую «Главную загрузочную запись» (MBR — Master Boot Recorв), содержащую как данные первых четырёх записей таблицы разделов, так и инструкции процессора Intel 80x86, обеспечивающие поиск по этим записям активного раздела, с которого, посредством одной из функций базовой системы ввода-вывода — INT 13h, реализованной в виде обработчика прерывания процессора, будет считана загрузочная запись операционной системы. Этот загрузочный сектор, как правило, зависит от операционной системы и должен произвести загрузку в оперативную память ядра операционной системы с последующей передачей на него исполнения инструкций процессора. Если активного раздела не существует, или загрузочный сектор активного раздела некорректен, MBR может загрузить резервный начальный загрузчик и передать управление ему. Резервный начальный загрузчик должен выбрать раздел (зачастую с помощью пользователя), загрузить его загрузочный сектор и передать ему управление.

В процессе загрузки компьютера x86 вначале всегда отрабатывается BIOS. На этой стадии, кроме тестирования и инициализации оборудования компьютера, происходит также и выбор устройства, с которого будет происходить дальнейшая загрузка. Это может быть дискета, жёсткий диск, сетевой ресурс, встроенное ПЗУ или любое иное устройство (алгоритм выбора загрузочного устройства может быть различным и зависит от реализации BIOS). После выбора загрузочного устройства управление всей дальнейшей загрузкой BIOS полностью передаёт этому устройству.

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

Загрузчик операционной системы:

  • обеспечивает необходимые средства для диалога с пользователем компьютера (например, загрузчик позволяет выбрать операционную систему для загрузки);

  • приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на не-x86 архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память); 

  • загружает ядро операционной системы в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы;

  • формирует параметры, передаваемые ядру операционной системы (например, ядру Linux передаются параметры, указывающие способ подключения корневой файловой системы);

  • передаёт управление ядру операционной системы.

При компиляции и компоновке программы на C, такой как ядро JOS, компилятор преобразовывает каждый исходный файл (.с) в объектный (.о), содержащий инструкции на языке ассемблера, кодированные в двоичном формате, ожидаемом процессором. Затем компоновщик объединяет все скомпилированные объектные файлы в единый двоичный образ, такой как obj/kern/kernel, который в данном случае является двоичным файлом в формате ELF. ELF-файл начинается с ELF-заголовка фиксированной длины, затем идет заголовок программы переменной длины, в котором перечислены все секции, которые должны быть загружены. Определения на языке C для этих ELF-заголовков находятся в inc/elf.h. Нас интересуют следующие секции программы:

.text: исполняемые инструкции программы;

.rodata: данные только для чтения, такие как строковые константы (мы не будем запрещать чтение на аппаратном уровне);

.data: инициализированные данные программы

VMA (адреса связывания) и LMA (адреса загрузки) секции .text. Адрес загрузки - это тот адрес, по которому секция должна быть загружена в память. В структуре ELF это значение хранится в поле ph->p_pa (в данном случае это действительно физический адрес, однако в спецификации ELF фактическое значение этого поля является неопределенным).

Адрес связывания секции - это адрес, с которого секция ожидает начать выполнение. Компоновщик кодирует адрес связывания различными способами, например, при использовании адреса глобальной переменной, в результате чего исполняемый файл, как правило, не будет работать, если он начинает выполнение с неправильного адреса.

BIOS загружает загрузочный сектор в память, начиная с адреса 0x7c00, который, таким образом, является адресом загрузки загрузочного сектора. С этого же места загрузочный сектор начинает выполнение, так что этот адрес также является адресом связывания.

Он читает каждую секцию ядра с диска в память по адресу, соответствующему адресу связывания секции, а затем переходит к точке входа в ядро.

2.) Переключение контекстов. Кооперативное разделение времени.

Переключение контекста (англ. Context Switch) — в многозадачных ОС и средах, процесс прекращения выполнения процессором одной задачи (процесса, потока, нити) с сохранением всей необходимой информации и состояния, необходимых для последующего продолжения с прерванного места, и восстановления и загрузки состояния задачи, к выполнению которой переходит процессор.

В процедуру переключения контекста входит т. н. планирование задачи — процесс принятия решения к какой задаче передать управление.

При переключении контекста происходит сохранение и восстановление следующей информации:

  • Регистровый контекст регистров общего назначения (в том числе флаговый регистр)

  • Контекст состояния сопроцессора с плавающей точкой

  • Состояние регистров MMX/SSE (x86)

  • Состояние сегментных регистров (x86)

  • Состояние некоторых управляющих регистров (например, регистр CR3 отвечающий за страничное отображение памяти процесса) (x86)

В ядре ОС с каждым потоком связаны следующие структуры:

  • Общая информация pid, tid, uid, gid, euid, egid,…

  • Состояние процесса/потока

  • Права доступа

  • Используемые потоком ресурсы и блокировки

  • Счетчики использования ресурсов (например таймеры использованного процессорного времени)

  • Регионы памяти, выделенные процессу

С точки зрения прикладного уровня переключение контекста можно разделить на добровольное (voluntary) и принудительное (non-voluntary): выполняющийся процесс/поток может сам передать управление другому потоку, либо ядро само может отобрать управление.

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

  • Выполнение блокирующего системного вызова. Когда приложение производит ввод-вывод, ядро может решить, что можно отдать управление другому потоку/процессу в ожидании, пока запрошенный данным потоком дисковый либо сетевой ввод-вывод будет выполнен.

  • Синхронизирующие примитивы ядра. Мьютексы, Семафоры и т. д.

Кооперативная многозадачность

Тип многозадачности, при котором следующая задача выполняется только после того, как текущая задача явно объявит себя готовой отдать процессорное время другим задачам. Как частный случай такое объявление подразумевается при попытке захвата уже занятого объекта, а также при ожидании поступления следующего сообщения от подсистемы пользовательского интерфейса.

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

  • Преимущества кооперативной многозадачности: отсутствие необходимости защищать все разделяемые структуры данных объектами типа критических секций и mutex’ов, что упрощает программирование, особенно перенос кода из однозадачных сред в многозадачные.

  • Недостатки: неспособность всех приложений работать в случае ошибки в одном из них, приводящей к отсутствию вызова операции «отдать процессорное время». Крайне затрудненная возможность реализации многозадачной архитектуры ввода-вывода в ядре ОС, позволяющей процессору исполнять одну задачу в то время, как другая задача инициировала операцию ввода-вывода и ждет её завершения.

3.) Прерывания в x86. Инициализация таблицы дескриптеров прерываний IDT.

Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.

Прерывания подразделяются на аппаратные (маскируемые и немаскируемые), вызываемые электрическими сигналами на входах процессора, и программные, выполняемые по команде INT xx. Программные прерывания, строго говоря, прерываниями не являются — это лишь своеобразный способ вызова процедур, но процессором они обрабатываются как разновидность прерываний.

Прерывания и исключения нарушают нормальный ход выполнения программы для обработки внешних событий или сообщения о возникновении особых условий или ошибок.

Аппаратные прерывания подразделяются на маскируемые и немаскируемые.

Маскируемые прерывания вызываются переходом в высокий уровень сигнала на входе INTR (Interrupt Request) при установленном флаге разрешения (IF=1). В этом случае процессор сохраняет в стеке регистр флагов, сбрасывает флаг. Прерывание с полученным номером вектора выполняется процессором так же, как и программное. Обработка текущего прерывания может быть в свою очередь прервана немаскируемым прерыванием, а если обработчик установит флаг IF, то и другим маскируемым аппаратным прерыванием.

Немаскируемые прерывания выполняются независимо от состояния флага IF по сигналу NMI (Non Mascable Interrupt). Его обработка не может прерываться под действием сигнала на входе NMI до выполнения команды IRET.

Обработка прерываний в защищенном режиме базируется на таблице дескрипторов прерываний (шлюзов прерываний) IDT – адрес начала и размер которой хранятся в регистре IDTR

Таблица прерываний может содержать до 256 дескрипторов. При попытке обслуживания прерывания с номером, выходящим за размер таблицы, генерируется исключение #DF. Под исключения отданы первые 32 номера (0 ¸31).

Векторы маскируемых прерываний определяются аппаратно. Контроллеры внешних прерываний (например, Intel 8259, программируемый контроллер прерываний) передают вектор на шину процессора. Использоваться могут любые векторы в диапазоне значений от 32 до 255.

Таблица векторов прерываний (англ. Interrupt Descriptor Table, IDT) используется в архитектуре x86 и служит для определения корректного ответа на прерывания и исключения.

В IDT используются следующие типы прерываний: аппаратные прерывания, программные прерывания и прерывания, зарезервированные процессором, называемые исключениями (первые 32) на случай возникновения некоторых событий (деление на ноль, ошибка трассировки, переполнение).

Первый этап инициализации выполняется BIOS, перед загрузкой ОС. Второй непосредственно самой операционной системой. Операционной системе доступно изменение некоторых адресов прерываний.

4.) Обработка прерываний таймера. Вытесняющее разделение времени. Алгоритмы планирования процессорного времени.

Программируемый интервальный таймер - микросхема, подключенная к IRQ0. Он может прервать работу процессора с частотой, определяемой пользователем (между 18,2 Hz и 11931 МГц). PIT является основным способом, используемым для реализации системных часов и единственным доступным методом реализации многозадачности (переключение процессов при прерывании).

В PIT есть внутренний генератор частоты, работающий приблизительно на частоте 11931 MHz. Этот тактовый сигнал подается через делитель частоты для получения в результате модуляции окончательной выходной частоты. В таймере есть 3 канала, каждый со своим собственным делителем частоты.

Канал 0 - наиболее часто используемый. Его выход подключен к IRQ0.

Канал 1 - чаще всего не используется и в современной аппаратуре просто не реализован. Используется для управления частотой регенерации памяти DRAM.

Канал 2 управляет работой динамика компьютера.

Приходит по IRQ_CLOCK и обрабатывается и перед вызовом планировщика необходимо прочесть регистр статуса RTC и послать сигнал EOI на контроллер.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
420
Средний доход
с одного платного файла
Обучение Подробнее