Какая информация содержится в команде программы

Какая информация содержится в команде программы thumbnail
Студопедия

КАТЕГОРИИ:

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

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

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

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

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

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

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

Читайте также:  В каких продуктах содержатся углеводы медленные

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

¨ текущая программа задерживается на очередной команде и переходит в пассивное состояние;

¨ окружение текущей программы, включая значения всех регистров процессора, временно сохраняются где-нибудь в оперативной памяти;

¨ в оперативной памяти отыскивается незанятый участок, достаточный для размещения подпрограммы, и нужная подпрограмма переписывается на этот участок;

¨ создается окружение подпрограммы, оно становится текущим для процессора, заполняются необходимыми данными регистры процессора;

¨ управление передается подпрограмме, для чего в адресный регистр просто записывается адрес первой команды программы;

¨ когда подпрограмма заканчивает свою работу, восстанавливается окружение и значения регистров программы, вызвавшей данную подпрограмму;

¨ место подпрограммы в оперативной памяти освобождается, то есть считается впредь незанятым;

¨ программа продолжает работать с той команды, на которой она остановилась.

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

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

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

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

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

Читайте также:  Какие микроэлементы содержатся в инжире

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

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

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

Контрольные вопросы по теме.

1. Какие функции выполняет оперативная память?

2. Что такое адрес оперативной памяти?

3. Какие функции выполняет процессор?

4. Какую роль в компьютере выполняют порты ввода-вывода?

5. Для чего нужна шина адреса?

6. Как процессор выполняет машинную команду?

7. Как процессор узнает очередность выполнения команд?

8. Каковы причины разбиения программ на подпрограммы?

9. Для чего нужны прерывания?

10. Что такое мультизадачность?

11. Что означает функция управления памятью?

Дата добавления: 2014-10-17; Просмотров: 1665; Нарушение авторских прав?

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

Рекомендуемые страницы:

Источник

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

«Алгоритм — это конечный набор правил, который определяет
последовательность операций для решения конкретного множества задач и обладает
пятью важными чертами: конечность, определённость, ввод, вывод, эффективность».
(Д. Э. Кнут)

«Алгоритм — это точное предписание, определяющее вычислительный
процесс, идущий от варьируемых исходных данных к искомому результату». (А. Марков).



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

рис.1.1. Структурная схема
компьютерной программы

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

·       
прежде всего, программа работает не с
пользователем, а с данными. Эта
первая и основная компонента программы – предметы (объекты), над которыми
реализуется алгоритм. Данные состоят из отдельных переменных, связанных как между собой непосредственно (через
указатели), так и косвенно (как входные данные – результат);

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

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

·       
вторая основная компонента программы – описание
порядка, последовательности выполняемых действий, также называется алгоритмом «в узком смысле», или
алгоритмической компонентой. Она обычно состоит из двух частей. Первая часть – выражения, представляет собой описание
линейной последовательности выполнения простейших действий из набора операций
(арифметические операции, присваивание, условные выражения). Они включаются во
вторую компоненту – операторы, которые
задают ту или иную последовательность действий;

Читайте также:  Где содержится жиры в каких продуктах таблица

·       
как уже отмечалось, программа работает
исключительно с данными, что и определяет сущность алгоритма. В наборе операций
имеются команды ввода-вывода, осуществляющие обмен данными между переменными и
внешней средой (посредством устройств ввода-вывода). С «программно-эгоцентрической»
точки зрения это выглядит чистой формальностью и не является существенной
частью программы;

Любая программа выполняется в компьютере. Посмотрим, как соотносятся
между собой компоненты программы и компьютерной архитектуры:

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

·       
одновременное нахождение в памяти «алгоритма» и
данных соответствует принципу хранимой
программы.
Перед загрузкой в память эти же компоненты находятся в программной файле, который представляет
собой точную копию  представления
программы в памяти – «образ памяти».
Это позволяет рассматривать всю программу (в том числе и алгоритм) как данные
для работы других программ, например, трансляторов;

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

И, наконец, язык программирования также содержит в себе компоненты,
предназначенные для описания соответствующих частей программы:

·       
средства описания данных: определение типов
данных (форма представления) и переменных;

·       
набор операций над основными типами данных
(включая ввод-вывод), а также средства записи выражений;

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

·       
средства разбиения программы на независимые
части – модули (функции, процедуры), взаимодействующие между собой через
программные интерфейсы.

Какая информация содержится в команде программыОпределение
 программы уже давно дано в простой
формуле: «Программа = алгоритм + данные».
Но в ней алгоритм и данные не просто «складываются» в одно целое как
независимые части, но являются двумя взаимозависимыми элементами. Это своего
рода «Янь и Инь» программы, олицетворяющие единство и борьбу двух
противоположных начал (в философии этот принцип положен в основу диалектики –
учения о развитии). Попробуем привести несколько аналогий, поясняющих сущность
взаимодействий в этой «парочке»:

·       
если данные можно в какой-то мере обладают
свойствами пространства (объем, протяженность), то алгоритм – свойствами
времени (эффективность, быстродействие). Тезис «проигрывая в пространстве,
выигрываем во времени» здесь также уместен: эффективность программ может быть
принципиально повышена за счет использования дополнительных структур данных в
памяти;

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

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

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

Какая информация содержится в команде программыУравнение
«Программа = алгоритм + данные» можно разрешить и по-другому: «Алгоритм = программа
– данные», что также имеет некоторый смысл, несмотря на явную натяжку. Например,
конечный автомат (см.3.8)  как раз и является программой, лишенной
данных, т.е. алгоритмической компонентой, взаимодействующей с внешней средой
без сохранения результатов во внутренних данных. Также и «Данные  = программа – алгоритм» определяют их как
пассивную программную систему, лишенную действий.

Источник