Лекция 1

 

Лекция 1. 1

Работа в ОС UNIX. 2

Основные этапы становления ОС. GPL. 2

Жесткие диски. Интерфейсы (SmallComp.Syst.Interf., Integrated Device Electronics, AdvancedTechnologyAttachment) 3

Жесткие диски. Адресация в жестких дисках для интерфейса IDE/ATA.. 3

Параллельный и последовательный интерфейсы ATA (PATA и SATA) 5

Жесткие диски. RAID массивы (redundant array of independent disk drives) 6

Разделы диска на IBM-совместимых ЭВМ. 7

Файловая система UNIX. 8

Файлы устройств. 9

Понятие монтировки. 9

Загрузка UNIX. 10

 


 

Работа в ОС UNIX.

 

 

Джеймс Армстронг (мл.). Секреты UNIX. Диалектика. Киев 96.

 

Сергей Дунаев. UNIX. System V. Release 4.2. Диалог МИФИ, Москва 95г.

 

Вильям Столлингс. Операционные системы. Москва. Издательский дом ``Вильямс’’. 2002.

 

Б.В.Кениган, Р.Пайк. UNIX --- универсальная среда программирования.

Финансы и статистика. Москва 92.

 

Михаэль Кофлер. Весь Linux.  Установка, конфигурирование, использование.

7-ое издание. Бином 2007г.

 

UNIX. X Window. Motif. Основы программирования (части I, II)

АО Аналитик. Москва 94.

 

Основные этапы становления ОС. GPL

ОС впервые на базе DEC PDP-7  в подразделении фирмы AT&T BELL Laboratories (1969г.)

 

Ritchie & Thompson --- в 74г. опубликовали об этом статью.

 

73г. --- Ritchie  & Thompson переписали ядро системы на C.

 

74г. --- передали ОС университетам на образовательные цели без какой либо поддержки.

 

74г. --- начались работы в университете в Беркли по дальнейшему развитию ОС (вследствие отсутствия поддержки, ничего другого не оставалось), 75г. – была создана уже 6-ая версия.

 

78г. --- энтузиасты из университета в Беркли стали распространять созданную ими версию ОС на магнитных лентах под названием BSD (Berkeley Software Distribution) (до этого все версии ОС распространялись под маркой AT&T).

 

Т.о. условно существует два направления или стандарта UNIX --- BSD и, с другой стороны, версии на основе версий системы System V, SVR3, SVR4 и т.д.

 

Первое ядро Linux разработано Линус Торвальдом в 1991г.

Linux распространяется по эгидой GPL (general Public License). Это не обозначает, что Linux распространяется свободно. Первое требование этой лицензии – при любой модификации кода Linux или создании нового продукта на его основе или с его помощью результирующая программа должна поставляться вместе с исходным кодом.

Начнем разговор с первоисточника – места, откуда все данные, собственно, загружаются – с жесткого диска  (винчестера).

Жесткие диски. Интерфейсы (SmallComp.Syst.Interf., Integrated Device Electronics, AdvancedTechnologyAttachment)

Вообще говоря, общение программы с жестким диском идет через следующую цепочку

Программа – ОС – BIOS – Контроллер жесткого диска – Жесткий диск

Какие-то звенья в конкретной ситуации могут пропадать.

 

На данный момент используется две основные разновидности интерфейсов с жесткими дисками. Это SCSI (Small Compute System Interface) и IDE/ATA (Integrated Drive Electronics/Advanced Technology Attachment). В свою очередь интерфейс ATA можно подразделить на две его разновидности – PATA(100Mb/s) и SATA (есть образцы дисков со скоростью передачи до 3Гбит/сек). Кроме этого, используются другие последовательные интерфейсы, такие как USB (USB1.0 - поддерживает скорости передачи данных 1,5 и 12 Mбит/сек, USB2.0 – до 480 Mбит/сек), FireWare или IEEE 1394 (современный вариант – FireWall – до 400Mb/s, старые варианты – 50Mбит/сек, 100Mбит/сек;  ожидается улучшение производительности до 400 Mb/s).

 

