Скачиваний:
70
Добавлен:
09.05.2014
Размер:
812.54 Кб
Скачать

6.3.1. Fifo.

Наиболее простым алгоритмом замещения страниц является алгоритм FIFO. Этот алгоритм ассоциирует с каждой страницей время, когда эта страница была помещена в память. Для замещения выбирается наиболее старая страница.

Учет времени необязателен, когда все страницы в памяти связаны в FIFO-очередь, а каждая помещаемая в память страница добавляется в хвост очереди.

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

6.3.2. Оптимальный алгоритм.

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

6.3.3. Lru — алгоритм (least recently used)

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

  1. подход на основе логических часов (счетчика)

  2. подход на основе стека номеров страниц

  1. ассоциируют с каждой строкой таблицы поле “время использования” а в CPU добавляются логические часы. Логические часы увеличивают своё значение при каждом обращении к памяти. Каждый раз, когда осуществляется ссылка на страницу, значение регистра логических часов копируется в поле “время использования”. Заменяется страница с наименьшим значением в отмеченном поле путем сканирования всей таблицы страниц. Сканирование отсутствует при использовании подхода на основе стека.

  2. стек номеров страниц хранит номера страниц, упорядоченных в соответствии с историей их использования, на вершине стека располагается только что использованная страница, а на дне least recently used страница. Как только осуществляется ссылка на страницу, она перемещается на вершину стека, а номера всех страниц сдвигаются вниз.

1Исходный модуль (source module)– программный модуль на исходном языке системы программирования. При компиляции исходный модуль преобразуется в объектный модуль.

2Трансляция программы (program translation) – перевод программы с одного языка программирования на другой. Обычно трансляция является преобразованием программы, написанном на машинонезависимом языке , в эквивалентную программу на машинном языке конкретной ЭВМ. Трансляция осуществляется самой ЭВМ по специальной программе, называемой транслятором.

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

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

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

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

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

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

5Загрузчик (loader) – это программа, управляющая загрузкой. Обычно загрузчик выполняет следующие основные функции:

  1. распределяет пространство ОП для программы;

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

  3. физически размещает подготовленную версию машинного кода программы в памяти и передает управление на первую команду программы.

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

7Загрузка (loading)– это считывание данных из одного запоминающего устройства в другое, обычно обладающее большей оперативностью. Чаще всего этот термин обозначает копирование программ и данных из ВЗУ в ОП.

8Адресная константа (address constant) – константа, которая либо является адресом, либо используется при вычислении адресов.

9Компоновка, редактирование связей (linking, linking editing) – это процесс сборки загрузочного модуля из полученных в результате раздельной компиляции объектных модулей с автоматическим поиском и присоединением библиотечных подпрограмм и процедур. В процессе компоновки программа собирается в единое целое. Устанавливаются связи между отдельными модулями с помощью команд перехода и команд возврата, у которых формируются логические адреса, происходит организация общих блоков и устанавливаются пути передачи данных от модуля к модулю и в подпрограммы. Компоновка выполняется специальной программой – компоновщиком.

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

Компонующий загрузчик (linker loader)– это загрузчик, выполняющий компоновку задачи из объектных модулей непосредственно в оперативной памяти во время загрузки. Обычно компонующий загрузчик выполняет следующие основные функции:

  1. распределяет пространство ОП для программы

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

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

  4. физически размещает подготовленную версию машинного кода программы в памяти и передает управление на первую команду программы.

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

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

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

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

Оверлейная программа, программа с оверлейной структурой (overlay program) – это программа, отдельные части которой могут попеременно по мере необходимости загружаться в одну и ту же область оперативной памяти. Общий размер памяти, необходимой такой программе, существенно меньше суммы размеров всех четырех сегментов. Однако такая экономия ОП происходит за счет накладных расходов времени.

Оверлейная структура, структура с перекрытием (overlay structure) – Структура загрузочного модуля, в котором одна выделенная часть программы (корневой сегмент) постоянно находится в оперативной памяти, а остальные части (сегменты перекрытий) попеременно загружаются в ходе выполнения программы в одну и ту же область оперативной памяти, сменяя и перекрывая друг друга.

13Виртуальная память (virtual storage, virtual memory) – это механизм управления памятью вычислительной системы, позволяющий программе использовать память, размер которой больше реальной оперативной памяти, имеющейся у компьютера. Понятие «виртуальная память» включает в себя как управляющие памятью аппаратные и программные средства, так и способ управления памятью, который состоит в следующем. Выполняемой задаче отводится физическая память, состоящая частично из оперативной памяти и частично из более медленных и более дешевых ВЗУ. Эта память разбивается на страницы фиксированной длины или сегменты переменной длины, параметры которых записываются в специальные таблицы страниц или сегментов. С помощью этих таблиц устанавливается соответствие между виртуальными адресами, указанными в программе, и физическими адресами запоминающих устройств. Процессор работает с командами и данными, находящимися в ОП, до тех пор, пока не произойдет обращение к команде или операнду, содержащимся в странице или сегменте внешней памяти. В этом случае выполнение программы прерывается и происходит переписывание нужной страницы или сегмента из внешней памяти в оперативную. Если в ОП не оказалось свободного места, то оно предварительно освобождается. Для чего содержимое одной из страниц или сегмента ОП сохраняется на внешнем устройстве. После такого обмена страницами или сегментами соответственно корректируются таблицы страниц или сегментов и выполнение программы продолжается.

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

15Библиотека программ (program library) – это программный продукт, содержащий собрание процедур, функций и т.п., предназначенных для использования при разработке программ в определенной среде программирования. Достаточно с помощью специального оператора подключить библиотеку программ к разрабатываемой программе, чтобы содержащиеся в ней процедуры можно было включать в состав программы пользователя. Библиотека программ представляет собой специальным образом организованный файл или набор файлов, содержащих, как правило объектные модули, которые могут быть извлечены для присоединения к разрабатываемой программе на этапе компоновки.

Библиотека динамической компоновки (библиотека динамического связывания) (dynamic link library - dll)– это один из способов организации библиотек программ. Обладает целым рядом преимуществ:

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

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

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

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

33