Представление данных в памяти персонального компьютера (числа, символы, графика, звук)
Представление данных в памяти персонального компьютера (числа, символы, графика, звук)
Представление данных в памяти персонального компьютера (числа, символы, графика, звук)
Как мы хорошо знаем, вычислительная техника первоначально возникла как средство автоматизации вычислений, о чем совершенно недвусмысленно говорит название ЭВМ. Следующим видом обрабатываемой информации стала текстовая. Сначала тексты просто поясняли труднообозримые столбики цифр, но затем машины все более и более существенным образом стали преобразовывать текстовую информацию. Обязательной частью программного обеспечения стал текстовой редактор. Естественно, что оформление текстов достаточно быстро вызвали у людей стремление дополнить их графиками и рисунками. Делались попытки частично решить эти проблемы в рамках символьного подхода: вводились специальные символы для рисования таблиц и диаграммам (их называли псевдографическими; вспомните панели знаменитого Norton Commander, которые созданы именно этим способом). Но практические потребности людей в графике делали ее появление среди видов компьютерной информации неизбежной. Числа, тексты и графика образовали некоторый относительно замкнутый набор, которого было достаточно для многих решаемых на компьютере задачи. Наконец, относительно недавно постоянный рост быстродействия вычислительной техники создал широкие технические возможности для обработки звуковой информации, а также для быстро сменяющихся изображений (видео) - компьютер стал мультимедийным.
Основные принципы двоичного кодирования четко и понятно сформулированы в пособии для учителя [1]. Пусть мы хотим произвести кодирование в двоичном алфавите A некоторой величины, имеющей конечное множество значений B. B - это, разумеется, тоже своеобразный алфавит, поэтому в наиболее абстрактном виде задача состоит в формулировке правил замены символов алфавита B символами алфавита A. Правила эти можно сформулировать следующим образом:
двоичный алфавит A содержит только два символа - 0 и 1;
каждой букве алфавита B ставится в соответствие определенный (вообще говоря, произвольный) двоичный код;
двоичные коды различных букв алфавита B обязательно должны быть различны, иначе нарушится однозначность кодирования;
двоичные коды букв данного алфавита B должны иметь одинаковое число двоичных букв (например, число 1 в 32-разрядной машине дополнительно содержит слева 31 незначащий ноль и только затем единичку).
И еще один вопрос хочется обсудить, прежде чем переходить к конкретным видам информации. Речь идет о дискретной и непрерывной (часто говорят аналоговой) информации. Это довольно сложный философский вопрос, поэтому мы постараемся не углубляться в него сильно без особой необходимости.
Итак, согласно строгому определению математического словаря [2], "дискретность (от лат. discretus - разделенный, прерывистый) - прерывность; противопоставляется непрерывности. Напр., дискретное изменение к.-л. величины во времени - это изменение, происходящее через определенные промежутки времени (скачками); система целых (в противоположность системе действительных чисел) является дискретной".
Заметим, что в приведенной цитате указано на связь дискретности с системой целых чисел, и это можно считать подтверждением положения о том, что дискретные значения можно пронумеровать.
Для большей наглядности дополним данное определение рядом примеров. Дискретными являются показания цифровых измерительных приборов, например, вольтметра (сравните со "старыми", стрелочными приборами). Очевидным (в самом изначальном смысле этого слова!) образом дискретной является распечатка матричного принтера, а линия, проводимая графопостроителем, напротив, является непрерывной. Дискретным является растровый способ представления изображений, тогда как векторная графика по своей сути непрерывна. Дискретна таблица значений функции, но когда мы наносим точки из нее на миллиметровую бумагу и соединяем плавной линией, получается непрерывный график. Механический переключатель диапазонов в приемниках был сконструирован так, чтобы он принимал только фиксированные положения, а вот регулятор громкости вращался плавно, т.е. непрерывно (возможно, не самый наглядный пример, т.к. сейчас, наверное, некоторые школьники уже с трудом представляют себе иные регулировки, кроме цифровых).
Тем не менее, все не так просто. То, что фотографии в старых газетах дискретны, видят и соглашаются все. А в современном красочном глянцевом журнале? А распечатка картинки на лазерном принтере - она дискретна или непрерывна (все-таки, она состоит из частичек специального порошка, а они маленькие, но конечные по размеру; да и сама характеристика dpi - количество точек на единицу площади наводит на сомнения в непрерывности картинки, хотя глаз упорно не видит дискретности)? Если еще в этот момент вспомнить, что твердые тела состоят из мельчайших атомов, а глаз, воспринимающий изображение, имеет чувствительные маленькие палочки и колбочки, то все вообще станет туманным и неоднозначным…
Видимо, чтобы не запутаться совсем, надо принять правило, что в тех случаях, когда рассматривая величина имеет настолько большое количество значений, что мы не в состоянии их различить, то практически ее можно считать непрерывной. Например, пока dpi сканера значительно хуже, чем у лазерного принтера, напечатавшего эту картинку, он не увидит ее "зернистости" и нам приходится считать картинку непрерывной. Аналогично издали современный жилой массив кажется нам сплошной стеной, но, подойдя к нему поближе, мы начинаем различать отдельные дома и даже пространство между ними.
Какое отношение приведенные выше рассуждения имеют к хранению информации в компьютере? Самое непосредственное! Компьютер по определению способен хранить только дискретную информацию. Его память, как бы велика она не была, состоит из отдельных битов, а значит дискретна. А из этого немедленно следует, что существует проблема преобразования естественной информации в пригодную для компьютера дискретную форму. В литературе ее называют проблемой дискретизации или квантования информации.
Названная проблема всегда рассматривается при изложении принципов хранения звуковой информации, но обычно умалчивается во всех остальных случаях. Только в одном учебнике [1] удалось найти упоминание о дискретизации как об общей проблеме кодирования. Причем простое и доступное объяснение сопровождалось довольно удачным рисунком, аналог которого приводится ниже. Непрерывная величина ассоциируется с графиком функции, а дискретная - с таблицей ее значений. При рассмотрении этих двух объектов разной природы делается вывод о том, что с уменьшением интервала дискретизации (или, что то же самое, с увеличением количества точек в таблице) различия между ними существенно уменьшаются. Последнее означает, что при таких условиях дискретизированная величина хорошо описывает исходную (непрерывную).
Теперь, когда наиболее общие принципы преобразования информации при вводе в компьютер нам понятны, рассмотрим как реализуются эти принципы для конкретных видов информации.
Целые числа. Как мы уже знаем, этот тип информации является дискретным и преобразуется для хранения в компьютере довольно просто: достаточно перевести число в двоичную систему счисления. Некоторые особенности будет иметь кодирование целых отрицательных чисел, но мы их рассмотрим в вопросе, связанном с представлением числовой информации.
Вещественные числа. В отличие от целых, вещественные числа являются непрерывными. Следствием из этого является возможность дальнейшего деления любого сколь угодно малого числа, что приводит, вообще говоря, к бесконечному числу разрядов в изображении числа .Для того, чтобы в ЭВМ как-то представить числа в виде конечного набора двоичных цифр, приходится ограничиваться определенной точностью и младшие разряды просто игнорировать. Отсюда могут возникать некоторые принципиальные проблемы, например, при сравнении двух вещественных значений на равенство. Хорошо известен, например, следующий "счетный" эффект. Возьмем отрезок от 0 до 1 и разделим его на N равных частей, например, на 1000; тогда величина каждой части h=1/N. Выполним по отрезку ровно N шагов, вычисляя каждый раз значение аргумента по формуле X=X+h. По идее, последнее значение X=Nh должно равняться единице, однако на практике точного равенства, как правило, не будет, а значение X будет чуть-чуть меньше. Учтите на будущее этот парадокс и всячески старайтесь избегать сравнения вещественных чисел на равенство.
Символы. Это еще одна дискретная величина, поскольку компьютер оперирует с определенным ограниченным набором символов. Такой набор вполне можно назвать алфавитом машины, а в алфавите все символы имеют свои фиксированные позиции. Отсюда основная идея хранения символов в памяти ЭВМ состоит в замене каждого из них номером в алфавите, т.е. числом.
Помимо такого очевидного достоинства, как компактность хранения, замена символа его номером имеет и определенные недостатки. В частности, текст может быть правильно воспроизведен на другом компьютере только в том случае, если алфавиты обоих компьютеров совпадают. И если для латинских букв, на которые существует единый стандарт, это совсем не жесткое требование, то с русскими текстами дело обстоит заметно хуже. Достаточно сказать, что даже в пределах одного компьютера кодировка русских букв в операционных системах MS-DOS и Windows различна. Несколько утешает тот факт, что задача перекодировки текста является очень простой, и, если правильно указать исходную и требуемую кодировку, прекрасно решается автоматически.
При выводе символа компьютер по номеру определяет, как его надо изобразить на экране или на бумаге. Раньше для каждого символа хранилась его растровая картинка, т.е. некоторая матрица из черных и белых точек, окрашенных в соответствии с начертанием символа. Учитывая, что размеры всех символов были одинаковыми, ориентироваться в такой таблице (ее было принято по научному называть знакогенератором) компьютеру было нетрудно. Главным недостатком подобного метода вывода текста было то, что начертания букв и их размер оказывались жестко зафиксированными. На первых порах с этим мирились, но постоянное увеличение обработки текстов на компьютере потребовало новых принципов организации шрифтов. На современном этапе для каждого символа хранится не его начертание, а своеобразная программа, его порождающая (векторный способ создания изображений). Геометрические параметры этих "программ" могут легко изменяться, что обеспечивает быстрое и удобное масштабирование шрифтов.
Графика. Как известно каждому пользователю компьютера, любое графическое изображение состоит из отдельных точек, называемых пикселями. Отсюда становится понятным, что сохранить изображение фактически означает сохранить цвета его пикселей. Если принять конечное (ограниченное) число цветов, то информация немедленно становится дискретной и решение задачи сохранения графики становится похожей на только что рассмотренную задачу сохранения текста. Нужно каким-либо образом пронумеровать все цвета (создать своеобразный "алфавит цветов"), после чего достаточно просто сохранять номера цветов. В отличие от алфавита символов, который является стандартным, с цветами это не совсем так. Например, в фотографии летнего леса много оттенков зеленого цвета, а для кадра с облаками характерны белые и голубые тона. Отсюда следует, что набор используемых цветов (часто его называют палитрой) для этих изображений будет абсолютно разным. Поэтому некоторые графические форматы сохраняют палитру вместе с изображением, что позволяет существенно уменьшить количество цветов и, следовательно, размер файла.
Хочется подчеркнуть еще один момент. Для того, чтобы естественное изображение (например, рисунок художника на холсте) с непрерывным распределением цветов стало доступным компьютеру узором пикселей, необходимо использовать какое-либо специальное устройство, которое способно такое преобразование осуществить. Всем, конечно, известны примеры таких устройств: речь идет о сканере или цифровой камере. Однако не все задумываются над тем, что все эти устройства производят процесс дискретизации графического изображения, т.е. аналого-цифровое преобразование.
Как и для символов, помимо описанного выше "поточечного" (растрового) хранения изображения, существует еще и векторный метод. Для него сохраняется не полная матрица пикселей, а программа его рисования. Кодирование этой программы существенным образом зависит от программного обеспечения. По своим принципам оно гораздо ближе к кодированию программ, чем данных. Подчеркнем, что векторные изображения, как правило, создаются именно на компьютере, а задача векторизации естественного изображения очень сложна и дает не слишком хорошие результаты.
Звук. Звуковая информация также является величиной непрерывной, и, следовательно, для ввода в ЭВМ нуждается в дискретизации. Причем дискретизация должна производится как по времени, так и по величине интенсивности звука. Первый процесс означает, что замеры интенсивности должны производится не непрерывно, а через определенные промежутки времени, а второй - что интенсивность звука, которая в природе может принимать какие угодно значения, должна быть "подтянута" ("округлена") к ближайшему из стандартного набора фиксированных значений. При такой процедуре мы снова получаем последовательность целых чисел, которые и сохраняются в памяти ЭВМ. Таким образом, и в случае звука информацию удается описать определенным образом сформированной последовательностью чисел, что автоматически решает проблему кодирования.
Итак, рассмотрев представление различных видов информации в ЭВМ, мы можем сделать следующие выводы.
С точки зрения "готовности" к сохранению в память компьютера, информация делится на две категории - дискретная и непрерывная. Компьютер способен хранить и обрабатывать только первую, поэтому вторую предварительно необходимо каким-то способом преобразовать. Строго говоря, информация при дискретизации искажается, поэтому к качеству этого процесса предъявляются высокие требования.
Не нуждаются в дискретизации целые числа и символы, а вещественные числа, графическая и звуковая информация для ввода в компьютер требуют определенных процедурах ввода, которые преобразуют эти виды информации в дискретную форму.
Информация любого вида хранится в компьютере в двоичном виде.
Процесс кодирования любого вида информации фактически представляет собой его преобразование тем или иным способом в числовую форму.
В памяти машины не существует принципиального различия между закодированной информацией различных типов. Над всеми видами данных, включая дополнительно и саму программу, процессор способен производить арифметические, логические и прочие операции, которые содержатся в системе его команд.
Основная литература
1. Касаткин В.Н. Информация, алгоритмы, ЭВМ. М.: Просвещение, 1991, 192 с.
2. Математический энциклопедический словарь. / Гл. ред. Ю.В. Прохоров. М.: Сов. энциклопедия, 1988, 847 с.
3. Еремин Е.А. Как работает современный компьютер. Пермь: Изд.-во ПРИПИТ, 1997, 176 с. (необходимая часть книги доступна в Интернет по адресу