Section 2, Chapter 3, of Kermit: A File Transfer Protocol, pp.48-68, in Russian. The entire book was to be published in the Soviet Union by Akademia Nauk, the state scientific publishing house, under a contract signed in Moscow two years before the Soviet Union disappeared. This fragment was provided by ICSCI, the Internation Centre for Scientific and Technical Information, about 1989. Unfortunately we have only the text, without formatting. Some day if I have time I will insert the appropriate paragraph breaks, section headings, etc.

Frank da Cruz, March 2011

ЧАСТЬ 2

Компьютер и файлы

В этой части книги приведены основные понятия о компьютере, файлах и передаче данных. Эти разделы являются самостоятельными, и вы можете пропустить их если вы уже имеете некоторое представление об этих вопросах. Эта часть книги не имеет непосредственного отношения к описанию 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: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. Характеристики выбранных систем CP/M-80 файлы имеют потоковый формат, запоминаются блоками по 128 байт, длина записи - количество блоков. Конец файла, по соглашению, это первый встреченный в файле символ Control-Z. Длина двоичного файла целое число блоков, записываемая в каталог. Строки текста отделены последовательностью возврат каретки-перевод строки(CRLF). MS-DOS файловая система начиналась как копия CP/M файловой системы, но с датой создания и длиной файла для чего в список каталога записывался байт. Версия 2 MS-DOS была дополнена полной иерархической структурой каталога, подобно файловой системе UNIX, но с обратными слешами вместо прямых слешей в качестве разделителей. MS-DOS файлы являются просто потоками байт. Строки текста разделены CRLF. Многие приложения файловой системы CP/M были развиты в MS-DOS, и (?66). UCSD p-Система является Паскаль ориентированной системой применяемой на различных микрокомпьютерах. Имеет 2-х уровневую файловую систему, содержащую том и подтом. Имена файлов могут, а могут и не включать тип файла; если тип файла определен, (?66). Строки текста отделены голым возвратом каретки(CR). Файлы запоминаются в последовательных блоках, и может быть поэтому необходимо каждый раз перераспределять дисковое пространство для их создания. Текстовые файлы могут быть запомнены со сжатием пробелов, используя символ ASCII 16 (DLE) как сжимающий LEAD-IN символ. Каждый текстовый файл имеет лидирующую "страницу" (2 блока) для запоминания окружающей информации. Специальное обращение к файлу базируется на 4-х буквенном типе (когда многие обыкновенные системы имеют только 3-х буквенный тип файла), и предсказать размер файла перед тем как файл будет создан, становится специальной проблемой для передачи файла. Размер слова в компьютере Apple Macintosh может быть 16 или 32 бита, в зависимости какой из двух микропроцессоров будет применен, 16 или 32 битовый типа Motorola 68000. Первый компьютер Apple Macintosh имеет коммунальную файловую систему через которую "папки" могут быть наложены друг на друга создавая иллюзию структуры. Вторая версия Macintosh файловой система являлась попыткой сделать ее иерархической. Имена файлов могут быть произвольной текстовой строкой, подобно "This is the name of my File". Каждый файл имеет две части, ответвление данных и ответвление ресурсов, которые делают передачу файла хитрым делом. Текст записан в расширенном (8-ми битном) ASCII коде, позволяющим добавлять специальные символы в основную ASCII таблицу; строки текста разделены голым возвратом каретки (CR). Операционная система UNIX применяется на многих различных машинах с различным размером слова. Очень не похожа на другие системы, UNIX различает заглавные и прописные буквы в имени файла. Существует не формальное описание типов файлов, и все числа относительно точки могут появляться во всех позициях в имени файла (несмотря на имеющиеся определенные соглашения). Berkeley UNIX позволяет иметь файлам очень длинные имена. Файловая система полностью иерархическая, с подкаталогами запоминаемыми как обычный файл внутри своих высших каталогов. Файлы являются просто потоком байт, с точно известной длиной. Текстовые строки оканчиваются символом "новая строка", который является почти всегда символом LF. OS-9 является производной операционной системой от операционной системы UNIX, которая применяется на различных микрокомпьютерах. Текстовые файлы такие же как и в ОС UNIX, за исключением символа окончания строки, которым является символ CR вместо LF. Микрокомпьютер Hewlett-Packard 1000 снабжен коммунальной файловой системой, не имеющей структуры каталога (ограниченная иерархическая файловая система имеется в распоряжении как одна из опций; это работа по построению внутри регулярного HP-1000 файла). HP-1000 имеет 16-ти битное слово, с ASCII символами запоминаемыми по 2 на слово. Длина файла округляется до слова. Компьютеры серии Prime 50 имеют полную иерархическую файловую систему, созданную по образцу Honewell MULTICS. Текст записан в "негативном ASCII", с разделителем строки LF, или LF NUL(символ NUL добавляется когда строки имеют нечетное число символов); длина файла является всегда четным числом байт. Текстовый файл запоминается со сжатием пробелов (и с удалением хвостовых пробелов), и они могут содержать специальные коды для форматированной печати. Эти кода, и сжимающие LEAD-IN, отличаются тем что у них старший бит установлен в 0. ОС DEC RSX и VMS обеспечивают огромные массивы типов файлов, организаций, и атрибутов через FILES-11 и RMS. Тип файла и ограничитель записи зависят от атрибутов описывающих файл. Обычно стиль в FILES-11 и RMS это переменные записи (с полями длины), заполнение до четной длины, с неявным управлением кареткой через атрибуты каталога. RT-11 не использует FILES-11; и имеет просто поток файлов и использует в качестве разделителя строк текста последовательность символов CRLF, но записывает длину файла в блоках, приблизительно; финальный блок файла заполнен до конца символом NUL (когда файл имеет реально 0 байт как в конце данных, конец данных не должен отличаться от заполняющих). Файлы RT-11 являются последовательными, что требует перераспределения дискового пространства при создании нового файла. DECSYSTEM-20, и ее близкий родственник DECSYSTEM-10, имеют необычную длину слова: 32, что является не степенью 2. Эти машины имеют специальные инструкции для манипуляции с байтами размером от 1 до 36. Текстовые файлы представляют собой нормальную кучу 36-ти битных слов внутри которых находятся 5 7-ми битных байта, с 1 битом в остатке. Некоторые текстовые файлы имеют последовательные номера строки, которые занимают целое слово; такие файлы имеют каждую строку заполненную 0 до границы слова. Родной двоичный файл занимает целое 36-ти битное слово, тогда как иностранный двоичный файл обычно запоминается в четырех крайних слева 8-ми битных байтах, с 4-мя битами в остатке. В DEC-20 размер файла определяется в байтах, запоминается в списке каталога; в DEC-10 такого нет. Система DEC-10 имеет каталоги вида [p,pn], тогда как DEC-20 позволяет именовать каталоги на всех уровнях, такой длины как общее число символов в спецификации каталога, включая точки, которые отделяют каждый уровень, не превышая 39. Серия Honewell PDS с GCOS имеет полную иерархическую файловую систему такую как и UNIX, но файлы являются запись- ориентированными вместо просто потоков, с управляющим словом записи, предшествующей каждой записи, указывает длину, и специального RCW маркирует конец файла. Эти машины имеют 36- ти битное слово, но непохожи на DEC-10 и DEC-20, деля их на 4 9-ти битных байта в целях запоминания символов. IBM VM/CMS диск имеет коммунальную файловую систему, но пользователю разрешается создавать много "виртуальных дисков", каждый с собственной файловой системой. Спецификация файла содержит имя файла, тип файла, и имя диска (называемым "file mode"), разделенных пробелами. Редко найдется файловая система позволяющая иметь пробелы внутри спецификации файла, так как это может вызвать неоднозначность внутри команд, особенно когда эта спецификация файла может быть образцом чужой системы. CMS указывает количество блоков в файле, но (?68). Текстовый файл представлен в EBCDIC коде вместо ASCII. Операционная система MVS имеет такую же файловую структуру, но спецификация файла не содержит имя диска, и может быть длиной до 44 символов, но точка необходима по крайней мере в конце каждых 8 символов. Подобно HP-1000, MVS поддерживает возможность создания файловой системы внутри одиночного файла. В MVS это называется "partitioned dataset". CDC Cyber с NOS имеет коммунальную файловую структуру; имя файла состоит из 7 символов, точки, типа файла нет, нет спецификации устройства, нет номера версии. Текст запоминается различными путями, включая по крайней мере три различных 6-ти битных наборов символов (отсутствуют прописные буквы), и некоторые варианты 7-ми битного ASCII кода, с упаковкой текста внутри слова различными путями. Добавляет путаницу также использование своих собственных наборов символов. Строка текста обычно заканчивается машинным словом которое имеет по крайней мере 12 нулевых бит выравненных вправо. Конец файла указан как машинное слово полностью заполненное 0. Разнообразие показанных здесь пяти систем это только кончик айсберга. В течении шестидесятых и семидесятых годов имела место тенденция для каждого компьютера иметь уникальную операционную систему. В 1980 году производство имело уклон в другом направлении, применять одну из популярных , "совместимых" операционных систем подобных UNIX или MS-DOS, но многие собственные операционные системы продолжат процветать рядом с ними. Каждая операционная система имеет свои собственные проблемы, когда данные необходимо передать в непохожую систему. Из приведенного выше можно сделать вывод, что приведенные выше системы несовместимы по следующим характеристикам: - Набор символов - Разделитель строки текста - Определение конца файла - Сжимающий или форматирующий коды внутри файла - Формат и длина имени файла - Различия между текстовым и двоичным файлом - Различия между собственным и чужим бинарным файлом - Требования к перераспределению дискового пространства Каждое соединение двух непохожих систем может вызвать набор уникальных проблем. Но непрактично думать, что каждая система должна иметь специфические знания об особенностях другой системы, с которой ей придется обмениваться данными. Это парадокс что протокол передачи файлов должен решить эту проблему. 1 Это понятие пришло еще из тех дней когда память делалась из магнитных колец называемых сердечниками 2 Приложение Е "Двоичные, Десятичные и Шестнадцатиричные числа", более детально объясняет двоичную систему, плюс некоторые альтернативное описание для выражения двоичных чисел. 3 Терминал с которого системный оператор управляет работой системы (в системах с разделением времени) может также называться консолью. Мы не используем это слово в этом смысле. 4 На практике таблица распределения диска более подобна "бит вектор", в котором бит номер n есть 0 если дисковый адрес n свободен, и 1 если использован. 5 Например, UNIX использует "rm" для REMOVE.