AndreyMust19 Опубликовано 7 марта, 2009 Жалоба Поделиться Опубликовано 7 марта, 2009 Прежде чем начать о монтировании файловых систем, мы должны поговорить о файлах-устройствах. Этим мы и займемся. --- Глава 1. Файлы-устройства --- В разделе про учетные записи и файлы мы уже упоминали об одном из типов файлов - устройствах. Познакомимся с ними поближе. 1. Что такое файл устройства? Очень необычная особенность UNIX-систем - все устройства в ней представлены файлами. Делается это для того, чтобы программы могли работать с устройством также, как с обычным файлом, используя те же системные вызовы. Разумеется, само устройство не хранится в файловой системе, поэтому команды передаются не ей. Вместо этого команды чтения / записи / перемещения текущей позиции передаются драйверу этого устройства, он выполняет соответствующие действия и возвращает их результат. В результате чтение / запись производятся не с файлом-устройством, а с самим устройством, которому соответствует этот файл. 2. Тип устройства В UNIX все устройства делятся на 2 класса - Символьные и Блочные. То есть нет такого типа файла - "устройство", а есть только "символьное устройство" и "блочное устройство". Эти 2 класса - это разные типы файлов: - Символьным (char-device) Обмен данными с таким устройством осуществляется по одному байту. К таким устройствам можно отнести устройства ввода / вывода. В них драйвер сразу читает или пишет данные, как только они поступили. Поэтому буфер для хранения данных не требуется. - Блочным (block-device) Такие устройства возвращают / записывают данные только блоками определенного размера. Например, драйвер не может записать 2-3 байта на жесткий диск - для этого он должен прочитать целый блок данных, размером в 512 байт (сектор), изменить в нем эти 2-3 байта и записать сектор на диск. Выходит что для чтения / записи небольшой порции данных нужно прочитать / записать БОЛЬШУЮ порцию данных (целый блок). Поэтому драйвер блочного устройства проводит буферизированные операции чтения / записи, сохраняя в памяти (или в кеше устройства) содержимое блоков, к которым чаще всего происходит обращение и периодически записывая их обратно на устройство (синхронизация). P.S. Во FreeBSD есть оба типа устройств, но все они называются просто устройствами. Это выражается в том, что какой бы тип устройства не был (символьный или блочной), система все равно вернет значение "символьный". 3. Открываем устройство Некоторые устройства возможно открыть только для чтения или только для записи. Например, клавиатура - устройство ввода информации. Поэтому файл-клавиатуру вы можете открыть только для чтения (при открытии для записи функция возвратит ошибку). Дисплей - устройство вывода информации. Поэтому его вы можете только писать в него данные. На устройства хранения информации можно как писать данные, так и читать с них. Поэтому такие файлы можно открыть как для чтения, так и для записи. В большинстве случаев открывать файл-устройство может только учетная запись root (т.к. все устройства принадлежат ему). --- Глава 2. Аттрибуты устройств --- 1. Аттрибуты устройства Аттрибуты файлов-устройств интерпритируются системой совсем по-другому: * Имя драйвера, который работает с устройством. Записано вместо СОДЕРЖИМОГО ФАЙЛА. * Старший номер (от 0 до 255) По старшему номеру можно определить тип устройства. Например, вот номера для Символьных устройств в одной из Linux-систем: 1 - Оперативная память 4 - Виртуальные терминалы 5 - Консоли (мониторы) 6 - Принтер с параллельным разъемом (то есть тот, который и предназначен для принтера) 13 - Устройство ввода 14 - Звуковое устройство (системный динамик, колонки, савбуфер) 180 - USB-концентратор 189 - USB-разъем (usb-device) А вот - для Блочных устройств: 1 - RAM-диск (файловая система в оперативной памяти) 2 - Дисковод гибких дисков 3 - Первый IDE-контроллер для жестких дисков 8 - SCSI-контроллер (единственный) 22 - Второй IDE-контроллер для жестких дисков 254 - Карта всех устройств Разумеется, все эти номера специфичны для платформы IBM PC, так как на моделях другой архитектуры устройства могут быть совсем другие. Список старших номеров блочных и символьных устройств, известных ядру, записан в файле /proc/devices. Также номера могут отличаться в разных клонах UNIX (но не очень сильно). * Младший номер (от 0 до 255) Поскольку устройств одного типа может быть несколько, то младший номер определяет номер этого устойства среди всех устройств данного типа. Команда file при встрече с файлом устройства выводит на экран словесное описание класса устройства (символьное или блочное), а затем старший номер устройства, и через палочку - младший номер устройства. Старший и младший номер записаны вместо РАЗМЕРА ФАЙЛА. Это вы можете увидеть, используя команду 'ls -l' с файлом-устройством: brw-rw---- 1 root disk 3, 1 2009-03-02 16:38 /dev/hda1 Вместо размера файла записаны 2 числа: первое - старший номер, второе - младший номер. Причем система возвращает размер файла как обычно, просто программа ls, встретив файл-устройство, разбивает Размер Файла на 2 числа. --- Глава 3. Имена файлов устройств --- Здесь я перечислю наиболее употребительные имена файлов-устройств в Linux и FreeBSD, а также о правилах их образования. Здесь не будут указаны устройства, являющиеся носителями информации (для этого предназначен другой раздел). Все устройства находятся в /dev, поэтому я пишу только имя файла. Буква 'N' обозначает число (может состоять из неск. цифр). 1. Устройства ввода kbd - Клавиатура sysmouse, mouse - Мышь 2. Устройства вывода console - Главный монитор (подключенный локально к компьютеру) ttyN, pttyN - Терминал null, zero - Черная дыра (все, что сюда пишется, бесследно пропадает) 3. Память kmem - оперативная память (такая, какая она есть) mem - память после виртуальной трансляции виртуа 4. Прочее audio - системный динамик (спикер) --- Глава 4. Создание устройства --- По старшему и младшему номеру файла операционная система определяет - какому из установленных устройств оно соответствует. Если вы установили новое устройство или вручную создаете систему, вам нужно уметь создавать файлы-устройства. Операционная система по этим номерам идентифицирует устройство. Среди устройств одного типа есть правила их нумерации. Н-р, у виртуальных терминалов (/dev/ttyXX), и физических разделов на жестком диске (/dev/hdaXX) младшему номеру устройства соответствует число в конце имени - XX). Тем самым, старший и младший номер однозначно идентифицируют устройство. 1. mknod Используется для создания файлов устройств, а также для создания именованных каналов (но об этом не будем). Для создания устройств используется след. синтаксис: mknod [<Опции>] <Имя> <Тип> <Старший> <Младший> Создается файл-устройство с указанным <именем>, <старшим> и <младшим> номером. В качестве <Типа> устройства может быть указано: c или u - символьное b - блочное уст-во Например, эта команда создает файл, соответствующий 2-ей файловой системе на первом из подключенных IDE-устройств: mknod /dev/hda2 b 3 2 3 - это старший номер, соответвующий IDE-устройствам. Опции: -m <Режим> Установить права доступа для созданного файла (как в chmod). --help --version Вывести встроенную справку и номер версии программы. 2. MAKEDEV В папке /dev очень часто находится скрипт MAKEDEV. Как видно из названия - он предназначен для создания файлов-устройств. Это большой скрипт, он использует программы chmod, chgrp и вышеупомянутую mknod. Он анализирует имя создаваемого файла и сам устанавливает нужные старший и младший номер. Этот скрипт я не буду описывать - разберитесь с ним сами через мануалы. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.