Москва 2001 г тайный язык информатики Чарльз Петцольд ббк 32. 973. 26–018



Pdf көрінісі
бет20/26
Дата07.04.2020
өлшемі3,29 Mb.
#61783
1   ...   16   17   18   19   20   21   22   23   ...   26
Байланысты:
Petcold Kod-Taynyy-yazyk-informatiki.535358

Глава 22

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

Наконец-то мы завершили сборку компьютера (правда, вооб-

ражаемого), снабдив его процессором, оперативной памятью,

клавиатурой, монитором и жестким диском. Оборудование

готово к работе, все провода подсоединены, и мы нетерпеливо

посматриваем на тумблер с надписью «Вкл», который вдохнет

жизнь в наше детище. Не исключено, что точно такие же эмо-

ции обуревали Виктора Франкенштейна и Папу Карло.

Но нам все еще кое-чего недостает, причем отнюдь не удара

молнии или волшебных слов «крекс-фекс-пекс». Не мешкайте

же — включите компьютер и скажите мне, что произошло.

Когда монитор нагрелся, вы увидели на нем аккуратно рас-

ставленный по строкам и столбцам, но абсолютно бессмыс-

ленный набор ASCII-символов. В этом, конечно, нет ничего

неожиданного. Питание было выключено, и все предыдущее

содержимое видеопамяти стерто. При включении компьюте-

ра она заполнилась случайным набором битов, какими запол-

нена и оперативная память. Но процессор ничего не знает об

этом и считает их кодами программы, которую должен вы-

полнить. Ничего по-настоящему плохого, конечно, не случит-

ся, и компьютер не взорвется, но и назвать его работу исклю-

чительно продуктивной тоже нельзя.

Нам определенно не достает программного обеспечения

(ПО). После включения или перезапуска процессор выполняет

команды, записанные начиная с определенного адреса в памя-


404

Глава двадцать вторая

ти. Для процессора 8080 этот адрес — 0000h. В умело собран-

ном компьютере при его включении по этому адресу всегда на-

ходится исполняемая команда (вероятно, первая из многих).

Как она туда попадает? Запись ПО в новорожденный ком-

пьютер — вероятно, один из наиболее запутанных этапов на-

шего проекта. Самый прямолинейный способ — применить

для этого пульт управления памятью из главы 16:

1

0

1



0

Пульт управления

Сброс

Перехват


1

0

 Запись



A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

D7 D6 D5 D4 D3 D2 D1 D0

От предыдущего варианта его отличает переключатель Сброс,

подключенный к одноименному входу микропроцессора. Пока

он замкнут, процессор не работает. Разомкните переключатель,

и процессор начнет выполнять программу.

Чтобы запустить компьютер с помощью такого пульта, для

начала замкните переключатель Сброс. Работа процессора бу-

дет остановлена. Затем замкните переключатель Перехват, что-

бы перехватить управление адресными линиями и линиями

данных шины. Задайте переключателями A

0

–A



15

 16-битовый

адрес в памяти. Содержимое соответствующей ячейки будет

показано лампочками D

0

–D

7



. Чтобы записать в нее новое чис-

ло, задайте его с помощью переключателей D

0

–D

7



, а затем

включите и выключите переключатель Запись. Введя в память

всю программу, разомкните переключатели Перехват и Сброс.

Микропроцессор начнет выполнять команды.

Вот так вводятся программы в наш компьютер! Нет нуж-

ды говорить, что это очень сложно. При вводе команд вы бу-

дете иногда ошибаться — это тоже ясно. Так что считайте мо-

золи на пальцах и кашу в голове своими профессиональными

заболеваниями.

Но все ваши муки будут вознаграждены, когда вы увидите

на мониторе результаты работы программы! У текстового дис-

плея, о котором мы говорили в главе 21, есть своя видеопа-



405

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

мять емкостью 1 кб, используемая для хранения в ASCII-кодах

25 строк текста по 40 символов в каждой. Данные в нее запи-

сываются так же, как и в обычную оперативную память.

Писать на мониторе не так просто, как кажется. Допустим, в

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

которых является число 4Bh. Как отобразить его на экране? Про-

сто записать его в видеопамять нельзя — оно будет проинтерп-

ретировано как ASCII-код, и на экран будет выведена буква К,

которой этот код соответствует. Чтобы увидеть на экране число

4Bh, вы должны ввести в видеопамять два числа: 34h, т. е. код

ASCII символа 4, и 42h — код ASCII символа B. Каждая тетрада

в 8-битовом результате записывается одной шестнадцатерич-

ной цифрой, которая и отображается на экране.

Конечно, для перевода цифр в соответствующие ASCII-

коды нужно написать короткую подпрограмму. Вот как выг-

лядит на языке ассемблера 8080 программа для преобразова-

ния тетрады, записанной в аккумуляторе (предполагается, что

число заключено между 00h и 0Fh включительно), в ASCII-код

