Icon The Kermit Project   |   Now hosted by Panix.com
New York City USA   •   kermit@kermitproject.org
…since 1981
Kermit, A File Transfer Protocol, by Frank da Cruz, Digital Press (1987). Chapter 3, Computers and Files, in Russian. Part of the Russian translation for the Soviet edition that was to be published by Akademia Nauk (the USSR Academy of Sciences) in 1989 or 1990, arranged at the Moscow Kermit Conference. The project that was never completed.

ЧАСТЬ 3. Компьютер и файлы

В этой части книги приведены основные понятия о компьютере, файлах и передаче данных. Эти разделы являются самостоятельными, и вы можете пропустить их если вы уже имеете некоторое представление об этих вопросах. Эта часть книги не имеет непосредственного отношения к описанию Kermit протокола. Некоторые категоричные утверждения не всегда оправданы; в интересах краткости опущены случаи "однако" и "кроме".

Техническое и программное обеспечение

Компьютер создан из металла, силикона, резины, краски и т.д. Важной частью аппаратных средств считается память, или еще точнее, внутренняя память (не путайте ее с внешней памятью на дисках или лентах). Внутренняя память может быть различной: short-term, volatile(энергозависимая), core(магнитные сердечники) 1 . Прежде чем обработать информацию компьютер должен передать ее во внутреннюю память.

Вторая часть аппаратных средств это центральный процессор. Каждый компьютер имеет фиксированный набор машинных команд, которые он выполняет. Машинные команды очень похожи на операции подобные таким как: скопировать содержимое ячейки 123 в ячейку 234, сложить содержимое ячейки 345 с содержимым ячейки 1, если содержимое ячейки 456 - 0, тогда перейти к ячейке 567 и выполнить команду, содержащуюся там.

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

Программы пишутся на языке программирования. Существуют два рода языков программирования: язык программирования Ассемблер и языки программирования высокого уровня. В Ассемблере каждый оператор представляет одну машинную команду. Программы на Ассемблере транслируются в машинные команды относительно простыми программами называемыми трансляторами. В отличии от Ассемблера языки высокого уровня в одном операторе содержат несколько операций. Языки программирования высокого уровня транслируется в машинные команды очень сложными программами называемыми компиляторами.

Ниже приводится оператор на языке "Си" [19] [язык программирования высокого уровня]:

for (i = j = 0; i < 10; i++) j += i;
Это означает "установить значение i и j в 0, и тогда для каждого значения i меньше чем 10 выполнить действие - сложить значение j со значением i". Другими словами, сложить все числа от 0 до 9. "Си" компилятор транслирует этот оператор в машинные команды, подобно следующим операторам Ассемблера (для гипотетического Ассемблера):
Инструкция          Комментарии
    CLR  I          очистить ячейку I, т.е. присвоить значение 0
    CLR  J          очистить ячейку J
A:  MOV  T,I        скопировать значение I в T(помечено меткой A)
    SUB  T,10       вычесть от 10 T
    BZ   T,B        если результат 0, перейти на метку B
    ADD  J,I        сложить значение I и J
    INC  I          увеличить значение I на 1
    JMP  A          перейти на метку A
B:  ....            J содержит результат вычислений
Это предполагаемый уровень на котором работают большинство компьютеров. Ассемблер использует для представления машинных команд алфавитно-цифровые символы. Обычно, "Си" компилятор непосредственно преобразует числа в эти символы. Замечу что управление передается на следующую команду если только в команде не задано явной передачи управления куда-нибудь в другое место, или условно (подобно BZ) или безусловно (подобно JMP).

Как компьютер представляет данные

Для представления данных в ЭВМ используется двоичная система счисления (по основанию 2), последовательность 0 и 1. Одна двоичная цифра называется бит (аббревиатура b). Компьютер использует двоичную систему т.к. бит подобен маленькому переключателю, который может быть выключен (0) или включен (1). Если вы когда-либо видели устройство старого механического калькулятора, вы оцените простоту двоичной системы2 .

Память компьютера разбита на дискретные чурбанчики различной величины. Большие чурбанчики могут называться страницами или сегментами. Маленький чурбанчик (обычно 16 или 32 бита) называется словом (аббревиатура W). Маленький чурбанчик еще (обычно 8 бит) называется байтом (аббревиатура B). Компьютер обращается к ячейкам памяти через их адреса, которые определены как числа от 0 до некоторого максимального числа. Количество адресов компьютера называется адресным пространством. Адресом ячейки памяти может быть или байт или слово, в зависимости от архитектуры компьютера. Компьютеры имеющие встроенные инструкции оперируют или байтами, или словами или обеими.

Все данные представленные в компьютере как слово или байт заполнены 0 и 1. Отдельная последовательность бит не имеет внутреннего смысла или значения. Одна и та же строка бит может быть машинной командой, адресом, целым числом, указателем на число, строкой символов или другой разновидностью кода. Представление зависит от того, где используется эта строка битов в технических средствах или в программном обеспечении - например, строка битов 010000001010000010 может быть представлена в редакторе как ASCII символа AB, или как целое число 16706 в программе, которая выполняет вычисления, или как машинная команда для центрального процессора.

В большинстве компьютеров для представления инструкций, чисел или адресов используется слово. Размер слова в битах это степень двойки (см. Приложение E если вы не знаете что это такое). Обычно размер слова - 16 или 32 бита, но и другие размеры включая 4, 8, 12, 18, 24, 36, 48, 64, 72 и 128 (или больше) тоже могут встретиться. Размер слова определяет точность, с которой могут быть произведены арифметические вычисления, величину чисел, которые могут быть представлены, и адресное пространство машины. С другой стороны, байт также используется для хранения символов. Очень часто размер байта - 8 бит, но размер 5, 6, 7, 9 и 12 (или больше) тоже может встретиться. Большинство машин имеют фиксированный размер байта, но некоторые имеют инструкции для работы с байтами различной длины.

Машины могут адресоваться либо байтами либо словом. Машины, которые имеют дело с байтами для них очень важно чтобы числа и адреса начинались с "границы слова" - что как правило представляет адреса кратные 2 и 4. С другой стороны, машины которые имеют дело со словами должны представлять специальные инструкции для манипулирования с индивидуальными байтами внутри слова.

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

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

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

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

По определению, программа ограничена собственным адресным пространством. Адресное пространство, в котором выполняется программа, называется процессом. В системах с разделением времени одновременно могут быть активны несколько процессов; ОС защищает их друг от друга и планирует их доступ к ресурсам, которые им выделены. Каждый пользователь имеет задание(или сессия), которое может содержать одно или более процессов, в зависимости от ОС. Задание создается когда пользователь откроет сеанс и выполняется до тех пор пока пользователь не закроет сеанс.

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

Консоль

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

На микрокомпьютере, консоль является определенно специальной. Это неотъемлемая часть машины, ее лицо. Она не может быть подсоединена к микрокомпьютеру через коммуникационную линию, как это делается для обычного терминала. Это всегда полезно для пользователя, даже когда другие коммуникационные устройства активны. Дополнительные вводные устройства такие как "мышь", устройство ввода координат, световое перо, джойстик, и сенсорный экран могут быть связаны с консолью микрокомпьютера.

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

Взаимоотношение ОС с консолью отличаются от взаимоотношений с другими устройствами, так как устройство рассматриваемое в данном случае управляется человеком, а человек имеет более сложные потребности не же ли устройства ввода/вывода. Система позволяет пользователю консоли вводить определенные символы прерывающие выполнение операции. Она останавливается после каждого полноэкранного вывода пока пользователь не введет сигнал "вперед" для следующего вывода. Она передает сообщения на экран консоли. Она отображает на экране символы введенные с клавиатуры, ввод определенных символов позволяет пользователю исправлять ошибки при вводе команд. Определенные символы могут быть преобразованы в другие перед вводом или выводом. Длинные строки могут быть таким образом поделены чтобы не убегали за край экрана. Многие ОС принимают во внимание тип используемого терминала, и выполняет присущие только этому терминалу команды форматирования тем самым облегчая редактирование командной строки: удаление строки, удаление символа, очистка экрана и многие др. Некоторые комбинации этого сервиса реализованы на всех системах с разделением времени для работы терминала консоли, и обычно их можно не обнаружить на голом терминальном устройстве, через которое данные могут нормально, прозрачно проходить в обеих направлениях.

