Распределение памяти в процессе выполнения программы

На платформе IBM PC оперативная память строится из страниц размером 64 Кб, при этом часть программы может храниться только внутри одной страницы, как правило подпрограммы хранятся в других страницах. Если программа занимает более чем одну страницу, то она разбивается на две и более. Если она входит в одну страницу, то внутри нее целесообразнее использовать короткие ссылки, т.е. адреса команд и данных равных 1 байту. Если программа занимает 2 и более страницы, то для ее хранения и выполнения используются длинные ссылки размером 2 байта, т.е. любой адрес хранится как последовательность четырех байт. Первые два байта определяют номер страницы(сегмент адреса), вторые два –положение на странице.

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

1. Программный стек

2. Область программного кода- хранение команд центрального процессора.

3. Область констант и данных- хранение переменных и констант.

4. Куча

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

2 - хранение команд центрального процессора

3 -хранениепеременных и констант

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

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

В Турбо Паскале куча строится по следующим параметрам:

1. Собираются все свободные места между концом сегмента данных или команд и концом страницы.

2. Выделяется одна специальная страница (или меньше) под кучу и стек. Величину кучи или стека можно изменить задав {$M n1, n2, n3} n1- задает количество байт в стеке; n2 - память, отведенная для подпрограммы; n3- длина кучи.

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

Для delphi:

{$ H+}- использование расширенных строк;

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

В языке СИ происходит автоматическое запоминание адреса и величины кучи, которая приводит к автоматическому очищению кучи после выхода из подпрограммы.

