Программные способы выполнения команд

Исполнение команд

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

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


Рис 1.1. Компоненты компьютера: общая структура

Выборка и исполнение команды

В начале каждого цикла процессор выбирает из памяти команду. Обычно адрес ячейки, из которой нужно извлечь очередную команду, хранится в программном счетчике (PC). Если не указано иное, после извлечения каждой команды процессор увеличивает значение программного счетчика на единицу. Таким образом, команды выполняются в порядке возрастания номеров ячеек памяти, в которых они хранятся. Рассмотрим, например, упрощенный компьютер, в котором каждая команда занимает одно 16-битовое слово памяти. Предположим, что значение программного счетчика установлено равным 300. Это значит, что следующая команда, которую должен извлечь процессор, находится в 300-й ячейке. При успешном завершении цикла команды процессор перейдет к извлечению команд из ячеек 301, 302, 303 и т.д. Однако, как мы вскоре узнаем, эта последовательность может быть изменена.

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

  • Процессор — память. Данные передаются из процессора в память или обратно.
  • Процессор — устройства ввода-вывода. Данные из процессора поступают на периферийное устройство через устройство ввода-вывода. Возможен и обратный процесс.
  • Обработка данных. Процессор выполняет с данными различные арифметические или логические операции.
  • Управление. Команда может задавать изменение последовательности выполнения команд. Например, если процессор извлекает из ячейки 149 команду, которая указывает, что следующей по очереди должна быть исполнена команда из ячейки 182, то процессор устанавливает значение программного счетчика равным 182. Таким образом, в следующем цикле выборки команда извлекается не из ячейки 150, а из ячейки 182.

Для выполнения команды может потребоваться последовательность, состоящая из комбинации вышеперечисленных действий.
Рассмотрим, например, гипотетическую машину, характеристики которой приведены на рис. 1.3. В процессоре имеется один регистр данных, который называется аккумулятором (accumulator — АС). Команды и данные имеют длину 16 бит. В такой ситуации память удобно организовать в виде 16-битовых ячеек, в каждой из которых помещается одно слово. Формат команды предусматривает выделение 4 бит для кода операции. Таким образом, всего может быть 24 = 16 различных кодов операций (их можно представить одной шестнадцатеричной2 цифрой), а адресовать можно до 212 = 4096 (4 К) слов памяти (которые можно представить трехзначным шестнадцатеричным числом).

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

Рис. 1.3. Характеристики гипотетической машины


Рис. 1.4. Пример исполнения программы (содержимое памяти и регистров представлено шестнадцатеричными числами)

  1. Адрес первой команды, хранящейся в программном счетчике, — 300. Эта команда (она представлена шестнадцатеричным числом 1940) загружается в регистр команд (IR), а показание программного счетчика увеличивается на 1. Следует отметить, что в этом процессе участвуют регистры адреса и буфера памяти, однако для упрощения они игнорируются.
  2. Первые 4 бит (первая шестнадцатеричная цифра) регистра команд указы вают на то, что нужно загрузить значение в аккумулятор. Остальные 12 бит (три шестнадцатеричные цифры) указывают адрес 940.
  3. Из ячейки 301 извлекается следующая команда (5941), после чего значение программного счетчика увеличивается на 1.
  4. К содержимому аккумулятора прибавляется содержимое ячейки 941, и результат снова заносится в аккумулятор.
  5. Из ячейки 302 извлекается следующая команда (5941), затем значение программного счетчика увеличивается на 1.
  6. Содержимое аккумулятора заносится в ячейку 941.

Этот пример показывает, что для сложения содержимого ячеек 940 и 941 необходимы три цикла команды. При более сложном наборе команд циклов понадобилось бы меньше. Современные процессоры выполняют команды, в состав которых может входить несколько адресов. При этом во время цикла исполнения некоторых команд иногда выполняется несколько обращений к памяти. Вместо обращений к памяти в команды может быть задана операция ввода-вывода.

Функции ввода-вывода

До сих пор мы рассматривали операции компьютера, управляемые процессором, основное внимание обращая на взаимодействие процессора и памяти. О роли компонентов ввода-вывода было упомянуто лишь вскользь.

Процессор может не только читать данные из памяти и записывать их туда, обращаясь по адресу к определенной ячейке, но также читать и записывать данные в устройство ввода-вывода. Таким образом, устройство ввода-вывода (например, контроллер диска) обменивается данными с процессором. При этом процессор должен идентифицировать устройство, которое будет управляться определенным устройством ввода-вывода. Из команд ввода-вывода можно сформировать такие же последовательности, как показанные на рис. 1.4 последовательности команд обращения к памяти.

Читайте также:  Каковы способы прекращения гражданства кратко

Иногда желательно, чтобы обмен данными с памятью выполнялся непосредственно устройством ввода-вывода, а процессор в это время выполнял другие задания. В этом случае процессор передает устройству ввода-вывода полномочия для чтения из памяти и записи в память, что позволяет освободить процессор. Во время такой передачи данных устройство ввода-вывода читает или записывает команды в память, принимая на себя ответственность за этот обмен. Такой режим, известный под названием прямого доступа к памяти (direct memory access — DMA), рассматривается в следующих разделах этой главы.

Вернуться в оглавление:Операционные системы

Источник

Компьютер как исполнитель команд. Программный принцип работы компьютера. Примеры компьютерных моделей различных процессов. Тестирование программного обеспечения.
план-конспект занятия

Лекция и презентация по теме: Компьютер как исполнитель команд. Программный принцип работы компьютера. Примеры компьютерных моделей различных процессов. Тестирование программного обеспечения.

Скачать:

Вложение Размер
Лекция и презентация по теме: Компьютер как исполнитель команд. Программный принцип работы компьютера. Тестирование ПО 2.12 МБ

Предварительный просмотр:

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

Алгоритм –последовательность действий, описывающая процесс преобразования объекта из начального состояния в конечное, записанная с помощью понятных исполнителю команд.

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

Компьютер, как исполнитель, любую работу выполняет по программе. Программы пишут люди, а компьютер формально их выполняет.

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

Ставится цель превращения компьютера из формального исполнителя в интеллектуального исполнителя.

Работа обоих исполнителей состоит из четырёх блоков, но формальный исполнитель работает по уже готовой программе, а интеллектуальный – сам составляет программу и получает результат.

Информация для компьютера — данные , представленные в форме, приемлемой для её передачи и обработки на компьютере.

Для работы с данными компьютеру необходимы инструкции ( команды , правила действия). Команды формируются в перечень команд.

Алгоритм – это последовательность действий (команд) для достижения цели.

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

Чарльза Беббиджа считают изобретателем компьютера – он впервые соединил механический арифмометр с идеей программного управления.

По своему назначению компьютер – это универсальный прибор для работы с информацией.

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

Первая вычислительная машина, способная хранить программу в своей памяти, разрабатывалась в 1943—1948 гг. в США под руководством Джона Мочли и ПреснераЭкерта.

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

Первый компьютер, в котором были полностью реализованы эти принципы, был построен в 1949 г. английским исследователем Морисом Уилксом. Изменяется элементная база, компьютеры становятся все более и более мощными, но до сих пор большинство из них соответствуют тем принципам, которые изложил в своем докладе в 1945 г. Джон фон Нейман.

Согласно фон Нейману, ЭВМ состоит из следующих основных блоков:

— арифметико-логическое устройство, выполняющее арифметические и логические операции;

— устройство управления, которое организует процесс выполнения программ;

— запоминающее устройство, или память, для хранения программ и данных;

— внешние устройства для ввода-вывода информации.

В современных компьютерах это:

— память (запоминающее устройство — ЗУ), состоящая из перенумерованных ячеек;

— процессор, включающий в себя устройство управления (УУ) и арифметико-логическое устройство (АЛУ);

Эти устройства соединены между собой каналами связи, по которым передается информация.

Функции памяти: — прием информации из других устройств; — запоминание информации; — выдача информации по запросу в другие устройства машины.

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

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

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

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

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

— сумматор — регистр АЛУ, участвующий в выполнении каждой операции;

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

— регистр команд — регистр УУ для хранения кода команды на период времени, необходимый для ее выполнения. Часть его разрядов используется для хранения кода операции, остальные — для хранения кодов адресов операндов.

Компьютер является универсальным исполнителем по обработке информации. Значит, для него, как для любого исполнителя, существует определённая система команд (СКИ). Такая система команд для компьютера называется языком машинных команд (ЯМК)

Программа для компьютера – это алгоритм, разработанный на ЯМК. Или, Программа управления компьютером – это последовательность команд ЯМК, где каждая команда – директива для процессора на выполнение определённого действия.

Рассмотрим этапы выполнения программы.

Согласно принципам Джона фон Неймана, программа во время её исполнения и данные, которые она обрабатывает, находятся в оперативной памяти (принцип хранимой в памяти программы). Процессор исполняет программу начиная с первой команды и заканчивая последней.

— Какое основное свойство оперативной памяти? ( энергозависимость, работает с данными, активными в текущий момент времени)

Какие есть особенности в восприятии информации человеком и компьютером? ( человек воспринимает информацию с помощью органов чувств, в виде знаков и сигналов, а компьютер воспринимает информацию в виде цифр (0 и 1).)

— Как сделать так, чтобы программа, написанная человеком была понятна компьютеру? (нужен способ перевода)

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

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

