Лекция 8 Программное управление и  программное  обеспечение компьютера.

 

 

Решение задач на компьютере реализуется программным способом, то есть путем выполнения последовательно во времени отдельных операций над информацией, предусмотренных алгоритмом решения задачи.

Алгоритм — это точно определенная последовательность действий, которые необходимо выполнить над исходной информацией, чтобы получить решение задачи.

Понятие алгоритма — одно из важнейших понятий математики, так как назначением математики и является разработка рациональных алгоритмов решения задач. Существует раздел математики — теория алгоритмов, занимающаяся разработкой методов и форм построения алгоритмов решения задач. Алгоритм решения задачи на вычислительной машине — это частный случай математического алгоритма.

Основными свойствами правильно построенного алгоритма являются:

  • результативность — алгоритм должен давать конкретное конструктивное решение, а не указывать на возможность решения вообще;

  • достоверность — алгоритм должен соответствовать сущности задачи и формировать верные, не допускающие неоднозначного толкования решения;

  • реалистичность — возможность реализации алгоритма при заданных ограничениях: временных, программных, аппаратных;

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

  • дискретность — допустимость расчленения алгоритма на отдельные этапы с возможностью последовательной их реализации на машине;

  • экономичность — алгоритм должен обеспечивать необходимую и достаточную точность решения задачи.

Алгоритм должен быть понятен (доступен) пользователю и/или машине. Доступность пользователю означает, что он обязан отображаться посредством конкретных формализованных изобразительных средств, понятных пользователю. В качестве таких изобразительных средств используются следующие способы их записи: словесный, формульный, табличный, операторный, графический, макроязык программирования:

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

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

  • табличный способ подразумевает отображение алгоритма в виде таблиц, использующих аппарат реляционного исчисления и алгебру логики для задания подлежащих исполнению взаимных связей между данными, содержащимися в таблице;

  • операторный способ базируется на использовании для отображения алгоритма условного набора специальных операторов: арифметических, логических, печати, ввода данных и т. д.; операторы снабжаются индексами и между ними указываются необходимые переходы, а сами индексированные операторы описываются чаще всего в табличной форме;

  • графическое отображение алгоритмов в виде блок-схем — самый распространенный способ. Графические символы, отображающие выполняемые процедуры, стандартизованы. Наряду с основными символами используются и вспо­могательные, поясняющие процедуры и связи между ними;

  • алгоритмы могут быть записаны и в виде команд какого-либо языка программирования. Если это макрокоманды, то алгоритм читаем и пользовате­лем-программистом, и вычислительной машиной, имеющей транслятор с со­ответствующего языка.

 

Языки, представляющие алгоритмы в виде последовательности читаемых программистом (не двоично-кодированных) команд, называются алгоритмическими языками. Алгоритмические языки подразделяются на машинно-ориентированные, процедурно-ориентированные и проблемно-ориентированные.

Машинно-ориентированные языки относятся к языкам программирования низкого уровня — программирование на них наиболее трудоемко, но позволяет создавать оптимальные программы, максимально учитывающие функционально-структурные особенности конкретного компьютера. Программы на этих языках, при прочих равных условиях, будут более короткими и быстрыми. Кроме того, знание основ программирования на машинно-ориентированном языке позволяет специалисту подробнейшим образом разобраться с архитектурой компьютера.

Именно последнее в большей степени и обусловливает целесообразность ознакомления с машинно-ориентированным языком, каковым и является язык ассемблер, при изучении вычислительных систем. Большинство команд машинно-ориентированных языков при трансляции (переводе) на машинный (двоичный) язык генерируют одну машинную команду.

Процедурно-ориентированные и проблемно-ориентированные языки относятся к языкам высокого уровня, использующим макрокоманды. Макрокоманда при трансляции генерирует много машинных команд: для процедурно-ориентированной макрокоманды это соотношение в среднем «1 к десяткам машинных команд», а для проблемно-ориентированной команды это «1 к сотням машинных команд». Процедурно-ориентированные языки программирования являются самыми используемыми (Basic, Pascal, С++, PL, ALGOL, COBOL и еще десятки популярных языков). В этом случае программист должен описывать всю процедуру решения задачи, тогда как проблемно-ориентированные языки (их называют также непроцедурными) позволяют лишь формально идентифицировать проблему и указать состав, структуры представления и форматы входной и выходной информации для задачи.

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

Трансляторы бывают двух типов: трансляторы-компиляторы и трансляторы-интерпретаторы.