Многие ОС с разделением времени подразумевают что рабочая консоль - это терминал, а не персональный компьютер. Это очень важное отличие. Терминал передает символы так быстро, как человек может ввести их(10 символов в секунду и более), но компьютер может отобразить огромное количество данных в ответ на очень короткие запросы. По этой причине, ОС может отображать в отношении консоль вывод ввод 10 к 1 или 100 к 1. Когда в качестве консоли используется другой компьютер это соотношение может быть нарушено, что повлечет искажение или потерю данных, или еще хуже.

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

Диски, дискеты, форматы

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

Диски бывают двух основных типов: гибкий и жесткий. На микрокомпьютере жесткий диск является неотъемлемой частью системы, способный запоминать 5, 10 и более Мбайт. Гибкий диск (или дискета) - съемный, одиночная пластина, недорогой, компактный носитель данных способный запоминать от 100 Кбайт до 1 Мбайт (или около этого - эта цифра все возрастает). Диски больших машин имеют емкость 100 Мбайт и более, часто располагаются в отдельных комнатах и занимают все свободное пространство.

Каждая пластина диска разделена на ломтики, подобно ломтику пирога, называется сектором. Границы сектора пересекаются концентрическими круговыми треками. Обычная дискета имеет 40 - 100 треков и 10 - 32 секторов на одной или обеих сторонах, диск большой машины имеет очень много треков на каждой из многочисленных записывающих поверхностей. Часть треков расположенных между границами двух секторов называется блоком. Блок диска содержит фиксированное количество байт, обычно равного степени 2, от 128 до 8192.

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

Скорость с которой данные могут быть переданы между диском и внутренней памятью называется скоростью обмена. Скорость обмена гибкого диска находится в пределах от 5 до 25 Кбайт в секунду. Скорость обмена жесткого диска находится в пределах от 2500 до 5000 Кбайт в секунду. При выполнении отдельной операции чтения или записи, дисковой голове необходимо время чтобы спозиционироваться на нужный трек и сектор, это время является самым "узким местом" при передачи данных.

