КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Реализация структур управления
Реализация процедур read и write. Идея буферизации. Проблемы реализации ввода-вывода. Файлы (как и любая другая структура данных) реализуются в виде двоичной последовательности, либо в последовательности машинных слов, и, как и любая другая структура данных, имеют логическую организацию (формат). Кроме того, файлы имеют специфическую физическую организацию. Так, например, то, что с логической точки зрения является file of integer, физически может представлять последовательность блоков (физических записей), например, по 100 чисел в блоке. Физическая организация. Помимо специфичных для каждого устройства особенностей, центральная проблемой ввода-вывода – существенно более низкая скорость обмена данными внешней памяти по сравнению с внутренней (оперативной). Пути решения этой проблемы за счёт распараллеливания обработки внутренних и внешних данных рассмотрим на примере стандартного Паскаля. В стандартном Паскале read и write – не операторы, но процедуры, реализованные с помощью операторов get и put. С каждым именем файла автоматически связывается переменная со стандартным именем f^, называемая буфером и имеющая для файла file of T тип T, для текстового – char. Оператор get(f) считывает очередную компоненту файла в переменную f^, put(f) записывает в файл содержимое буферной переменной. get(f)~read(f,f^); put(f)~write(f,f^);
read(f,x) ~ x:=f^; get(f); write(f,e) ~ f^:=e; put(f); Кроме того, с обработкой буфера связаны операторы: reset(f), который считывает первую компоненту файла (если есть), close(f) – выводит содержимое буфера в файл. Суть идеи буферизации – распараллелить обмен со внешними носителями на два независимо выполняемые отдельные исполнителя: 1) Быстрый обмен в оперативной памяти;
2) Обмен между буфером и физическим файлом. То есть параллельно с основной программой работает копирование из файла в буфер. Так работают ввод и вывод.
Оставим в нашем мини-Паскале два оператора: оператор присваивания и бинарное присваивание вида y:=[yÅ]x, где Å - одна из базовых операций, к которым мы отнесём арифметические операции: +, *, -, div. В реальности на ещё более низком уровне реализации (микропрограммирование) эти операции не базовые, но реализуются с помощью операций над битами (логические операции, операции сдвига и т.д.). Принцип сведения содержательных операций для нас не нов (пример – сложение столбиком). Очевидно, такого присваивания достаточно для пошагового вычисления любых арифметических выражений. Все структуры управления реализуются с помощью оператора условного перехода: if B then goto M, где М – метка (адрес команды), а В – базовый предикат (= или ¹). Упражнение. Выяснить, являются ли необходимыми операции сравнения. (нет).
if B then S1 else S2 if B then goto M; S2; goto M2 M: S1 M2:
while B do S
M: M N: +
Все остальные циклы и структуры выражаются через while. Очевидно, существует алгоритм (транслятор), осуществляющий автоматический перевод с языка более высокого уровня на язык низкого уровня. Упражнение*. Запрограммировать на мини-Паскале программу вычисления суммы 10 чисел. Упражнение*. Написать алгоритм построения по любой блок-схеме последовательности операторов в мини-Паскале. Задача сложения 10-ти чисел: var a:array[1..10] of integer; begin s:=0; i:=1; while i<=10 do begin s:=s+a[i]; i:=succ(i); end; write(s); end.
goto prog; prog: s:=0; i:= 0; p:=addr(A); i:=1; N: if i>10 then goto M; s:=s+p^; p:=p+cSizeOfInteger; goto N; M: write(s); Замечание: Потеря эффективности. В случае непроцедурного программирования на мини-Паскале мы могли бы сэкономить память (переменная i) и время выполнения за счёт трактовки p как счётчика цикла: if p<10*cSizeOfInteger.
Дата добавления: 2014-01-05; Просмотров: 298; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |