Понятия вычислительного процесса и ресурса 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Понятия вычислительного процесса и ресурса



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

 

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

  1. Макросы и подпрограммы

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

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

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

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

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

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

<Имя_подпрограммы пар1,пар2...>.

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

Include <stdlib.h>

#include <conio.h>

#include <dos.h>

void summator(int I, int k);

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

{ int I, k; I=k=2; summator(I,k);

}

void summator(int I, int k)

  1. Связывание информации

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 



Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 640; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.77.98 (0.008 с.)