соответствующей шестнадцатеричной цифры:

NibbleToAscii:

CPI A,0Ah

; Проверяем, буква или

; цифра


JC Number

ADD A,37h

; Цифры A-F преобразуем в

; 41h-46h

RET

Number:


ADD A,30h

; Цифры 0-9 преобразуем в

; 30h-39h

RET


Чтобы преобразовать записанный в аккумуляторе байт в пару

цифр ASCII и записать их в регистры В и С, подпрограмму

NibbleToAscii придется вызывать дважды:

ByteToAscii: PUSH PSW

; Сохраняем аккумулятор

RRC


; Четырежды сдвигаем содержимое А,

RRC


; чтобы добраться до старшей

RRC


; тетрады

RRC


CALL NibbleToAscii

; Преобразуем в ASCII-код



406

Глава двадцать вторая

MOV B,A


; Перемещаем результат в регистр В

POP PSW


; Возвращаем содержимое

; аккумулятора

AND A,0Fh

; Получаем младшую тетраду

CALL NibbleToAscii

; Преобразуем в ASCII-код

MOV A,C

; Перемещаем результат в регистр C



RET

Эти подпрограммы позволяют отображать на экране в виде

цифр шестнадцатеричные числа. Если вы захотите увидеть на

мониторе десятичные числа, повозиться придется больше.

Не забывайте, что в действительности программы на ас-

семблере в память не вводятся. Вы их пишете на бумаге, затем

вручную переводите в машинные коды, а вот уже их вносите в

память.


Как прибор наш пульт управления очень прост, но рабо-

тать с ним почти невозможно. Смело утверждаю, что это наи-

худшее устройство ввода-вывода в истории компьютерной

техники. Очень досадно, что мы, такие умные, собрали на пу-

стом месте компьютер, а информацию в него вводим в двоич-

ном формате. Избавление от пульта управления — вот наша

приоритетная задача.

Заменить его нужно, конечно, клавиатурой. Клавиатура,

показанная в прошлой главе, прерывает работу процессора при

каждом нажатии клавиши. Контроллер прерываний заставля-

ет процессор в ответ исполнять команду RST с номером пре-

рывания в качестве аргумента. Допустим, это команда RST 1.

В результате ее выполнения содержимое программного счет-

чика сохраняется в стеке, а затем происходит переход по адре-

су 0008h. С помощью пульта управления в эту и следующие

ячейки мы введем специальную программу — обработчик кла-



виатуры.

Сначала нам придется выполнять подготовительные опе-

рации — мы назовем их  инициализацией. Инициирующая

программа должна задавать значение счетчика стека, чтобы

стек корректно размещался в памяти. Во все ячейки видеопа-

мяти нужно записать ASCII-код пробела — 20h, чтобы изба-

виться от «мусора» на экране. По команде OUT (Output, вы-

вод) программа-инициализатор задает начальное положение

курсора (черточки, указывающей, где будет введен следующий

символ) — первый столбец первой строки. Следующая коман-



407

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

да — EI — разрешает использовать прерывания (чтобы мож-

но было работать с клавиатурой), а команда HLT останавлива-

ет работу процессора.

На этом инициирующая программа заканчивается, и про-

цессор переводится в состояние останова, в котором будет пре-

бывать большую часть времени. Вывести его из этого состоя-

ния может замыкание переключателя Сброс или прерывание

от клавиатуры.

Программа-обработчик клавиатуры гораздо длиннее ини-

циализатора — ведь именно она выполняет полезную работу.

Когда на клавиатуре нажата клавиша, сигнал прерывания

заставляет процессор перейти от последней выполненной ко-

манды (HLT) к обработчику клавиатуры. С помощью коман-

ды IN (Input, ввод) обработчик определяет, какая клавиша была

нажата. В зависимости от ее скан-кода он что-то делает (обра-



батывает нажатие клавиши) и выполняет команду RET, ко-

торая возвращает процессор к команде HLT, где он может спо-

койно ждать нажатия следующей клавиши.

Если нажата буква, цифра или знак препинания, обработ-

чик по скан-коду определяет соответствующий код ASCII, учи-

тывая, была ли нажата клавиша Shift. Затем обработчик запи-

сывает найденный ASCII-код в видеопамять, чтобы вывести

на экран в текущем положении курсора нужный символ, а кур-

сор передвигается на следующую позицию. При вводе несколь-

ких символов они выстроятся друг за другом в одну строку.

Если нажата клавиша Backspace (ASCII-код 08h), обработ-

чик стирает символ, введенный последним, и возвращает кур-

сор на одну позицию назад. Реального стирания данных из

памяти, конечно, не происходит — просто поверх кода этого

символа записывается ASCII-код пробела (20h).

Обычно ввод информации происходит так: пользователь

набирает строку символов, при необходимости исправляя

ошибки с помощью клавиши Backspace, а когда доходит до

конца строки, нажимает клавишу Enter. Можно настроить об-

работчик так, что после нажатия Enter (ее ASCII-код — 0Dh)

он будет интерпретировать символы в видеопамяти как коман-

ду для компьютера, т. е.  указание совершить какое-то действие.

Для работы с командами включим в обработчик клавиатуры

особый фрагмент кода — командный процессор, понимающий,

например, три команды: W, D и R.



408

Глава двадцать вторая

Если введенная текстовая строка начинается с буквы W, она

представляет собой указание записать (write) байты в память.

Например, команда, которая на экране выглядит так:

W 1020 35 4F 78 23 9B AC 67

указывает командному процессору записать в оперативную

память байты 35h, 4Fh и т. д., начиная с адреса 1020h. Чтобы

выполнить эту задачу, обработчику клавиатуры придется пре-

образовать ASCII-коды в шестнадцатеричные числа. Эта опе-

рация обратна той, что я недавно демонстрировал.

Команда, начинающаяся с символа D, приказывает отобра-

зить  (display) содержимое некоторых ячеек памяти. В ответ

на команду:

D 1030

командный процессор выводит на экран 11 байт, записанных



в памяти, начиная с адреса 1030h. Именно столько байт можно

показать в 40-символьной строке, помимо команды и адреса.

Наконец, командой R вы запускаете (run) программу:

R 1000


Эта команда приводит к запуску программы, начинающейся

по адресу 1000h. Командный процессор записывает адрес из

аргумента в пару регистров HL и выполняет команду PCHL,

загружающую содержимое регистров HL  в программный счет-

чик, т. е. практически осуществляющую переход по заданно-

му адресу.

Написав и отладив обработчик клавиатуры и командный

процессор, вы совершаете важный шаг вперед. Отныне вам не

придется страдать от примитивности пульта управления. Вво-

дить данные с клавиатуры быстрее, легче и красивее.

Увы, введенная информация по-прежнему исчезает при

выключении питания компьютера. Вероятно, коды обработ-

чика клавиатуры и командного процессора стоит записать в

ПЗУ. В главе 21 я уже говорил о микросхеме ПЗУ, позволяю-

щей хранить данные о внешнем виде символов ASCII, подра-

зумевая, что все нужные биты «зашиты» в микросхему в про-

цессе ее производства. Такие микросхемы называют програм-

мируемыми постоянными запоминающими устройствами

(ППЗУ). Их можно запрограммировать только однажды. Но



409

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

есть и  стираемые постоянные запоминающие устройства

(СППЗУ). Их можно перепрограммировать, стерев прежнее

содержимое ультрафиолетовым излучением.

Как вы помните, для указания диапазона адресов плат па-

мяти мы применяли DIP-переключатели. Если вы работаете с

процессором 8080, вероятно, диапазон адресов одной из плат

компьютера начинается с 0000h. После ввода данных в микро-

схему ПЗУ этот адрес будет принадлежать ей, так что плату

памяти придется переключить на другой диапазон.

Создание обработчика клавиатуры можно считать важным

этапом работы не только потому, что он облегчает ввод дан-

ных в память, но и потому, что обработчик сделал компьютер

интерактивным  (interactive). Вы нажимаете клавиши, и вво-

димые символы сразу отображаются на экране.

Записав командный процессор в ПЗУ, можно начинать

эксперименты с записью данных на жесткий диск (вероятно,

порциями, размер которых совпадает с размером сектора на

диске) и считыванием их оттуда обратно в память. Хранить

данные и программы на жестком диске намного безопаснее,

чем в оперативной памяти. Кроме того, диск в сравнении с ПЗУ

более многофункционален.

Для работы с диском в командный процессор придется до-

бавить новые команды, например, команду S (store, сохранить):

S 2080 2 15 3

чтобы записать фрагмент памяти, начинающийся в ячейке

2080h, на диск по адресу — сторона 2, дорожка 15, сектор 3

(размер фрагмента равен размеру сектора). Пару команде S

составит L (load, загрузить), выполняющая обратное действие:

L 2080 2 15 3

Конечно, вам придется помнить, что и куда вы сохранили, и

не убирать карандаш с блокнотом далеко от компьютера. Будь-

те внимательны: записать на диск программу из одной области

памяти, а затем загрузить ее в другую нельзя. В командах пере-

хода будут записаны старые адреса, поэтому по новому адресу

программа работать не будет. Если размер программы окажет-

ся больше размера сектора, вам придется сохранять ее в несколь-

ких секторах. Поскольку часть места на диске, вероятно, занята

другими данными, сектора с одной и той же программой не

обязательно будут следовать друг за другом.


410

Глава двадцать вторая

Очень скоро вы решите, что сидеть перед компьютером и

продолжать записывать на бумажке адреса секторов и отме-

чать, что в них сохранено, — слишком трудоемко. Значит, вы

