В этой статье изложены базовые
элементы компьютерной науки, которую на Западе
называют “computer science”.
Согласно определению, приведенному в
книге Н.П. Радченко и О.А. Козлова (“Школьная
информатика”. М.: Финансы и статистика, 1998):
Компьютер — это
многофункциональное электронное
программно-управляемое автоматическое
устройство для ввода, накопления, обработки,
отображения и передачи информации (данных),
использующее двоичное кодирование и программ, и
данных.
В данной статье в систематизированной
форме излагаются фундаментальные основы
компьютерных технологий, т.e. основы, которые не
меняются со временем, несмотря на стремительное
развитие самих технологий.
Логически статья делится на разделы: 1)
принципы работы аппаратных средств компьютера и
основы программного управления ПК (пп. 1–2); 2)
теоретические основы computer science, включая системы
счисления (пп. 3–4); 3) понятие о программировании
(п. 5); 4) общие сведения о структурах данных в
компьютерных технологиях (п. 6).
1. Принципы работы аппаратных средств
компьютера
1.1. Основная идея электронной обработки
информации
Общие принципы работы электронных
вычислительных машин сформулированы учеными
Ч.Бэббиджем и Дж. фон Нейманом. Согласно этим
принципам, любую ЭВМ образуют три главных
компонента, показанных на рис. 1.
Информация, с которой работает ЭВМ,
всегда представлена в двоичном коде и делится на
два принципиально разных типа (идея Ч.Бэббиджа): 1)
набор команд по обработке (программа); 2) данные,
обрабатываемые программой. Руководит обработкой
процессор (от англ. process — обрабатывать),
который, в свою очередь, состоит из двух блоков:
устройства управления и арифметико-логического
устройства. Команды и данные вводятся в оперативную
память машины — электронное устройство с
очень коротким временем доступа. Согласно
принципу фон Неймана, адресное пространство
памяти является линейным (последовательным) и
машинные команды неотличимы от данных.
Устройство управления процессора выбирает
команды из ОЗУ и организует их выполнение, а
арифметико-логическое устройство проводит арифметические
и логические операции над данными. С
процессором и ОЗУ связаны внешние
устройства: клавиатура, дисплей, магнитные диски,
принтеры и т.д. Именно эти устройства
обеспечивают ввод, вывод и долговременное
хранение информации. Нейман завершил разработку
общих принципов ЭВМ, начатую в XIX в. Ч.Бэббиджем.
1.2. Физика и высокие технологии
Физические принципы работы основных
аппаратных средств персонального компьютера (за
небольшими исключениями) достаточно просты. В
них, как правило, не используются какие-либо
новейшие открытия физики. Например, физика
записи и чтения информации на магнитный диск
даже проще, чем физика домашнего магнитофона
пятидесятых годов (приходится записывать лишь 1 и
0); технология RGB в видеосистеме (п. 1.7) в принципе
не сложнее технологии цветного телевидения и т.д.
Главное в аппаратных средствах ПК не
физика, а высокие технологии, позволяющие
создавать на основе давно известных физических
законов устройства минимального размера, с
минимальным потреблением энергии и с высочайшим
качеством функционирования. Примеры таких
устройств — интегральные микросхемы; накопители
на магнитных дисках с таким качеством
ферромагнитного покрытия, электронных и
механических узлов, которое позволяет
программам миллионы раз обращаться к диску
для записи и чтения; триада
видеоадаптер–видеопамять–монитор и др.
Однако следует иметь в виду, что
дальнейшее развитие вычислительной техники
специалисты связывают с применением лазерной
техники и так называемых нанотехнологий.
Нанотехнология — это один из
важнейших разделов современных высоких
технологий, который позволяет перевести
операции с техническими системами на квантовый
уровень, где законы классической физики не
выполняются. Применительно к ИТ суть этих
технологий заключается в том, что появятся
квантовые компьютеры, обладающие следующими
преимуществами:
— возникнет новый тип ассоциативной
компьютерной памяти, сходной с нейронными1 сетями живого
организма;
— объем памяти возрастет безмерно;
— резко уменьшится трафик в
Интернет;
— снизятся энергозатраты (нагрев
процессора при увеличении скорости работы резко
уменьшится);
— надежность вычислительных систем
повысится;
— появятся новые сферы применения
компьютеров и др.
1.3. Системная шина, микросхемы и порты
Системная шина (bus) — это набор
электрических проводников, связывающих между
собой различные компоненты персонального
компьютера — микропроцессор, оперативную память
и адаптеры (контроллеры) других устройств, в
первую очередь — устройств ввода-вывода. В
системной шине выделяют шину данных, адресную
шину и шину управления.
Системная шина является основным
технологическим решением, обслуживающим открытую
архитектуру персонального компьютера, — то
есть возможность подключения к ПК дополнительных
устройств и возможность замены одного (например,
устаревшего) устройства на другое. Для этого
достаточно лишь вставить в свободный (или
освободившийся) разъем материнской платы
интегральную микросхему, выполняющую функции
модуля памяти или соответствующего адаптера
(контроллера) и, если необходимо, подключить
устройство к одному из портов ПК.
Интегральная схема (chip, микросхема)
— это электронное устройство на базе кристалла
кремния, создаваемое с помощью фотопечати,
травления и напыления. Микросхема содержит
огромное количество транзисторов и других
элементов, соединенных тончайшими
металлическими проводниками. В зависимости от
конструкции, одна или несколько микросхем
выполняют роль микропроцессора, адаптера
(контроллера) и др.
Различные комбинации микросхем
называются платами (звуковая плата,
видеоплата и т.д.) и вставляются в разъемы на
материнской плате. Во многих случаях микросхема
исполняет роль физического интерфейса между
двумя аппаратными блоками вычислительной
установки (например, сетевая плата — между двумя
автономными ПК или настольным ПК и файловым
сервером в локальных сетях). Роль программного интерфейса
между процессором, платами, портами и т.д. играют
программы-драйверы устройств ПК.
Порт — это устройство для
подключения к компьютеру внешнего оборудования.
Различают последовательные и параллельные
порты. В последовательных портах по шине данных
передаются значения бита (последовательно,
бит за битом), а в параллельных портах по шине
данных одновременно следуют целые байты (восемь
битов, — последовательно, байт за байтом). К
последовательному порту (например, COM1) обычно
подключают мышь; к параллельному порту PRN (LPT1) —
принтер. Существуют многофункциональные порты,
например, USB (Universal Serial Bus) —
универсальная последовательная шина.
1.4. Процессор, программа и данные
Что такое процессор. Современный процессор
(от англ. process — обрабатывать) функционирует в
соответствии с общими принципами работы
электронных вычислительных машин,
сформулированными Ч.Бэббиджем и Дж. фон Нейманом
(см. выше). Основные блоки процессора —
устройство управления и арифметико-логическое
устройство. Любой процессор имеет свою систему
команд, спроектированную разработчиками
(сложить два числа, переслать число или символ по
указанному адресу оперативной памяти,
перейти по указанному адресу и т.д.), и набор регистров,
в которые временно помещаются команды и данные.
Примечание. Русское слово
“регистр” в компьютерных технологиях имеет два
значения: набор электронных ячеек процессора (register)
и один из двух вариантов ввода символов с
клавиатуры — верхний (прописные буквы) или
нижний (строчные буквы) регистр (case).
Вместе с тем на физическом уровне
процессор способен выполнять лишь логические
операции (конъюнкции, дизъюнкции и т.д. — см. п. 3.4)
и операции сдвига (двоичного кода). Однако
легко доказать, что, используя двоичную
арифметику, можно “сконструировать”, скажем, команду
умножения, т.e. последовательный набор
логических операций и (или) операций сдвига,
результатом которых станет произведение
двух заданных чисел. (Например, чтобы умножить
целое число на 2, достаточно сдвинуть его
двоичный код влево на один разряд.)
Устройство управления процессора
выбирает команды из оперативного запоминающего
устройства и организует их выполнение, а
арифметико-логическое устройство проводит арифметические
и логические операции над данными. При этом
процессор в принципе не отличает команды от
данных, и ответственность за правильное
функционирование программы лежит исключительно
на программисте.
Что такое программа. Программа
— это набор инструкций (команд), которые читаются
и выполняются процессором. Сначала программу
пишет программист на одном из языков
программирования (язык ассемблера, BASIC, Pascal, С,
язык 4GL и др. — см. п. 5). Исходный текст программы
записывается в обычный текстовый файл, а затем
передается для обработки специальной
программе-компилятору, которая и создает
программу на машинном языке, готовую для
выполнения. Все программы записываются на
жесткий или гибкий магнитный диск в виде файлов с
расширением exe или com. Исключение
составляют программы, которые встроены в базовую
систему ввода-вывода (BIOS) и находятся в
постоянном запоминающем устройстве, а также
внутренние программы командного процессора MS-DOS.
Перед выполнением программа
считывается в оперативную память загрузчиком, и
процессору сообщается адрес первого байта
первой команды программы.
Команды программы располагаются в
оперативной памяти последовательно, одна за
другой. Каждая команда, в зависимости от
назначения, обычно занимает от 2 до 6 байтов.
В первом байте команды
располагается специальная битовая конфигурация,
называемая кодом операции. Именно по коду
операции процессор определяет, какая информация
записана в следующих байтах и какие действия с
ней надо выполнить. Слегка упрощая, можно
сказать, что следом за кодом в команде могут
размещаться:
— непосредственные данные
(например, символ “A” или число 6);
— адреса, т.е. числа, которые
определяют местоположение ячеек или регистров,
откуда надо взять или куда надо поместить
непосредственные данные (а иногда — откуда взять
следующий код операции).
Таким образом, с точки зрения действий
процессора существуют только три типа битовых
конфигураций в байтах:
· код команды (один байт);
· символ кодовой таблицы (один байт);
· число (от одного до десяти
последовательных байтов).
В свою очередь, число может быть просто
условным двоичным кодом, который программа
использует по своему усмотрению, или настоящим
числом (целым, дробным, отрицательным,
положительным).
Кроме того, число может быть
непосредственным данным (предназначенным для
арифметических операций и расположенным не в
оперативной памяти, а непосредственно в
команде) или адресом байта, начиная с
которого размещается информация (одного из трех
перечисленных типов).
Примечание. Обычно в командах
записаны относительные адреса байта, и для
вычисления абсолютного адреса процессор
использует специальный механизм.
Чтобы пояснить, как процессор
разбирается, с какой информацией он имеет дело,
рассмотрим схему решения задачи: ввести с
клавиатуры два числа — 2 и 3, сложить их и
результат (число 5) выдать на дисплей.
С клавиатуры поступают два символа: 2
(код 50) и 3 (код 51). Как видите, ничего общего с числами
2 и 3 они не имеют.
Программист подает процессору
команды:
— интерпретировать байт с символом 2
как число 50 и вычесть из него 48;
— интерпретировать байт с символом 3
как число 51 и вычесть из него 48;
— сложить полученные числа 2 и 3
(получится 5);
— прибавить к результату 48 (получится
53);
— интерпретировать байт с числом 53 как
символ и отправить его на дисплей.
Процессор очень легко “обмануть”. Как
уже сказано, он в принципе не отличает
команду от данных. Достаточно изменить
какой-нибудь бит в коде операции, как процессор
сделает совсем не то, что предполагалось в данной
команде (например, примет символ “A” за число или
адрес), и программа сработает неверно. Еще чаще по
вине программиста возникают всевозможные
недоразумения с содержимым самой команды.
Например, команда предписывает послать какое-то
число в ту область памяти, где находится
операционная система, — процессор выполнит эту
команду беспрекословно, и работа машины будет
парализована.
Как работает процессор. Прерывания.
С чего начинается выполнение программы, имя
которой мы сообщили операционной системе?
Когда загрузчик программ (командный
процессор в MS-DOS или специальный блок загрузки в
Windows) находит программу на диске (напомним, что
файл с программой имеет расширение exe или com),
он считывает ее в определенную область
оперативной памяти. Затем процессору сообщается адрес
начала этой области, т.е. номер ячейки (байта), где
располагается код первой команды программы.
Получив этот адрес, процессор начинает
последовательное исполнение всех команд
программы.
Схема исполнения единичной команды
заключается в следующем. Процессор читает в
первом байте код операции и по этому коду
однозначно определяет три вещи:
1) что надо делать;
2) что и в каком порядке следует за
кодом (непосредственные данные, адреса и т.п.);
3) какова длина команды (например, 2 или 4
байта).
Предположим: 1) кодом операции
предписано сложить два целых числа и результат
поместить на место первого числа; 2) следом за
кодом следуют адреса этих чисел; 3) длина команды
равна 3. Процессор обращается по указанным в
команде адресам, выбирает из них числа,
складывает их, помещает результат по первому
адресу, а затем...
Вероятно, вы уже догадались, что далее
процессор просто заглядывает в первый байт
следующей команды, которая расположена на три
байта правее уже исполненной. Если следующая
команда будет иметь длину, скажем, 4, то после ее
исполнения процессор шагнет на 4 байта вправо и
т.д.
Существует особый тип команд, которые
содержат некоторый адрес, указывающий не на
данные, а на команду, к исполнению которой должен
перейти процессор, в зависимости от результата
исполненной команды (см. также п. 3.6). Поэтому
последовательное исполнение одной группы команд
время от времени сменяется “скачком”
процессора к исполнению другой
последовательности команд.
Таким образом, “штатная” работа
процессора — это непрерывное и механическое
исполнение то одной, то другой
последовательности команд программы.
Но одновременно с исполнением
программ процессор дирижирует работой всех
устройств компьютера. Как же он это делает?
В отличие от заводского
многостаночника во время своей работы процессор
не обращает никакого внимания на вверенное ему
хозяйство.
Однако если на компьютере произошло
событие, которое требует вмешательства
процессора (например, пользователь нажал клавишу
или истек определенный промежуток времени), на
процессор поступает сигнал, предписывающий ему
временно прервать исполнение программы и
разобраться с данным событием. Сигнал прерывания
— это как бы телефонный звонок от конкретного
абонента (от элемента аппаратуры или от
программного блока), который позволяет привлечь
внимание процессора именно тогда, когда нужно
обслужить конкретное событие.
Существует много видов прерываний:
сигналы от аппаратуры, необычные ситуации в
работе самого процессора, запросы программ на ту
или иную операцию (например, на прием сигнала от
клавиатуры, вывод группы символов на принтер и
пр.). Каждое прерывание имеет уникальный
номер, который однозначно связан с конкретным
блоком команд в операционной системе,
обслуживающим данное прерывание.
Идея аппарата прерываний достаточно
проста. Получив сигнал прерывания с определенным
номером, процессор предпринимает следующие
действия:
— прекращает выполнение текущей
программы и запоминает в специальных ячейках все
ее параметры, необходимые для возобновления
работы этой программы;
— пользуясь номером прерывания,
запускает соответствующий блок команд в
операционной системе, т.е. просто программу
обработки данного прерывания.
Эту программу, как и все прочие,
выполняет сам процессор, а закончив ее,
возобновляет выполнение прерванной программы с
того места, на котором ее работа была
приостановлена.
В персональных компьютерах функции
центрального процессора выполняет
микропроцессор. Существует множество
дополнительных и специализированных
процессоров, которыми оснащают различные
устройства компьютера (математический
сопроцессор, процессоры контроллеров и т.п.).
Часто всякое устройство, имеющее собственный
процессор, называют интеллектуальным (по-англ.
— smart).
1.5. Магнитные диски
Каждый диск перед использованием
должен быть отформатирован (размечен). Иными
словами, на нем должна быть создана файловая
система (см. ниже) и записана другая служебная
информация, позволяющая программам работать с
файлами, контролировать состояние диска,
исправлять ошибки2.
Форматирование жестких дисков обычно проводят
специалисты или квалифицированные пользователи,
а форматирование дискеты вполне доступно
обычному пользователю.
Сектор (sector). Вся поверхность
магнитного диска разделена на пронумерованные
участки, каждый из которых имеет длину 512 байтов.
Такой участок называется сектором. По
команде чтения (записи) данных, поступающей в
дисковод из программы, специальное устройство
подводит головку чтения (записи) к заданному в
команде сектору и читает ровно 512 байтов в
оперативную память (или записывает на диск из
памяти). Таким образом, информация физически
может читаться и записываться только порциями по
512 байтов каждая. При формировании файла
последовательность нескольких секторов
объединяется в кластер (т.е. физическая длина
файла измеряется с точностью до кластера). Сектор
— минимально адресуемая область магнитного
диска.
Кластер (cluster) — это нумерованная
группа последовательных секторов на
магнитном диске. Число секторов в кластере
зависит от типа файловой системы и емкости
магнитного диска. Каждый файл, записываемый на
диск, занимает целое число кластеров, причем
часть памяти последнего кластера не
используется. На дискетах кластер обычно
содержит один сектор. Если кластер содержит,
скажем, 4 сектора (2048 байтов), файл длиной 124 байта
занимает один кластер, файл длиной 7262 байта —
четыре кластера и т.д. Файл необязательно
занимает непрерывную область памяти: цепочки
кластеров, входящих в файл, могут быть разбросаны
по всему диску.
Всей работой магнитного диска
управляет так называемая таблица размещения
файлов (FAT — File Allocation Table),
создаваемая при форматировании жесткого или
гибкого диска. FAT — это системная область диска, в
которой зарегистрированы сведения о каталогах
и файлах: имена, атрибуты, размещение по
цепочкам кластеров и др. Под контролем FAT
находятся также все неиспользуемые (в данный
момент) кластеры диска: кластер помечен либо как
свободный, либо как дефектный.
Современные файловые системы (см. п. 6.3)
оптимизируют размер кластера, — так, чтобы
уменьшить потери дисковой памяти за счет
уменьшения размеров неиспользуемой части
кластера.
Функции FAT прозрачны для
программистов и пользователей, т.e. логически
файлы представляются этим людям единым целым, и
манипуляции с секторами и кластерами обычно не
нужны (за исключением программирования на низком
уровне (язык ассемблера, C)).
1.6. Клавиатура
Клавиатура ПК является стандартным
устройством ввода данных.
С первого взгляда клавиатура ПК
отдаленно напоминает клавиатуру пишущей
машинки, но это чисто внешнее сходство. По
принципу работы клавиатура ПК радикально
отличается не только от пишущей машинки, не
только от клавиатур различных технических
устройств (например, калькуляторов), но и от
клавиатур больших ЭВМ. Рассмотрим работу
клавиатуры на примере MS-DOS.
Клавиатура ПК имеет свое “табло” в
оперативной памяти, представленное двумя
байтами. Каждый из 16 битов этого табло —
своеобразная “лампочка”, отражающая состояние
той или иной специальной клавиши клавиатуры.
Например, вы нажали клавишу {NumLock} — загорелась
лампочка (бит № 5); снова нажали {NumLock} — лампочка
погасла. Нажали и удерживаете правую клавишу — загорелась
лампочка (бит № 0); отпустили эту клавишу —
лампочка погасла.
Зачем такое табло? Основное его
назначение — расширить круг сигналов, которые
может посылать компьютеру одна и та же клавиша.
Например, нажатие клавиши с изображением
латинской буквы “A”, в зависимости от состояния
лампочек на табло, может восприниматься как
прописная или строчная латинская “A”, как
прописная или строчная русская “Ф”. Если
одновременно с “A” нажать или , мы получим от этой клавиши еще два
сигнала.
Когда мы нажимаем какую-либо клавишу
(или комбинацию клавиш), в компьютер посылается
электрический сигнал, который в принципе можно
интерпретировать как некое десятичное число,
уникальное (т.е. свое) для каждой клавиши.
Например, при нажатии клавиши с изображением
латинской “A” и русской “Ф” в системный блок
всегда поступает одно и то же число: 30. Этот
сигнал вызывает прерывание работы процессора
(см. выше), и на этом функции клавиатуры
фактически заканчиваются.
Клавиатура отделена от какого-либо
непосредственного воздействия на аппаратуру или
операционную систему. Дальнейшая судьба
посланного с клавиатуры сигнала целиком зависит
от операционной системы и работающей в данный
момент прикладной программы. Сигнал как бы
проходит двойную “цензуру” со стороны
программных средств.
Во-первых, как уже сказано, получив
сигнал от клавиатуры, процессор прерывает
работу и поручает специальному блоку MS-DOS
разобраться с этим сигналом. MS-DOS совместно c драйвером
клавиатуры исследует сигнал и, в зависимости
от состояния “лампочек” на табло, представляет
его некоторым другим десятичным кодом, после
чего помещает этот код во временное хранилище —
специальный буфер клавиатуры. Например, если
на табло горит лампочка “Русский алфавит”,
вместо кода латинской буквы в буфере появится
код русской буквы, изображенной на той же
клавише. Завершив эту операцию (первый уровень
цензуры), MS-DOS сообщает процессору, что можно
продолжать прерванную работу. Таким образом,
поместив в буфер некий код, каким-то образом
связанный с исходным сигналом от клавиатуры,
машина продолжает спокойно заниматься своими
делами, не обращая внимания на клавиатуру.
Во-вторых, когда прикладная программа
решит, что ей понадобился сигнал от клавиатуры,
она прерывает работу процессора, — с тем, чтобы
он поручил MS-DOS посмотреть, нет ли чего в буфере.
Бывает, что к этому моменту пользователь успел
уже несколько раз нажать на клавиши, и в буфере
имеется несколько кодов.
Если в буфере ничего нет (клавиши не
нажимались), программа вольна принять любое
решение — или ждать поступления сигнала, или
вернуться к прерванной работе, с тем, чтобы
заглянуть в буфер попозже. Чаще всего, конечно,
программе приходится ждать, поскольку она
заглядывает в буфер не из праздного любопытства,
а чтобы узнать — что ей делать дальше.
Получив из буфера код (это всегда код
самой старой нажатой клавиши), программа
реализует второй уровень цензуры: в зависимости
от замысла программиста, она может
интерпретировать полученный код как угодно —
как текстовый символ или как управляющий сигнал,
а может и вовсе проигнорировать его.
Описанная схема в принципе
справедлива практически для всех системных и
прикладных программ. Например, текстовый
редактор, подготовив все для работы, заглядывает
в буфер клавиатуры. Получив текстовый символ,
редактор сам отображает его на экране,
запоминает в своем буфере и вновь заглядывает в
буфер клавиатуры. Если пользователь задумался,
редактор будет ждать. Если принятый код,
например, соответствует в представлении
редактора смещению курсора на позицию влево,
редактор выполнит операцию и вновь обратится к
буферу.
Если вы удерживаете клавишу в нажатом
состоянии, ее сигналы будут поступать в буфер
непрерывно и могут переполнить его (если
программа не будет успевать обрабатывать их).
Например, если в программе-оболочке Norton Commander
при просмотре большого текстового файла на
экране нажать и 2–3 сек. удерживать клавишу , уже после
отпускания клавиши NC будет некоторое время
“отрабатывать” сигналы этой клавиши (вы увидите
мелькающие страницы).
При “зависании” машины, после
нескольких нажатий клавиш, компьютер иногда
начинает реагировать на очередное нажатие
коротким “писком”. Это означает, что буфер
клавиатуры переполнен, а заглядывать в него и
выбирать имеющиеся там коды некому. Операционную
систему надо загрузить заново.
1.7. Системы цветопередачи (RGB и CMYK)
В следующих двух пунктах
рассматриваются основ-ные устройства отображения
информации в компьютерных технологиях — монитор
и принтер. Практически все современные мониторы
(с электронно-лучевой трубкой или LCD-мониторы) и
многие принтеры создают цветное изображение
— на экране или на бумаге. Поэтому возникает
вопрос: как получить цветное изображение
средствами этих аппаратов? Специфика этих
устройств заключается в том, что многоцветная
картинка на экране монитора и на бумаге
по-разному воспринимается глазами человека — в
излучаемом (экран монитора) или в отраженном
свете (картинка на бумаге). Поэтому и системы
цветопередачи (т.е. системы образования цвета
участка изображения) должны принципиально
отличаться друг от друга.
В первом случае чаще всего в качестве
системы цветопередачи используется технология
RGB, а во втором — технология CMYK (Cyan, Magenta,
Yellow, blacK — голубой, пурпурный,
желтый, черный). CMYK — это система цветопередачи, в
которой цвет участка изображения является
результатом наложения в определенной пропорции
четырех основных цветов системы. CMYK применяется
для вывода на печать картинок в цветных
принтерах, а также в офсетной печати для
изготовления полноцветных документов. В обоих
случаях используются чернила четырех основных
цветов. Одна из важнейших задач настольных
издательских систем — так преобразовать цвета
RGB в цвета CMYK, чтобы при печати изображение
выглядело таким же, как и на мониторе.
В профессиональных графических
редакторах используют другую систему
цветопередачи — HSV (Hue, Saturation, Value
— оттенок, насыщенность, значение). Существуют
также системы: HLS (Hue, Luminance, Saturation
— оттенок, яркость, насыщенность), LCH (Luminance,
Chroma, Hue — яркость, насыщенность,
оттенок), HSB (Hue, Saturation, Brightness
— оттенок, насыщенность, яркость) и др.
1.8. Монитор (технология RGB)
Общие положения. Монитор ПК является
стандартным устройством вывода данных.
Монитор работает в графическом или
текстовом режиме под управлением специальной
микросхемы — видеоадаптера, играющего роль физического
интерфейса между монитором и видеопамятью.
Изображение на экране представляет
собой мозаику из отдельных точек (точнее,
квадратиков или прямоугольников) — пикселей,
каждый из которых окрашен в тот или иной цвет.
Программным путем мы устанавливаем текущие
характеристики изображения (точнее —
видеоадаптера): режим (текстовый или
графический), разрешение, цветовую палитру.
Программным же путем изображение помещается в
видеопамять компьютера, а видеоадаптер,
просматривая (сканируя) эту память, формирует
пиксели, устанавливает цвета и воспроизводит
изображение на экране монитора. Сам монитор,
строго говоря, к операциям видеоадаптера
никакого отношения не имеет.
Возникают два принципиальных вопроса.
1) Как кодируется в видеопамяти цвет
каждого пикселя?
2) Как пиксель заданного цвета
воспроизводится на экране?
Кодирование цвета. Прежде всего
рассмотрим графический режим как наиболее
распространенный (в текстовом режиме
используются те же пиксели).
Можно сказать, что каждый пиксель
представлен в видеопамяти неким целым десятичным
числом (0, 5, 18, 259 и т.д.). Что означает это число, как
оно связано с цветом?
В физике известно, что любой цвет можно
получить смешением в определенной пропорции
трех основных цветов: красного, зеленого и
синего. Например, если эти цвета смешать поровну,
мы получим серый цвет (оттенок), причем яркость
(интенсивность) этого цвета будет зависеть от
числа, задающего каждый основной цвет. Например, 0
х 0 х 0 дает абсолютно черный цвет, 50 х 50 х 50 —
темно-серый оттенок, 200 х 200 х 200 — ярко-серый, 255 х
255 х 255 — белый цвет. Точно так же 0 х 100 х 0 дает
темно-зеленый цвет, 0 х 255 х 0 — ярко-зеленый, 0 х 100 х
100 — голубой и т.д.
Способ задания цвета в машинной
графике сокращенно называют по первым буквам основных
цветов RGB (Red — красный, Green —
зеленый, Blue — синий).
Число возможных цветов каждой точки
зависит и от характеристик видеоадаптера, и от объема
видеопамяти. Если для кодирования цвета в
видеопамяти отводится один бит, мы имеем дело с
черно-белым монитором (номера цветов 0 и 1); двумя
битами можно закодировать четыре цвета (00 = 0, 01 = 1,
10 = 2, 11 = 3); четырьмя битами (половина байта) — 16
цветов и т.д. В современных компьютерах объем
видеопамяти позволяет отвести каждому пикселю
три байта (и даже больше), и вы без труда можете
подсчитать, что палитра цветов в таком режиме —
около 16,5 миллионов оттенков (именно оттенков, так
как вряд ли кто-либо сумеет подобрать названия
для миллионов цветов). Эта палитра (а также
палитра 4 байта) носит название True Color и
позволяет воспроизвести графическое
изображение, которое не уступает по качеству
картинкам живой природы и произведениям
художников. Впрочем, пользователям, которые не
занимаются графическим дизайном, вполне
достаточно использовать двухбайтовую палитру High
Color (65 536 цветов).
Примечание. Цветовую палитру можно
изменить с помощью вкладки Параметры
диалогового окна <Свойства: Экран>, которое
выдается при выборе команды контекстного меню
Рабочего стола [Свойства] или выбора элемента
Экран Панели управления.
Отображение картинки на экране.
Теперь мы знаем, что графическая картинка,
выдаваемая на экран, представлена в видеопамяти
совокупностью пикселей, причем цвет каждого
пикселя задан неким целым десятичным числом,
занимающим от одного бита до трех и более байтов.
Видеоадаптер просматривает (сканирует)
видеопамять с частотой 75–85 Гц (75–85 раз в секунду)
и, в зависимости от цвета пикселя, меняет интенсивность
трех электронных лучей, каждый из которых
отвечает за один из цветов RGB. Лучи (в которых,
разумеется, нет никакой информации о цвете)
синхронно сканируют экран монитора, покрытый люминофором.
Это покрытие состоит из равномерно перемешанных зерен
размером 0,2–0,3 мм, причем каждое из них под
ударами электронов может светиться одним из трех
основных цветов. Красные, зеленые и синие зерна
равномерно распределены по экрану, и электронные
лучи заставляют их светиться с заданной
интенсивностью. Высокая скорость сканирования и
небольшие размеры зерна и пикселя дают
возможность получить не заметное для глаза
смешение цветов в каждом пикселе.
Особенности текстового режима. В
графическом режиме как сама картинка, так и текст
на ней (если он нужен) формируются программным
путем.
Когда видеоадаптер работает в
текстовом режиме, “образ экрана” размещается в
специальной области оперативной памяти и
занимает 4000 байт: 25 строк экрана по 80 позиций в
строке, причем каждой позиции соответствуют два
байта. В первом из них размещается код самого
символа (см. кодовую таблицу), а во втором — так
называемый “символ-атрибут”, определяющий
цвета символа и фона.
Задача программы — тем или иным
способом помещать символы и их атрибуты в
указанную область памяти, а задача монитора —
воспроизвести на экране то, что там находится.
Просматривая (сканируя) образ экрана и используя
код символа, видеоадаптер находит в
знакогенераторе дисплея “литеру”,
соответствующую этому коду, и “печатает” ее на
экране. При этом конфигурация битов в
символе-атрибуте управляет интенсивностью трех
лучей монитора — красного, зеленого и синего (как
в телевизоре), — так, чтобы изображение символа и
фон были окрашены в заданные программистом
цвета.
Половина байта (4 бита), отведенная для
цвета, позволяет воспроизвести в текстовом
режиме по шестнадцать цветов для символа и фона,
например:
· 0 — черный и 8 — серый;
· 1 — голубой и 9 — светло-голубой;
· 2 — зеленый и 10 — светло-зеленый.
В заключение заметим, что при работе с
графическими редакторами часто пользуются координатами
отдельного пикселя мозаики — номером столбца x и
номером строки y, на пересечении которых
этот пиксель находится. Координаты
отсчитываются от левого верхнего угла мозаики
вправо (ось x) и вниз (ось y). Например, левая
верхняя точка имеет координаты (0, 0), а правая
нижняя точка при разрешении 640 ґ 480 — (639, 479).
1.9. Принтер (система цветопередачи CMYK)
Как и другие устройства ПК, принтер
работает в известной степени независимо от
процессора и других устройств.
Программа формирует и направляет
принтеру поток байтов (символов), представляющий
собой смесь команд управления принтером и
печатаемых символов. Содержимое этого потока
принтер интерпретирует в соответствии с кодовой
таблицей:
1) если код символа меньше 32 (но не равен
27), этот символ считается командой, которая
либо выполняется (если это предусмотрено
конструкцией принтера — например, команда 13),
либо просто игнорируется;
2) если код поступившего символа равен
27 (Esc), принтер ожидает, что следом за ним поступит
так называемая Esc-последовательность, т.е.
цепочка из одного, двух или более символов,
описывающая одну из команд, которые не
представлены управляющими символами. Принтеры
имеют десятки и даже сотни команд, и
Esc-последовательности могут быть длинными и
сложными (они могут содержать даже двоичные
числа);
3) если код символа не меньше 32, он
просто направляется на печать.
Как принтер печатает символы? В
принципе имеется некоторая аналогия между
принтером и монитором: принтер тоже может
работать в текстовом и в графическом режиме.
При работе в текстовом режиме принтер
может пользоваться либо встроенными
(“зашитыми”) шрифтами, либо загружаемыми
шрифтами. Среди Esc-последовательностей есть и
команды установки и смены встроенных шрифтов,
ввода и установки загружаемых шрифтов, перехода
в графический режим и т.д.
Если в текстовом режиме каждый символ
печатается целиком, с помощью специальной
“литеры” символа, то в графическом режиме
каждый символ рисуется по точкам специальными
программами (например, в графическом режиме
работала когда-то популярная программа Lettrix).
В цветных принтерах для создания
многокрасочных изображений чаще всего
используется система цветопередачи CMYK (Cyan,
Magenta, Yellow, blacK — голубой,
сиреневый (пурпурный), желтый, черный), кратко
описанная в п. 1.7.
В старых технологиях пользователю
приходилось фактически самому управлять работой
принтера (с помощью условных значков в текстовом
файле). Ныне печатью управляет специальная
программа-драйвер, расположенная между
приложением (операционной системой) и печатающим
устройством. Тем, кто еще не расстался с матричным
принтером, следует помнить, что современные
шрифты TrueType (или OpenType) печатаются в графическом
режиме, а графика на матричный принтер выводится
очень медленно.
2. Принципы программного управления
персональным компьютером
2.1. Базовая система ввода-вывода (BIOS)
BIOS (Basic Input-Output System) —
это независимая от операционной системы
программа, которая “зашита” обычно в постоянном
запоминающем устройстве компьютера и выполняет
ряд служебных функций: 1) тестирование аппаратных
компонентов после включения компьютера; 2)
организацию загрузки в память операционной
системы; 3) выполнение операций ввода-вывода
(например, операций чтения-записи данных на диск)
по запросам операционной системы и прикладных
программ. BIOS является энергонезависимой и
сохраняется в ПЗУ после выключения машины.
В современную BIOS обычно встраиваются
элементы технологии “Plug-and-Play”, с помощью
которых операционная система может
автоматически обнаружить и подключить “к себе”
вновь установленные устройства. Кроме того, BIOS
позволяет ныне автоматически выключить питание
системного блока при завершении работы с
операционной системой.
С некоторыми оговорками BIOS можно
считать аппаратным компонентом компьютера; она
не зависит от ОС, и именно поэтому даже в
русифицированных версиях Windows сообщения BIOS (на
первом этапе начальной загрузки) выдаются на
английском языке.
2.2. Общие принципы работы операционных
систем
Операционная система (ОС) — это
комплекс системных программ, начинающий работу
при включении компьютера и завершающий работу
при выключении. ОС обеспечивает оптимальное
использование ресурсов компьютера, управляет
взаимодействием программных и аппаратурных
компонентов между собой, а также взаимодействием
пользователя с компьютером. С точки зрения
пользователя, ОС представляет собой продолжение
аппаратных средств компьютера.
Первые ЭВМ не имели операционных
систем, и программисты вручную программировали
операции, предусмотренные общими принципами
работы компьютера (см. п. 1), — ввод, вывод,
отображение данных. Появление ОС обусловлено
расширением функциональных возможностей ЭВМ,
усложнением аппаратурных компонентов,
необходимостью повысить производительность
программистов при программировании стандартных
операций, необходимостью максимальной загрузки
процессора и т.д. Ниже мы изложим принципы
некоторых функций ОС.
1. Автоматизация программирования
стандартных операций. В современном
компьютере, чтобы запрограммировать стандартную
операцию взаимодействия программы с внешним
устройством, следует описать десятки (а иногда и
сотни) элементарных шагов. Например, чтобы ввести
порцию данных с жесткого диска, необходимо: найти
в таблице размещения файлов (FAT) описание
заданного файла, определить “координаты”
заданной порции данных (цилиндр, дорожку, сектор),
подвести головку диска к нужной позиции, считать
в определенное место ОЗУ кластер (кластеры),
проверить правильность чтения, выделить
заданную порцию данных, поместить ее в указанное
программистом место и т.п. ОС освобождает
программиста от описания подавляющего числа
конкретных физических операций, позволяя
указать лишь логические сведения (имя файла,
порядковый номер записи или что-то в этом роде).
2. Максимальная загрузка процессора.
Различные компоненты компьютера работают с
разной скоростью. Например, скорость вывода на
принтер в сотни и тысячи раз ниже скорости обмена
“процессор–память”, а скорость обмена с
жестким диском — в десятки раз ниже скорости
процессора. Если процессор, направив данные,
например, на принтер, будет ждать завершения этой
операции, дорогостоящее процессорное время
будет расходоваться впустую. ОС обеспечивает
координацию работы внешних устройств и
процессора, — так, чтобы они могли работать в
известной степени независимо друг от друга.
Например, отправив данные на принтер, процессор
сразу переходит к выполнению другой работы, а
получив сигнал о завершении печати, может вновь
обслужить принтер (см. пункт о прерываниях).
3. Обработка особых ситуаций. В
работе вычислительной установки часто возникают
так называемые “особые” ситуации: сбои и ошибки
в работе аппаратных компонентов, отсутствие
бумаги или питания в принтере, переполнение
разрядной сетки при вычислениях и многие другие.
ОС либо сама устраняет особые ситуации (например,
повторным чтением с диска), либо сообщает о них
пользователю (для принятия мер).
4. Разделение времени и организация
одновременной работы нескольких программ. Многозадачные
ОС используют механизм разделения времени
процессора для организации одновременной работы
нескольких приложений. Без ОС реализация этого
процесса принципиально невозможна.
Механизм разделения времени образует
основу систем попеременного обслуживания одним
процессором компьютера нескольких
вычислительных процессов в одной или нескольких
программах, — при этом пользователю
представляется, что эти процессы функционируют
одновременно (или почти одновременно). Как
правило, разделение времени основано на уже
рассмотренном механизме прерываний, который
дает возможность процессору приостановить
выполнение текущей программы (или ее блока),
запомнить ее состояние, переключиться на
выполнение другой программы, а затем продолжить
выполнение прерванной программы.
1) В однозадачных ОС (например, MS-DOS)
разделение времени позволяет процессору
обслуживать различные события, возникающие в
ходе работы единственного приложения (ввод
символа с клавиатуры, ввод-вывод на диск, печать и
т.п.).
2) Некоторые ОС (например, ранние версии
операционных систем ЭВМ IBM-360 и ЕС) использовали
разделение времени для организации
одновременной работы двух программ, одна из
которых объявлялась основной (задачей переднего
плана), а другая — фоновой (т.е. работающей на
фоне основной задачи). Фоновое приложение
получало процессорное время только в те моменты,
когда процессор был свободен от основной работы
(например, ждал сигнала пользователя или
завершения ввода данных с диска). Принцип фоновой
работы иногда используется и в современных
системах (например, для организации печати на
фоне работы других приложений).
3) В многозадачных ОС,
обслуживающих несколько одновременно
работающих приложений (очередь задач),
используются различные механизмы разделения
времени. Например, квантование времени
предусматривает попеременное выделение каждому
работающему приложению определенного (очень
малого) промежутка процессорного времени
(кванта), по истечении которого управление
передается другому приложению. Иногда
приложениям, стоящим в очереди за процессорным
временем, присваиваются некоторые приоритеты (уровни
приоритета), — в этом случае задача с более
низким приоритетом будет реже получать время (и
медленнее выполняться), чем задача с высоким
приоритетом. Если приложение, получившее право
на квант времени, не готово к его использованию
(ждет какого-то события), время передается
следующему “клиенту” очереди. В
объектно-ориентированных технологиях чаще
используются механизмы разделения времени с
периодическим взаимным опросом приложений и
операционной системы.
От систем разделения времени, которые
функционируют в компьютерах с одним
процессором, необходимо отличать системы с несколькими
процессорами (например, параллельные
вычисления в многопроцессорных ЭВМ,
симметричную многопроцессорную обработку (SMP) и
т.п.).
5. Программное кэширование
позволяет значительно повысить
производительность компьютера.
До появления графических операционных
систем для кэширования данных применяли
автономные “спутники” ОС, которые загружались в
оперативную память фактически вручную. Начиная с
ОС Windows 95, модуль кэширования встраивают в ОС. В
любом случае программный модуль, отвечающий за
кэширование, выделяет в памяти специальную
буферную область — кэш диска. В эту область
помещаются данные, которые недавно либо
читались с диска, либо записывались на диск.
Модуль кэширования исходит из предположения, что
эти данные вновь скоро могут понадобиться
прикладной программе. Если “догадка”
подтверждается, данные поставляются программе
не с диска, а из кэша, что гораздо быстрее. Другой
способ ускорения обмена — отложенная запись.
Когда прикладная программа посылает данные на
диск, модуль кэширования помещает их в кэш, а
программе сообщает, что запись произведена. На
самом деле эти данные будут записаны на диск
позже, когда система свободна от другой работы.
Именно поэтому пользователь часто видит
мерцание светового индикатора диска, когда,
казалось бы, на машине ничего не должно
происходить (отложенная запись может быть
выполнена, например, через 1–2 секунды после
завершения прикладной программы).
Примечание. Кроме программного
кэширования, в современных ПК используются также
аппаратный кэш памяти (память со
сверхбыстрым доступом) и аппаратный кэш
диска.
6. Другие функции. В зависимости от архитектуры
вычислительной установки на различные ОС
возлагаются десятки других функций: организация
интерфейса пользователя (например, интерфейс
командной строки в текстовом режиме или
графический оконный интерфейс), буферизация,
управление оперативной памятью, организация виртуальной
памяти, обслуживание буфера обмена, сетевые
операции и т.д.
Необходимо различать три принципиально разные
вещи:
— интеграцию приложений, т.e.
совместное использование приложениями ресурсов
операционной системы (например, буфера обмена,
шрифтов и т.д.), и использование приложением
документов и данных другого приложения;
— многозадачность, т.e. способность
ОС одновременно управлять выполнением
нескольких приложений;
— механизмы многопользовательской
работы (с одной и той же информационной системой,
ОС, одним и тем же приложением).
Продолжение в следующем номере.
1
Нейрон — нервная клетка живого организма.
2 Файл
— это именованная совокупность байтов с данными,
записанная на магнитный диск. См. п. 4.3.3. |