5. ПОНЯТИЕ ОВЕРЛЕЯ И ДИНАМИЧЕСКИ ВЫПОЛНЯЕМЫХ ПОДПРОГРАММ Оверлейной структурой под управлением ОС MS-DOS называется специальный комплекс программ позволяющий экономить оперативную память при выполнении программы. Под управление ОС Windows оверлей называется динамическими библиотеками. Оверлейем наз. специальный механизм получения загрузочного модуля, при котором происходит экономия ОП, в процессе выполнения программы. Основным принципом оверлея является принцип загрузки подпрограммы в ОП только тогда, когда она необходима для выполнения всей программы. Для того чтобы сделать оверлейную программу в Turbo Pascal пользователь должен осуществить 2 этапа: 1. Построить структурную схему программы. 2. Определить в главной программе использование библиотеки overlay и задать опции управления в программах. Структура программного комплекса Выделите процедуры которые участвуют в нескольких ветвях дерева.(G,F).Подпрограммы, которые повторяются в нескольких ветвях называются перекрестными ссылками. Во избежание ошибок они не должны участвовать в оверлейной структуре или могут быть вынесены на верхний уровень, т.е. переделать следующим образом: Теперь после структурирования модули B и E, C, D и I могут заменятся друг на друга (замещаемые ветки). При этом длина загруженного модуля будет определятся по длине максимальной ветки оверлея. При использовании оверлея особое внимание следует уделить публичным переменным, т.е. общим областям памяти, в которых хранятся данные в процессе выполнения подпрограмм. В нашем случае допускаются общие переменные для модуля A и всех других. Для модулей B и E, для модулей D и I. Для всех других модулей общих переменных быть не должно. Передача данных должна осуществляется через параметры переменные или возвраты функций. В процессе выполнения оверлея постоянно в оперативную память загружена общая область. А область оверлея изменяется в процессе выполнения программы. Поэтому время выполнения может увеличится, скорость выполнения программы снижается и поэтому оверлейные процедуры не желательно очень быстро заканчивать. Т.к. существует замещение программ в ОП, программист должен внимательным образом использовать передачу параметров и возврат значений из подпрограммы. Вообще, в других ОС (Unix) допускается несколько уровней оверлея. В нашем примере B, С и D могут быть расположены на одном уровне оверлея, а E и I – на втором уровне. При программировании под ОС Windows в языках Visual C и Delphi пользователь не обязан строить структурную схему Достаточно задать соответствующую опцию транслятора, но проблема общих областей данных не снимается. В визуальных языках программирования, динамическую библиотеку можно создать включив опцию транслятору, т.е. он автоматически построит замещаемые ветки, перекрестные ссылки и т.д., но необходимо помнить что автоматическое построение как правило хуже ручного. При использовании оверлея строятся дополнительные файлы *.ovr и *.dll. Программа может использовать короткие ссылки (адресация) и длинные ссылки, при использовании длинных библиотек и оверлея, все ссылки должны быть длинными т.е. адрес должен состоять из сегмента адреса и его смещения. Если программа участвует в оверлее то первым утверждением должно быть {$O+}. Утверждение {O+} и короткая ссылка, т.е. модуль занимает меньше чем одну страницу, взаимно исключаются, т.е. общий объем оверлейной программы будет больше чем одна страница и после трансляции программы формируются 2 файла. <N>.EXE <N>.OVR Не рекомендуется в головной программе отдавать процессам управление ввода-вывода ОС, т.е. {I+} не должно быть. 6. ВИРТУАЛЬНАЯ ПАМЯТЬ И СПОСОБЫ ЕЕ ОРГАНИЗАЦИИ СВОПИНГ. Все методы распределения памяти могут быть разделены на два класса: методы, которые используют перемещение процессов между оперативной памятью и диском, и методы, которые не делают этого, т.е. методы без использования внешней памяти. Классификация методов распределения памяти представлена следующим образом: Распределение памяти фиксированными разделами Самым простым способом управления оперативной памятью является разделение ее на несколько разделов фиксированной величины. Это может быть выполнено вручную оператором во время старта системы или во время ее генерации. Очередная задача, поступившая на выполнение, помещается либо в общую очередь, либо в очередь к некоторому разделу: Подсистема управления памятью в этом случае выполняет следующие задачи: - сравнивая размер программы, поступившей на выполнение, и свободных разделов, выбирает подходящий раздел. - осуществляет загрузку программы и настройку адресов. При очевидном преимуществе - простоте реализации - данный метод имеет существенный недостаток. Так как в каждом разделе может выполняться только одна программа, то уровень мультипрограммирования заранее ограничен числом разделов не зависимо от того, какой размер имеют программы. Даже если программа имеет небольшой объем, она будет занимать весь раздел, что приводит к неэффективному использованию памяти. С другой стороны, даже если объем оперативной памяти машины позволяет выполнить некоторую программу, разбиение памяти на разделы не позволяет сделать этого. Разновидностью виртуальной памяти является свопинг. Необходимым условием для выполнения задачи является загрузка ее в оперативную память, объем которой ограничен. В этих условиях был предложен метод организации вычислительного процесса, называемый свопингом. В соответствии с этим методом некоторые процессы (обычно находящиеся в состоянии ожидания) временно выгружаются на диск. Планировщик операционной системы не исключает их из своего рассмотрения, и при наступлении условий активизации некоторого процесса, находящегося в области свопинга на диске, этот процесс перемещается в оперативную память. Если свободного места в оперативной памяти не хватает, то выгружается другой процесс. При свопинге, в отличие от рассмотренных ранее методов реализации виртуальной памяти, процесс перемещается между памятью и диском целиком, то есть в течение некоторого времени процесс может полностью отсутствовать в оперативной памяти. Существуют различные алгоритмы выбора процессов на загрузку и выгрузку, а также различные способы выделения оперативной и дисковой памяти загружаемому процессу. 1. НАЗНАЧЕНИЕ И СТРУКТУРА СИСТЕМНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ Системное программное обеспечение входит в состав программного обеспечения ЭВМ: Системное программное обеспечение - совокупность программ и программных комплексов для обеспечения работы компьютера и вычислительных сетей. Системное программное обеспечение ориентировано: − на создание операционной среды функционирования других программ; − на обеспечение надежной и эффективной работы самого компьютера и вычислительной сети; − на диагностику и профилактику аппаратуры компьютера и вычислительных сетей; − на выполнение вспомогательных технологических процессов: копирование, архивация, восстановление файлов и т.п. вспомогательных программ, осуществляющих: − защиту, архивацию, восстановление данных; − всевозможные тесты и т.д. Общее назначение системного ПО - обеспечивать интерфейс между программистом или пользователем и аппаратной частью ЭВМ (операционная система, программы-оболочки) и выполнять вспомогательные функции (программы-утилиты). СПО делится на два основных класса: − операционные системы (ОС); − языки программирования. ОС называется программный продукт, позволяющий использовать прикладное программное обеспечение. ОС делится: − по числу пользователей: на однопользовательские и многопользовательские; − по интерфейсу: графические и текстовые; − по количеству одновременно решаемых задач: однозадачные и мультизадачные. Современная операционная система обеспечивает следующее: 1) Управление процессором путем передачи управления программам. 2) Обработка прерываний, синхронизация доступа к ресурсам. 3) Управление памятью. 4) Управление устройствами ввода-вывода. 5) Управление инициализацией программ, межпрограммные связи. 6) Управление данными на долговременных носителях путем поддержки файловой системы. Языки программирования делятся: на языки высокого уровня и низкого уровня; процедурные, функциональные и логические языки программирования. Процедурные языки наиболее распространенные и наиболее используемые для системного обеспечения. Логические языки программирования в отличие от процедурных используются для создания систем искусственного интеллекта. Главной особенностью данной группы языков является возможность определения собственных операций над собственными типами данных. Как известно, в процедурных языках, можно только определить собственный тип данных. Функциональные языки работают с различными функциональными данными. Главный используемый тип данных в них списки. Основной особенностью данной группы языков является широкое использование рекурсии и переопределение текста программы в процессе ее выполнения. То есть исходный текст программы может быть интерпретирован как некоторый список данных. Расширением системного программного обеспечения компьютера является набор сервисных, дополнительно устанавливаемых программ, которые можно классифицировать по функциональному признаку следующим образом: − программы диагностики работоспособности компьютера; − антивирусные программы, обеспечивающие защиту компьютера, обнаружение и восстановление зараженных файлов; − программы обслуживания дисков, обеспечивающие проверку качества поверхности магнитного диска, контроль сохранности файловой системы на логическом и физическом уровнях, сжатие дисков, создание страховых копий дисков, резервирование данных на внешних носителях и др.; − программы архивирования данных, которые обеспечивают процесс сжатия информации в файлах с целью уменьшения объема памяти для ее хранения; − сжатие программы обслуживания сети

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: