Просмотр содержимого MBR




Для просмотра содержимого MBR используйте следующую команду:

# dd if=/dev/hda of=mbr.bin bs=512 count=1
# od -xa mbr.bin

Командаdd, которая выполняется с правами root, считывает первые 512 байт с /dev/hda (первый IDE-жесткий диск) и записывает их в файл mbr.bin. Команда od выполняет печать полученного двоичного файла в форматах hex и ASCII.

На персональных компьютерах загрузка Linux начинается в BIOS с адреса 0xFFFF0. Первым действием, которое выполняет BIOS, является тестирование при включении питания (POST, power-on self test). Задачей такого тестирования является выполнение проверки аппаратного обеспечения. Вторым действием POST является выполнение нумерации и инициализации для локальных устройств.

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

Для выполнения загрузки операционной системы сервисы времени выполнения BIOS выполняют поиск таких устройств, которые являются активными и способны выполнять загрузку – причем поиск выполняется в порядке, который определяется настройками, сохраненными в CMOS-памяти. В качестве загрузочных устройств могут выступать флоппи-диски, CD-ROM, разделы на жестком диске, подключенное к сети устройство или даже портативный USB-накопитель.

Обычно загрузка Linux производится с жесткого диска, на котором в MBR содержится первичный начальный загрузчик. MBR представляет собой сектор размером 512 байт, который располагается в первом секторе диска (сектор 1 цилиндра 0, головка 0). После того как MBR загружается в память, BIOS передает ему управление.

 

Загрузчик 1-й ступени

Первичный начальный загрузчик, хранящийся в MBR, представляет собой образ размером 512 байт, который содержит как программный код, так и небольшую таблицу разделов (см. рисунок 2). Первые 446 байт представляют собой собственно первичный загрузчик, который содержит как программный код, так и текст сообщений об ошибках. Следующие 64 байта представляют собой таблицу разделов, которая содержит запись для каждого из четырех разделов диска (по 16 байт каждая). В конце MBR располагаются два байта, которые носят название "магического числа" (0xAA55). Это магическое число служит для целей проверки MBR.

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

Загрузчик 2-й ступени

Вторичный загрузчик или загрузчик второй ступени было бы более логично назвать загрузчиком ядра. Его задачей на данной стадии является загрузка ядра Linux и, возможно, загрузка начального RAM-диска.

Загрузчики для среды x86, которые объединяют в себе загрузчики первой и второй стадии, носят название Linux Loader (LILO) или GRand Unified Bootloader (GRUB). Так как LILO имел некоторые недостатки, которые были исправлены в GRUB, то далее мы будем рассматривать именно GRUB.

Одним из наибольших достоинств GRUB является то, что он способен понимать используемые в Linux файловые системы. Вместо того чтобы подобно LILO, обращаться непосредственно к секторам жесткого диска, загрузчик GRUB способен загружать ядро Linux с файловых систем ext2 или ext3. Это достигается благодаря превращению двухступенчатого загрузчика в трехступенчатый. Ступень 1 (MBR) загружает загрузчик 1.5-ступени, способный понимать файловую систему, в которой хранится образ ядра Linux. Примерами могут служить reiserfs_stage1_5(для загрузки из файловой системы с журналированием Reiser) или e2fs_stage1_5 (для загрузки из файловых систем ext2 или ext3). После того, как загрузчик 1.5 ступени загружен и выполняется, может быть загружен загрузчик 2-й ступени.

После загрузки 2 ступени GRUB способен по запросу показать список имеющихся ядер (которые определяются в /etc/grub.conf, с поддержкой мягких ссылок из /etc/grub/menu.lst и /etc/grub.conf). Вы можете выбрать нужное ядро и даже передать ему дополнительные параметры ядра. Также существует возможность воспользоваться оболочкой с поддержкой командной строки, что обеспечивает большую степень контроля над процессом загрузки.

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

 

Ядро

