Это - учебно-методические материалы по медицинской информатике и статистике с сайта 1mgmu.com


Увеличить шрифт :: Уменьшить шрифт

6.3.2 Компьютер. Железо. Что считает центральный процессор (краткий вариант)

Компьютер делится на две компоненты - "храд" и "софт", или железо и программы.
Хотя здесь речь идет в основном об аппаратных компонентах (железе), приходится постоянно упоминать и о выполняемых ими командах, точно так же, как при изложении физиологии приходится постоянно вспоминать об анатомии, а при изложении анатомии - о физиологии, ибо нет функции без структуры и структуры без функции (о как закрутил!).

Итак, как же, в общих чертах, выглядят программы и как процессор их выполняет?
Любой алгоритм состоит из задания последовательности четко определенных однозначных действий, включая прекращение выполнения работы. Программа, подготовленная для выполнения центральным процессором – алгоритм, в котором в качестве упомянутых выше однозначных действий выступают команды процессора.
Так как было бы очень глупо писать одноразовую программу под каждое конкретное действие, то программы делаются так, чтобы их можно было использовать многократно. Например, если бы в команде процессора явно указывалось, с какими числами нужно производить действия, то программу, которая находит сумму двух и пяти, нельзя было бы использовать для вычисления суммы трех и семи. Поэтому в командах используются не числа, адреса чисел, например, «прибавить число, записанное начиная с 2380 байта, к числу, записанному начиная с 4200 байта». В этом случае, загрузив в соответствующие участки оперативной памяти любые числа, можно вычислить их сумму. В оперативной памяти эта команда будет записана как (n,2380,4200), где n – номер операции сложения в общем списке команд. Считав номер операции, процессор «понимает», что после этого в следующих байтах будет записано два целых числа – адреса операндов, а потом будет записан номер следующей команды и т.д.
Так как числа могут находится как в основной памяти, так и на регистрах, то возможны три разные команды сложения – когда оба операнда в оперативной памяти, когда один в оперативной памяти, а другой – в регистре и когда оба – в регистрах. Так как номера этих команд разные, то процессор «понимает», указанный далее адрес – номер байта, с которого нужно начать чтение в оперативной памяти, или номер регистра.
Кроме того, числа, с которыми производятся операции, могут быть целыми, а могут быть нецелыми (так называемые числа с плавающей точкой), а также иметь разную длину.
Если число – целое с длиной в два байта, то первый бит отводится под запись знака, а остальные 15 битов – под величину числа. Это дает записывать целые числа в пределах примерно от -32 тысяч до +32 тысяч. Если число - целое с длиной в 4 байта, то это позволяет кодировать числа в пределах примерно от минус до плюс двух миллиардов. Целые числа запоминаются точно, но слишком большие значения в них «не влезают».
Другой способ записи чисел – с плавающей точкой, при которых числа округляются, запоминаются не совсем точно, но зато есть возможность записывать очень большие и малые величины. Для этого число представляют в виде M * 16P, где M – число, меньшее по модулю единицы, но большее 1/16, а P - положительное или отрицательное целое число. Величина M называется мантиссой, P – порядком. Порядок и мантисса записываются отдельно, один за другим, причем порядок записывается как целое число (только не обязательно стандартной длины, например, под него может отводиться 12 бит), а мантисса округляется и записывается «как будто» как целое число. Если под число с плавающей точкой отводится 4 байта, то это позволяет записывать числа с относительной точностью в одну миллионную, если 8 байтов – то с точностью порядка 10-16.
В результате получается, что операций сложения – достаточно много, в зависимости от расположения операндов, их типа и длины. В явном виде выполнять арифметические операции с операндами разного тира или длины нельзя, предварительно нужно при помощи специальных программ преобразования привести их к одному виду.
Схемы выполнения программ, когда за выполнением одной команды начинается выполнение записанной за ней команды, недостаточно. Для ее модификации есть специальные команды безусловного перехода, после выполнения которой начинается выполнение с указанного в команде адреса, и команды условного перехода, в которых переход выполняется тогда, когда выполняется некоторое условие. Пример такого условия – что полученное на предыдущем шаге число – положительное.
Например, если нужно найти максимум из чисел, записанных, по адресам A1 и A2, и записать его по адресу А3, то можно использовать следующую последовательность команд:
1. Скопировать число по адресу A1 в адрес А3;
2. Вычесть число по адресу A2 из числа по адресу A1;
3. Если получилось положительное число, то перейти к команде №5;
4. Скопировать число по адресу A2 в адрес А3;
5. Остановиться.
Однако желательно иметь возможность те только производить заданные операции с произвольными числами, записанными по заданным адресам, но и с большими наборами чисел. Для этого добавлена возможность модернизации адреса операнда, при которой считывается число не с того адреса, который записан в операнде команды, а который больше его на некоторую величину. Это число называется индексом и хранится, например, на нулевом регистре.
Условная программа суммирования N чисел, последовательно записанных начиная с адреса A, в число по адресу B выглядит следующим образом:
1. Загрузить число N по адресу С;
2. Загрузить число 1 по адресу D;
3. Скопировать число по адресу A в адрес B;
4. Загрузить число 0 в индексный регистр;
5. Прибавить к индексному регистру число по адресу D (то есть добавить единицу);
6. Отнять от числа по адресу С индексный регистр;
7. Если полученное число меньше или равно нулю, то перейти к команде №11
8. Загрузить число N по адресу С (восстановить значение N по этому адресу);
9. Прибавить к числу по адресу B число по адресу A+содержимое индексного регистра;
10. Перейти к команде №5
11. Остановиться
Указанный прием программирования, при котором последовательность команд многократно выполняется до тех пор, пока выполняется некоторое условие, называется циклом, а набор последовательно записанных данных, с которыми можно работать при помощи одной команды с модификацией адреса – массивами.
Длина записи команды в оперативной памяти зависит от длины адреса, задающего номер первого байта числа. Например, для задания адреса в оперативной памяти размером в 1Гб нужно 30 бит, из-за чего команда с адресами оказывается достаточно длинной. Поэтому принята схема задания текущего адреса относительно не первого байта, а произвольного, выбранного за текущую точку отсчета, а в число команд добавлена команда изменения «точки отсчета». Такая схема адресации называется «база» и «смещение». В IBM PC была принята двухбайтовая длина адреса, из-за чего без изменения базы возможна адресация в пределах 64 Кб. Из-за этого быстро загружающиеся программы, полностью подготовленные для выполнения, хранящиеся в файлах с расширением .com, не могли иметь размер больше 64 Кб, а некоторые типы массивов при программировании на языках высокого уровня не могут иметь большие размеры.
Даже из приведенных выше условных примеров программ видно, что программирование в кодах – задача малоприятная. Например, если в готовую программу добавляются некоторые команды, то меняются номера (адреса) команд и данных, из-за чего приходится переправлять почти все команды. Неудобно и то, что команда кодируется числом. Поэтому для облегчения процесса программирования был придуман язык ассемблера. В нем вместо номера команды использовалась его более понятная текстовая аббревиатура, а вместо непонятных и плохо модифицируемых комаров адресов команд – их текстовые обозначения. Написанная на языке ассемблера текстовая программа обрабатывалась программой (компилятором), которая переводила ее в программу в машинных кодах.
Следующим шагом упрощения процесса программирования стал переход к языкам высокого уровня. Используемые в них операторы не соответствуют в явном виде командам конкретного процессора, а представляют из себя конструкции, более понятные и удобные человеку, которые компилятор потом переводит в машинные коды. Это не только значительно ускорило разработку программ, но и позволило переносить программы с компьютеров одной серии на другие.
Опыт показывает, что у большинства программ около 2/3 кода посвящено не анализу данных, а обеспечению взаимодействия с пользователем. Поэтому сильно упрощает программирование используемые в последние годы визуальные среды программирования, в которых элементы вывода на экран не программируются, а фактически рисуются из имеющихся стандартных элементов.
Большим удобством при программировании является то, что новые программы могут использовать уже имеющиеся для выполнения расчетов или иных действий. Например, если кто-то написал и соответствующим образом оформил программу, вычисляющую квадратный корень, то все другие программисты могут не писать аналогичную программу еще раз, а воспользоваться вызовом готовой программы для выполнения нужного действия. Наборы соответствующим образом подготовленных программ называются библиотеками стандартных программ. Операционная система Windows для хранения таких библиотек использует файлы с расширением .dll (динамически загружаемые библиотеки).


Оглавление раздела нижнего уровня
Оглавление раздела верхнего уровня
ОГЛАВЛЕНИЕ ОГЛАВЛЕНИЙ



НА ГЛАВНУЮ СТРАНИЦУ САЙТА


Материалы используются на Едином Образовательном Пространстве Первого московского государственного медуниверситета им. И.М. Сеченова