созрели для разработки файловой системы (file system).

Файловая система — это способ организации информации

на диске, при котором она разделяется на файлы, т. е. наборы

данных, объединенные общим смыслом, записанные в одном

или нескольких секторах. Самое важное: каждому файлу мож-

но присвоить имя, которое поможет вам запомнить, что имен-

но в нем содержится. Если вам нравится сравнивать диск с кон-

торским шкафом, считайте, что имя файла — это бирка, на-

клеенная на папку с бумагами.

Файловая система почти всегда является частью большого

собрания программ —  операционной системы (operating

system), или ОС. Обработчик клавиатуры и командный про-

цессор, о которых мы говорили, вполне могут стать основой

для ОС, но мы, пожалуй, не станем тратить времени на ее раз-

работку. С действием ОС и с ее основными функциями мы

познакомимся на конкретных примерах.

Исторически самой важной ОС для 8-битовых процессоров

стала CP/M (Control Program for Micros, управляющая програм-

ма для микрокомпьютеров), написанная Гэри Килдаллом (Gary

Kildall) (род. 1942) в середине 1970-х годов для процессора 8080.

Позже ее автор стал основателем корпорации Digital Research.

Система CP/M хранилась на диске. Поначалу самым попу-

лярным носителем для нее была односторонняя 8-дюймовая

дискета с 77 дорожками, 26 секторами на дорожке, 128 байта-

ми в секторе (всего 256 256 байтов). Сама система содержалась

на первых двух дорожках. Как она попадала с диска в опера-

тивную память, я расскажу чуть позже.

Остальные 75 дорожек использовались для хранения фай-

лов. Файловая система CP/M довольно проста, но удовлетворя-

ет двум основным требованиям. Во-первых, каждый файл на

диске имеет имя, которое также записано на диске. Вообще вся

информация, нужная CP/M для работы с файлами, хранится на

диске вместе с ними. Во-вторых, файлы на диске могут распо-

лагаться в несмежных секторах. Работая на компьютере, вы по-

стоянно создаете и удаляете файлы разных размеров, и потому

свободное пространство на диске быстро фрагментируется. В

таких обстоятельствах умение системы разбрасывать файл по

несмежным свободным секторам весьма полезно.



411

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

Секторы 75 дорожек для размещения файлов группируются

в блоки по 8 секторов (или по 1 024 байта). Всего на диске 243

блока, пронумерованных от 0 до 242.

В первых двух блоках (2 048 байт) записан  каталог

(directory) — область диска, где хранятся имена и другая важ-

ная информация обо всех файлах на диске. Каждому файлу

соответствует  элемент каталога (directory entry) длиной 32

байта. Так как полный размер каталога 2 048 байт, максималь-

ное число файлов, которое можно сохранить на дискете, — 64.

Элемент каталога содержит следующие сведения:

Байты

Значение

0

Обычно равен 0



1–8

Имя файла

9–11

Тип файла



12

Продолжение

13–14

Зарезервированы (равны 0)



15

Секторов в последнем блоке

16–31

Карта диска



Первый байт элемента задействуется, только если файловая си-

стема применяется в многопользовательском режиме. В CP/M

этот байт, а также байты 13 и 14 обычно равны 0.

Имя файла в CP/M состоит из двух частей. Первая часть —

собственно имя файла (filename) длиной до 8 символов — за-

писывается в байты 1–8. Длина второй — типа файла (file type)

— ограничена тремя символами, для хранения которых пред-

назначены байты 9–11. Некоторые типы файлов являются стан-

дартными. Например, тип TXT указывает на текстовый файл,

т. е. файл, содержащий только ASCII-коды, а тип COM — на

файл с командами для процессора 8080, т. е. программу. При

указании полного имени файла имя и тип разделяются точкой:

MYLETTER.TXT

CALC.COM


Такой способ именования файлов известен как 8.3 (восемь-

точка-три) — 8 символов имени, точка и 3 символа типа.

В байтах с картой диска указаны блоки, в которых хранит-

ся файл. Если, например, первые 4 байта карты равны 14h, 15h,



412

Глава двадцать вторая

07h и 23h, а остальные — 0, это значит, что файл занимает 4

блока, т. е. 4 килобайта. В реальности файл может оказаться

короче. В байте 15 записано число 128-байтовых секторов, ре-

ально занятых файлом в его последнем блоке.

Длина карты диска — 16 байт. Этого хватит, чтобы указать

положение файла длиной до 16 384 байтов. Информация о

файле длиной более 16 кб хранится в нескольких элементах

каталога, называемых продолжениями (extents). Байт 12 перво-

го элемента каталога устанавливается в 0, а в элементах-про-

должениях он равен 1, 2, 3 и т. д.

Выше я упомянул текстовые файлы (text files), известные

также как ASCII-файлы. Такой файл содержит только коды

ASCII, включая коды возврата каретки и перевода строки, и