Компиляторы при трансляции переводят на машинный язык сразу всю программу и затем хранят ее в памяти машины в двоичных кодах.

 Интерпретаторы каждый раз при исполнении программы заново преобразуют в машинные коды каждую макрокоманду и передают ее для непосредственного выполнения компьютеру. В памяти интерпретируемые программы хранятся в виде исходных макрокоманд и поэтому в любой момент читаемы человеком.

Откомпилированные двоично-кодированные программы практически человеком не читаемы. Но их можно вызвать в специальную программу-отладчик (DEBUG и его разновидности), которая переведет эти программы на язык ассемблер, то есть сделает их «человекочитаемыми» (еще один довод в пользу изучения языка ассемблер).

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

Алгоритм решения задачи, заданный в виде последовательности команд на языке вычислительной машины (в кодах машины), называется машинной программой.

Команда машинной программы (иначе, машинная команда) — это элементарная инструкция машине, выполняемая ею автоматически без каких-либо дополнительных указаний и пояснений.

Машинная команда состоит из двух частей: операционной и адресной.

Операционная часть команды (КОП — код операции) — это группа разрядов в команде, предназначенная для представления кода операции машины.

Адресная часть команды (Адреса) — это группа разрядов в команде, в которых записываются коды адреса (адресов) ячеек памяти машины, предназначенных для оперативного хранения информации, или иных объектов, задействованных при выполнении команды. Часто эти адреса называются адресами операндов, то есть чисел, участвующих в операции.

По количеству адресов (al, а2, аЗ, ...), записываемых в команде, команды делятся на безадресные, одно-, двух- и трехадресные.

Безадресная команда содержит только код операции, а информация для нее должна быть заранее помещена в определенные регистры машины.

Наибольшее применение в ПК нашли двухадресные команды.

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

СЛ        0103       5102

Эту команду следует расшифровать так: сложить число, записанное в ячейке 0103 памяти, с числом, записанным в ячейке 5102, а затем результат (то есть сумму) поместить в ячейку 0103.

В кодах машины любая команда содержит только двоичные цифры записанных объектов.

Состав машинных команд

Современные компьютеры автоматически выполняют несколько сотен различных команд. Например, стандартный набор современных ПК IBM PC содержит более 240 машинных команд.

Все машинные команды можно разделить на группы по видам выполняемых операций:

  • операции пересылки информации внутри компьютера;

  • арифметические операции над информацией;

  • логические операции над информацией;

  • операции над строками (текстовой информацией);

  • операции обращения к внешним устройствам компьютера;

  • операции передачи управления;

  • обслуживающие и вспомогательные операции.

Пояснения требуют операции передачи управления (или иначе — ветвления программы), которые служат для изменения естественного порядка выполнения команд. Существуют операции безусловной передачи управления и операции условной передачи управления.

Операции безусловной передачи управления всегда приводят к выполнению после данной команды не следующей по порядку, а той, адрес которой в явном или неявном виде указан в адресной части команды.

Операции условной передачи управления тоже вызывают передачу управления по адресу, указанному в адресной части команды, но только в том случае, если выполняется некоторое заранее оговоренное для этой команды условие. Это условие в явном или неявном виде указано в коде операции команды. Команд условной передачи управления насчитывается обычно до нескольких десятков — по числу используемых условий.

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

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

  • команда передачи управления (ее часто называют командой вызова процедуры или подпрограммы), которая, кроме передачи управления процедуре, еще и запоминает в специальной стековой памяти адрес следующей команды (адрес возврата из процедуры);

  • безадресная команда передачи управления (команда возврата из процедуры) возвращающая управление по запомненному адресу возврата.

Вторая и третья из названных команд безусловных передач управления работают «на пару» — одна передает управление процедуре, другая возвращает из нее. Важную роль в выполнении этих команд передачи управления (да и при многих других ситуациях, отрабатываемых компьютером) играет специальным образом организованная область оперативной памяти — стековая память. Обращение к ячейкам этой памяти выполняется по принципу «последний записанный операнд первым считывается» или иначе «первым вошел — последним вышел» (FILO — first input, last output). Стековая память позволяет удобно реализовать процессы иерархического обращения ко многим процедурам (количество уровней иерархии практически не ограничено), последовательно записывая и выдавая по принципу FILO адреса возврата каждой из них.

