Главная » Все файлы » Просмотр файлов из архивов » Документы » В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования

В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования.doc), страница 34

2019-04-28СтудИзба

Описание файла

Документ из архива "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования.doc", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования"

Текст 34 страницы из документа "В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования"

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

add al,[bx]

sub X,al

inc bx

inc di

Для второй команды этого фрагмента нельзя выполнять операцию вычитания, пока первая команда фрагмента не запишет в al свой результат, т.е. не сойдёт с конвейера. Таким образом, вторая команды будет задержана на третьей позиции конвейера (на четвёртой позиции уже надо читать операнд al, а от ещё не готов). Вместе со второй командой из нашего примера остановится и выполнение следующих за ней команд и на конвейере образуются два "пустых места". Ясно, что скорость выполнения всей программы может при этом сильно упасть. Зная такую особенность работы конвейера центрального процессора "умный" компилятор может изменить порядок команд в машинной программе, получив, например, такой эквивалентный фрагмент: 81

add al,[bx]

inc bx

inc di

sub X,al

Здесь, как легко увидеть, конвейер уже не быдет пустовать. Другая неприятность случается, когда на конвейер поступает команда условного перехода. Будет ли после выполнения этой команды производится переход, или же продолжится последовательное выполнение команд, выяснится только тогда, когда команда условного перехода сойдёт с конвейера. Так спрашивается, из какой же ветви программы выбирать на конвейер следующую команду?

Обычно при конструировании конвейера принимается какое-либо одно из двух решений. Во-первых, можно выбирать команды из наиболее вероятной ветви условного оператора (например, очевидно, что для команды цикла loop повторение тела цикла значительно более вероятно, чем выход из цикла). Во-вторых, можно поочерёдно выбирать на конвейер команды из обеих ветвей (разумеется, в этом случае половина команд будет выполняться зря и их "недоделанными" придётся выбросить с конвейера).

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

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

15.2. ЭВМ различной архитектуры.

Отметим сейчас важное обстоятельство. До сих пор мы изучали, в основном, архитектуру центральной части компьютера, – центрального процессора и оперативной памяти. Практически не рассматривалась архитектура ЭВМ в целом, способы взаимодействия центральной части компьютера с периферийными устройствами, способы управления устройствами ввода/вывода центральным процессором. Такое "однобокое" изучение архитектуры ЭВМ имело свою причину. Дело в том, что, несмотря на большое разнообразие архитектур центральных процессоров современных ЭВМ, различие в этих архитектурах всё же значительно меньше, чем в архитектурах компьютеров в целом.

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

15.2.1. Архитектура ЭВМ с общей шиной.

Эта архитектура была разработана, когда появилась необходимость в массовом производстве относительно простых компьютеров (их тогда называли мини- и микро- ЭВМ [11]). Основой архитектуры этого класса ЭВМ была, как можно легко догадаться из названия, общая шина. В первом приближении общую шину можно представить себе как набор электрических проводов (линий), снабженных некоторыми электронными схемами. В современных ЭВМ число линий в такой шине обычно порядка сотни. Все устройства компьютера в архитектуре с общей шиной соединяются между собой посредством подключения к такому общему для них набору электрических проводов – шине. На рис. 15.2 показана схема соединения устройств компьютера с помощью общей шины.

В
этой архитектуре шина исполняет роль главного элемента, связующей магистрали, по которой производится обмен информацией между всеми остальными устройствами ЭВМ. Легко понять, что, так как обмен информацией производится по шине с помощью электрических сигналов, то в каждый момент времени только два устройства могут выполнять такой обмен. Обычно одно из этих устройств является ведущим (инициатором обмена данными), а другое – подчинённым (ведомым). Все устройства связаны с общей шиной посредством специальных электронных схем, которые называются портами ввода/вывода. Каждый порт имеет на шине уникальный номер (в нашей архитектуре этот номер имеет формат i16). Обычно у каждого устройства не один порт, а несколько, так как они специализированные: по некоторым портам устройство может читать данные с шины, по другим – записывать (передавать) данные в шину, а есть и универсальные порты, как для чтения, так и для записи.

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

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

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

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

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

out op1,op2

Здесь операнд op1 определяет номер нужного порта и может иметь формат i8 (если номер порта небольшой и известен заранее) или быть регистром dx (если номер большой или становится известным только в процессе счёта программы). Второй операнд op2 должен задаваться регистрами al (если производится обмен байтом) или ax (если производится обмен словом).

Для чтения данных из порта служит команда

in op1,op2

Здесь уже второй операнд op2 определяет номер нужного порта и может иметь, как и в предыдущей команде, формат i8 или быть регистром dx. Первый операнд op1 должен задаваться регистрами al (если производится обмен байтом) или ax (если производится обмен словом). Далее мы рассмотрим небольшой пример использования этих команд.

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

  • Конечный пользователь. Пользователь-непрограммист бухгалтер Иванов уверен, что в ком­пьютере есть команда "Распечатать ведомость", так как именно это происходит каждый раз, когда он нажимает на кнопку меню "Печать ведомости".

  • Прикладной программист. Программист Петров, который написал бухгалтерскую программу на языке Паскаль, только улыбнётся наивности Иванова. Уж он то точно знает, что даже для того, чтобы вывести только один, например, символ 'A', надо написать оператор стандартной процедуры Write('A') . Правда Петрову известно, что на самом деле его программа сначала переводится (транслируется) на машинный язык, поэтому он из любопытства поинтересовался у программиста на Ассемблере Сидорова, что тот напишет, чтобы вывести символ 'A'. Сидоров ответил, что обычно для этой цели он пишет предложение Ассемблера  outch 'A' . Разница между этими двумя способами вывода символа показалась Петрову несущественной, например он читал о том, что, например, в языке С для этой же цели надо вызвать библиотечную функцию  printf("%c",'A'); .83

  • Программист на Ассемблере. Сидоров, однако, знает, что предложение outch 'A' является не командой машины, а макрокомандой, на её место макропроцессор подставит макрорасширение, например, такого вида

mov dl,'A'

mov ah,02h

int 21h

Вот этот, как говорят, системный вызов и будет, с точки зрения Сидорова, выводить символ 'A' на стандартное устройство вывода.

  • Системный программист. Системный программист (раньше иногда говорили системный ана­литик) Антонов, однако снисходительно пояснит Сидорову, что системный вызов – это просто переход на служебную процедуру-обработчик прерывания с номером 21h. А уж эта процедура и произведёт на самом деле вывод символа, используя, в частности, специальные команды обмена с внешними устройствами in и out.

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

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

Разберём теперь простой пример реализации операции ввода/вывода на уровне системного программиста. Оставим в стороне пользователя-непрограммиста (он нам сейчас неинтересен) и рассмотрим, например, операцию позицирования курсора на экране компьютера в позицию (X,Y).

Для прикладного программиста, как Вы знаете, для этой цели надо выполнить, например, оператор стандартный процедуры Турбо-Паскаля GotoXY(X,Y) . Для программиста на Ассемблере позицирование курсора можно выполнить с использованием такого системного вызова:

mov ah,2

mov bl,0

mov dl,X

mov dh,Y

int 10h

Как видим, параметры позицирования X и Y передаются в регистрах dl и dh. Системный вызов  int 10h может выполнять различные операции с экраном компьютера, в зависимости от своих параметров, передаваемых ему на регистрах. Рассмотрим (в сильно упрощённом виде) тот фрагмент процедуры-обработчика системного вызова, который выполняет запрос на позицирование курсора.84

Во-первых, нам необходимо понять, а как вообще дисплей (точнее, электронная схема – контроллер дисплея) "знает", куда необходимо в каждый момент времени поставить курсор. Оказывается, что у контроллера дисплея, как, впрочем, и у любого другого периферийного устройства, есть свои регистры. Нас будут интересовать регистры дисплея с номерами 14 и 15 (обозначим их R14 и R15), каждый из них имеет размер 8 бит, но их совокупность может хранить длинное целое число, как показано ниже

16 бит

R14

R15

Далее, дисплей "считает",85 что его экран имеет не 25 строк и 80 столбцов, как думают программисты, а 25*80 знакомест, в каждое из которых можно вывести один символ и поставить курсор. Знакоместа в первой строке экрана нумеруются не от 1 до 80, а от 0 до 79, во второй – от 80 до 159 и т.д. Другими словами, все позиции экрана расмматриваются как одномерный массив. Так вот, чтобы курсор переместился в нужную нам позицию (X,Y) в пару регистров <R14,R15> необходимо записать число

80*(Y-1)+(X-1)

Следовательно, сначала прецедуре-обработчику прерывания необходимо вычислить это число, используя параметры X и Y из системного вызова:

mov al,80

dec dh; Y-1

mul dh; ax:=80*(Y-1)

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5259
Авторов
на СтудИзбе
421
Средний доход
с одного платного файла
Обучение Подробнее