Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_ГОС_2007.doc
Скачиваний:
72
Добавлен:
10.02.2016
Размер:
3.91 Mб
Скачать

3. Классификация операций. Форматы представления команд и данных. 4-, 3-, 2-, 1-, и нуль-адресные команды

Формат команды четырехадресной машины:

Здесь КОП- код той операции, которая должна быть выполнена, А1 – адрес первого операнда, А2 – адрес второго операнда, А3 – адрес результата, А4 – адрес следующей команды.

Достоинства: - указываются адреса всех составляющих операции и результата сохраняется отдельно от операндов.

Недостатки: длинная команда.

Формат команды трехадресной машины.

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

Т.о. появляется естественная адресация.

Формат команды двухадресной машины.

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

Формат команды одноадресной машины.

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

Формат команды безадресной машины.

КОП

Машина со стековой организацией памяти.

Чем короче команда, тем меньше памяти занимает программа.

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

Непосредственная – операнд указывается непосредственно в команде

КОП операнд

Операнд (байт или слово) может иметь любой смысл (число, адрес, кодASCII)

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

Косвенная адресация – в формате команды указывается глубина косвенности и адрес, который указывает на область памяти, в которой записан другой адрес. Этот адрес может быть адресом операнда, а может указывать на еще один адрес (зависит от глубины косвенности). Существуют машины у которых глубина косвенности неограниченная величина. Для этого вводится бит, который равен 1 если это адрес адреса и становится 0, если это адрес операнда.

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

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

Индексная (базово-индексная) адресация.

Исполнительный адрес вычисляется следующим образом:

Аисполнит = А + [X] , здесь Х – номер индексного регистра, А – адрес начала массива.

Используется для работы с массивами.

5. Относительная страничная и сегментная адресация. Перемещение программ и данных в операционной памяти машины.

Страничная адресация.

Весь объем памяти делится на непересекающиеся страницы. Минимальный размер страницы должен быть такой, чтобы не ней поместилось минимум 2 команды. Регистр адреса ОП (РАОП) делится на две части: первая – номер страницы, второй – адрес внутри страницы. Исполнительный адрес в этом случае: Аисп = NстрАдр.в_стр. Выигрыш в скорости адресации и в том, что адресуем, например, 1 Мб, имея 1 Кб.

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

Чтобы сократить размеры команд, поступают следующим образом: память условно делят на участки, которые называют сегментами. Начальные адреса сегментов (эти адреса называют базами ) могут быть любыми, но на длины сегментов накладывается ограничение: размер любого сегмента не должен превосходить, скажем, 2m ячеек, где m<k. В этих условиях, адрес А любой ячейки памяти можно представить в виде суммы А=В+ofs, где B – это база сегмента, к которому относится ячейка А, ofs – смещение или относительный адрес ячейки, то есть адрес, отсчитаный от начала сегмента, от адреса B. Ограничение размера сегмента означает, что 0<=ofs<=2m-1, и поэтому, для записи смещений достаточно m разрядов. Следовательно , в сумме A=B+ofs большая часть адреса А приходится на базу В, а ofs – это лишь небольшой добавок. Учитывая это поступаем следующим образом , если в команде нужно указать абсолютный адрес А, то большее слагаемое В – 'упрятываем 'в некоторый регистр R, а в команде указываем лишь этот регистр и меньшее слагаемое ofs, то есть вместо команды: КОП...А..... используем команду КОП....ofs, это дает то, что поскольку, команда работает с исполнительным адресом, который вычисляется по формуле: [R]+ofs=B+ofs=A, то эта команда будет работать с нужным нам адресом А. С другой стороны, поля R и ofs занимают мало места в команде, поэтому размер команды уменьшится – по сравнению с тем случаем, когда в команде указывается абсолютный адрес. Нужно отметить, что записав попутно в регистр R базу сегмента, далее можно не меняя значение этого регистра, использовать его для доступа ко всем ячейкам данного сегмента, и если данные программы располагаются в памяти компактно, засылок баз в регистры будет немного. Регистры в которых хранятся базы принято называть базовыми регистрами, а способ записи в командах не абсолютных адресов, а базовых регистров и смещений, называется базированием адресов. Такова общая схема базирования адресов, используемая во многих ЭВМ.

6. Операции перехода и ветвления, их реализация

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

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

Команда безусловного перехода JMP может использоваться в 5 разновидностях:

Переход может быть :

  • прямым коротким(в пределах –128 ... +127 байтов);

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

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

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

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

  1. Прямой переход

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

JMP <метка>

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

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

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

JMP SHORT L

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

2.Косвенный переход

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

JMP r16 или JMP m16

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

Команды условного перехода

Если переход осуществляется только при выполнении некоторого условия и не осуществляется в противном случае, то такой переход называется условным. Условный переход реализуется в 2 шага : сначала сравниваются некоторые величины, в результате чего соответствующим образом формируются флаги(ZF,SF и другие), а затем выполняется собственно условный переход.

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

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

Е – равно;

N – не ;

G – для чисел со знаками(больше);

