Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 39
Текст из файла (страница 39)
Программа, расположенная в MBR, носитназвание внесистемного загрузчика (Non-System Bootstrap, NSB).Вследствие того что сектор состоит только из 512 байт и помимо программы в немдолжна располагаться информация об организации диска, внесистемный загрузчик очень прост, а структура данных, называемая таблицей разделов (Partition Table,РТ), занимает всего 64 байт. Таблица разделов располагается в MBR по смещениюOxlBE и содержит четыре элемента.
Структура записи элемента таблицы разделовприведена в табл. 5.1. Каждый элемент этой таблицы описывает один раздел, причем двумя способами: через координаты C-H-S начального и конечного секторов,а также через номер первого сектора в спецификации LBA2 (Logical Block Addressing) и общее число секторов в разделе. Важно отметить, что каждый разделначинается с первого сектора на заданных цилиндре и поверхности и имеет размерне менее одного цилиндра. Поскольку координаты MBR равны 0-0-1, то первыйсектор первого раздела в большинстве случаев получается равным 0-1-1 (в координатах LBA это будет сектор 64).Первым байтом в элементе таблицы разделов идет флаг активности раздела BootIndicator (значение 0 — не активен, 128 (80 ( h ) ) — активен).
Он позволяет определить, является ли данный раздел системным загрузочным. В результате процессзагрузки операционной системы осуществляется путем загрузки первого секторапрактика показывает, что Linux и другие UNIX-подобные системы лучше всего устанавливать, разрИв НЖМД на 6 разделов.
Раздел подкачки (swap partition) служит для размещения файла нодкачи. К основному (корневому) разделу, обозначаемому символом /, монтируются разделы /usr, /home,Aar и /boot. Такое разбиение диска на разделы считается наиболее технологичным.Посоо указания блока данных, согласно которому все секторы диска считаются пронумерованными П о бедующему правилу: LBA - c x H + h ) x S + s - l . Здесь Н - это максимальное число рабочихюверхностей в цилиндре; S — количество секторов на одной дорожке; с, h и s — «координаты» искомого сектора.Глава 5, Управление вводом-выводом в операционных системах148с такого активного раздела и передачи управления на расположенную в нем программу, которая и продолжает загрузку.
Активным может быть только один раздел, и это обычно проверяется программой NSB, расположенной в MBR.Таблица 5 . 1 . Ф о р м а т элемента таблицы разделовНазвание записи элемента таблицы разделовДлина, байтФ л а г активности раздела1Н о м е р головки начала раздела1Номера сектора и цилиндра з а г р у з о ч н о г о сектора раздела2Кодовый идентификатор о п е р а ц и о н н о й системы1Н о м е р г о л о в к и конца раздела1Номера сектора и цилиндра последнего сектора раздела2Младшее и с т а р ш е е двухбайтовые слова относительного номераначального сектора4Младшее и старшее двухбайтовые слова размера раздела в секторах4За флагом активности раздела следует байт номера головки, с которой начинаетсяраздел.
За ним следуют два байта, означающие соответственно номер сектора и номер цилиндра загрузочного сектора, где располагается первый сектор загрузчикаоперационной системы. Затем следует кодовый идентификатор System ID (длиной в один байт), указывающий на принадлежность данного раздела к той или инойоперационной системе и на установку в этом разделе соответствующей файловойсистемы. Поскольку крайне сложно найти информацию по этим кодовым идентификаторам, которыми помечаются разделы дисков, в табл.
5.2 приведены не полтора десятка наиболее часто встречающихся, а все известные сигнатуры (кодовыеидентификаторы).Таблица 5 . 2 . Кодовые идентификаторы разделов дискаКодОписаниеКодОписаниеOOOhРаздел не использован085hLinux Extended, XOSL001hFAT 12086hFAT16 volume set002hXenix root087hNTFS volume set003hXenix/usr08AhAiR-Boot004hFAT16(<32Mb)08BhFAT32 volume set005hExtended08ChFAT32 LBA volume set006hFAT 1608DhFreeFDISKFAT12007hNTFS, HPFS08EhLinux LVM008hAIX Boot090hFree FDISK FAT16 ( < 3 2 M b )009hAIX Data091hFree FDISK ExtendedOOAhOS/2 Boot Manager092hFree FDISK FAT16OOBhFAT32093hAmoeba nativeCL<о.S Z X Z S Z j z S Z S Z S Z S Z S Z S Z S Z S Z S Zс п < т и - О т - ю с о г - с о с з > г о хз.с з з с л а ) а ) < < < < < < < < <о о о о о о о о о о о о о о03_с-Сф< <о о_УсоооXISZ-СSZло т~-СО m ф осо со со ш m оо о о о о оSZСОоQО О.О3ССLLООQCsх: £ZCDо оо о1—o\\\ *°оооszшооszu.ооXх:оох:1 —оzа оЕ СПоОссмоLLСCDшXх:соох:•чоСCDizсa:XJCCDо§io<LBACDТЗоч-feefeefeeсооx:0_LLСCDLLСCDСОLLCCOXXX££гШ О ш1тт о о оOS, SFLBAk03CDОCOОГооСМОооLUZсооCDСОсмосоXо аоm СПо 5 ^CLQ.'сФSZтзXг->CD< си Ох:очоC M C N J C 0 C O C 0 C 0 C O C 0JTчог QСОМ-f~QСПаоасоСПо•СОСПаСОЧ;соох:j="tfСОччсо СОСПСПCDоNорО-ССОоDQШтзс.
ооXч-ч-UJШ_iшLUшш оSZХГчосох: SZю со•ч- 3оох:г-aоCDСОXLUсоXZСПхзш СО смсоЕ ОQ_ГОh- сп L UСОсоОССФ Ои3смосон<LLO O O O O O O O Qо о о о о о о о осоLinuxSWin2KОсггоndow SwapLLСФtoсмозiddx:I35смiddLL5с;Ш"хLUfe?LLiddLLТЗфтзсо'LLiddCDсоidd£смсоФсоidd_J_Jpus<ш ш3idd<<ШCDHPFS(<32МЬ;сQаее >*штзСМОСОс_СПсм-JСОосмсоberonОоОсосо<LLнzXZаLUотз"hir• =тзJ=!h-irsCDZГОCD~umel/aa<сооСПX)^2feeIX beXCDZ/etti serv iceCDeUFSaОStepnBSDhibern:op hibe rnatiCDФLLm!оосо_шПumel/ооzLUCOооh, BootоfJJQ^<<со CL CQ_1_|см Е CDсо 3н тз Ь Е L<LL<Lumel/оО}•'Q2 COm"fV!фсоСОLLumel/ОЗLLсосмсоVCDCOCODOSО)CDCDLLсоооnuxNЧ- ю г^ соLUОQ5BSD.E ISD/:ш2LLFDISK Exteiided LBALLFDISK FAT1 6 LBACDCDоЕ t< 2376ebaBBЕХОРСFDISKSlVd1-FDISK FATS;2LBAсмX)XЧXZаLL•ч чО О1 50Глава 5.
Управление вводом-выводом в операционных системахТаблица 5.2 (продолжение)КодОписаниеКодОписание051hDM6Aux1,DMR/W0D1hMultiuser DOS FAT12052hCP/M, Microport System V0D4hMultiuser DOS FAT16 (<32Mb)053hOnTrack DM6 Aux30D5hMultiuser DOS Extended054hOnTrack DM6 DDO0D6hMultiuser DOS FAT16055hEZ-Drive0D8hCP/M-86056hGoldenBow VfeatureODBhConcurrent DOS, CTOS057hDrive ProODDhHidden CTOS memdump05ChPriam EdiskODFhDG/UX061 hSpeed StorOEOhST AVFS063hUnix0E1hSpeed Stor FAT32064hNetWare 2.x, PC-ARMOUR0E3hSpeed Stor R/O065hNetWare 3.x0E4hSpeed Stor FAT 16067hNovell 67hOEbhBeOS»068hNovell 68hOEehEFI header068hNovell 69hOEfhEFI file system070hDiskSecure Multi-BootOFOhLinux/PA-RISC boot074hScramDisk0F1hStorage Dimensions075hPC/AX0F2hDOS Secondary078hXOSL0F4hSpeed Stor large, Prologue singl07EhF.I.X0F5hPrologue multi080hMINIX1.1-1.4aOFBhVMware nativeVmware swap081hMINIX1.4b+, ADMOFCh082hLinux swap, SolarisOFDhLinux RAID083hLinux nativeOFehSpeed Stor (>1024), LanStep084hHibernation, OS/2 C: HiddenOFFhXenix BBTМожно сказать, что таблица разделов — одна из наиболее важных структур данных на жестком диске.
Если эта таблица повреждена, то не только не будет загружаться ни одна из установленных на компьютере операционных систем, но станутнедоступными данные, расположенные в НЖМД, особенно если жесткий диск былразбит на несколько разделов.Последние два байта MBR имеют значение 55AA(il), то есть чередующиеся значения 0 и 1. Эта сигнатура выбрана для того, чтобы проверить работоспособностьвсех линий передачи данных. Значение 55AA(h), присвоенное последним двум байтам, имеется во всех загрузочных секторах.Разделы диска могут быть двух типов: первичные (primary) и расширенные (extended). Максимальное число первичных разделов равно четырем.
Если первичных разделов несколько, то только один из них может быть активным. Именнозагрузчику, расположенному в активном разделе, передается управление при вклю-организация внешней памяти на магнитных дисках1 51«ении компьютера с помощью внесистемного загрузчика. Для DOS-систем и иныхоперационных систем, использующих спецификации DOS, остальные первичныеразделы в этом случае считаются невидимыми (hidden). Так ведут себя и операционные системы Windows 9x.Согласно принятым спецификациям на одном жестком диске может быть толькоодин расширенный раздел, который, в свою очередь, может быть разделен на большое количество подразделов — логических дисков (logical disks). В этом смысле термин «первичный» можно признать не совсем удачным переводом слова «primary» —лучше было бы перевести «простейший», или «примитивный».
В этом случае становится понятным и логичным термин «расширенный». Расширенный раздел содержит вторичную запись MBR (Secondary MBR, SMBR), в состав которой вместо таблицы разделов входит аналогичная ей таблица логических дисков (LogicalDisks Table, LDT). Таблица LDT описывает размещение и характеристики раздела, содержащего единственный логический диск, а также может специфицироватьследующую запись SMBR. Следовательно, если в расширенном разделе созданоК логических дисков, то он содержит К экземпляров SMBR, связанных в список.Каждый элемент этого списка описывает соответствующий логический диск и ссылается (кроме последнего) на следующий элемент списка.Как мы уже сказали, загрузчик NSB служит для поиска с помощью таблицы разделов активного раздела, копирования в оперативную память компьютера системного загрузчика (System Bootstrap, SB) из выбранного раздела и передачи на негоуправления, что позволяет осуществить загрузку ОС.Вслед за сектором MBR размещаются собственно сами разделы (рис.
5.4). В процессе начальной загрузки сектора MBR, содержащего таблицу разделов, работают программные модули BIOS. Начальная загрузка считается выполненной корректно только в том случае, если таблица разделов содержит допустимую информацию.Рассмотрим еще раз процесс загрузки операционной системы. Процедура начальной загрузки (bootstrap loader) вызывается как программное прерывание (BIOSINT 19h). Эта процедура определяет первое готовое устройство из списка разрешенных и доступных (гибкий или жесткий диск, а в современных компьютерахэто могут быть еще и компакт-диск, привод ZIP-drive компании Iomega, сетевойадаптер или еще какое-нибудь устройство) и пытается загрузить с него в оперативную память короткую главную программу-загрузчик.