Студопедия

КАТЕГОРИИ:


Архитектура-(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

S
N: if not B then goto M; S; goto N;

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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.