характеризуется тем, что его содержимое можно читать. Файл,

лишенный этих качеств, называется двоичным (binary). Дво-

ичными, например, являются файлы типа COM, поскольку в

них содержатся не ASCII-коды, а коды команд процессора 8080.

Допустим, нам нужно сохранить в файле (очень коротком)

три 16-битовых числа: 5A48h, 78BFh и F510h. Двоичный файл

с этими числами будет иметь размер всего 6 байт:

48 5A BF 78 10 F5

Это, конечно, формат хранения многобайтовых чисел, при-

нятый в Intel: младший байт записывается первым. Програм-

ма для процессоров Motorola записала бы их так:

5A 48 78 BF F5 10

В ASCII-файле те же 16-битовые значения будут сохранены в

таком виде:

35 41 34 38 68 0D 0A 37 38 42 46 68 0D 0A 46 35 31 30 68

0D 0A


Эти числа — ASCII-коды цифр и букв, которыми записыва-

ются 16-битовые числа. За каждым числом следуют символы

возврата каретки (0Dh) и перевода строки (0Ah). ASCII-файл

удобнее отображать в виде не строки кодов, а самих символов:

5A48h

78BFh


F510h

413

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

Текстовый файл с тремя этими числами может выглядеть и так:

32 33 31 31 32 0D 0A 33 30 39 31 31 0D 0A 36 32 37 33 36

0D 0A


Эти байты являются ASCII-кодами тех же чисел, но в десятич-

ном представлении:

23112

30911


62736

Поскольку текстовые файлы обычно предназначены для чте-

ния и должны быть максимально понятны человеку, в них,

конечно, предпочтительнее использовать десятичные числа.

Как я уже говорил, система CP/M хранится на первых двух

дорожках диска. Чтобы запустить систему, ее нужно перепи-

сать с диска в память. Программа, выполняющая это действие,

хранится в микросхеме ПЗУ и называется загрузчиком програм-



мы раскрутки (bootstrap loader). Загрузчик считывает с диске-

ты первый сектор (128 байт), загружает его в память и запус-

кает. Коды, содержащиеся в этом секторе, загружают в память

оставшуюся часть системы CP/M. Весь процесс называется



загрузкой (booting).

В конце загрузки система полностью размещается в опера-

тивной памяти, занимая ее старшие адреса. Структура памяти

после этого такова:

Системные

параметры

0000h:

Область


программ

пользователя

Командный

процессор

консоли

0100h:


Базовая

дисковая


операционная

система


Базовая

система


ввода-вывода

Старший адрес:



414

Глава двадцать вторая

Масштаб здесь не соблюден. Три основных компонента систе-

мы — базовая система ввода-вывода (Basic Input/Output System,

BIOS), базовая дисковая ОС (Basic Disk Operating System, BDOS)

и командный процессор консоли (Console Command Processor,

CCP) — занимают в памяти всего около 6 кб. Область про-

грамм пользователя (Transient Program Area, TPA)  — около 58

кб на компьютере с оперативной памятью 64 кб — поначалу

не содержит ничего.

Командный процессор консоли выполняет приблизитель-

но те же функции, что и простой командный процессор, о ко-

тором мы говорили в начале главы. Консолью обычно называ-

ют совокупность клавиатуры и дисплея. Процессор консоли

отображает на дисплее приглашение (prompt) системы, кото-

рое выглядит так:

A>

Наличие приглашения на экране означает, что вы должны что-



то ввести. На компьютерах с несколькими дисками буквой А

обозначается первый из них, тот, с которого была загружена

система CP/M. Набрав команду, вы нажимаете клавишу Enter.

Процессор CCP обрабатывает команду, обычно выводя на эк-

ран какую-то информацию. Когда выполнение команды за-

кончено, на экране вновь появляется приглашение.

Процессор ССР распознает не так много команд. Самая

важная из них, вероятно, DIR — она отображает на экране со-

держимое каталога диска, т. е. имена всех сохраненных на нем

файлов. Символы * и ? позволяют ограничить диапазон выво-

димых имен файлов. Так, команда:

DIR *.TXT

вы выведете на экран список всех текстовых файлов, а команда:

DIR A???B.*

список всех файлов, имена которых состоят из 5 символов,

начинаются на А и заканчиваются на В.

Команда ERA (erase, удалить) применяется для удаления

файла с диска. Например, в результате выполнения:

ERA MYLETTER.TXT

с диска будет удален файл MYLETTER.TXT, а командой:



415

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

ERA *.TXT

вы удалите с диска все текстовые файлы. Удаление файла оз-

начает освобождения элемента каталога и пространства на дис-

ке, которое этот файл занимал.

Для переименования файла служит команда REN (rename,

переименовать), а TYPE (напечатать) выводит на экран содер-

жимое текстового файла. SAVE (сохранить) сохраняет на дис-

ке с заданными именем один или несколько 256-байтовых бло-

ков оперативной памяти.

Если введенная команда процессору ССР неизвестна, он

считает, что введено имя файла с программой на диске. Тип

таких файлов — всегда СОМ. Процессор ищет на диске файл с

таким именем, а найдя, загружает в область программ пользо-

вателя, которая начинается с адреса 0100h. Например, если вы

введете после приглашения команду:

CALC

процессор найдет на диске файл CALC.COM, загрузит его в



память, начиная с адреса 0100h, а затем начнет выполнение

команд, расположенных в ячейке 0100h и следующих за ней.

Раньше я говорил, что в принципе программы могут рас-

полагаться в памяти где угодно, но у программ для системы

CP/M этой свободы нет. Они могут начинаться только в ячей-

ке 0100h.

В комплект CP/M входит несколько готовых программных

файлов, например, программа для копирования файлов PIP

(Peripheral Interchange Program, программа обмена с перифе-

рией) и текстовый редактор ED для создания и изменения тек-

стовых файлов. Небольшие программы наподобие PIP и ED,

предназначенные для решения простых задач, часто называ-

ют служебными программами или утилитами (utilities). Для

решения более сложных задач в CP/M служат коммерческие



прикладные программы (applications), например, текстовые про-

цессоры и электронные таблицы. Все они, как и программы,

созданные вами, хранятся на диске в файлах с типом COM.

До сих пор мы говорили лишь о том, как с помощью CP/M

(или другой ОС) выполняется повседневная работа с файла-

ми, а также как происходит загрузка и исполнение программ.

Однако у ОС есть и третье предназначение.


416

Глава двадцать вторая

Программе, выполняемой под CP/M, часто бывает нужно

вывести что-то на экран, или считать символы, введенные с

клавиатуры, или сохранить данные диск, или прочитать их с

диска. Однако обычно программа непосредственно с обору-

дованием не общается.

Для выполнения этих задач в CP/M включено несколько

вспомогательных подпрограмм, к которым обращаются при-

кладные программы. Назначение этих подпрограмм — обес-

печить программисту легкий доступ к оборудованию компьюте-

ра, включая монитор, клавиатуру и диск, не заботясь при этом

о том, как физически соединены эти компоненты. Самое важ-

ное, пожалуй, то, что программе для CP/M не нужно беспоко-

иться о дорожках и секторах на диске. Это работа для ОС. Про-

грамме же можно записывать и считывать файлы целиком, не

обращая внимания на то, как именно они размещены на диске.

Это и есть третья основная функция ОС — дать програм-

мам легкий доступ к оборудованию компьютера, т. е. обеспе-

чить их  интерфейсом прикладного программирования

(Application Programming Interface, API).

Чтобы задействовать API в системе CP/M, программа за-

писывает в регистр С величину, называемую номером функ-

ции, и выполняет команду:

CALL 5


Например, чтобы получить ASCII-код клавиши, нажатой на

клавиатуре, в программу нужно вставить команды:

MVI C,01h

CALL 5


После выполнения этих команд ASCII-код нажатой клавиши

будет содержаться в аккумуляторе. Команды:

MVI C,02h

CALL 5


выводят на экран символ, ASCII-код которого находится в ак-

кумуляторе, и сдвигают курсор в следующую позицию.

Чтобы создать файл, вы должны записать в пару регист-

ров DE адрес области памяти, в которой содержится имя фай-

ла, а затем выполнить команды:


417

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

MVI C,16h

CALL 5

В данном случае на диске будет создан пустой файл с задан-



ным именем. Затем с помощью других функций программа

может записывать в этот файл данные, а также в конце работы



закрыть  его. Позже та же или другая программа могут  от-

крыть этот файл и прочитать записанные в нем данные.

Что же делает команда CALL 5? В системе CP/M ячейка с

адресом 0005h содержит команду JMP, которая осуществляет

переход в область памяти, отведенную базовой дисковой ОС.

В ней размещаются подпрограммы для выполнения различ-

ных функций CP/M. Система BDOS, как следует из ее имени,

отвечает в основном за работу файловой системы. При этом

она часто обращается к подпрограммам базовой системы вво-

да-вывода. Только этим последним и приходится реально

иметь дело с оборудованием компьютера. Процессор ССР да и

все служебные программы CP/M все свои задачи решают с

помощью функций BDOS.

Интерфейс API является аппаратно независимым. Это зна-

чит, что при написании программы для CP/M вы не должны

ничего знать о том, как работают на данном компьютере кла-

виатура, монитор или диск. Для работы с этими устройствами

вы применяете функции CP/M. Преимущество такой органи-

зации работы очевидно: программа будет работать на любом

компьютере с самыми различными моделями внешних уст-

ройств, конечно, при условии, что на компьютере установлен

процессор 8080 или другой, понимающий систему команд 8080,

например, 8085 фирмы Intel или Z-80 фирмы Zilog. Доступ к

оборудованию осуществляется не напрямую, а с помощью

функций CP/M. Без стандартного API-интерфейса пришлось

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

На компьютерах с процессором 8080 CP/M была очень по-

пулярна, и важность ее трудно переоценить. Она оказала боль-

шое влияние на операционную систему QDOS, написанную

Тимом Патерсоном (Tim Paterson) из Seattle Computer Products

для 16-разрядных процессоров 8086 и 8088 фирмы Intel. Поз-

же QDOS была переименована в 86-DOS и стала собственнос-

тью фирмы Microsoft. Под именем MS-DOS и PC-DOS она ус-

танавливалась на первых компьютерах IBM PC. Для них же


418

Глава двадцать вторая

была создана и 16-разрядная версия CP/M — CP/M-86, но по-

пулярности MS-DOS она не достигла никогда. Лицензии на

установку MS-DOS продавались и другим производителям

IBM-совместимых компьютеров.

Файловая система CP/M в MS-DOS не используется. Ее ме-

сто заняла схема, основанная на применении таблицы разме-

щения файлов  (File Allocation Table, FAT), изобретенной в

Microsoft в 1977 г. Дисковое пространство в файловой системе

MS-DOS разделено на  кластеры (clusters), размер которых в

зависимости от размера диска варьируется от 512 до 16 384

байтов. Каждый файл записывается в несколько кластеров. В

элементе каталога для файла указывается только  начальный

кластер, а в таблице FAT для каждого кластера хранятся сведе-

ния о том, в каком кластере находится продолжение файла.

Длина элемента каталога в MS-DOS также 32 байта, а име-

на файлов подчиняются той же структуре 8.3, что и в CP/M.

Правда, то, что в CP/M называлось типом файла, в MS-DOS

называется его расширением (extension). Списка блоков в эле-

менте каталога нет. Вместо него в элемент включены такие

полезные сведения, как дата и время последнего изменения

файла, а также его размер.

Структура первых версий MS-DOS мало отличалась от

структуры CP/M. Правда, системы BIOS в ОС уже не было, так

как в IBM PC микросхема ПЗУ BIOS встроена в сам компью-

тер. Командный процессор MS-DOS хранится в файле

COMMAND.COM. Программы MS-DOS бывают двух типов.

Программные файлы с расширением COM не могут быть боль-

ше 64 кб. Более объемные программы хранятся в файлах с рас-

ширением EXE.

Хотя поначалу интерфейс CALL 5 для функций API в MS-

DOS поддерживался, для новых программ рекомендовалось

применять интерфейс  программных прерываний (software

interrupt). Программное прерывание подобно вызову подпрог-

раммы за исключением того, что в данном случае программа

не должна знать, к какому адресу она в действительности об-

ращается. Функцию API-интерфейса MS-DOS программа вы-

зывает командой INT 21h.

Теоретически предполагается, что прикладная программа

общается с оборудованием компьютера только посредством

функций ОС. Однако многие программисты, писавшие при-



419

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

кладные программы для небольших компьютеров в 1970-х и

начале 1980-х, зачастую обходили ОС, особенно при работе с

дисплеем. Программы, обращавшиеся прямо к видеопамяти, ра-

ботали гораздо быстрее, чем те, в которых применялись функ-

ции API. Если же при работе программы возникала необходи-

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

вание функций ОС становилось совершенно неприемлемым.

Многим программистам в MS-DOS больше всего нравилось

именно то, что система без необходимости «не путалась под

ногами» и не мешала программам самим обращаться к обору-

дованию.


По этой причине во многих программах для IBM PC ис-

пользовались специфические особенности оборудования, из-

готавливаемого этой компанией. Производителям компьюте-

ров, которые должны были составить конкуренцию IBM PC,

зачастую приходилось копировать эти особенности, иначе воз-

никал риск, что какая-нибудь популярная программа на их

компьютерах будет работать неэффективно или вообще не

будет работать. В документации к программам часто указыва-

лось, что они предназначены только для работы на IBM PC или

на «100%-совместимом компьютере».

В версию MS-DOS 2.0 (март 1983 г.) была добавлена под-

держка жестких дисков, которые в те времена были невелики,

но быстро увеличивались в емкости. Чем вместительнее диск,

тем больше файлов на нем можно хранить. Чем больше фай-

лов на диске, тем сложнее в них разобраться.

В качестве решения этой проблемы в MS-DOS 2.0 была

предложена иерархическая файловая система, которую удалось

добавить к обычной файловой системе MS-DOS с минимумом

изменений. Как вы помните, на диске имеется область, назы-

ваемая каталогом. В ней хранится список файлов и информа-

ция об их положении на диске. В иерархической файловой си-

стеме некоторые из этих файлов сами могут быть каталогами,

т. е. содержать список файлов, некоторые из которых также

