Жизненный цикл программы

Delphi 7. Занятие 1_2.

жизненный цикл программы

Цикл жизни программы

Программа напоминает живое существо. Сначала возникает идея написания программы, этакий её зародыш.

Он развивается и вырастает в блок — схему будущей программы, отражающей логические связи между её будущими блоками.

Затем программист пишет код программы. И вот первый вариант запущен. Программа родилась. Она ещё слабенькая, часто падает и ошибается.

Параллельно с процессом написания идёт мучительный процесс отладки уже написанного кода. В результате от первоначального варианта порой мало что остаётся.

В процессе роста программы идёт мучительный поиск ошибок. И откуда они только берутся! Ведь каждый программист уверен, что он написал идеальный код.

Но постепенно программа взрослеет и мужает. И вот наступает момент, когда программу выпускают в свет.

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

Но проходит какое-то количество лет, и программа начинает морально устаревать. Появляются новые версии. Старой программой постепенно перестают пользоваться и она тихо умирает.

Жизнь программы в компьютере

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

Если вопрос имеет историю, то лучше всего рассмотреть его в исторической ретроспективе.

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

Но и первобытные, и современные компьютеры, имеют одну и ту же структуру.

Жизненные циклы программы

Почему появились компьютеры

Первые компьютеры были предназначены для выполнения математических вычислений.

Например, вычисление значения определённого интеграла — это последовательность арифметических действий.

Итогом будет число. Но вручную проводить такие вычисления очень затратно по времени и получение результата порой из-за этого теряет смысл.

Но такие вычисления очень нужны при решении технических задач! Например, при расчёте ядерных реакций или траекторий полёта космических аппаратов.

Собственно эти потребности и привели к появлению вычислительных машин.

Структура компьютера

Итак, центральной частью вычислительной машины как прежде, так и сейчас, является арифметическое устройство.

В нём могут храниться три числа — над двумя производится арифметическая операция. а третье есть результат этой операции.

Логическое устройство может сравнить два числа.

О командах мы поговорим далее.

Память. Она выполняет две функции. С одной стороны, она хранит последовательность команд, которые надо выполнить.

С другой — в неё записывают начальные значения, с которых начинаются вычисления, а затем туда записываются промежуточные результаты вычислений.

И, наконец, туда же записывается конечный результат.

Как происходят вычисления

Чтобы понять, как происходят вычисления, хлебнём немного теории.

Сначала поговорим о памяти. Наименьший элемент памяти может находиться в двух состояниях, которые ассоциируют с нулём и единицей.

Такой элемент назвали «бит».

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

Но в действительности считываются сразу восемь разрядов, и эту группу бит называемых «байт». Также байт называют ячейкой памяти. Каждая ячейка имеет свой порядковый номер, или, по другому — адрес ячейки памяти.

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

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

0010 1101 ячейка номер n
1001 1100 ячейка номер n+1
1000 0111 ячейка номер n+2
и т.д.

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

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

Наконец, после заполнения памяти программой и начальными данными, мы знаем, что начиная с номера s память свободна.

Структура команд

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

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

Дольше определённое число бит отводится под саму команду. В оставшихся битах может размещаться число, которое надо обработать.

Либо там записывают адрес начальной ячейки памяти, хранящей данные, а также количество ячеек, отведённых под запись числа.

Чем больше ячеек отвести под число, тем большее число можно записать, но тем быстрее закончится память. Ниже приведён пример двухбайтовой команды:

машинная команда

Первые три бита позволяют записать команды длиной от 1 до 7 байт, в зависимости от сочетания в них нулей и единиц.

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

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

В оставшихся битах зашифрован адрес, с которого начинается число. В данном случае можно адресовать 8192 ячейки.

После того, как программа и данные размещены в памяти, начинается процесс вычислений.

Кто и как управляет компьютером

Процессом вычислений руководит управляющее устройство (УУ). На схеме оно обозначено как «устройство считывания следующей команды».

Теперь рассмотрим работу УУ. Перед тем как запустить УУ, в него вводят адрес первой команды. После этого УУ запускают на выполнение.

УУ обращается к памяти и выбирает первый байт команды в соответствии с адресом, который в него записали.

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

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

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

Найдя совпадение, УУ посылает набор управляющих сигналов, позволяющих выполнить команду. Естественно, этот набор уникален для каждой команды.

Как мы говорили ранее, адрес начала числа хранится в третьем байте.

После этого УУ сложит адрес первой команды с её длиной (а она у нас в примере 3 байта), и по вычисленному адресу загрузит вторую команду.

Например, сложить числа

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

В третьей команде будет зашифрована команда арифметическому устройству произвести сложение двух чисел, находящихся в нём.

В четвёртой команде будет указано, что делать с результатом сложения — оставить его в АУ, или записать в память.

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

Конечно, мы рассмотрели наипростейший, линейный алгоритм вычисления, когда команды последовательно выполняются от первой до последней.

Программа с ветвлением

Но даже простые алгоритмы, как правило, в зависимости от полученного результата вычислений на определённом шаге могут перескакивать через некоторое число команд.

Решение о таких переходах принимается логическим устройством.

Это устройство умеет сравнивать два числа. В зависимости от результата сравнения продолжение работы программы осуществляется с того или иного адреса.

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

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

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

Взаимодействие программы с ОС

Только кошка гуляет сама по себе. В Windows редкая серьёзная программа мало зависит от операционной системы.

Операционная система берёт на себя все операции работы с накопителем и оперативной памятью. Программа только пользуется имеющимися в ней средствами.

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

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

Но без чего не может начать работать вообще ни одна программа, так это без загрузчика.

Чтобы «ожить», программа из постоянного запоминающего устройства (ПЗУ) должна попасть в оперативную память, загрузиться.

Исполняемый файл

Когда Вы, найдя в проводнике файл с расширением «.exe», выделяете его и щелкаете дважды по нему, или нажимаете клавишу «ввод», на сцену выходит загрузчик.

Кстати, если Вы нажмёте правой кнопкой на ярлык программы на рабочем столе и выберете пункт «свойства», то в развернувшемся окне увидите, что ярлык связан непосредственно с «.exe» файлом.

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

Такие сведения операционная система хранит в специальном разделе, называемом «системный реестр».

Заключение

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

Знания эти теоретического порядка, но как говорили великие, нет ничего практичней хорошей теории.

Удачи Вам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *