кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
Скачать 6.11 Mb.
|
Байты Значение 0 Обычно равен 0 1–8 Имя файла 9–11 Тип файла 12 Экстент 13–14 Зарезервированы (равны 0) 376 Код Байты Значение 15 Количество секторов в последнем блоке 16–31 Карта диска Первый байт элемента каталога применяется только в том случае, когда с файловой системой работают два человека и более. В операционной системе CP/M этот байт обычно равен 0, как и байты тринадцатый и четырнадцатый. В CP/M каждому файлу присваивается имя, состоящее из двух частей. Первая часть — имя файла — может содержать до восьми символов, храня- щихся в байтах с первого по восьмой элемент каталога; вторая часть — тип файла — может содержать до трех символов, хранящихся в байтах с девятого по одиннадцатый. Существует несколько стандартных типов файлов. Напри- мер, TXT говорит о том, что файл является текстовым (содержит только коды ASCII), а COM (от command — «команда») указывает, что файл содержит ма- шинные инструкции для процессора 8080, то есть программу. При указании конкретного файла эти две части разделяются точкой. MYLETTER.TXT CALC.COM Этот метод наименования файлов известен как формат 8.3 («восемь точ- ка три»), допускающий максимум восемь букв до точки и три буквы после. Карта диска в элементе каталога указывает блоки выделения памяти, где хранится файл. Предположим, что значениями первых четырех байтов карты диска являются 14h, 15h, 07h и 23h, а значениями остальных — нули. Значит, файл занимает четыре блока, или четыре килобайта дискового пространства. Объем файла может быть немного меньше. Пятнадцатый байт в элементе ка- талога указывает, сколько 128-байтовых секторов фактически занято в по- следнем блоке. Длина карты диска — 16 байт, и их достаточно для указания местополо- жения файла объемом до 16 384 байт. Для файла объемом более 16 килобайт необходимо использовать несколько элементов каталога, которые называются экстентами. В этом случае двенадцатый байт будет равен 0 в первом элементе каталога, 1 — во втором и т. д. Ранее я упомянул текстовые файлы, которые также называются ASCII- файлами и содержат коды ASCII (включая коды возврата каретки и перевода строки), которые соответствуют понятным людям текстовым символам. Файл, который не является текстовым, называется двоичным. Файл СP/M типа COM — двоичный, поскольку содержит машинный код для процессора 8080. Глава 22. Операционная система 377 Предположим, нам нужно сохранить в файле (очень маленького объема) три 16-битных числа, например 5A48h, 78BFh и F510h. Двоичный файл с эти- ми тремя числами имеет длину всего шесть байт. 48 5A BF 78 10 F5 Разумеется, это формат хранения многобайтовых чисел для процессоров Intel. Первым указывается младший байт. Программа, написанная для процес- соров Motorola, сохранила бы эти числа следующим образом. 5A 48 78 BF F5 10 В текстовом файле ASCII эти же четыре 16-битных значения были бы за- писаны, как показано ниже. 35 41 34 38 68 0D0A 37 38 42 46 68 0D0A 46 35 31 30 68 0D0A Эти байты — коды ASCII для цифр и букв, а сами числа разделяются кодами возврата каретки (0Dh) и перевода строки (0A). Текстовый файл удобнее отоб- ражать не в виде строки кодов ASCII, а в виде соответствующих им символов. 5A48h 78BFh F510h Текстовый файл ASCII, в котором хранятся эти три числа, также может содержать следующие байты. 32 33 31 31 32 0D0A 33 30 39 31 31 0D0A 36 32 37 33 36 0D0A Коды ASCII для десятичных эквивалентов трех чисел следующие. 23112 30911 62736 Поскольку текстовые файлы призваны упростить людям процесс чтения их содержимого, нет причин для отказа от использования десятичных чисел вместо шестнадцатеричных. 378 Код Как я уже упоминал, сама CP/M записана на первых двух дорожках диска. Для запуска системы ее необходимо загрузить с диска в память. Объем ПЗУ в компьютере, использующем CP/M, не обязательно будет большим. В ПЗУ дол- жен содержаться небольшой фрагмент кода, известный как загрузчик программы. Этот загрузчик считывает самый первый 128-байтовый сектор с дискеты в па- мять и запускает его. Этот сектор содержит код для загрузки в память осталь- ной части CP/M. Весь процесс называется загрузкой операционной системы. В результате система CP/M размещается в оперативной памяти с самы- ми старшими адресами. После загрузки CP/M память будет организована так. Системные параметры Область нерезидентных программ Консольный командный процессор Базовая дисковая операционная система Базовая система ввода/вывода 0000h: 0100h: Старший адрес: Эта схема не отражает реального масштаба. Три компонента CP/M: базо- вая система ввода/вывода (Basic Input/Output System, BIOS), базовая дисковая операционная система (Basic Disk Operating System, BDOS) и консольный ко- мандный процессор (Command and Control Processor, CCP) — занимают в об- щей сложности около шести килобайт памяти. Область нерезидентных про- грамм — около 58 килобайт памяти на компьютере с оперативной памятью 64 килобайта — изначально не содержит ничего. Консольный командный процессор эквивалентен командному процес- сору, созданному нами ранее. Словом, консоль обозначает совокупность кла- виатуры и дисплея. Консольный процессор отображает на дисплее следующее приглашение. A> Приглашение — это сигнал, означающий возможность ввести некую коман- ду. На компьютерах с несколькими дисками буква A указывает на первый диск, Глава 22. Операционная система 379 с которого была загружена система CP/M. Вы вводите команды после пригла- шения и нажимаете клавишу Enter. Затем процессор CCP выполняет эти коман- ды, в результате чего на экране обычно отображается некоторая информация. После завершения консольный процессор снова отобразит приглашение. Процессор CCP распознает лишь несколько команд. Вероятно, наиболее важна следующая команда. DIR Эта команда отображает на экране содержимое каталога диска, то есть список всех хранящихся на диске файлов. Вы можете использовать специ- альные символы «?» и «*», чтобы отобразить только файлы с определен- ным именем или типом. Следующая команда, например, отображает тек- стовые файлы. DIR *.TXT Список всех файлов с именами из пяти символов, в которых первый сим- вол — буква A, а последний — B, передает такая команда. DIR A??? B.* Еще одна важная команда — ERA(Erase, «Удалить»). Она используется для удаления файла с диска. ERA MYLETTER.TXT Следующая команда удаляет все текстовые файлы. ERA *.TXT Удаление файла означает освобождение соответствующего элемента ка- талога и дискового пространства. Команда REN (Rename, «Переименовать») используется для изменения имени файла. Команда TYPE («Напечатать») показывает содержимое текстово- го файла. Поскольку текстовый файл содержит только ASCII-коды, эта коман- да позволяет читать файл прямо с экрана. TYPE MYLETTER.TXT 380 Код Команда SAVE («Сохранить») сохраняет один или несколько 256-байто- вых блоков памяти, расположенных в области временного хранения программ, в файл с указанным именем на диске. Если вы введете команду, которую CP/M не сможет распознать, система будет интерпретировать данные в качестве имени программы, которая хра- нится на диске в виде файла. Файлы программ всегда имеют тип COM. Про- цессор CCP ищет файл с таким именем на диске. Если он существует, система CP/M загрузит файл с диска в область временного хранения программ, которая начинается с адреса памяти 0100h. Так запускаются программы, хранящиеся на диске. Например, если вы наберете CALC в ответ на приглашение CP/M, то если на диске присутствует файл с именем CALC.COM, процессор CCP загрузит этот файл в память начиная с адреса 0100h, а затем выполнит программу, перейдя к машинной инструкции, рас- положенной по адресу 0100h. Ранее я объяснил, как можно вставить машинные инструкции в любую область памяти и выполнить их, однако в случае CP/M программы, которые хранятся в файлах на диске, должны предусматривать загрузку в память, на- чиная с определенного адреса — 0100h. Система CP/M поставляется с несколькими полезными программами, включая PIP (Peripheral Interchange Program — программа взаимодействия с периферией), которая позволяет копировать файлы. Программа ED — текс- товый редактор, который помогает создавать и изменять текстовые файлы. Программы вроде PIP и ED, имеющие небольшой объем и предназначенные для решения простых задач, часто называются служебными, или утилита- ми. Будучи пользователем системы CP/M, вы, вероятно, приобрели бы более крупные программы-приложения, например текстовые процессоры, электрон- ные таблицы, или написали бы их самостоятельно. Все эти программы также хранятся в файлах типа COM. Итак, мы разобрались с командами и утилитами CP/M, которые (как и в большинстве операционных систем) позволяют осуществлять элементар- ное управление файлами. Мы также поняли, как CP/M загружает программ- ные файлы в память и выполняет их. Однако у операционной системы есть еще одна важная функция. Программе, работающей под управлением CP/M, часто требуется вывес- ти что-то на экран, считать то, что вы набрали на клавиатуре, прочитать файл с диска или записать его на диск. Однако в большинстве случаев программа Глава 22. Операционная система 381 не записывает свои выходные данные непосредственно в видеопамять, не мо- жет получить доступ к аппаратному обеспечению клавиатуры, чтобы узнать, что вы набрали, и, конечно, не имеет доступа к оборудованию жесткого диска для чтения и записи его секторов. Вместо этого программа, работающая под управлением CP/M, использу- ет набор подпрограмм, встроенных в ОС для решения этих распространен- ных задач. Подобные подпрограммы были специально разработаны так, чтобы программы могли легко получить доступ ко всему оборудованию компьютера, включая монитор, клавиатуру и диск, не заставляя программистов беспоко- иться, как эти периферийные устройства соединены. Главное, что программе, работающей под управлением CP/M, необязательно знать о дисковых секто- рах и дорожках. Это работа системы CP/M. Вместо этого она может сохранять целые файлы на диске, а затем считывать их. Третья основная функция операционной системы — это предоставление программе легкого доступа к аппаратным средствам компьютера, то есть ее обес- печение интерфейсом прикладного программирования (Application Programming Interface, API). Программа, работающая под управлением CP/M, использует API, сохра- няя в регистре C определенное значение (называемое номером функции) и вы- полняя следующую команду. CALL 5 Например, программа получает ASCII-код нажатой на клавиатуре клави- ши путем выполнения представленных ниже команд. MVI C, 01h CALL 5 В результате ASCII-код нажатой клавиши будет содержаться в аккумуля- торе A. Аналогично команды, указанные ниже, выводят на экран символ, со- ответствующий ASCII-коду, содержащемуся в аккумуляторе A, сдвигая курсор на одну позицию. MVI C, 02h CALL 5 Если программе требуется создать файл, она сохраняет в паре регистров DE адрес области памяти, которая содержит имя файла, а затем выполняет код. 382 Код MVI C, 16h CALL 5 В данном случае в ответ на команду CALL 5 CP/M создает на диске пустой файл. Затем программа может использовать другие функции для того, что- бы записать в этот файл новые данные и закрыть его, или закончить работу. Эта же или другая программа может позднее открыть данный файл и про- читать его содержимое. Что же делает команда CALL 5? В CP/M в ячейке памяти по адресу 0005h хра- нится инструкция JMP (Jump), которая осуществляет переход в область памяти, выделенной для базовой дисковой операционной системы (BDOS). В этой облас- ти содержится множество подпрограмм, которые выполняют каждую из функ- ций CP/M. Базовая дисковая операционная система, как следует из ее названия, в первую очередь отвечает за поддержание работы файловой системы. Часто BDOS использует подпрограммы, находящиеся в базовой системе ввода/выво- да (BIOS) — области, которая фактически обращается к аппаратным средствам клавиатуры, монитора и дисков. На самом деле BIOS — это единственный раз- дел системы CP/M, которому требуется информация об аппаратном обеспече- нии компьютера. Консольный командный процессор, а также служебные про- граммы, поставляемые с CP/M, осуществляют работу, используя функции BDOS. API является независимым от устройства интерфейсом, а это значит, что программе, написанной для системы CP/M, не обязательно «знать» механику работы клавиатуры или монитора конкретного компьютера, а также чтения и записи секторов диска. Она просто использует функции CP/M для решения задач, связанных с клавиатурой, монитором и диском. Приятное дополнение: программа CP/M способна работать на разных компьютерах, которые могут использовать различные аппаратные средства для доступа к этим периферий- ным устройствам. Тем не менее всем программам CP/M требуется микропро- цессор Intel 8080 или процессор, понимающий инструкции 8080, например Intel 8085 или Zilog Z-80. Пока на компьютере работает CP/M, программа ис- пользует функции этой системы для опосредованного доступа к аппаратному обеспечению. Без стандартных API-интерфейсов программы нужно было бы специально подстраивать под разные типы компьютеров. Когда-то CP/M была популярной операционной системой для микро- процессоров 8080, и ее важность для истории несомненна. Эта система суще- ственно повлияла на 16-битную операционную систему под названием QDOS (Quick and Dirty Operating System — операционная система «на скорую руку»), написанную Тимом Патерсоном из Seattle Computer Products для 16-разрядных микропроцессоров 8086 и 8088 компании Intel. В итоге система QDOS была Глава 22. Операционная система 383 переименована в 86-DOS и куплена корпорацией Microsoft. MS-DOS (Microsoft Disk Operating System — дисковая операционная система Microsoft) устанавли- валась на первых персональных компьютерах IBM, выпущенных в 1981 году. Несмотря на то что 16-разрядная версия CP/M (под названием CP/M-86) также была доступна для IBM PC, стандартом быстро стала именно система MS-DOS. Лицензии на установку MS-DOS (которая называлась PC-DOS на компьютерах IBM) также продавались другим производителям IBM-совместимых компьютеров. МS-DOS не унаследовала файловую систему CP/M, а использовала схему, названную таблицей размещения файлов (File Allocation Table, FAT), которую изобрели в Microsoft в 1977 году. Суть этой схемы в том, что дисковое про- странство разделено на кластеры, размер которых в зависимости от емкости диска может варьироваться от 512 до 16 384 байт. Каждый файл — это набор кластеров. В соответствующем файлу элементе каталога указывается только его начальный кластер. В самой таблице FAT для каждого кластера на диске указывается, где находится продолжение файла. Элементы каталога на диске MS-DOS имеют длину 32 байта и используют ту же систему наименования файлов 8.3, что и CP/M. Однако терминология здесь несколько иная: последние три буквы называются расширением, а не ти- пом файла. В элементе каталога MS-DOS нет списка блоков выделения памяти. Вместо этого каталог содержит такую полезную информацию, как дата и вре- мя последнего изменения файла, а также его размер. Ранние версии MS-DOS структурно напоминали CP/M. Однако система MS-DOS не нуждалась в BIOS, поскольку она уже содержалась в ПЗУ компьютера. Ко- мандный процессор MS-DOS — это файл с именем COMMAND.COM. Про- граммы MS-DOS выпускаются в двух вариантах. Размер программ с расшире- нием COM ограничен 64 килобайтами, более крупные имеют расширение EXE. Несмотря на то что изначально система MS-DOS поддерживала интерфейс CALL 5 для функций API, для новых программ был рекомендован обновлен- ный интерфейс, использующий механизм программных прерываний, который напоминает вызов подпрограммы, за исключением того, что этой программе необязательно знать фактический адрес, к которому она обращается. Програм- ма вызывает функцию API-интерфейса MS-DOS, выполняя команду INT 21h. Теоретически прикладные программы должны получать доступ к аппа- ратному обеспечению компьютера только через интерфейсы, предоставляемые операционной системой. Однако многие программисты, которые создавали при- кладные программы для небольших компьютеров 1970-х годов и начала 1980-х, часто обходили эту операционную систему, особенно в плане работы с дисплеем. Программы, которые непосредственно записывали байты в видеопамять, вы- полнялись быстрее, чем программы, которые этого не делали. Действительно, 384 Код для некоторых приложений, особенно для тех, которым необходимо отобра- жать на экране графику, эта операционная система была совершенно непри- емлемой. В MS-DOS многим программистам больше всего нравилось, что она «не путалась под ногами» и давала возможность писать настолько быстрые программы, насколько позволяло аппаратное обеспечение. По этой причине популярное программное обеспечение, работающее на компьютере IBM PC, часто опиралось на особенности его оборудования. Производители компьютеров, желавшие конкурировать с IBM, были вынужде- ны копировать эти особенности, в противном случае некоторые популярные программы на их компьютерах могли работать неэффективно или не рабо- тать вообще. Требования к оборудованию для таких программ часто включа- ли пункт «IBM PC или 100%-совместимый компьютер». В версию MS-DOS 2.0, выпущенную в марте 1983 года, была добавлена поддержка жестких дисков, в то время небольших (по сегодняшним меркам), однако их емкость стремительно увеличивалась. Чем больше емкость дис- ка, тем больше файлов на нем можно хранить. А чем больше файлов может вмес тить диск, тем сложнее найти конкретный файл или использовать какой- либо метод их организации. Решением этой проблемы в MS-DOS 2.0 стала иерархическая файловая сис- тема, которая была добавлена в уже существующую файловую систему с ми- нимальным количеством изменений. Как вы помните, на диске есть область, называемая каталогом, который представляет собой список файлов и содер- жит информацию о том, где они хранятся. В иерархической файловой систе- ме некоторые из этих файлов сами могут быть каталогами, то есть файлами, содержащими список других файлов. Некоторые из этих файлов также могут быть каталогами. Обычный каталог на диске называется корневым катало- гом. Каталоги, содержащиеся в других каталогах, называются подкаталогами. Каталоги (иногда называемые папками) позволяют группировать связанные между собой файлы. Иерархическая файловая система и некоторые другие функции MS-DOS 2.0 были позаимствованы из операционной системы UNIX, которая была разра- ботана в начале 1970-х годов в Bell Telephone Laboratories. Ее основные авто- ры — Кен Томпсон (род. 1943) и Деннис Ритчи (1941–2011). UNIX изначально создавалась в качестве облегченной версии более ранней операционной систе- мы Multics (Multiplexed Information and Computing Services), которую корпо- рация Bell Labs разрабатывала совместно с Массачусетским технологическим институтом и General Electric. UNIX — излюбленная операционная система олдскульных программистов. В то время как бóльшая часть операционных систем создается для конкретных Глава 22. Операционная система 385 компьютеров, UNIX разрабатывалась как переносимая операционная система, то есть способная адаптироваться под различные компьютеры. Во времена разработки UNIX Bell Labs принадлежала компании American Telephone & Telegraph, поэтому на нее распространялись судебные постановле- ния, призванные ограничить монопольное положение AT&T в телефонной от- расли. Первоначально AT&T было запрещено продавать UNIX; компания была вынуждена выдавать лицензии на ее использование другим организациям. Так что начиная с 1973 года такие лицензии были выданы многим университетам, корпорациям и правительственным организациям. В 1983 году AT&T нако- нец вернулась в компьютерный бизнес, выпустив собственную версию UNIX. Именно поэтому единой модификации UNIX не существует. Есть различ- ные версии под разными названиями, которые работают на различных ком- пьютерах и продаются разными поставщиками. Многие люди внесли свой вклад в разработку UNIX. Те, кто добавляет новые элементы в данную систему, по-видимому, руководствуются преобладающей философией UNIX. Часть этой философии — широкое использование текстовых файлов. Многие служебные программы UNIX читают текстовые файлы, что-то с ними делают, а затем со- здают другой текстовый файл. Утилиты UNIX можно объединить в цепочки для выполнения разнообразных действий над этими текстовыми файлами. UNIX изначально писалась для компьютеров, которые были слишком большими и дорогими для одного пользователя. С такими компьютерами мо- гут одновременно взаимодействовать несколько пользователей благодаря тех- нологии под названием «разделение времени». Ее суть следующая: к компью- теру подключается несколько дисплеев с клавиатурами, которые называются терминалами. Быстро переключаясь между всеми терминалами, операцион- ная система может создать впечатление, будто компьютер одновременно об- служивает всех пользователей. Операционная система, которая способна одновременно выполнять не- сколько программ, называется многозадачной. Очевидно, что сложность такой ОС значительно превышает сложность однозадачных CP/M и MS-DOS. Много- задачность усложняет файловую систему, поскольку несколько пользователей могут попытаться одновременно использовать одни и те же файлы. Кроме того, многозадачность влияет на то, как компьютер выделяет память различным программам, поэтому такой операционной системе требуется механизм управ- ления памятью. Поскольку нескольким работающим одновременно програм- мам необходимо больше памяти, существует вероятность, что у компьютера возникнет ее дефицит. Для решения этой проблемы в операционной системе можно реализовать технологию под названием виртуальная память: ненуж- ные в данный момент блоки хранятся во временных файлах на диске, а затем Код возвращаются в память, когда в них возникает необходимость (для этого ис- пользуется так называемый файл подкачки, хранящийся на жестком диске). Наиболее интересными явлениями в мире UNIX в последние годы стали Фонд свободного программного обеспечения (Free Software Foundation, FSF) и проект GNU, основанные Ричардом Столлманом. Аббревиатура GNU являет- ся акронимом выражения GNU’s Not UNIX («GNU не UNIX»), что, разумеется, правда. Вместо этого программы, разработанные в рамках проекта GNU, явля- ются совместимыми с операционной системой UNIX, однако распространяют- ся так, что не могут стать чьей-либо собственностью. Благодаря проекту GNU появилось множество UNIX-совместимых служебных программ и инструмен- тов, а также Linux — ядро операционной системы, совместимой с UNIX. Глав- ный создатель ставшего в последние годы популярным ядра Linux — Линус Торвальдс, американский программист из Финляндии. Однако главная тенденция в развитии ОС, зародившаяся в середине 1980-х, — это разработка таких крупных и сложных систем, как Apple Macintosh и Microsoft Windows, где графические пользовательские интерфейсы и широкие возмож- ности видеосистем применяются для упрощения работы с приложениями. Эту тенденцию я опишу в глав 25. 387 Глава 23 Фиксированная точка, плавающая точка В повседневной жизни мы легко оперируем целыми числами, дробями и про- центами одновременно. Мы покупаем полдесятка яиц, заплатив налог в размере 8¼ процента из денег, полученных за 2¾ часа сверхурочной работы, оплачен- ной по тарифу, в полтора раза превышающему обычный. Большинство людей не испытывают трудностей при использовании таких величин. Услышав от ста- тистиков о том, что «среднее американское домохозяйство состоит из 2,6 чело- века», мы не ужасаемся при мысли о связанных с этим повсеместных увечьях. Тем не менее когда дело касается компьютерной памяти, переключение между целыми и дробными числами оказывается сложнее. Да, все данные хранятся в компьютерах в виде битов, то есть в виде двоичных чисел. Однако одни виды чисел выразить в битах гораздо легче, чем другие. Сначала мы использовали биты для представления положительных целых или положительных натуральных чисел. Мы также узнали, как с помощью дополне- ния до двух можно отобразить отрицательные целые числа, чтобы упростить опе- рацию сложения. В следующей таблице показано, какие диапазоны положитель- ных и отрицательных целых чисел (отрицательные числа выражены с помощью дополнения до двух) можно хранить в ячейках памяти емкостью 8, 16 и 32 бит. |