Интерфейс SCSI был предложен в конце 70-х. Устройства, подключающиеся к шине SCSI, могут выступать в качестве ведущих (Initiator) и ведомых (target) устройств. К одной шине может подключаться до 8 устройств, но внутри каждого устройства может быть до 8 логических блоков, внутри каждого из которых может быть до 256 подблоков. Поэтому, теоретически, количество возможных подсоединений к данной шине, практически, неограниченно.

Появились модификации Fast-SCSI и Wide-SCSI, обеспечивающие высокую скорость передачи данных.

Адресация к блокам в SCSI-дисках весьма проста – используется обычная линейная адресация. Ситуация с IDE-дисками гораздо более неприятна.

Жесткие диски. Адресация в жестких дисках для интерфейса IDE/ATA

Минимальной ячейкой данных, к которой можно обратиться на жестком диске по адресу, является блок. Вообще говоря, адрес блока определятся тремя величинами:

·        номером дорожки (цилиндра), на которой он расположен,

·        номером головки  (физически, в простейшем случае, у дисковой пластины есть две стороны, которым соответствуют две головки, но в одном жестком диске может быть и несколько пластин, что увеличивает количество головок)

·        номером сектора на соответствующей дорожке соответствующей головки.

Адресация диска исторически велась в рамках этих трех чисел.

На IBM-совместимых ЭВМ изначально сложилось так, что BIOS наложил жесткие ограничения на эти числа:

Cylinders≤1024

Heads≤255

Sectors≤63

согласно разрядной сетке, в которой они задавались.

 

При стандартной величине блока = 512байт получаем, что максимальный размер диска = 1024*255*63*512<8G

Однако, число головок в жестких дисках не превысило 16, итого максимальный размер диска = 1024*16*63*512<512M

Ситуация была решена введением LBAlogical block addressing. При использовании LBA адресация к блокам самого диска происходила с помощью простого линейного номера блока. На BIOS перелагалась обязанность по транслированию номера блока в номера сектора, дорожки, головки:

LBA=SectorNumber + Sectors*(Heads*Cylinders+HeadNumber)

 

Т.о. удалось дойти до границы 8G.

 

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

На этом этапе удалось повысить планку размеров жестких дисков до 128G. Эта граница определяется рамками самой системы LBA, в которой выделяется 16 бит под номер цилиндра, 8 бит под номер сектора и 4 бита под номер головки. Итого максимум = 512*(216+28+24)=512*228=512*28*1020=27G=128G.

Наконец, на данный момент существуют диски объемом больше указанного. Для работы с ними на старых машинах требуется обновление BIOS.

Для работы с накопителями, отличными от жестких дисков (CDROM и др.) был разработан интерфейс ATAPI (ATA Packet Interface). На данный момент этот интерфейс очень сильно отличается от ATA интерфейса. Так, для его использования требуется драйвер, и устройства различных фирм, поддерживающие этот интерфейс, часто имею весьма различные протоколы передачи данных.

 

Параллельный и последовательный интерфейсы ATA (PATA и SATA)

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

К плоскому кабелю (80 кабелей и 40 разъемов), к которому подсоединяются IDE-диски, можно подключать до двух дисков (Master, Slave). Обычно устанавливается два шлейфа.

Существует несколько версий ATA интерфейсов. Самый первый стандарт поддерживал скорость передачи данных 3Mb/sec и диски до 512Mb. ATA-2 поддерживал LBA и обеспечивал более быстрый доступ к диску. Вместе с Enhanced BIOS (2 порта, поддержка LBA) все это получило название Enhanced IDE. В некоторый момент была достигнута максимально возможная пропускная способность этого интерфейса (ATA100, 100Mb/sec или ATA133, 13Mb/sec). Несмотря на то, что этой пропускной способности оказывается достаточно в подавляющем количестве случаев, технология Parallel ATA (PATA) имеет серьезные изъяны: 1)5 вольт на каждый из 26 используемых каналов противоречит энергосбережению, 2)80 кабелей приводят к помехам, 3)слишком неудобный кабель – широкий и не может быть длиннее 50см. Стоит также отметить, что на шлейфе может располагаться два устройства, между которыми указанная скорость пропускания будет делиться.

Эти проблемы решаются с помощью Serial ATA: 1)0.5 вольта, 2)2 кабеля (реально проводов больше; обычно используется 7-контактный разъем – две пары сигнальных проводов – на передачу и на прием, и три провода заземления), 3)кабель узкий и до 1м. SATA обеспечивает совместимость с PATA с помощью переходников. На одном проводе может находиться только одно устройство, поэтому не происходит кратного уменьшения скорости работы устройств из-за увеличения их количества.

Стали получать распространение сдвоенные кабели, через которые можно подавать не только данные, но и питание (стандарт SATA это позволяет).

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

Для передачи данных в SATA предусмотрен избыточный код. Для передачи 8 бит данных используется 10 бит. 256 чисел из 8 бит разбрасываются по 104 числам из 10 бит. Остальные числа в данных 1024 битах объявляются некорректными и их получение говорит об ошибке в передаче данных. Кроме того, используется CRC.

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

Можно говорить о трех поколения SATA.

SATA-I обеспечивает скорость передачу данных до 150Мб/сек (1,2 Гбит/с с потерей 20% на избыточность кода – 8 бит упаковываются в 10) на частоте 1,5 ГГц.

SATA-II удваивает все характеристики.

SATA Revision 3.0 находится в процессе разработки документации. Официально документация была предоставлена в августе 2008г. Подразумевает удвоение характеристик и дополнительные функции управления питанием.

Жесткие диски. RAID массивы (redundant array of independent disk drives)

RAID-redundant array of independent disk drives. Реализует идею объединения нескольких дисков для решения задач увеличения скорости доступа и/или увеличения надежности хранения информации. Для работы необходим соответствующий контроллер.

Существует несколько типов RAID-массивов.

RAID 0 – запись по цепочке. Данные равномерно распределяются по всем дискам, в результате чего увеличивается быстродействие и уменьшается надежность.

RAID 1 – организация зеркала (дублирование). Данные дублируются на всех дисках. Быстродействие не изменяется, но повышается надежность.

RAID 2 – запись по цепочке+запись кода ошибки. В данном случае запись производится на битовом уровне. Для обеспечения надежности системы требуется, как минимум, 10 дисков с данными и 4 диска с кодами ошибок. Для контрольных сумм используется код Хемминга.

Суть кода Хемминга заключается в следующем. Пусть рассматривается последовательность из K бит, представляющая число x. Для нее отводится L=log2 K бит данных для хранения контрольной суммы. Контрольная сумма S вычисляется следующим образом

S=S ni,

 где под S подразумевается побитовое исключающее `или’ всех ni,

ni – номера  единиц в исходной последовательности бит.

 

Очевидно, что если при вычислении S пропустить одно слагаемое или добавить лишнее, то получить недостающий/лишний член можно по формуле 

n*=S^S*

где n* – номер недостающий/лишний члена,

S* – номер суммы с учетом недостающий/лишний члена,

^ – побитовое исключающее или.

 

В этом случае биты данных по одному заносятся на каждый диск данных и контрольные суммы для этих последовательностей (длиной в количество дисков для данных) записываются на дополнительные диски. Т.о. массив с числом основных дисков от 16 до 32 должен иметь пять дополнительных дисков для хранения кода коррекции.

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

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

RAID 3 – данные побайтно записываются на каждый диск данных. На одном дополнительном диске записывается XOR от соответствующих байт данных. Т.о. можно сразу определить наличие неисправностей, но избавиться от ошибки налету невозможно. Восстановление самих данных осуществляется отдельным ПО по отдельному запросу. Возможно только одна запись в один момент, т.к. любая запись сопровождается одной записью на дополнительный диск.

RAID 4 – то же самой, что и RAID 3,  но данные на каждый диск записываются не по байтам, а по блокам. Это дает возможность производить несколько операций чтения одновременно.  

RAID 5 – то же самой, что и RAID 4,  но контрольные суммы равномерно распределяются по всем дискам. Т.о. возможно производить сразу несколько записей одновременно, т.к. все записи данных и контрольных сумм от этих данных могут ложиться на различные диски. Это – наиболее популярный используемый способ хранения данных.

RAID 6 – то же самой, что и RAID 5,  но используется два дополнительных диска для хранения контрольных сумм. Суммы на них вычисляются двумя разными алгоритмами. Позволяет восстанавливать данные после падения двух дисков.

RAID 7. зарегистрированная марка компании Storage Computer Corporation. На n − 1 дисках хранятся данные, один диск используется для складирования блоков четности. Но добавилось несколько важных деталей, призванных ликвидировать главный недостаток массивов такого типа: кэш данных и быстрый контроллер, заведующий обработкой запросов. Это позволило снизить количество обращений к дискам для вычисления контрольной суммы данных. В результате удалось значительно повысить скорость обработки данных (кое-где в пять и более раз). Из недостатков следует указать необходимость UPS для гарантирования сброса кеша на диск при отключении питания.

 

Разделы диска на IBM-совместимых ЭВМ.

Первый блок (сектор) диска принято называть MBR Master Boot Record. На самом деле, Master Boot Record это – кусок кода, на который BIOS передает управление при старте машины. Как правило, этот кусок умещается в первом блоке диска, поэтому понятия первого блока (Master Block Sector) и MBR, как правило, совпадают. Вообще говоря, существуют нетривиальные загрузчики для которых это не так. Поэтому понятия MBR и MBS стоит различать.

Жесткий диск разбит на разделы (partitions). В MBS содержится информация о четырех разделах диска и начальная программа загрузки операционной системы.

В последних 2 байтах MBS содержится идентификатор MBS – сигнатура 55h AAh. Если эти значения изменить, то BIOS не опознает этот блок как MBS и откажется использовать его для целей загрузки. В зависимости от установок BIOS для загрузки будет использован другой диск, дискета, CDROM и т.д.

Перед сигнатурой непосредственно расположены 4 блока по 16 байт с описанием, соответственно, не более 4 разделов на жестком диске. Эти разделы называются таблицей разделов (Partition Table).

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

·        Признак активности раздела (на активный раздел будет передано дальнейшее управление при загрузке)

·        Номер первого сектора раздела (в формате CHS: Cylinder-Head-Sector)

·        Тип раздела (если = 0, то считается, что раздела нет)

·        Номер последнего сектора раздела (в формате CHS: Cylinder-Head-Sector)

·        Смещение первого сектора раздела

·        Количество секторов в разделе

В секторе раздела, смещение к которому указано в блоке таблицы разделов, лежит в свою очередь– Boot Record – код на который передается управление после выполнения кода из MBR.

Для увеличения возможного количества разделов введено понятие Extended Partition (Расширенный раздел) (раздел с кодом 0x05). Особенностью этого раздела является то, что в первом секторе раздела вместо BR лежит еще одна таблица разделов. В этой таблице нет кода, который мог бы выполняться. В ней должно быть не долее двух записей в блоках таблицы разделов, первая из которых указывает на обычный подраздел в данном расширенном разделе, а если после него еще остается место, то вторая запись может указывать на еще один расширенный раздел, занимающий это свободное место.

В MBR должна присутствовать ссылка только на один расширенный раздел. Если это не так, то некоторые ОС (например MS DOS 6.2) могут не видеть все остальные расширенные разделы.

Некоторые ОС вставляют в MBR свою программку выбора раздела, с которого следует продолжать загрузку. Например, одной из таких программ для Linux является lilo.

 

Файловая система UNIX.

В качестве классической файловой системы UNIX можно рассмотреть файловую систему, используемую в Linux ext2.

В начале раздела ext2 лежит таблица дескрипторов файлов или таблица inode. Одному файлу соответствует один дескриптор. В дескрипторе, в частности, содержится:

Время создания файла

Время последней модификации файла

Время обращения к файлу

ID собственника файла (изначально – создателя файла)

ID группы файла (изначально – группы, к которой принадлежит создатель файла)

Привилегии на чтение/запись/выполнение для собственника файла/членов группы файла/для всех остальных

Длина файла

Номера, как правило, 13 блоков, первые 10 из которых – номера блоков файла, следующий блок – номер блока с ссылками на номера блоков файла, следующий блок – номер блока с ссылками на номера блоков с ссылками на номера блоков файла и т.д.

Счетчик ссылок на данный дескриптор (если он обнуляется, то файл считается уничтоженным).

 

Дескриптор можно создать командой mknod. Например

mknod FileName p

создаст именованный канал – псевдо-файл, в который одновременно можно писать и с которого можно читать данные по принципу FIFO.

 

Сейчас чаще используется файловая система ext3, которая полностью совместима с ext2, но в ней еще сохраняется файл журнала операций с файлами. Существует три режима ведения журнала:

data=ordered                в журнале файлы не хранятся; файл помечается как корректный (commited), если он полностью записан на диск

data=writeback             то же самое, но файлы помечаются как корректные до конца операции записи, в результате чего после краха системы в файле могут остаться старые данные; несколько более быстрая работа

data=journal                 при записи данные записываются сначала в журнал, а потом на диск.

 

Файлы устройств.

Каждому устройству в UNIX соответствует свой файл устройства, через который можно работать с устройством как с файлом. В Linux (обычно, так же и в других UNIX, но не всегда) файлы устройств размещены в папке /dev.

Устройства бывают блоковыми (row device) и символьными (character device). Если спросить

ls l DeviceFileName

то для символьного устройства первая буква описания файла будет `c’:

crw-------    1 root     root       5,   1 Сен 10 07:47 console

, а бля блокового `b’:

brw-rw----    1 root     floppy     2,   0 Сен 27  2000   fd0

Файл устройства задается двумя числами – верхним (major number, номер устройства) и нижним (minor number, номер драйвера). Существует утилита, помогающая создавать файлы устройств MAKEDEV. Верхнее число (major number) задает в одних интерпретациях тип устройства (например, номер раздела жесткого диска), а в других – тип драйвера устройства. Нижнее число задает номер самого устройства, т.е. его характеристику нижнего уровня.

=====================================================

 

Понятие монтировки.

Монтировкой называется процесс отображения некоторой файловой системы (более грубо – файла устройства, через который осуществляется доступ к данной файловой системе) на некоторый файл.

Монтировка корневой папки осуществляется при загрузке ядра. Все остальные монтировки осуществляются командой mount. Ее синтаксис

    mount                                                                      распечатать список всех монтировок

       mount -a [-fFnrsvw] [-t vfstype]                          -a = монтировать все ф.с. из /etc/f stab

       mount [-fnrsvw] [-o options [,...]] device | dir                 задается только имя устройства или папки, а недостающие данные (например, для папки – имя устройства, или для устройства – имя папки) берутся из файла /etc/fstab

       mount [-fnrsvw] [-t vfstype] [-o options] device dir        полный синтаксис

 

Загрузка UNIX.

Загрузку UNIX можно рассмотреть на примере Linux. В остальных разновидностях UNIX она происходит аналогично, с точностью до имен используемых папок.

Код BR инициализирует распаковку ядра Linux и начало его выполнения.

После проверки работоспособности оборудования происходит монтировка всех необходимых файловых систем в режиме ro. Далее, если необходимо, запускается программа fsck для проверки целостности разделов. При ее успешном выполнении далее происходит перемонтировка соответствующих файловых систем уже в режиме rw.

Монтировка файловых систем осуществляется следующим образом: сначала монтируется корневая файловая система (ее расположение задается в самом ядре или в его параметрах), далее рассматривается файл /etc/fstabSolaris, например, этот файл зовется /etc/vfstab, AIX - /etc/filesystems). Каждая строка этого файла описывает одну файловую систему. Так, например, в Linux каждая строка выглядит следующим образом:

/dev/fd0       /mnt/dos-floppy    msdos   noauto,user 0 0

т.е. сначала указывается файл устройства, на которое происходит монтировка, далее указывается имя папки, на которую монтируется устройство, далее – тип файловой системы, далее – список параметров через запятую (параметр user указывает, что обычный пользователь имеет право на выполнение данной монтировки), далее указывается – следует ли производить проверку данной файловой системы при загрузке.

Существует несколько уровней загрузки, обозначающихся номерами (обычно от 0 до 6). Выйти на соответствующий уровень можно командой /sbin/init n, где n - уровень загрузки. Обычно, стандартный уровень загрузки имеет уровень 3. В Linux в папке /etc/rc.d. В ней для каждого уровня загрузки существует своя папка с именами rc0.d, rc1.d, и т.д. В каждой папке лежат выполняемые файлы, которые должны выполниться в начале данного уровня загрузки. Программа init запускает программу getty, которая, собственно, и обеспечивает создание текстового терминала.