Последовательность подготовки и решения задачи на компьютере:

  1. Формулировка и формализованная постановка задачи.

  2. Выбор математической модели и метода решения задачи.

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

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

  5. Ввод программы в компьютер и ее отладка.

  6. Ввод исходных данных и решение задачи на компьютере.

  7. Анализ полученных результатов и выводы по результатам решения.

 Режимы работы компьютеров

Однопрограммные и многопрограммные режимы

Вычислительные машины могут выполнять обработку информации в разных режимах:

  1. однопрограммном (монопольном) режиме;

  2. многопрограммном режиме, который можно подразделить на:

  • режим пакетной обработки информации;

  • режим разделения машинного времени.

Последний, в свою очередь, имеет разновидности:

  • диалоговый режим,

  • режим реального времени.

Однопрограммный режим использования компьютера самый простой, применяется во всех поколениях компьютеров. Из современных машин этот режим чаще всего используется в персональных компьютерах, где он называется реальным режимом работы микропроцессора. В этом режиме все ресурсы ПК передаются одному пользователю. Пользователь сам готовит и машину, и всю необходимую для решения задач информацию, загружает программу и данные, непосредственно наблюдает за ходом решения задачи и выводом результатов. Такой вариант режима называют режимом непосредственного доступа.

Однопрограммный режим имеет и второй вариант — вариант косвенного доступа, при котором пользователь не имеет непосредственного контакта с компьютером. В этом варианте пользователь готовит свое задание и отдает его на машину. Задача запускается в порядке очередности и по мере готовности результаты ее решения выдаются пользователю. Этот вариант, бывший когда-то самым распространенным, сейчас практически, по крайней мере, на персональных компьютерах, не используется. Однопрограммный режим непосредственного доступа весьма удобен для пользователя, но для него характерен чрезвычайно низкий коэффициент загрузки оборудования — временные простои многих устройств машины и в период подготовки задачи для решения, и непосредственно при решении задачи (при вычислениях в процессоре простаивают внешние устройства, при печати простаивают процессор, основная и внешняя память и т. д.). Поэтому даже в современных ПК, для которых характерен именно однопрограммный режим (в силу их «персональное™»), последний в микропроцессорах обогащается многоступенчатой суперконвейерной обработкой данных, использующей некоторые элементы многопрограммности.

 

Рис. 1. Классификация режимов работы компьютеров

 

Многопрограммный (его также называют мультипрограммным, многозадачным, а в ПК и многопользовательским) режим обеспечивает лучшее расходование ресурсов компьютера, но несколько ущемляет интересы пользователя. Для реализации этого режима необходимо, прежде всего, разделение ресурсов машины в пространстве (на множестве устройств компьютера) и во времени. Естественно, такое разделение ресурсов эффективно может выполняться только автоматически, — следовательно, требуется автоматическое управление вычислениями. Автоматическое управление особо необходимо для распределения памяти между несколькими одновременно запускаемыми программами, поскольку программы готовятся пользователями независимо друг от друга, в них не выполняется предварительно статическое распределение памяти (как и других программных и технических ресурсов машины). В процессе решения задач недопустимо одновременное обращение двух программ к одному и тому же файлу, устройству.

Все названные проблемы решают операционные системы, обеспечивающие многопрограммную работу компьютера, помогают им в этом драйверы устройств машины и автозагрузчики (загрузчики) программ.

Важнейшая проблема — защита памяти. Недопустимо несанкционированное, пусть и неодновременное обращение двух программ к одним и тем же областям памяти для изменения информации. Для предотвращения такого несанкциони­рованного случайного доступа к памяти, выделенной для другой задачи, служит специальная система защиты памяти. Важность проблемы защиты памяти под­черкивается тем фактом, что многопрограммный режим работы микропроцессо­ра в ПК обычно называют защищенным режимом.

Простейшим вариантом многопрограммного режима является режим пакетной обработки. Он в максимальной степени обеспечивает загрузку всех ресурсов машины, но наименее удобен пользователю. В классических системах пакетной обработки информации все подлежащие решению задачи анализировались и объединялись в различные группы (пакеты) с тем, чтобы в пределах пакета обеспечивалась равномерная загрузка всех устройств машины. Например, задача, связанная с длительным выводом информации на печать, объединялась с задачей, интенсивно использующей внешнюю память, и с задачей, требующей сложных вычислений в процессоре и т. п. После формирования всех пакетов они по очереди запускались на обработку. Пользователь в этом режиме обращался к машине два раза: первый раз для ввода задания, второй раз для получения результатов — по современной терминологии такой режим относится к режимам группы «offline».

 

