Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.395


Таненбаум Э.- Архитектура компьютера. стр.395

36. В программе, показанной в листинге 6.1, имеет место фатальная гонка, так как два программных потока бесконтрольно обращаются к общим переменным. При этом не задействуются ни семафоры, ни какие-либо другие методики взаимного исключения. Запустите эту программу, и вы увидите, что через некоторое время она зависнет. Если она все же не зависнет, попробуйте сделать код более уязвимым, разместив между операторами корректировки значений m. in и т.out и операторами их проверки какие-нибудь вычисления. Какой объем вычислений нужно ввести в эту программу, чтобы она зависала, скажем, раз в час?

37. Напишите программу для UNIX или Windows ХР, которая на входе получает имя каталога. Программа должна печатать список файлов этого каталога, каждый файл на отдельной строке, а после имени файла — его размер. Имена файлов должны располагаться в том порядке, в котором они располагаются в каталоге. Неиспользованные слоты в каталоги должны выводиться с пометкой (не использован).

Глава 7

Уровень ассемблера

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

Для перевода пользовательских программ с одного языка программирования на другой разработаны специальные программы, которые называются трансляторами. Язык, на котором изначально была написана программа, называется входным, или исходным, языком, а язык, на который она транслируется, — выходным, или целевым. И входной, и выходной языки определяют содержание уровней иерархии. Если имеется процессор, который может выполнять программы, написанные на входном языке, то нет необходимости транслировать исходную программу на другой язык.

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

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

1. Создание эквивалентной программы на выходном языке.

2. Выполнение полученной программы.

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


⇐ Предыдущая страница| |Следующая страница ⇒

.