Сначала программисты, работавшие на компьютерах первого поколения (50-е – 60-е г.г.), составляли программы на ЯМК (в двоичных кодах), но это довольно сложная работа, поэтому для облегчения программирования были созданы языки программирования высокого уровня (ЯПВУ) — это искусственно созданные языки с несколькими десятками слов (операторов) и строгими правилами синтаксиса. Составление программ на ЯПВУ намного проще. Примеры ЯПВУ: Фортран, Паскаль, Бейсик, Си и др.

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

Таким образом, цепочка событий от составления программы на ЯПВУ до получения результатов решения задачи выглядит так

Человек всегда должен понимать ограниченность возможность компьютера как исполнителя, необходимость предусмотреть все тонкости команд, поручаемых компьютеру. Человек разрабатывает алгоритм, записывает его на ЯПВУ и анализирует результаты выполнения программы.

Компьютер является формальным исполнителем программ.

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

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

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

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

Теперь рассмотрим следующий вопрос: тестирование программного обеспечения.

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

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

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

В начале 1970-х годов тестирование программного обеспечения обозначалось как «процесс, направленный на демонстрацию корректности продукта» или как «деятельность по подтверждению правильности работы программного обеспечения». В зарождавшейся программной инженерии верификация ПО значилась как «доказательство правильности». Хотя концепция была теоретически перспективной, на практике она требовала много времени и была недостаточно всеобъемлющей. Было решено, что доказательство правильности — неэффективный метод тестирования программного обеспечения. Однако, в некоторых случаях демонстрация правильной работы используется и в наши дни, например, приёмо-сдаточные испытания. Во второй половине 1970-х тестирование представлялось как выполнение программы с намерением найти ошибки, а не доказать, что она работает. Успешный тест — это тест, который обнаруживает ранее неизвестные проблемы. Данный подход прямо противоположен предыдущему. Указанные два определения представляют собой «парадокс тестирования», в основе которого лежат два противоположных утверждения: с одной стороны, тестирование позволяет убедиться, что продукт работает хорошо, а с другой — выявляет ошибки в программах, показывая, что продукт не работает. Вторая цель тестирования является более продуктивной с точки зрения улучшения качества, так как не позволяет игнорировать недостатки программного обеспечения.

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

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

Классификации видов и методов тестирования

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

По объекту тестирования:

По знанию внутреннего строения системы:

По степени автоматизации:

По степени изолированности:

По времени проведения тестирования:

По признаку позитивности сценариев:

По степени подготовленности к тестированию:

  1. Тестирование по документации (формальное тестирование)
  2. Интуитивное тестирование ( англ. adhoctesting ).
  1. Тестирование компонентов — тестируется минимально возможный для тестирования компонент, например, отдельный класс или функция. Часто тестирование компонентов осуществляется разработчиками программного обеспечения.
  2. Интеграционное тестирование — тестируются интерфейсы между компонентами, подсистемами или системами. При наличии резерва времени на данной стадии тестирование ведётся итерационно, с постепенным подключением последующих подсистем.
  3. Системное тестирование — тестируется интегрированная система на её соответствие требованиям .
  1. Альфа-тестирование — имитация реальной работы с системой штатными разработчиками , либо реальная работа с системой потенциальными пользователями/заказчиком. Чаще всего альфа-тестирование проводится на ранней стадии разработки продукта, но в некоторых случаях может применяться для законченного продукта в качестве внутреннего приёмочного тестирования. Иногда альфа-тестирование выполняется под отладчиком или с использованием окружения, которое помогает быстро выявлять найденные ошибки. Обнаруженные ошибки могут быть переданы тестировщикам для дополнительного исследования в окружении, подобном тому, в котором будет использоваться программа.
  2. Бета-тестирование — в некоторых случаях выполняется распространение предварительной версии (в случае проприетарного программного обеспечения иногда с ограничениями по функциональности или времени работы) для некоторой большей группы лиц с тем, чтобы убедиться, что продукт содержит достаточно мало ошибок. Иногда бета-тестирование выполняется для того, чтобы получить обратную связь о продукте от его будущих пользователей.

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

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

В зависимости от доступа разработчика тестов к исходному коду тестируемой программы различают «тестирование (по стратегии) белого ящика» и «тестирование (по стратегии) чёрного ящика».

Тестирование «белого ящика», «чёрного ящика» и «серого ящика»

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

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

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

Если «альфа-» и «бета-тестирование» относятся к стадиям до выпуска продукта (а также, неявно, к объёму тестирующего сообщества и ограничениям на методы тестирования), тестирование «белого ящика» и «чёрного ящика» имеет отношение к способам, которыми тестировщик достигает цели.

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

  1. конспект темы.
  2. Краткое сообщение об одном из видов тестирования.

Источник

Читайте также:  Руководство по определению гидрографических характеристик картометрическим способом
Оцените статью
Разные способы