Рассмотрим процесс создания алгоритма Домик для исполнителя Чертежник методом последовательной детализации. Пусть необходимо нарисовать домик с крышей.
Сначала запишем алгоритм, состоящий из крупных блоков. Такими блоками, содержащими «непонятные» для исполнителя Чертежник команды, являются блоки стена, крыша. Теперь детализируем эти блоки и запишем их в виде вспомогательных алгоритмов, содержащих понятные Чертежнику команды.
Ширина домика: 4
Высота стены: 2
Высота крыши: 1
алг домик нач 1 стена 1 крыша
алг стена нач сместиться в точку опустить перо сместиться в точку сместиться в точку сместиться в точку сместиться в точку поднять перо кон
(0,0)
(0,2) (4,2) (4,0) (0,0)
алг крыша нач
сместиться в точку (0, 2) опустить перо сместиться в точку (2, 3) сместиться в точку (4, 2) сместиться в точку (0, 2) поднять перо кон
В результате мы имеем основной алгоритм (домик), созданный методом последовательной детализации, в который входят как составные части два вспомогательных алгоритма (стена, крыша).
Функциональные узлы процессорах регистры, сумматоры и др.
Процессор должен выполнять команды программы, которые хранятся в оперативной памяти по определенным адресам. В команде указано, какие действия необходимо выполнить над данными, а также адреса данных. Для того чтобы считывать команды и данные из оперативной памяти, а также записывать результаты выполнения команд в оперативную память, внутренняя магистраль процессора должна быть подключена к внешней магистрали системной платы. Подключение внутренней магистрали процессора ко внешней магистрали осуществляется через буферы адреса и данных.
Основным устройством процессора является арифметико-логическое устройство (АЛУ). Именно это устройство выполняет все операции над данными. Таким образом, это устройство должно иметь специальные регистры (команд и данных) для временного хранения поступивших из оперативной памяти команд и данных.
Для того чтобы выполнить команду, процессор должен ее расшифровать (декодировать), т. е. по двоичному коду определить характер и последовательность действий с данными. Значит, в составе АЛУ должно быть декодирующее устройство.
Операции над данными производятся в сумматоре, а результат помещается в специальный регистр, называемый аккумулятором.
В состав процессора входит устройство управления, которое помимо других функций отслеживает последовательность выполнения команд, т. е. в нем имеется счетчик команд (программный счетчик).
Кроме этого, в состав процессора входят регистры общего назначения, представляющие собой совокупность ячеек памяти, предназначенных для временного хранения необходимой процессору информации. Так как регистры общего назначения выполнены непосредственно в БИС процессора, они обладают очень большим быстродействием. В современных процессорах типа Pentium такие регистры образуют кэш-память.
Рассмотрим цикл работы процессора, например, при сложении двух чисел:
1. В результате начального включения или завершения предыдущей команды в программном счетчике устанавливается адрес команды и через буфер передается в шину адреса компьютера.
2. В оперативную память компьютера из устройства управления процессора посылается сигнал «чтение», происходит считывание команды из ячейки с указанным адресом, содержимое ячейки выдается в шину данных компьютера и через буфер данных попадает в регистр команд.
3. Декодирующее устройство расшифровывает код операции, содержащийся в команде, и передает управление сумматору.
4. Сумматор начинает выполнение соответствующих действий и запрашивает из оперативной памяти (или с устройства ввода) находящиеся по указанным адресам данные.
5. Результат выполнения команды помещается в аккумулятор и при необходимости пересылается в определенные ячейки оперативной памяти компьютера.
Билет № 17
Компьютер как формальный исполнитель алгоритмов (программ).
Алгоритм может быть записан на естественном языке, изображен в виде блок-схемы, записан с соблюдением строгих правил синтаксиса на алгоритмическом языке или закодирован на языке программирования. Для того чтобы компьютер мог его выполнить, алгоритм должен быть записан на понятном для компьютера языке.
Устройством, которое обрабатывает информацию в компьютере, является процессор, следовательно, алгоритм должен быть записан на языке, «понятном» для процессора, т. е. должен использовать систему команд процессора. Таким образом, алгоритм должен быть записан на машинном языке, представляющем собой логические последовательности нулей и единиц.
Действительно, вначале, в 50—60 годы, программы писались на машинном языке, т. е. представляли собой очень длинные последовательности нулей и единиц. Однако составление программ на машинном языке было чрезвычайно трудоемким делом.
Для облегчения труда программистов начали создаваться языки программирования, т. е. искусственно созданные языки с несколькими десятками слов (операторов) и строгими правилами синтаксиса, т. е. правилами соединения этих слов в предложения.
Известный всем Бейсик был создан в 1964 году сотрудниками Дартмутского колледжа Дж. Кемени и Т. Курцом. (Название BASIC является аббревиатурой английского названия Beginner's All-purpose Symbolic Instruction Code.) Интересно, что языки программирования развиваются так же, как и естественные, т. е. они обогащаются новыми операторами и новыми возможностями, возникают различные версии языка (QBasic, VisualBasic и др.).
Для того чтобы процессор мог выполнить программу, эта программа и данные, с которыми она работает, должны быть загружены в оперативную память.
Итак, мы создали программу на Бейсике (некоторый текст) и загрузили ее в оперативную память из внешней памяти или с клавиатуры. Теперь мы хотим, чтобы процессор ее выполнил, однако процессор «понимает» команды на машинном языке, а наша программа написана на Бейсике. Как быть? Необходимо, чтобы в оперативной памяти находилась программа переводчик (транслятор), автоматически переводящая с Бейсика на машинный язык.
Ясно, что один и тот же компьютер может «понимать» иQBasic, иTurbo Pascal, и какой-либо другой язык, все зависит от того, транслятор какого языка программирования размещен в оперативной памяти компьютера.
Рассмотрим на простейшем примере (умножение двух чисел) процесс построения алгоритма, его кодирование на языке программирования и выполнение программы. В качестве языка программирования выбран Бейсик, однако это может быть практически любой язык программирования.
Сначала запишем алгоритм на естественном языке. Он является линейным и состоит из трех действий. Затем построим блок-схему данного алгоритма, что позволяет в наглядной форме представить логическую структуру алгоритма и проследить динамику его выполнения. В процессе построения алгоритма особое внимание обратим на то, какие данные вводятся в компьютер и какие выводятся (фиксируются аргументы и результаты алгоритма).
Естественный язык | Блок-схема | Бейсик |
Следующим этапом является кодирование алгоритма на языке программирования (в данном случае Бейсике) и загрузка полученной программы в оперативную память. Оперативная память состоит из отдельных адресуемых ячеек, в которых информация может храниться, записываться и стираться. Каждая ячейка имеет уникальный адрес, и в ней может храниться 1 байт информации. Количество таких ячеек в современных компьютерах велико и соответствует объему памяти, выраженному в байтах. Для памяти 16 Мб оно составляет 16 777216 ячеек.
Программа займет в оперативной памяти определенное количество ячеек в области, отведенной для программ пользователя. Программа будет записана в памяти во внутреннем представлении языка программирования (в данном случае Бейсика), который процессор «не понимает». Для перевода программы на машинный язык, понятный процессору, в памяти должна находиться программа-транслятор с данного языка программирования.
Переход в режим выполнения программы задается соответствующей командой (RUN), процессор последовательно будет считывать из памяти операторы и их выполнять. Выполнение программы «проиграем» на структурной схеме компьютера на конкретном примере (например, умножение чисел 5 и 8).
REM — оператор комментариев; неисполняемый оператор, все, что стоит в строке программы после этого оператора, компьютером игнорируется.
INPUT — оператор ввода значений переменных; процессор отводит в оперативной памяти области (некоторое количество ячеек) и «называет» их именами переменных (А, В) из списка вво'да; запрашивает у пользователя их значения (на экране дисплея появляется знак вопроса ?); пользователь вводит значения переменных с клавиатуры (5,8); процессор записывает эти значения в отведенные области памяти.
LET — оператор присваивания; процессор считывает из памяти значения переменных (А, В), составляющих арифметическое выражение в правой части присваивания; вычисляет значение арифметического выражения (40); отводит в памяти область под переменную, стоящую в левой части присваивания (X); записывает вычисленное значение (40) арифметического выражения в эту область.