После того как образ ядра оказывается в памяти и ему передается управление от загрузчика 2-й ступени, наступает стадия ядра. Однако образ ядра не является исполняемым, это сжатый образ ядра. Обычно это zImage (сжатый образ размером менее 512KB) или bzImage (большой сжатый образ, размером более 512KB), который был сжат при помощи zlib. В начале такого образа ядра располагается программа, которая выполняет минимальную настройку аппаратного обеспечения и затем распаковывает ядро, хранящееся внутри образа ядра, и помещает его в верхнюю область памяти. Если имеется образ начального RAM-диска, то программа также перемещает его в память и помечает для дальнейшего использования, а затем вызывает само ядро, после чего начинается загрузка ядра.

При вызове bzImage (образ для i386) выполнение начинается в./arch/i386/boot/head.Sс ассемблерной функции start (основные этапы показаны на рисунке ниже). Эта программа выполняет основную настройку аппаратного обеспечения и вызывает процедуру startup_32, располагающуюся в./arch/i386/boot/compressed/head.S. Процедура настраивает базовую среду (стек и т.п.) и очищает Block Started by Symbol (BSS). Затем выполняется декомпрессия ядра при помощи вызова C-функции decompress_kernel (которая хранится в./arch/i386/boot/compressed/misc.c). После декомпрессии ядра в память происходит его вызов. Это еще одна функция startup_32, но она располагается в файле./arch/i386/kernel/head.S.

В новой функции startup_32 (которая называется swapper или process 0) инициализируются таблицы страниц (page tables) и обеспечивается подключение функции memory paging (отображение страниц). Также определяется тип центрального процессора и сопроцессора для вычислений с плавающей точкой (FPU), если он имеется, и данная информация сохраняется для последующего использования. Далее вызывается функция start_kernel из (init/main.c), которая осуществляет переход в ту часть ядра Linux, которая не зависит от особенностей конкретной аппаратной платформы. Можно сказать, что это функция main для ядра Linux.

При обращении к start_kernel вызывается длинный список функций инициализации, которые выполняют настройку прерываний, производят дальнейшее конфигурирование памяти и загружают начальный RAM-диск. После этого вызывается функция kernel_thread (изarch/i386/kernel/process.c), запускающая функцию init, которая является первым процессом, выполняющимся в пространстве пользователя. В заключение запускается idle task, после чего управление может взять на себя планировщик (scheduler) (после вызова cpu_idle). Если разрешены прерывания, вытесняющий планировщик (pre-emptive scheduler) будет периодически перехватывать контроль для поддержки многозадачности.

В процессе загрузки ядра выполняется загрузка в оперативную память и монтирование начального RAM-диска (initrd), который был загружен в память загрузчиком 2-й ступени. Данный initrd служит временной корневой файловой системой в оперативной памяти и позволяет ядру полностью загрузиться, не выполняя монтирование каких-то физических дисков. Так как модули, необходимые для взаимодействия с периферийными устройствами, могут являться частью initrd, то ядро получается очень компактным и тем не менее способно поддерживать самые разнообразные аппаратные конфигурации. После загрузки ядра корневая файловая система заменяется (при помощи pivot_root); при этом корневая файловая система initrd удаляется и монтируется действительная корневая файловая система.

Функция initrd позволяет создать компактное ядро Linux, где драйверы скомпилированы как загружаемые модули. Эти загружаемые модули обеспечивают доступ ядра к дискам и файловым системам, которые имеются на этих дисках. Также имеются драйверы для других аппаратных устройств. Так как корневая файловая система представляет собой файловую систему на диске, то функция initrd обеспечивает для загрузчика возможность обратиться к диску и смонтировать действительную корневую файловую систему. Во встраиваемой системе без жесткого диска initrd может представлять собой окончательную файловую систему, или же окончательная файловая система может монтироваться при помощи сетевой файловой системы (Network File System, NFS).

Init

После загрузки и инициализации ядра запускается первое приложение в пространстве пользователя. Это первая из вызываемых программ, которые скомпилированы со стандартной библиотекой C. До этого момента процесса стандартные C-приложения еще не выполнялись.