В персональных компьютерах, ввиду небольшого количества одновременно решаемых задач, режим пакетной обработки претерпел существенные изменения и сводится по существу к последовательному решению одновременно поступивших задач (пакета задач) в соответствии с их важностью (приоритетностью) и временем поступления. Переход к решению следующей задачи выполняется только после окончательного завершения текущей. Правда, в развитых системах такой пакетной обработки при внезапном поступлении информации по более приоритетной задаче, выполняемая на компьютере менее приоритетная задача уступает свое место (прерывается).

Второй частный случай многопрограммного режима — режим разделения времени характерен тем, что на машине действительно одновременно решается несколько задач, каждой из которых по очереди выделяются кванты времени, обычно недостаточные для полного решения задачи. Условием прерывания решения текущей задачи служит либо истечение кванта выделенного времени, либо обращение к процессору какого-либо приоритетного внешнего устройства, например клавиатуры для ввода информации.

 

Прерывание задачи от клавиатуры является типичным для диалогового режима работы ПК, представляющего собой частный случай режима разделения времени. Диалоговые режимы характерны для многопользовательских систем: они обеспечивают одновременную работу нескольких пользователей при решении задач в интерактивном режиме. В процессе решения задачи пользователь име­ет возможность корректировать ход выполнения своего задания. Диалоговые системы активно используются при совместной работе нескольких пользовате­лей даже с одной программой: формирование и корректировка баз данных, про­грамм, чертежей, схем и документов.

Режим реального времени — еще один вариант режима с разделением машинного времени. Этот режим применяется в основном в динамических системах управления и диагностики, когда строго регламентируется время ответа системы (выполнения задания) на случайно поступающие запросы.

Все режимы разделения машинного времени обеспечивают пользователю работу в режиме «online».

Основная нагрузка при реализации многопрограммных режимов, как уже говорилось, ложится на операционную систему. Все операционные системы обеспечивают выполнение этих режимов. Все современные операционные системы обладают эффективными возможностями, поддерживающими не только многозадачные и многопользовательские режимы с развитой системой приоритетного прерывания, но и многопроцессорность их исполнения, то есть распределение заданий между несколькими микропроцессорами, имеющимися в системе.

Система прерываний программ в ПК

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

Прерывание — это приостановка выполнения в процессоре программы с целью выполнения какой-то более важной или нужной в данный момент другой программы или процедуры, после завершения которой продолжается выполнение прерванной программы с момента ее прерывания. Прерывание позволяет компьютеру приостановить любое свое действие и временно переключиться на другое, как заранее запланированное, так и неожиданное, вызванное непредсказуемой ситуацией в работе машины или ее компонента. Каждое прерывание влечет за собой загрузку определенной программы, предназначенной для обработки воз­никшей ситуации — программы обработки прерывания.

Организация и управление прерываниями функционально во многом смыкается с управлением задачами — одной из базовых функций операционных систем. Основой для управления процессом одновременного решения нескольких задач (равно как и управления прерываниями) являются процедуры:

  1. выбора очередной задачи или определения приоритета задачи;

  2. сохранения информации о статусе задачи при ее прерывании (формирование слова состояния программы);

  3. упреждения и устранения конфликтов между задачами (координации и син­хронизации выполнения задач).

Последовательность действий процессора при реализации прерывания такова. При появлении запроса на прерывание, запланированное заранее или неожиданное, процессор, как правило, после завершения выполнения текущей команды программы анализирует допустимость (разрешенность и приоритетность) данного вида прерывания. Если оно разрешено, процессор производит необходимые действия, диктуемые прерыванием.

Видов (номеров) прерывания может быть всего 256, и, соответственно, векторов прерывания (адресов CS:IP программ обработки прерываний) в ОП насчитывается до 256.  Классификация видов прерываний показана на рис..2.

Рис. 2. Классификация видов прерываний в МП

 

Для приема внешних прерываний имеются порты двух типов: NMI (None Masked Interrupt) для приема немаскируемых прерываний и INTR (Interrupt) — для приема прочих прерываний (INTR обычно используется для подсоединения контроллера прерываний). Если запрос на прерывание поступает по входу NMI, то прерывание не маскируется (имеет абсолютный приоритет) и сразу выполняется; по входу INTR прерывание разрешается, если в регистре флагов МПП флаг IF = 1.

