Студопедия

КАТЕГОРИИ:


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

Управление выполнением программ




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

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

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

¨ цель подпрограммы может быть достаточно компактно сформулирована (словесно или формально);

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

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

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

¨ структурировать большие программы, что значительно облегчает работу с текстами программ (поиск нужного места в программе, добавление и изменение фрагментов программы);

¨ создавать большие комплексы программ (методы восходящего и нисходящего программирования);

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

¨ осуществлять коллективную работу над программами (разные подпрограммы могут делать разные программисты);

¨ создавать библиотеки подпрограмм для коммерческого и некоммерческого использования;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

¨ окончанием процесса называется этап нормального или аварийного выполнения программы.

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




Поделиться с друзьями:


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


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



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




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