На обычных настольных системах с операционной системой Linux обычно первым запускаемым приложением является /sbin/init. Однако это обязательно. Во встраиваемых системах редко требуется такая обширная инициализация, которую обеспечивает init (которая конфигурируется при помощи /etc/inittab). Во многих случаях можно запустить простой shell-скрипт, который запускает необходимые встраиваемые приложения.

Как и сама операционная система Linux, процесс загрузки ядра является чрезвычайно гибким и универсальным и поддерживает большое количество процессоров и аппаратных платформ. В самом начале загрузчик loadlin обеспечивал простой способ загрузки Linux без поддержки каких-либо необязательных аксессуаров. Загрузчик LILO расширил круг поддерживаемых функций, однако его недостатком являлось отсутствие поддержки файловых систем. Последнее поколение загрузчиков, таких как GRUB, позволяет загружать Linux с самых различных файловых систем (начиная с Minix и заканчивая Reiser).

 

Заключение

Сравнение Windows и Linux — полемичный вопрос, поднимаемый, как правило, далёкими от информатики пользователями персональных компьютеров. Под Windows обычно подразумевается последняя на момент обсуждения версия Microsoft Windows для настольных компьютеров/ноутбуков, под Linux — наиболее популярный на момент обсуждения дистрибутив GNU/Linux. Подобные дискуссии в основном сводятся к сравнению внешних признаков ОС (таких как графический интерфейс и удобство использования со стороны пользователей, привыкших к Windows) и технических характеристик (таких, как архитектура, API и безопасность со стороны пользователей альтернативных ОС). Здесь стоит отметить, что такое сравнение «в лоб» по сути некорректно, потому как «Windows» и поставляемый с ней набор программ — это ПО, предназначенное для решения строго определённой задачи, в то время как «Linux» — это ядро, на базе которого могут быть построены самые разнообразные конфигурации ОС, от пользовательских (например, Fedora для настольных компьютеров или Android для мобильных устройств) до серверных решений и встраиваемых ОС. Также стоит принять во внимание, что помимо ядра Linux в комплект дистрибутивов входит огромное количество программного обеспечения, которое подчиняется общей идеологии и распространяется свободно (что также подлежит обсуждению и сравнению с аналогами такого ПО под Windows). Обе операционные системы предназначены как для персональных систем, так и для web-серверов, вычислительных кластеров и т. п.

Windows NT удалось завоевать первенство на настольных и персональных системах (около 90 % настольных компьютеров, 2009 г.)[1] тогда как решения на базе Linux популярны на веб-серверах, вычислительных кластерах, суперкомпьютерах и мобильных устройствах (50—90 %, 2006—2010 г.)[2][3].

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

Windows и Linux трудно сравнивать «на равных» из-за следующих факторов:

· Исторически слово «Linux» означает ядро операционной системы. Операционные системы на основе ядра Linux, утилит проекта GNU исторически называют GNU/Linux, но в последнее время имя упрощают до «Linux», что не везде приветствуется.

· Linux — это не определённая ОС, их более 600, среди них есть те, которые отличаются друг от друга значительно, а некоторые совсем немного.

· И Windows, и Linux поставляются в различных конфигурациях. Особенно Linux, для которой существует огромное количество вариантов, некоторые из них предназначены для узкого круга задач.

· Цена и широта технической поддержки различаются у разных поставщиков, а также в зависимости от версии и дистрибутива.

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

· Данные, полученные от маркетинговых подразделений, и результаты тестирования могут расходиться.

· Microsoft распространяет Windows под разными лицензиями (закрытыми). Дистрибутивы Linux, со своей стороны, могут содержать проприетарные компоненты.

 

 

Список использованной литературы

1. https://ru.wikipedia.org/

2. https://www.outsidethebox.ms/11287/

3. https://www.ibm.com/developerworks/ru/library/l-linuxboot/index.html

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: