Последовательность операций при выполнении программы

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

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

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

Ролик «Последовательность обработчиков событий при проведении документа»

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

Концепция процесса – управление ресурсами. Ресурс – это любой потребляемый (расходуемый) объект. По запасам ресурсы подразделяются на исчерпаемые и неисчерпаемые. Потребители ресурсов – процессы.

Русурсы пример: некоторые аппартные устройства ВМ (процессоры, запоминающие устройства, устройства ввода-вывода) или некоторые наборы информации (в частности, совокупности записей определенной структуры – так называемые «файлы»).

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

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

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

• аппаратный, на котором осуществляется решение задачи на физическом уровне.

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

Все достоинства потоков по сравнению с процессами связаны с наличием общей области памяти:

• экономия внешней и внутренней памяти;

• быстрый обмен данными между потоками;

• контекст потока укороченный;

• упрощение отладки программ, состоящих из потоков.
Недостатки потоков

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

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

ВСЯ СЛОЖНОСТЬ АЛГОРИТМОВ ЗА 11 МИНУТ | ОСНОВЫ ПРОГРАММИРОВАНИЯ

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

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

Читайте также:
Какие из всех перечисленных программ входят в стандартный набор

• при ближнем вызове на 2 байта (запоминается только счетчик команд);

• при дальнем вызове на 4 байта (запоминается счетчик команд и
значение регистра CS);

• при дальнем вызове и запоминании регистра флагов на 6 байта.

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

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

void summator(int I, int k);

void main(void) — подпрогрмма

void summator(int I, int k)

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

• указатель независимо от размера объекта имеет фиксированную длину;

• указатель может использоваться для контроля доступа (например, для подсчета количества доступов);

• через указатель можно осуществить доступ к другому объекту без компиляции.

• доступ к объекту пользователей с разными полномочиями можно осуществить через разные указатели (например, одни пользователи могут читать и редактировать файл, другие — только читать).

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

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

Трансляция. На этапе трансляции исходный программный код преобразуется в объектные коды. Существует два типа трансляторов: компиляторы и интерпретаторы.

Компиляторы транслируют в объектные коды исходную программу «целиком». Подавляющее большинство языков программирования имеют компиляторы. На эта­пе компиляции связывание информации происходит.

Интерпретаторы переводят с языка программирования в коды, понятные машине, по одной «фразе», конец которой в классическом понимании определяется нажатием клавиши «Enter». К языкам, имеющим интерпретаторы, относятся, например, Бейсик и Java. На этапе интерпретации осуществляется связывание информации.

Линковка. При линковке на основе откомпилированных программ строится исполняемый файл. Это единственный этап обработки, на котором не происходит связывание данных.

Запуск исполняемого файла. Сначала происходит связывание информации, и только после этого файл выполняется. Связывание данных осуществляется за 2 прохода.

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

Читайте также:
Как открыть чит меню в кербал спейс программ

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

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

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

Источник: infopedia.su

Основные понятия программирования

Программирование – это наука, изучающая теорию и методы разработки, производства и эксплуатации программного обеспечения ЭВМ.

Затраты на разработку, создание и эксплуатацию программ высоки и постоянно возрастают. До половины затрат на разработку программ требует ее отладка.

Отладка программы — обнаружение ошибок в программе, их локализация и исправление.

Методы отладки

  • тестирование;
  • верификация.

Способы записи алгоритма

1. Текстовый: в виде текста на естественном или искусственном языке, в том числе на языках программирования. Универсален, наиболее распространен. 2. Табличный: в форме двумерных таблиц (таблицы решений, таблицы переходов и т. п.) Не универсален, но удобен в отдельных случаях. 3. Графический. Наиболее нагляден.

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

Основными символами являются: «процесс» (прямоугольник) — для описания операций ввода, обработки и вывода данных; «решение» (ромб) — для разветвления алгоритма; «пуск-останов» (овал) обозначает начало, конец и прерывание выполнения алгоритма; «комментарий» — для пояснения схемы. Основные символы, используемые в схемах алгоритмов, представлены на рис 2.1. Рис. 2.1. Основные символы (виды блоков) схем алгоритмов

Структура программы

Источник: studfile.net

Последовательность операций при выполнении программы

Вы конечно заметили, что наш «квадрат» не совсем квадратный — он больше прямоугольник из-за того, что по вертикали строки больше. Но будем называть его квадратом, т.к. количество символов по вертикали и горизонтали одинаковое.
Как я только что говорил, наша программа в обоих вариантах не самая удачная. Первый вариант длинный и обладает следующим недостатком — если мы захотим сделать квадрат например 7×7, то нам придется добавлять много строк.
Второй вариант конечно короче. Но у него есть тот же недостаток — для рисования квадрата другого размера нам придется все равно менять программу. Да и код выглядит пока страшненько.
Думаю, достаточно очевидно, что требуется конструкция цикла. Для большинства языков программирования таких конструкций бывает несколько. Давайте их и рассмотрим.

Читайте также:
В какой программе печатают рефераты

Операторы циклов

В Java существует три способа организации цикла.

1. Цикл for

Цикл for использует следующую форму записи

Давайте сразу рассмотрим в качестве примера использования цикла for нашу задачу — нарисовать квадрат.

public class LoopForOne
public static void main ( String [ ] arg ) <
for ( int i = 0 ; i < 10 ; i ++ )
System . out . println ( «**********» ) ;

Внутри скобок у слова for мы видим три разделенных точкой с запятой части.
int i=0 — этот оператор не должен нас удивить — мы объявили переменную «i» целого типа и присвоили ей значение 0. Этот оператор будет выполняться ТОЛЬКО ОДИН раз в начале цикла.
i i++ — этот оператор выполняется ПОСЛЕ КАЖДОГО цикла.

Все достаточно очевидно — мы выводим квадрат со стороной в 10 символов. Переменная «i» в данном случае исполняет роль счетчика — при каждом проходе цикла она увеличивается на 1, сравнивается со значением 10 и если меньше — выполняется операция печати строки из 10 символов.
Как видим, наша программа все-таки не так хороша. При желании вывести квадрат со стороной в 20 символов, нам придется менять значение 10 на 20 и еще изменить строку в печатью — заменить 10 символов «*» на 20.
Давайте сначала попробуем написать программу, которая выводит в ряд столько «звездочек», сколько мы захотим. Это несложно. Вот так:

public class LoopForTwo
public static void main ( String [ ] arg ) <
int count = 10 ;
for ( int i = 0 ; i < count ; i ++ )
System . out . print ( «*» ) ;
System . out . println ( ) ;

Обратите внимание — мы ввели новую переменную «count» и используем ее в цикле. Сейчас этот шаг может показаться не совсем понятным и нужным, но на самом деле чуть позже мы увидим, почему это удобно. Давайте разберем наш код по шагам. Итак:

Этот оператор вводит переменную «count» и присваивает ей значение 10. Именно столько символов мы хотим напечатать. Если потребуется изменить количество символов, то будет достаточно просто поменять 10 на что-то другое.

for ( int i = 0 ; i < count ; i ++ )
System . out . print ( «*» ) ;

Этот цикл напечатает 10 символов «*» в одну строку. Есть отличие между командами System.out.print и System.out.println. Первая выводит символы и не переходит на следующую строку, вторая — напечатает символы и курсор перейдет на следующую строку.
В нашем случае мы напечатаем 10 символов и курсор останется на этой же строке. Если мы захотим напечатать что-то еще, то печать начнется на той же строке. И наконец:

Эта команда просто переводит курсор на следующую строку

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

Источник: java-course.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru