Главная страница  Межпроцессное взаимодействие (состязание) 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 [ 69 ] 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

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

В том же самом цикле, для всех разделов, идентифицированных как разделы MINIX, рекурсивно вызывается функция partition, чтобы получить информацию о подразделах. Если раздел идентифицирован как расширенный (extended partition), вместо нее вызывается функция extpartition.

Последняя в действительности не имеет никакого отношения к операционной системе MINIX. Расширенные разделы ведут происхождение от MS-DOS, как один из вариантов создания подразделов. Поэтому, чтобы обеспечить в MINIX работу с файлами MS-DOS, системе необходимо знать о дополнительных возможностях.

Следующая функция, get part table, получает тот сектор устройства (или вложенного устройства), в котором расположена таблица разделов, при помощи вызова do rdwt. Передаваемое функции смещение должно быть равно О, если функция вызывается для основного раздела, а для подразделов смещение принимает отличное от нуля значение. Функция проверяет наличие сигнатуры (0хАА55) и возвращает результат проверки (истина или ложь). Кроме того, если таблица найдена, функция копирует таблицу по адресу, переданному ей через другой аргумент.

Наконец, функция sort сортирует по нижнему сектору все записи в таблице разделов. Записи, помеченные как не имеющие раздела, исключаются из сортировки и идут последними, даже если в поле, по которому велась сортировка, у них записано нулевое значение. Для сортировки применяется простой пузырьковый алгоритм. Более сложные способы для сортировки таблицы из четырех записей ни к чему.

3.6. RAM-диски

Теперь мы вернемся к изучению отдельных блочных устройств и подробно рассмотрим некоторые из них. Сначала мы обратимся к драйверу RAM-диска. Его типовая область применения - доступ к произвольной области памяти. Обычно часть памяти резервируется и используется как обычный диск. Такой диск не обеспечивает долговременного хранения данных, но зато не изнашивается и работает очень быстро.

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



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

3.6.1. Аппаратное и программное обеспечение RAM-диска

Идея устройства RAM-диска проста. Любое блочное устройство - это накопитель с двумя командами: прочитать блок и записать блок. Обычно эти блоки находятся на вращающихся дисках, таких как дискеты или пластины жестких дисков. RAM-диск проще. Он хранит данные в предварительно выделенной области оперативной памяти. Преимущество такого диска в том, что он обеспечивает высокую скорость доступа (так как не требуется перемещать головки и вращать носитель) и может быть использован для хранения данных, к которым часто совершаются обращения.

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

В противовес такому подходу, в других операционных системах пользователь должен указывать положение каждого файла либо явно, например, как B:\DIR\ FILE, либо пользуясь различными умолчаниями (текущее устройство, текущий каталог и т. д.). На маленьких системах, с одним или двумя дисками, это можно вытерпеть, но на мощных компьютерах с дюжинами устройств следить все время за всеми устройствами невыносимо. Заметьте, что UNIX работает на компьютерах от IBM PC до рабочих станций и суперкомпьютеров, а MS-DOS используется только на малых системах.

На рис. 3.12 показано устройство RAM-диска. Диск разбивается на п блоков, в зависимости от того, сколько памяти для него выделено. Размер каждого блока равен размеру блока, используемому на реальных дисках. Когда драйвер получает запрос на чтение или запись блока, он просто вычисляет адрес и производит чтение или запись по этому адресу, вместо того чтобы работать с дискетой или жестким диском. Обмен данными осуществляется при помощи ассемблерной подпрограммы, копирующей данные с максимальной возможной скоростью.

Драйвер RAM-диска может поддерживать несколько областей памяти, которые различаются присвоенным им младшим номером устройства. Обычно эти



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

Основная память (ОЗУ)

Пользовател ьские программы

RAM-диск

Операционная система

<- 1-й блок RAM-диска

<- При обращениях к блоку о RAM-диска используется эта память

Рис. 3.12. RAM-диск

3.6.2. Обзор драйвера RAM-диска в MINIX

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

0: /dev/ram 1 /dev/mem 2: /dev/kmem 3: devnull

Первый из специальных файлов, /dev/ram, является настоящим RAM-диском. Ни размер, ни положение занимаемой им области памяти в драйвере не прописаны. Они определяются файловой системой при загрузке MINIX. По умолчанию размер RAM-диска равен размеру образа корневой файловой системы, чтобы можно было скопировать на него корневую систему. Варьирование параметрами загрузки позволяет установить больший размер RAM-диска, или если не копировать на него образ корневой системы, то можно назначить диску произвольный размер, который и в памяти умещается, и оставляет достаточно места для работы MINIX. Определив размер диска, система выделяет в памяти область достаточно большого размера, до того как начнет работу менеджер памяти. Такая стратегия позволяет увеличивать или уменьшать размер RAM-диска даже без перекомпиляции системы.

Следующие два устройства применяются для доступа к оперативной памяти или к памяти ядра соответственно. Открыв устройство /dev/mem и считывая из него данные, можно обратиться к любой области памяти, начиная с абсолютного нулевого адреса. Обычные пользовательские профаммы не имеют такой потребности, но системным программам, служащим для отладки операционной систе-



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 [ 69 ] 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.