Особенности техники записи информации на диск варьируется в зависимости от производителя и типа диска. И можно с уверенностью объявить как общее правило, что система не сможет прочитать диск записанный на устройстве другой фирмы. И скорее то же самое справедливо для различных моделей одного производителя. Не имеется даже общего стандарта (исключая 8" гибкие диски, которые сейчас почти не используются).

Каталоги, файлы

Миллионы бит, которые компьютер запоминает на диске должны быть организованы таким образом, чтобы требуемую информацию можно было бы считать обратно когда это потребуется или удалить тем самым освободить место для новых данных. По этой причине, каждый компьютер который имеет диск, также должен иметь файловую систему. Файловая система содержит 0 или более файлов и каталогов, где указаны имена файлов и соответственно определено их местоположение. Каталог это специальный файл чье начальное местоположение известно, т.о. что компьютер всегда может найти его. Рисунок 3.1 показывает упрощенную организацию диска. Адрес 0 содержит "начальный блок", который содержит очередной начальный адрес, где содержится адрес таблицы распределения и адрес каталога. Каждая запись в каталоге занимает один блок и содержит (в этом примере) имя файла, начальный адрес файла на диске, и длину файла. Дисковый адрес 102, содержащий 0, показывает конец каталога. Это совсем простой пример, так как каталог и файлы непрерывны. На практике, дисковые блоки файлов разбросаны по всему диску и соединяются вместе "указателями", или через "file index block".

Рисунок 3-1. Упрощенная организация диска

Некоторые файловые системы разрешают наличие более чем одного каталога. В этом случае, каталог верхнего уровня может содержать список каталогов, а не файлов, а эти каталоги в свою очередь содержат список файлов. Этот механизм позволяет распределять диск между многими пользователями не нарушая их прав и надежности. Это может повторяться потенциально на всех уровнях, в зависимости от системы, с файлами и каталогами смешанными вместе в каждом каталоге. Система только с каталогом верхнего уровня называется коммунальной (flat) файловой системой (рис.3-2), система более чем с одним уровнем называется иерархической файловой системой (рис.3-3). На этих рисунках файловые системы показаны очень схематично, в действительности же, информация чаще всего располагается в соответствии с рис.3-1.

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

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

Новый диск пуст. Прежде чем вы сможете использовать его, он должен быть отформатирован или производителем или пользователем, с помощью программы входящей в состав системы. Частью процесса форматирования является создание таблицы распределения диска - списка дисковых адресов, которые свободны и могут быть использованы4 . Определенный дисковый адрес предназначен для ОС для начального (верхнего уровня) каталога. Когда вы создаете файл на диске, ОС просматривает ищет в таблице распределения диска свободные адреса, создает запись о файле в каталоге, и запоминает содержимое файла (саму запись в каталоге) на диске по этим свободным адресам, затем помечает каждый адрес, использованный в процессе записи как "использованный" в таблице распределения диска. Когда вы удаляете файл, запись о файле в каталоге и местоположение данных в таблице распределения диска помечается как "свободная". Формат записей каталога, данные записей, и таблицей распределения диска всем этим управляет ОС, так что вам нет необходимости вдаваться в подробности. Вы просто выдаете необходимые команды управления файлами.

Хотя форматы дисков не всегда составляют предмет интереса пользователей компьютеров, но само различие форматов и несовместимость между различными компьютерными системами вызывает интерес как только потребуется вам перенести файл из одной системы в другую: вы не сможете просто взять гибкий диск, скажем, с IBM PC и вставить в дисковод на Apple II, и ожидать чего-то.

Соглашения о наименования файлов

В большинстве случаев файлы имеют две части имени, из которых первая произвольно задается создателем файла, а вторая часть определяет тип файла в соответствии с некоторыми соглашениями (которые не всегда соблюдаются). Обе части отделены друг о друга разделителем, обычно точкой. Обе эти части обычно ограничены по длине, первая часть - от 6 до 8 символов, 3 символа - вторая часть. Вторая часть называется типом файла. На определенных системах, тип файла FOR обозначает файл содержащий исходный текст программы на языке FORTRAN, C - исходный текст программы на языке "Си", TXT - файл содержащий какой-либо текст, EXE - выполняемый модуль.

Многие системы позволяют в имени файла использовать только буквы и цифры. Некоторые системы позволяют использовать только буквы, и если используются цифры, тогда первым символом в имени файла может быть только буква. Многие системы, но не все (UNIX хорошо известное исключение), не делает различие между заглавными и прописными буквами в имени файла.

Полная спецификация файла (обычно) включает в себя устройство, каталог и имя. Многие системы, иногда, поддерживают понятие "текущий диск" и "текущий каталог". Когда вы исключите эти поля из спецификации файла, они "по умолчанию" считаются текущие диск и каталог. Синтаксис для спецификации файла различен среди систем, но существуют несколько общих соглашений. Имя устройства оканчивается двоеточием, имя каталога заключено в квадратные скобки, точка отделяет имя файла от типа файла. Например, спецификация файла в системе VAX/VMS

DSKA:[KERMIT]FOO.BAR
где, имя файла FOO.BAR в каталоге KERMIT на устройстве DSKA. Другое общее описание, в котором поля разделены прямым слешем, как в спецификации файла для системы UNIX:
/dev/dska/kermit/foo.bar
/dev/dska/kermit/new/foo.bar
Замечу, что здесь нет различия между устройством и каталогом в спецификации файла системы UNIX, и что путь через дерево каталога обозначен как просто строка имен каталогов вместе, разделенных прямым слешем.

Некоторые системы смешивают предыдущие два стиля, и могут также использовать различные виды скобок или слешей:

A:\KERMIT\NEW\FOO.BAR (MS_DOS)
DSKA:<KERMIT.NEW>FOO.BAR (DECSYSTEM-20)
Замечание: видно что для определения подкаталога NEW в каталоге KERMIT использованы различные методы.

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

Организация файла

Очень часто организация данных внутри файла является последовательной, когда байт следует один за другим и нет явных разрывов. Файл с произвольным методом доступа, с другой стороны, может иметь (а может и не иметь) разрывов на протяжении всей его длины. Два общих типа файлов с произвольным доступом являются родственными, в которых к записи можно добраться с помощью номера записи, и индекса или "hashed" файла, в котором к записям можно добраться через слово или используя некоторый другой метод классификации. Последовательный файл может также иметь внутренние ключи или номера записей. Важным критерием является какой из двух файлов может быть воспроизведен как копия только его содержимого: только последовательный файл имеет эту возможность. Файл с произвольным доступом имеет смысл только в комбинации с добавлением внешней информации, такой как список адресов или слов. Иногда эта информация действительно есть в файле но в форме зависящей от устройства или системы.

Последовательный файл может быть разнообразных форматов. Текстовый файл обычно содержит одну или более строк, или "записей". Различные системы представляют границы записи различными путями. Один из путей это включение управляющих символов в конец каждой строки, обычно это символы возврат каретки(CR), перевод строки (LF), или оба (CRLF). Этот формат называется потоковым. Существует также фиксированный формат, в котором все записи могут быть некоторой длины(подобно 80 байт); все короткие записи заполняются пробелами или другими безвредными символами, и все длинные записи обрезаются или "wrapped". И существует переменный формат, в котором каждой записи предшествует поле содержащие ее длину. Иногда стиль имеет "carriage control" - первый байт каждой записи указывает формат печати записи: старт с новой страницы, с новой строки, overstrike предыдущую строку, перескочить строку и т.д. Этот формат главным образом используется для печати, но может встретиться в файле созданной FORTRAN программами.

Главное, только последовательный файл может быть передан между системами различными системами, потому что непоследовательный файл обычно имеет встроенную зависимость от устройства или системы на которой воспроизводится. Текстовые файлы могут быть полностью использованы после передачи в другую систему, для этого часто необходимо конвертировать их в распространенные форматы для требуемой системы - потоковый, фиксированный, переменный и т.д.

Управление файлами

Многие ОС обеспечивают вам группу команд для управления файлами. Иногда синтаксис их может быть различен, и некоторые команды могут отсутствовать в некоторых системах, следующий список дает вам понятия об основных операциях:
CREATE
Создать указанный файл. Если эта команда существует, вероятно вызов текстового редактора. Если нет , вам вероятно необходимо вызвать определенный редактор для создания файла.
DELETE
Удаляет файл из каталога. Операционные системы различны в их подходе к удалению файла. Самым общим методом является удаление файлов из списка каталога, и маркировка файловых блоков как свободных в таблице распределения диска. (?) . Менее известный метод сохраняет файл, но ставит атрибут "удален", позволяющий позднее восстановить файл. Основными синонимами для DELETE являются REMOVE и ERASE, и различная аббревиатура этих слов 5 .
DIRECTORY
Выдает список имен указанных файлов, или всех файлов на текущем устройстве или каталоге, возможно вместе с некоторыми атрибутами. Многие системы снабжены опциями в помощь управления файлами - образец соответствующего имени файла, указание даты, размера или других критериев. Основным синонимом является LIST.
TYPE
Отображает содержимое указанного файла на экране. Эта команда имеет смысл при чтении текстового файла; двоичные файлы (стр 58) с прыгающим по всему экрану курсором и настойчиво играющим сигналом.
COPY
Делает вторую копию указанного файла, под новым указанным именем, или на указанном устройстве. Оригинальный файл не мешает. Эта команда может быть использована для создания нового путем копирования с консоли в файл, при условии что система дает вам возможность указать с консоли сигнал "конец файла".
APPEND
Добавляет один файл в конец другого файла. Эта операция называется конкатенация, или просто (59) 6.
RENAME
Изменить имя указанного файла на новое указанное имя. При этом основой является изменение в списке каталога, оставляя содержимое файла не измененным. На некоторых системах, этот механизм используется при переносе файла из одного каталога в другой.
CWD
Изменить рабочий каталог, т.е. изменить по умолчанию каталог и/или устройство для указания спецификации файлов. Эта команда обеспечивает иллюзию передвижения по файловой системе, прыгая из одного каталога в другой. Синонимы - CD, CHDIR, CONNECT и иногда просто имя диска.
В иерархических файловых системах существуют также команды для создания и удаления подкаталогов. И в распределенных файловых системах существуют команды контролирующие метод доступа к вашим файлом; обычно вы можете предоставить или отказать все комбинации чтения , записи, добавления, просмотра каталога, и выполняя разделение метода доступа между собой, вашей группы и вообще для всех. Записывая разрешение обычно подразумевается разрешение удалять.

Перекодирование текста

Текст - одна из разновидностей данных, запоминается в памяти компьютера и на диске как двоичные числа, последовательность 0 и 1. Экран компьютера или принтер отображает символы эквивалентно двоичному числу в соответствии с некоторыми соглашениями. Очень часто применяются соглашения ASCII, Американский стандартный код для обмена информацией[5], подробно описан в Приложении D.

ASCII алфавит является 7-ми битным кодом содержащим 27 = 128 символов, пронумерованных от 0 до 127. Первые 32 (номер от 0 до 31) плюс последний символ (номер 127) являются управляющими символами. Среди управляющих символов есть форматирующие символы - возврат каретки (CR, или Control-M), перевод строки (LF, Control-J), горизонтальная табуляция (HT, Control-I), и перевод формата (FF, Control-L), которые обычно присутствуют в текстовых файлах. Оставшиеся управляющие символы используются для управления устройством или для других целей, и обычно они не присутствуют в текстовых файлах.

95 символов в пределах от 32 до 126 охватывают графику, или печатаемый набор. Существуют символы на самом деле вызывающие появление чернил на бумаге, верхних и нижних алфавитов, десятичных цифр, знаков препинания и других символов. Пустой символ рассматривается как графический символ. Таблица 3-1 показывает ASCII таким как он применяется в Америке и Канаде (Приложение Д содержит более полную информацию). Другие страны делают определенные замены: в Англии символ "#" заменен на "фунт". В Скандинавии несколько больше экзотических знаков, знак "}" был заменен на специальный символ "0".

Таблица 3-1. ASCII алфавит

Замечу, что различия между символами представляющие десятичные цифры и числовым значением десятичный цифры себя. Символ 0 (ноль) запоминается внутри компьютера как число 48 (двоичное 0110000), тогда как число 0 запоминается как двоичный ноль (0000000), который представляет в ASCII символ NUL. Числовой код каждого символа оказывается очень важен, поскольку это определяет "сравнительную последовательность" - "алфавитный" порядок вы получаете когда компьютер сортирует ASCII текст. Как вы можете ожидать, буквы являются числовой последовательностью, но поскольку заглавные буквы предшествуют прописным, "B" стоит перед "a" в ASCII сравниваемой последовательности.

Также замечу образцы в таблице. Заглавные буквы выстроены перед прописными буквами (они имеют смещение 32 = 25); управляющие символы выстроены перед их принтуемыми эквивалентами (смещение 64 = 26). Этот образец позволяет определить общее преобразование сделать арифметическим. ASCII символы воспроизводятся ASCII терминалом, который имеет клавиатуру типа пишущий машинки. Управляющие символы являются результатом нажатия специальной клавиши помеченной Control и нажатием соответствующей буквы, A для Control-A, B для Control-B и т.д. Этот метод генерации управляющих символов явился результатом сильной связи между ASCII символом номер 1 и Control-A, символа номер 2 и Control-B, и т.д. Тем не менее эти символы имеют более хорошее представление через их формальные имена, SON (начало пакета), STX (начало текста), и т.д., которые приведены в приложении Д.

Хотя производители многих популярных компьютеров используют ASCII преобразование для текста как внутреннего так и для связи с внешними устройствами, существует основное исключение (и это является основным) - IBM. IBM благоволит к своему собственному алфавиту EBCDIC (Расширенный двоично- десятичный код обмена информацией) преобразования , он содержит 256 8-ми битных символа, он используется на больших машинах и миникомпьютерах, но на персональных ЭВМ применяется ASCII. Многие производители больших машин также применяют код EBCDIC, выделяя при этом части7, которые показаны в таблице 3-2, взятые из IBM System/370 Reference Summary [29].

Замечу различия от ASCII алфавита. Непечатаемые символы не включены в список как управляющие символы, так как EBCDIC терминалы не имеют клавиши Control. Многие EBCDIC символы имеют отличные от их ASCII эквивалентов числовые значения, хотя некоторые и совпадают (SON, ETX). Существуют дыры в алфавите, очень заметные между буквами I и J, R и S, как между прописными так и заглавными буквами. В EBCDIC прописные буквы предшествуют заглавным буквам, которые являются реверсивными ASCII устройству. Сравнительные последовательности EBCDIC и ASCII очень различны.

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

Перекодировка символа из одного набора в другой производится через таблицу перекодировки - "translate table" для краткости - которая является просто списком чисел. Число в позиции n в таблице является (62). Например число в позиции 71 в таблице ASCII-to-EBCDIC есть 199 - 71 есть ASCII значение для буквы G, а 199 есть EBCDIC значение этой буквы [Таблица 3-3]. Когда ASCII значение 71 прибывает в EBCDIC систему (скажем для ASCII терминала), перекодирование производится непосредственной заменой его на 71 элемент из этого списка.

Таблица 3-2. Выбранные части EBCDIC алфавита

Каждая таблица перекодировки должна иметь обратную таблицу; если EBCDIC является базовой системой при приеме символов от ASCII устройства, вероятно также потребуется и передавать символы обратно на это устройство. Таким образом необходимо иметь и таблицу перекодировки из EBCDIC в ASCII.

Но что будет в случае когда EBCDIC символов в два раза больше чем ASCII символов? При создании таблицы перекодировки из EBCDIC в ASCII имеет место жесткий указатель: некоторые ASCII символы могут иметь составной EBCDIC эквивалент. Что случится когда EBCDIC файл который был перекодирован в ASCII необходимо перекодировать обратно в EBCDIC? Сможет ли он стать таким же как оригинал? Вероятно нет, так как (62) . Поскольку EBCDIC имеет больше символов чем ASCII, поэтому невозможно иметь обратную таблицу перекодировки из EBCDIC в ASCII.

Но если вы только заботитесь об ASCII файлах, то вашей проблемой является проблема воспроизведения последних 128 уникальных значений из EBCDIC таблицы в соответствующие 128 ASCII значений. Перекодировка из ASCII в EBCDIC и обратно может быть сделана перестановкой хорошо описанной таблицы. Такая таблица приведена в IBM System/370 Reference Card, и в Приложении Д, и (?63).

Прежде чем закончить тему о таблицах символов, Я должен напомнить что существуют тенденции создания 8-ми битных таблиц на основе ASCII, Младшая часть является стандартной ASCII таблицей, а старшая часть содержит специальные символы. Имеются некоторые соглашения что касается какими быть этим специальным символам, хотя имеются и стандарты. Целью всего этого является обеспечение выбора диакритических символов (омляут и т.д.) для использования в Европе, или альтернативных алфавитов подобных Греческому, Древнееврейскому, или Кирилическому. Пользователи IBM или DEC микрокомпьютеров должны быть знакомы с этими специальными, так как они часто случайно появляются на экране.

Таблица 3-3. Часть таблицы перекодировки из ASCII в EBCDIC

Версии файлов

Во многих файловых системах, возможно иметь только одну копию файла с особым именем на особом диске или каталоге. Если вы создаете другой файл с некоторым именем в некотором месте - например, редактируете оригинальный файл и затем сохраняете его - оригинальный файл при этом уничтожается. Некоторые файловые системы, тем не менее позволяют иметь множество копий некоторого файла (называемых версиями или генерациями). Первая и оригинальная копия есть версия 1, следующая копия - версия 2, и т.д. Такие системы обычно передвигают последнюю версия автоматически когда вы создаете новую версию, или в противном обеспечивает вам способность передвинуть вместе все старые версии полностью.

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

Конец файла

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

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

Программы которые работают под управлением таких систем могут принимать соглашения для маркировки окончания данных, как включением специального символа (такого как ASCII символ - Control-Z) в соответствующее место внутри файла. Конечно такие соглашения исключают использование специальных символов внутри файла как символов данных, и это зависит от всех прикладных программ следить которые создают и читают файлы.

Другие атрибуты файла

Теперь мы знаем спецификацию файла (устройство, каталог, имя), организацию файла (последовательный, с прямым доступом), тип (текстовый, двоичный), перекодирование (ASCII, EBCDIC), версия, и длина. Существующие атрибуты файлов очень важные. Но файл может иметь и другие атрибуты тоже, зависимые от особенностей файловой системы. Существуют типичные записи в списке каталога файлов.

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

Характеристики выбранных систем

Таблица 3-4 содержит список выбранных микрокомпьютеров и больших машин в соответствии с некоторыми характеристиками, которые мы будем обсуждать. Это еще маленькая таблица, и это то еще не сможем рассмотреть подробно, так как многие параметры списка изменяются от одной реализации ОС к другой, или от одной модели машины к другой. Размер слова и байта приведены в битах.

В колонке "Формат спецификации файла" показано описание используемое при полной спецификации файла в нормальном случае(сетевые имена узла и другие экзотические случае исключены); DEV - имя устройства, DIR - имя каталога (в иерархической файловой системе, DIR - произвольный путь через дерево каталога). Если поле каталога указано как числовой объект и номер программы, это показано как "p,pn". Цифра показывает максимальную длину имени файла и тип файла, соответственно, и ".v" или ";v" в конце спецификации файла показывает формат для указания версии файла или номера генерации, если это возможно. В записи подобной DEV:[DIR.DIR..]9.3;v указана спецификация файла которая начинается с имени устройство, отделенного двоеточием, за ним следует имя каталога в квадратных скобках, в котором может быть множественный уровень каталога разделенных точкой, следующее имя файла, максимум состоящее из 9 символов в имени файла и 3 символа тип файла, точка разделяет имя и тип, следующий номер версии.

В колонке "Код Текста", ASCII7 - 7-ми битный код ASCII, ASCII8 - "расширенный ASCII код", и SIXBIT - 6-ти битный код включающий в себя только часть 7-ми битного ASCII кода. ASCII7- - "негативный" ASCII код, в котором старший бит каждого 8-ми битного байта установлен в 1. В большинстве других случаев, где n-битный ASCII символ запомнен в m-битном байте (и m больше чем n), старшие биты установлены в 0.

В колонках "Конец строки" и "Конец файла" показано как маркируется конец записи/строки в текстовом файле и каким образом определятся конец самого текстового файла, соответственно; CR - возврат каретки, LF - перевод строки, RCW - Управляющее слово записи, описывает каждую запись, F,V - может быть фиксированной или переменной записью в которой переменная запись должна быть описана как RCW. В колонке "Конец файла", байт - точный счетчик байт хранимый в каталоге, блок - длина файла указывается только в блоках, слово - длина файла указывается приблизительно, RCW - специальное управляющее слово записи указывающее конец файла.

Таблица 3-4. Характеристики выбранных систем

Разнообразие показанных здесь пяти систем это только кончик айсберга. В течении шестидесятых и семидесятых годов имела место тенденция для каждого компьютера иметь уникальную операционную систему. В 1980 году производство имело уклон в другом направлении, применять одну из популярных , "совместимых" операционных систем подобных UNIX или MS-DOS, но многие собственные операционные системы продолжат процветать рядом с ними. Каждая операционная система имеет свои собственные проблемы, когда данные необходимо передать в непохожую систему. Из приведенного выше можно сделать вывод, что приведенные выше системы несовместимы по следующим характеристикам: Каждое соединение двух непохожих систем может вызвать набор уникальных проблем. Но непрактично думать, что каждая система должна иметь специфические знания об особенностях другой системы, с которой ей придется обмениваться данными. Это парадокс что протокол передачи файлов должен решить эту проблему.
_________________________________
  1. Это понятие пришло еще из тех дней когда память делалась из магнитных колец называемых сердечниками
  2. Приложение Е "Двоичные, Десятичные и Шестнадцатиричные числа", более детально объясняет двоичную систему, плюс некоторые альтернативное описание для выражения двоичных чисел.
  3. Терминал с которого системный оператор управляет работой системы (в системах с разделением времени) может также называться консолью. Мы не используем это слово в этом смысле.
  4. На практике таблица распределения диска более подобна "бит вектор", в котором бит номер n есть 0 если дисковый адрес n свободен, и 1 если использован.
  5. Например, UNIX использует "rm" для REMOVE.

Kermit, A File Transfer Protocol, by Frank da Cruz, Digital Press (1986). Chapter 3, Computers and Files, in Russian.