русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Работа со специальными файлами устройств


Дата добавления: 2014-11-28; просмотров: 745; Нарушение авторских прав


 

Многозадачные операционные системы не позволяют прикладным программам напрямую работать с аппаратными компонентами. Если нескольким программам в одно и то же время заблагорассудится вывести


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

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

Различают символьные и блочные устройства, аналогично называются и соответствующие им специальные файлы. При выводе информации о файлах с помощью команды ls –l файлы символьных устройств можно распознать по первой букве «с», а блочные – по букве «b». К символьным относятся устройства, осуществляющие ввод/вывод данных в виде последовательного или посимвольного потока байтов (ленточные накопители, монитор, клавиатура, звуковые адаптеры, последовательные или параллельные порты). Блочные устройства осуществляют ввод/вывод фиксированными блоками данных определённой длины. Примером блочного устройства является магнитный или оптический диск – информация записывается на них и считывается блоками фиксированного размера, кратными размеру сектора. Подобная блочная структура организована и на долговременной полупроводниковой памяти.



Файлы специальных устройств (далее также – специальные файлы, файлы устройств) внешне напоминают обычные файлы. Их можно создавать (но только по определённым правилам специальной командой mknod), перемещать из каталога в каталог и удалять. Данные, помещаемые в такой файл, передаются драйверу устройства, а читаемые из файла – запрашиваются у драйвера. Копирование специального файла приведет к чтению из соответствующего устройства.

На специальные файлы не задаются права исполнения. Чтение из специального файла означает вывод потока данных из устройства. Так, с помощью команды

cat /dev/fd0 | xxd | more

производится чтение содержимого дискеты с поэкранным выводом. Утилита more одновременно отображает на текстовый экран несколько сотен символов (например, в режиме 25 строк х 80 символов = 2000), а емкость неименованного канала составляет 4 Кб. Поэтому чтение дискеты будет


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

Запись в специальный файл означает вывод потока данных в устройство. Так, команда

cal 2009 > /dev/fd0

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

echo privet! | dd of=/dev/fd0 bs=1 count=7

слово privet! будет записано в начало первого сектора дискеты. Таким путем можно превращать машинные носители в стегоконтейнеры, для чтения которых потребуется дисковый редактор или утилита xxd.

Распечатка файла на принтере также требует наличия права на запись в файл устройства /dev/lp0 (в данном случае предполагается, что принтер подключен к первому параллельному порту).

У файлов специальных устройств есть несколько любопытных архитектурных особенностей. Во-первых, с этими файлами не связаны блоки данных на машинном носителе. Попробуем посмотреть данные об этих файлах с помощью команды ls –li /dev. Обращает на себя внимание необычный размер файлов. Вообще понятие «размер» для специального файла неприменимо, так как это не настоящий файл, а указатель на соответствующий драйвер. Вместо размера команда lsпоказывает для таких файлов два числа: «мажорный» и «минорный» номера устройств. Упрощенно можно считать, что «мажор» – это порядковый номер драйвера устройства, а «минор» – внутренний номер устройства в таблице обслуживающего его драйвера. Например, жесткому магнитному диску, подключенному ведущим (master) к первому IDE-интерфейсу и имеющему обозначение hda (условные обозначения файлов устройств см. ниже), соответствует «мажорный» номер 3. Первый раздел этого диска, обозначенный hda1, имеет «минорный» номер 1, второй раздел hda2 – номер 2 и так далее.

Вторую особенность можно распознать, только воспользовавшись дисковым редактором. У каждого специального файла есть уникальный номер – inode. Но если открыть какой-нибудь индексный дескриптор, принадлежащий специальному файлу, то сразу в голову приходит мысль об ошибке – своей или программной. Редактор lde или extview отобразит описатель совершенно другого файла – как правило, обычного. И это не ошибка. Файлы специальных устройств не нуждаются не только в блоках данных – им не нужны и индексные дескрипторы. Поэтому команда ls –li /dev в каталоге специальных файлов отображает inode, принадлежащие другим файлам.

Специальный файл устройства имеет только имя в каталоге. Поэтому удаление этого имени равносильно удалению специального файла.

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

mknod /dev/filename { c | b } MAJOR MINOR

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

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

Располагаются файлы устройств в каталоге /dev (device – устройство). Узнать, какому устройству соответствует специальный файл, можно по характерным именам. К числу символьных устройств относятся:

· lp0, lp1 (lp – line port) – параллельные порты;

· ttyS0, ttyS1(tty – teletype) – последовательные порты COM1 и COM2;

· ttyN – физический или виртуальный терминал;

· audio – звуковой адаптер;

· ht0, st0 – IDE- и SCSI-накопители на магнитной ленте.

Блочными устройствами являются:

· fd0, fd1 (fd – floppy disk) – соответственно первый и второй дисководы ГМД;

· hdX[Y] (hd – hard disk) – диск или логический раздел жесткого диска (магнитного или оптического) с IDE-контроллером. Х – символы a,b,c,d, обозначающие: a – «master» на первом интерфейсном канале, b – «slave» на первом интерфейсном канале, c – «master» на втором интерфейсном канале, d – «slave» на втором интерфейсном канале, Y – номера разделов на жестком диске;

· sdX[Y] (sd – SCSI disk) – диск или логический раздел жесткого диска со SCSI-контроллером.

IDE-устройства в ОС Linux представлены следующими файлами:

· /dev/hda – «master» на первом интерфейсном канале;

· /dev/hdb – «slave» на первом интерфейсном канале;

· /dev/hdc – «master» на втором интерфейсном канале;

· /dev/hdd – «slave»на втором интерфейсном канале.

Например, при подключении исследуемого IDE-диска в качестве «master»-устройства ко второму интерфейсному каналу диск будет представлен как файл /dev/hdc.

Обращение к разделам на диске производится по их номерам, указываемым в конце имени файла диска. Всего на IDE-диске может быть адресовано 32 раздела. Первые 4 номера используются для обозначения первичных разделов, а остальные 28 номеров – для логических разделов. Например:

· /dev/hda2 – второй первичный раздел диска,

· /dev/hda6 – второй логический раздел диска.

SCSI-диски в ОС Linux представлены в виде следующих файлов:

· /dev/sda – первый диск,

· /dev/sdb – второй диск,

· /dev/sdc – третий диск,

· ...

· /dev/sdp – шестнадцатый диск.

Количество SCSI-дисков в каталоге /dev зависит от контроллера и может быть равно 8 или 16, и в соответствии с этим количеством дискам назначаются буквы. На самом деле к SCSI-контроллеру можно подключить 7 или 14 дисков (по семь к каждому из двух каналов) по той причине, что одним из устройств в канале SCSI-интерфейса является сам контроллер.

Обращение к разделам на диске, так же как и к IDE-дискам, производится по их номерам, указываемым в конце имени файла диска. Всего на диске может быть адресовано 15 разделов. Первые 4 номера используются для обозначения первичных разделов, а остальные 11 номеров – для обозначения логических разделов. Например:

· /dev/sda2 – второй первичный раздел первого диска,

· /dev/sda6 – второй логический раздел первого диска.

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

Информация о логических разделах нескольких фиксированных и съемных устройств дисковой памяти, выведенная командой fdisk –lu, приведена на рис. 3.1.

 

 



<== предыдущая лекция | следующая лекция ==>
Действия над обычными файлами | Device Boot Start End Blocks Id System


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.963 сек.