Всего предусмотрено 256 типов (0-255) прерываний. Из них только первые 5 жестко закреплены в МП, остальные используются системами BIOS и DOS.

Тип 0 — прерывание возникает при делении на 0 или если частное от деления переполняет разрядную сетку МП.

Тип 1 — в режиме «трассировка» (при TF = 1) после выполнения каждой команды программы происходит останов.

Тип 2 — немаскируемое техническое прерывание.

Тип 3 — прерывание по команде INT, включенной в программу: останов и отображение содержимого регистров МПП.

Тип 4 — прерывание по команде INTO, включенной в программу, но только если при выполнении предыдущей команды произошло переполнение разрядной сетки.

Типы 8-15 — аппаратные прерывания, инициируемые внешними устройствами, поступают на входы IRQ0-IRQ7 контроллера прерываний (вход IRQ0 имеет высший приоритет, и прерывание, поступившее по этому входу, обрабатывается первым; всего уровней приоритета восемь и вход IRQ7 имеет низший приоритет).

Типы 16-31 — планируемые программные прерывания BIOS.

Типы 32-255 — программные прерывания DOS (жестко задействовано около 10, а вообще в разных версиях DOS их разное количество).

Прерывания с 0 по 31 и прерывание 64 относятся к прерываниям нижнего уровня, обслуживаемым BIOS; прерывания начиная с 32 — являются прерываниями верхнего уровня (за исключением прерывания 64); причем прерыва­ние 33 (21h) — это комплексное, чаще всего используемое в программах пользователя прерывание, имеющее около 100 разновидностей (служебных функций DOS).

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

Пользователь компьютера, равно как и прикладной программист, программы составляет, как правило, на машинно-независимом алгоритмическом языке высокого уровня (Basic, Pascal, FORTRAN, С, PROLOG и т. д.), однако иметь представление об основах программирования и на машинно-ориентированных языках грамотному пользователю весьма полезно для:

  1. лучшего понимания архитектуры ПК и более грамотного использования компь ютеров; для разработки более рациональных структур алгоритмов и программ решения прикладных задач;

  2. возможности просмотра и корректировки исполняемых программ с расширениями ЕХЕ и СОМ, компилированных с любых языков высокого уровня, в случае утраты исходных программ (вызвав указанные программы в отладчик программ DEBUG и деассемблировав их, можно получить их отображение на языке ассемблера);

  3. составления программ решения наиболее ответственных задач (программа, подготовленная на машинно-ориентированном языке, обычно эффективнее (короче и быстрее на 30-60%) программ, полученных в результате трансляции с языков высокого уровня) и для реализации процедур, включаемых в основную программу в виде отдельных фрагментов в том случае, если они не могут быть реализованы ни на используемом языке высокого уровня, ни с помощью служебных процедур операционной системы.

 

Краткие сведения об отладчике программ DEBUG

Программа DEBUG обеспечивает интерактивную отладку программ в формате ЕХЕ- и СОМ-файлов. Обычно он используется для отладки исполняемых программ, полученных с языка уровня ассемблера. Он позволяет отлаживать и исполняемые файлы .ЕХЕ и .СОМ, скомпилированные с языков более высокого уровня.

Отладчик DEBUG умеет:

  • прослеживать выполнение и управлять выполнением программ;

  • вносить изменения в ход выполнения и данные отлаживаемой программы;

  • вводить небольшие программы на языке ассемблер, выполнять ассембли­рование этих программ и создавать исполняемые программы с расширени­ем СОМ;

  • выполнять преобразование машинных шестнадцатеричных кодов команд в формат языка ассемблер (деассемблирование);

  • отображать текстовые файлы в ASCII и шестнадцатеричном формате;

  • просматривать и изменять содержимое регистров памяти МП и ячеек основ­ной памяти;

  • агружать информацию с дисковых накопителей в основную память и наобо­рот (считывать информацию с дисков и записывать на них);

  • осуществлять поиск конкретных данных в текстах сообщений и программ (с выдачей адреса их хранения);

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

Для вызова отладчика DEBUG следует набрать в командной строке DOS слово debug и, если необходимо, имена файлов, с которыми мы будем работать, на­пример: debug prog.exe. Приглашение к вводу команд — «-». После завершения работы с DEBUG для выхода из него следует набрать q. После набора каждой команды следует нажимать Enter.

 

Сайт создан по технологии «Конструктор сайтов e-Publish»