L – для чисел со знаками(меньше);

A – для чисел без знака(выше, больше);

B – для чисел без знака(ниже , меньше);

Пример : JNE ,JNZ.

7. Операции обращения к подпрограммам. Способы организации подпрограмм. Организация динамического распределения памяти для подпрограмм и их данных.

Довольно часто в программах, а особенно больших приходится решать одну и ту же подзадачу, и поэтому многократно выписывать одинаковую группу команд, решающих эту подзадачу, для того чтобы избежать повторного выписывания такой группы команд, ее обычно выписывают один раз и оформляют соответствующим образом, а затем в нужных местах программы, просто передают управление на эти команды, которые поработав, возвращают управление обратно. Такая группа команд, которая решает некоторую подзадачу и которая организована таким образом, что ее можно использовать любое число раз и из любых мест, называется подпрограммой. По отношению к подпрограмме остальную часть программы принято называть основной программой. Подпрограммы – это аналог процедур из языков высокого уровня, а сама подпрограмма – это аналог описания процедуры, а обращение к подпрограмме – это аналог оператора процедуры. Однако реализация подпрограмм на языке ассемблера – вещь более сложная , чем описание процедур на языках высокого уровня. Первая проблема – это где размещать подпрограмму? Вообще , можно где угодно, но при этом надо понимать, что сама по себе подпрограмма не должна выполнятся, а может выполнятся лишь тогда, когда к ней обратятся, поэтому размещать ее нужно так, чтобы на нее случайно не попадало управление. Если имеется несколько подпрограмм, то их обычно размещают рядом. Обычно подпрограммы размещают либо в конце сегмента команд за командой FINISH(1), либо в самом начале этого сегмента, перед той командой, с которой должно начинаться выполнение программы(2), в больших программах подпрограммы нередко размещают в отдельном сегменте команд(3).

C SEGMENT C SEGMENT С1 SEGMENT

BEG: .......П/П П/П

.................

FINISH BEG:................... C1 ENDS

............................... C SEGMENT

П/П ............................... BEG: ............

C ENDS .......................

С ENDS END BEG C ENDS

END BEG END BEG

(1) (2) (3)

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

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

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

<имя процедуры>PROC <параметры>

<тело процедуры>

<имя процедуры> ENDP

Как видно, перед телом процедуры(ее командами) ставится директива PROC(procedure), а за ним – директива ENDP(end of procedure), в обеих этих директивах указывается одно и тоже имя – имя , которое дано подпрограмме , процедуре. Следует обратить внимание, что в директиве PROC после имени не ставится двоеточие(как в других директивах), однако это имя считается меткой, считается, что оно метит первую команду процедуры, например, имя процедуры можно указать в команде перехода и тогда будет осуществляться переход на первую команду процдуры. У директивы PROC есть параметр – это либо NEAR(близкий), либо FAR(дальний). При параметре NEAR или при отсутствии параметра , процедура называется 'близкой', а при параметре FAR – ‘дальней’. К близкой процедуре можно обращаться только из того сегмента команд, где она описана, и нельзя обращаться из других сегментов. К дальней процедуре можно обращаться из любых сегментов команд( в том числе и из того, где она описана),в этом и заключается различие между дальними и близкими процедурами. Отметим, что в ассемблере имена и метки, описанные в процедуре не локализуются внутри ее, поэтому они должны быть уникальными, не должны совпадать с другими именами, используемыми в программе.

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

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

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

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

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

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

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

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

  1. Прямой ближний вызов.

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

2.Прямой дальний вызов.

Процедура – подпрограмма находится в другом сегменте команд той же программы. В коде команды dddd обозначает относительный адрес точки входа в подпрограмму в ее сегменте команд, а ssss – ее сегментный адрес. При выполнении команды CALL процессор помещает в стек сначала сегментный адрес вызывающей программы, а затем адрес возврата (содержимое IP). Поскольку процедура подпрограмма атрибутом FAR объявлена дальней, команда RET имеет код, отличный от кода аналогичной команды ближней процедуры и выполняется по-другому. Из стека извлекаются 2 верхних слова и переносятся в IP и CS , чем осуществляется возврат в вызывающую программу, находящуюся в другом сегменте кода. Вместо того , чтобы объявлять процедуру дальней, можно вместо команды RET указать в явной форме команду дальнего возврата из подпрограммы RETF.

3.Косвенный ближний вызов.

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

4.Косвенный дальний вызов

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

8.Виртуальная память. Страничная организация виртуальной памяти. Алгоритмы обращения к памяти.

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

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

Старшие разряды этого адреса – это номер виртуальной страницы, а младшие – это номер слова на виртуальной странице.

Можно создать виртуальную память , в которой все ячейки 48 разрядные. При такой разрядности понадобится 1000 лет для того чтобы заполнить эту память , если создавать по 103 переменных в секунду. Такая память используется для защиты данных, так как любая переменная в такой памяти – уникальна.

Страничная организация памяти практически не зависит от физической организации. При такой организации будем считать, что память состоит из физических страниц, тогда старшие 10 разрядов адреса – это адрес страницы, а 10 младших – это номер в странице(т.е. N слова). Таким образом, вся память разбивается на физические страницы, так как это физический адрес. Первые 1024 страницы располагаем в ОП, а последующие располагаем на внешних запоминающих устройствах, например на диске. таким образом диск оказывается разбитым на какое-либо количество страниц, которые нумеруются, затем – следующий диск и т.д. При этом, страницы с младшими номерами оказываются в ОП. Когда какая-либо информация вводится в память(через устройство ввода или через процессор – это не важно), то ,то что вводится разбивается на виртуальные страницы. Эти виртуальные страницы записываются на любые физические страницы, при записи создается таблица соответствий, в которой запоминаются, собственно соответствия, например, первая виртуальная страница на 20 физической.

Номер виртуальной страницы

Номер физической страницы

1

2

....

20

56

...

Nвиртуальной страницы

Nслова

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

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

  1. Это можно организовать в ЗУ:

NсловаNФЯ

Nв стр в стр

Чт

где Nв стр. иNслова служат адресом.

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

ВсNслова

Nв страницы

N ФА

0

1

2

n

нет

ФА

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

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

  1. есть свободная или нет;

  2. отбросить все, к которым не было обращения(они не понадобятся);

  3. выбрать из оставшихся страниц те, в которых не было записи, так как ее можно не переписывать обратно во внешнюю память.

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

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

Имеются 2 таблицы соответствия. Одна хранится в специальной ассоциативной памяти и имеет вид:

Nв.стр.

Признак ВА ФА Nслова

АЗУ ФА

нет

Если не оказывается в ОЗУ нужной страницы, то сигнал 'нет' активизирует прерывание, программа пользователя снимается, так как она не может дальше выполнятся и загружается программа ОС, которая решает что делать дальше. Пока идет перепись из ВП в ОЗУ, ЦП ничего не делает, поэтому его можно загрузить другой задачей. Когда перепись закончена, то вызывается ОС, которая передает управление прерванной программе. С точки зрения пользователя может показаться, что перезаписи теряется производительность, но если задача написана на языке параллельного микропрограммирования, то при приостановке одной части программы из-за того, что нет требуемой виртуальной страницы в памяти, ОС передает управление другой части той же программы, таким образом создается иллюзия высокой производительности(даже при однопроцессорной организации). Однако будут перерывы на работу ОС, если она организованна программно, поэтому в больших вычислительных системах ОС реализуются аппаратно. Существуют и другие способы создания того, что существует большая память. Используют системы, способные выполнить одновременно большое количество программ. Здесь особенность заключается в том, что каждая программа независима одна от другой и транслируется отдельно, а также имеет свою отдельную область в памяти, таким образом, одна программа не может обратится к области данных другой программы. В процессоре ставят специальный регистр, каждый раз, когда процессор обращается к памяти, он пересылает не только виртуальный адрес, но и номер программы, которая идет ,то есть задача ассоциативной памяти заключается в том, чтобы найти строчку о номере программы., то есть к виртуальному адресу приписываются дополнительные разряды, которые являются номером программы. Поэтому одна программа не может обратится к области данных другой программы, так как номера их разные. Расширение заключается в том, что каждой программе выделяется свой сегмент в памяти, и номер этого сегмента играет роль номера программы, но сегменты могут пересекаться, и тогда они будут иметь общую часть, к которой могут обращаться обе программы. Если двум или нескольким программам выделен один и тот же сегмент, то они могут обмениваться данными через него. Эта идея сегментации позволяет либо установить связь между программами, либо как-то изолировать их друг от друга.

9. Самоопределяемые данные. Теги и дескрипторы. Назначение и их применение.

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

Если сравнивать организацию Неймана и теговую организацию памяти, то: в первом случае на этапе выполнения для каждого типа данных выполняется своя команда; при теговой организации на этапе выполнения выполняется следующее: читается команда; дешифрируется КОП; вычисляются адреса операндов; анализируется тег 1-го операнда; анализируется тег 2-го операнда; выполняется, например, операция сложения чисел с фиксированной точкой , если в тегах указано, что операнды с фиксированной точкой.

Достоинства машин с теговой организацией памяти.

  1. Расширенные возможности обнаружения ошибок. На этапе выполнения процессор реагирует на:

  • бессмысленные операнды

  • несовместимые операнды

  • неопределенные операнды

  1. Автоматическое преобразование данных. Если данные совместимы, то на этапе выполнения на аппаратном уровне происходит преобразование

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

  3. Меньшее разнообразие команд - команда не говорит о типе данных

  4. Более простой компилятор - часть процесса компиляции перекладывается на микропрограммный уровень на этап выполнения.

  5. Возможность создания более совершенных средств отладки.

  6. Независимость программных средств от обрабатываемых данных

  7. Уменьшение необходимого объема памяти.

Недостатки теговой организации:

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

  2. Ограничения, накладываемые на скорость выполнения операции, что связано с откладыванием процесса привязки атрибутов операндов на этап выполнения, вместо того, сделать это при компиляции 1 раз.