Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция3.о.с..docx
Скачиваний:
0
Добавлен:
19.11.2019
Размер:
22.9 Кб
Скачать

Жесткий диск

Загрузка ОС

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

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

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

За каким вариантом будущее я не берусь сказать, ибо нынешний выбор в пользу защищенной от записи памяти был сделан давно, когда флэш-память еще не получила широкого распостранения, а с расположением BIOS во флэш-памяти уже экспериментируют (например, в модемах). Тем не менее, пока для старта компьютера используется память, защищенная от записи.

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

Bios-загрузчик

Чтобы загрузчик (находящийся в постоянной памяти) был как можно меньше, ему не следует ничего знать о том, где именно на устройстве лежит загружаемая часть ОС, сколько компонент надо загрузить, каков их размер, куда передать управление и т.п. детали.

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

Поэтому, чаще всего (но не всегда,-- например, Sun в своих компьютерах засовывает выбор варианта загрузки во флэш-память), так вот, чаще всего, первый загрузчик, используя минимальную, базовую систему ввода-вывода (собственно, BIOS - basic input-output system), читает с самого начала устройства второй загрузчик фиксированного размера, т. е. некоторое фиксированное количество байтов информации. Затем передает управление на определенный байт этого второго загрузчика.

Таким образом достигается то, что от любой ОС требуется минимум,-- предоставить свой загрузчик и положить его в условленное место (т.е., в самое начало устройства),-- при минимальности требований также и к загрузчику, находящемуся в ПЗУ.

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

MBR-загрузчик

Как мы видели, предполагается, что второй загрузчик предоставляется операционной системой и является ее частью. Операционные системы, как правило, действительно при установке вписывают в начало диска свой загрузчик. Однако, есть еще программы, устанавливающие свой собственный загрузчик ОС. Если возникли проблемы с предоставляемыми ОС загрузчиками (например, одна ОС не хочет грузить другую и наоборот, или вообще загрузчик пришедший с операционной системой не работает) можно воспользоваться такой программой. Например, это может быть Paragon BootManager.

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

Например, загрузчик Windows линии NT не предоставляет сам выбор ОС и варианта ее загрузки, а вместо этого запускает третий загрузчик (файл ntldr), который умеет (используя файл boot.ini) загружать операционные системы фирмы Microsoft. Говорят, теперь ntldr умеет запускать и файлы, а значит, если скопировать загрузчик другой ОС в файл, доступный Windows (то есть, на файловых системах FAT или NTFS), то можно научить его запускать и другие операционные системы. В файле boot.ini описано меню выбора ОС с указанием, откуда брать файлы Windows NT+ или где искать загрузчик для другой ОС.

Загрузчик GRUB (см. man grub) (говорят, что используется не только в linux), сам читает аналог файла boot.ini под названием grub.conf и предоставляет выбор на основе этого файла. Так же, как и ntldr, загружает выбранную ОС, если может, либо ее загрузчик, если не может систему загрузить сам. Вот кстати с GRUB-то у меня дома и возникли проблемы -- он повисал. Вероятно, можно было бы как-нибудь потом научить его пользоваться моими устройствами, но мне лень. В любом случае мне понадобился компакт-диск с реаниматором и lilo (см. man lilo) на нем, так теперь lilo и стоит (linux loader - еще один вариант MBR-загрузчика). В отличие от GRUB, lilo пользуется конфигурационным файлом не при загрузке, а при установке себя в качестве загрузчика.

Таким образом, процесс загрузки ОС выглядит так: загрузчик в энергонезависимой, защищенной от записи памяти, предоставляемый вместе с железом, запускает второй загрузчик, предоставляемый ОС, уже с диска. Затем второй загрузчик запускает уже ОС (или третий загрузчик в случае с Windows NT). Такую систему постепенной загрузки кто-то когда-то сравнил с вытягиванием (из ящика) ботинок за шнурки и назвал bootstrapping. Затем слово сократилось до booting, и можно было бы подумать, что оно означает какую-то деятельность, связанную с ботинками.

Разделы жесткого диска

В принципе, можно было бы обойтись и без деления устройства на разделы,-- например, на дискетах никакие разделы не нужны. Ничего я не слышал о разделах на компакт-дисках. Однако, жесткие диски обычно на разделы разбивают. И вот по каким двум причинам.

Управление использованием дискового пространства

Главным преимуществом деления жесткого диска на разделы является легкость ограничения на использование дискового пространства для информации разного рода. Например, при наличии приложения, которое способно использовать для своей работы очень много места на диске (скажем, для большой БД или огромных лог-файлов), надо некоторое кол-во дискового пространства зарезервировать для нужд системы, чтобы приложение не смогло использовать все дисковое пространство и ничего не оставить для ОС. Для этого можно предоставить такому приложению раздел жесткого диска определенного размера, чтобы больше оно само взять не смогло.

Этого можно было бы добиться просто устанавливая ограничение на размер дискового пространства, которое программа может использовать, но тогда, во-первых, пришлось бы задавать такое ограничение каждой программе с хорошим аппетитом, во-вторых, подсчитывать сколько осталось зарезервированного места, и, наконец, в-третьих, системе пришлось бы отслеживать при каждой операции записи на диск, а не собралась ли программа записать больше, чем ей положено. Мне неизвестны такие операционные системы.

Если же разбить жесткий диск на разделы, то можно взять группу прикладных программ (назовем их приложениями) и выделить им всем один раздел под данные (В Unix этот раздел присоединяют под именем /var). В таком случае, если одному из приложений понадобится слишком много дискового пространства, и оно забьет весь раздел, это приложение не сможет нормально работать само (как и все другие приложения из этой группы), зато система своего дискового пространства не лишится и не рухнет из-за этого.

То же самое относится и к дисковому пространству для домашних каталогов пользователей. В Unix им всем, обычно, выделяют раздел, смонтированный в /home. Домашний каталог псевдопользователя root, напротив, находится на том же разделе, где и сама система, ибо пользователю root может понадобиться работать еще до того, как разделы будут присоединены в процессе начальной загрузки операционной системы. О начальной загрузке ОС Unix раскажу в следующей лекции.