могут быть каталогами и т. д. Обычный дисковый каталог на-

зывается корневым (root), а каталоги, вложенные друг в друга,

— подкаталогами (subdirectories). Файлы, относящиеся к раз-

личным проектам, удобно хранить в различных подкаталогах.

Иерархическая файловая система и некоторые другие осо-

бенности MS-DOS 2.0 были позаимствованы из ОС UNIX, раз-


420

Глава двадцать вторая

работанной в начале 1970-х в Bell Telephone Laboratories. Глав-

ными ее создателями были Кен Томпсон (Ken Thompson) (род.

1943) и Деннис Ритчи (Dennis Ritchie) (род. 1941). UNIX разра-

батывалась как облегченный вариант ОС Multics, которую в

Bell Telephone Laboratories создавали в сотрудничестве с Мас-

сачусетским технологическим институтом и компанией General

Electric.

UNIX пользуется неизменной популярностью у «крутых»

программистов. Обычно ОС пишут под конкретную модель

компьютера. UNIX же должна была быть  переносимой

(portable), т. е. легко адаптироваться к любым компьютерным

системам.

Во времена разработки UNIX компания Bell Telephone

Laboratories входила в состав American Telephone & Telegraph,

а потому на эту ОС распространялись различные судебные ре-

шения, призванные ограничить монополию American Tele-

phone & Telegraph в телефонной индустрии. Поначалу компа-

нии запрещалось продавать UNIX, кроме того, она обязана

была выдавать другим организациям лицензии на использо-

вание ОС. C 1973 г. университетам, коммерческим и прави-

тельственным организациям было выдано множество таких

лицензий. Только в 1983 г. корпорации American Telephone &

Telegraph разрешено было вернуться в компьютерный бизнес,

что она ознаменовала выпуском собственной версии UNIX.

Итогом этой запутанной истории стало отсутствие единой

версии UNIX. Эту систему продают разные фирмы под раз-

ными названиями и с разными особенностями. В работе над

UNIX принимало участие множество людей, и все они остави-

ли в системе свой след. И все же существует и общая «филосо-

фия UNIX», которой следуют практически все разработчики

программ для этой ОС. Одна из основ этой философии —

широкое применение текстовых файлов. Логика действия мно-

гих программ для UNIX заключается в считывании текстово-

го файла, его обработке и записи на диск нового текстового

файла. Служебные программы UNIX можно объединять в це-

почки для выполнения последовательных действий с тексто-

вым файлом.

Первоначально UNIX создавалась для компьютеров, кото-

рые для одного пользователя были слишком велики и неде-

шевы. На таких машинах благодаря разделению времени (time


421

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

sharing) одновременно могут работать несколько человек. К

компьютеру подключено множество терминалов, т. е. диспле-

ев с клавиатурами. Поочередно выделяя время различным тер-

миналам, ОС создает у пользователя впечатление одновремен-

ного выполнения нескольких задач.

ОС, способная одновременно выполнять несколько задач,

называется многозадачной (multitasking). Она, очевидно, более

сложна, чем однозадачные системы MS-DOS и CP/M. Много-

задачность усложняет также и организацию файловой систе-

мы, так как приходится учитывать возможность одновремен-

ного обращения к одному файлу нескольких пользователей.

Она также влияет на порядок выделения памяти различным

программам. Поскольку нескольким одновременно работаю-

щим программам памяти нужно больше, чем одной програм-

ме, память компьютера вполне может оказаться исчерпанной.

Для решения этой проблемы в многозадачных системах при-

меняется виртуальная память (virtual memory): блоки памя-

ти, которые в данный момент не нужны, сохраняются во вре-

менных файлах на диске, а по мере надобности возвращаются

обратно в память.

В последние годы наиболее интересным результатом раз-

вития UNIX стали Фонд бесплатных программ (Free Software

Foundation, FSF) и проект GNU, основанные Ричардом Стал-

лменом (Richard Stallman). Название проекта GNU пишется так

же, как и название знаменитой антилопы гну, а расшифровы-

вается так: GNU — не UNIX (GNU’s not UNIX), что, конечно

же, чистая правда. Программы GNU совместимы с UNIX, од-

нако распространяются так, что обратить их в чью-либо соб-

ственность нельзя. В результате работы проекта GNU появи-

лось не только множество программ для UNIX, но и ядро ОС

Linux. В значительной степени написанная Линусом Торваль-

дсом (Linus Torvalds) из Финляндии, она стала очень популяр-

на в последние годы.

Начиная с 1980-х, главной тенденцией в развитии ОС ста-

ло появление больших сложных систем, подобных Mac OS и

Microsoft Windows, в которых для облегчения работы с при-

ложениями интенсивно используются графические средства

видеосистем. Я подробно опишу эту тенденцию в главе 25.




Достарыңызбен бөлісу:
1   ...   16   17   18   19   20   21   22   23   ...   26




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет