Ю.Н. Пронкин - Лекции по ЭВМ (2-3 семестры) (972268), страница 7
Текст из файла (страница 7)
Какая-то память разбита намножество блоков.3. Блоки памяти задачиперемещаются междуфизической и вторичнойпамятью.Проблемы и задачи:1. как связать логические адреса с физическими.2. Как выбирать разделы при замещении.Управление виртуальной памятью2.1 Сегментная виртуальная память (сегмент имеет переменный размер)Из минусов: сложность управления.2.2 Страничная виртуальная память (ориентированный размер)Из плюсов: Простота и эффективность.Из минусов: нет адаптации под структуру задачи.Лекция №201.12.2010Модели виртуальной памяти1.Сегментирование+ Хорошая Высокаяадаптацсложностьия подструктуру задачи2.Страничные (фиксированный размер)+ Простая Плохаяиадаптация поддостаточмодель данныхнозадачиэффективнаяРис 19.7 ->преобразование адресаРис 20.1Механизм замещения страниц1.выбор случайного.2.Выбор редко используется3.Выбор страниц, к которым дольше всего не было обращения4.Выбор страниц, к кторой не было обращения на отрезке времени τ.(1) и (4) – наиболее часто используемые3.Сегментно-страничная модель х86Рис 20.2Все каталоги хранятся в ОПTLB(Translator Lookside Buffer) – кеш активные страницы – способ повышения скорости работы состраницами.Проблема критической секцииРис 20.3Критическая секция – секция кода, обращаясь к разделу областиПроцесс выполняются асинхронноP1P2X=X+1Reg1<-XX=X+1Произошло переключение Reg2<-XP1->P2Reg1<-Reg1+1Reg2<-Reg2+1X<-Reg1X<-Reg2Современный механизм сводится к «семафору».Семафор S – примитив, используемый для синхронизации процессов: S⋳[0,p], p>0Если p=1, то двоичный семафорЕсли p>1, то семафор – счётчикP(S) |операции надV(S) | семафорамиP(S): Если S>0, то S<-S<-1 и войти в критическую секцию, иначе остаться на семафореV(S): S<-S+1Операции над семафорами являются неделимыми.Reg<-SS<-S+1S<-RegВсе операции происходят за один прием, иначе если это будет не так, то проблема приедет вместе спрошлым.Далее понятно –должны использоватьпримитивы передкаждой критическойсекции.Рис 20.4(P1, P2 – >P(S)далееквадратик –> далееV(S) )Проблема тупикаРис 20.5 (Классический тупик)А2 – выделен для P1.P1 – запрашывает А1.Процессы Pi – выполняются асинхронно.Сформулируем причины – т.е.
«необходимые условия тупика»:1.2.3.4.Процесс монопольно владеет выделенными ресурсами.Ресурс нельзя отобрать у процесса до полного их использования.Процесс удерживает выделенные ранее ему ресурсы, ожидая выделения новых.Существует кольцевая зависимость процессов.Пути решения проблемы тупика1.2.3.4.Построение безтупиковой систему – исключения тупиков.Обход тупиков – балансирование на грани.Обнаружение тупиковВосстановление после тупиковИсключение тупиков – сотри любое из 4-х условий – но ведет к резкому снижению производительностисистемыОбход тупиков – полностью проблему не лечит – попытка не попасть в тупик, когда такая опасностьсуществует.
-> алгоритм «банкира»Рис 20.6∑ = 13, Роздано = 11, Свободно =2Состояние называется безопасным, если существует возможность завершение всех процессов. -> ненадо допускать перехода в опасное состояниеЛекция №214.12.2010Из прошлой лекции:1.2.3.4.Исключение тупиковОбход тупиковОбнаружение тупиковВосстановление после тупикаОбнаружение + восстановление Установить факт тупика Выявление процессов и ресурсов, вовлекаемых в тупиковую ситуацию «мягкое восстановление»Модели данных языков программирования управление памятью (как конкретная модель это делает – может быть связная, невсвязная и пр.) поддерживаемые методы структуризации (насколько сложные агрегаты может и поддерживатьмодель)Видимость объекта (все что есть в программе – переменные, функции и пр.) программы где можно использовать везде – такой объект называется объектом глобальной видимости не везде – такой объект называется объектом локальной видимостиВремя существования объекты программы как долго находится в оперативной памяти всегда – глобальное время существования временно – локальное время существованияМы пройдем три языковых модели (Алгол и Фортран, Си и организация управления классами памяти)Модульная модель языков программирования (Фортран (США), ~1960)Рис 21.1 (Обратите внимание на подпрограмму и функцию – ранее мы их не различали.
Именно функцияявляется носителем результата)Модульная модель:Каждая подпрограмма (или функция) является самостоятельным модулем.Определенные внутри модуля переменные локализованы в нём (не глобализованы)Память по объекты (переменные) выделяется статическиНаличие областей памяти, разделяемых различными подпрограммами (common - блок) – имитацияглобальной среды (Рис.
21.2)Принцип модульности ляжет практически во все языки программирование. Нам хочется, чтобы модульпроявлялся как надклассовый объект. Сейчас понятие функции и модуля тождественно.Обрисуем полную альтернативуИ Блочная модель языков программирования (Алгол (Европа), ~1960)Центр разработки находился в Дубне. Сильно использовался в СССР. Теоретическая база – Алгол, но болеепрактическая – Фортран. Си, Паскаль – «обглоданный» Алгол.Рис 21.3Дикая по сложности иерархия. Можно определять функцию в функции.
Блоки имеют неограниченнуюглубину вложению. Вся программа представляет собой единый моноблок. Существует единственный программный «модуль» Вся программа представляет собой систему вложенных блоков Процедуры (как и ранее обобщение функции и подпрограммы) и функции вкладываются в блоки, ихтела являются полноценными блоками Данные локализованы в блоках Внутренний блок наследует данные объемлющих его блоков (Из рис. 21.3. (1) – объемлющий для (2)и (3) ) Память под переменные выделяется при входе в блок и удаляется при выходе из него (т.е.
полнаядинамика – статическая модель отсутствует)На Алголе-ГДР написаны практически все ядерные исследования и исследования в квантовой химии. На Си,и более современных постАлгольных языках такие задачи реализованы не были.Серьёзных методов агрегирования на Алголе и Фортране не были. Массивы были и только они, болеесложных структур не было.Лекция № 2211.12.2010Блочно - модульная архитектура (Си)Сюда приходит блочная структура, но сильно лимитированная. Блоки есть, но нельзя создавать операциюодну в другой.Рис.22.1.– Все активные компоненты вкладываются внутрь модуля. Модулей уже не один – Ура, Фортранзадействован, ему повезло.
Функцию в функции мы создать уже не можем, но блоки у нас уже есть. Слевамы можем видеть саму характеристику модуля.1.Размещается на статической памяти.2.Глобальнен по времени и пространству (действия в пределах модуля и возможность (с разрешения)экспорта в соседний модуль)3.Инициализирована нулем.Прототипы реализации:1.Размещаются на динамической (стековой) памяти.2.Локальны по времени и пространству.3. Имеем неопределенное значение в момент создания.
(Т.е. грязь в памяти с прошлого раза пользования)Классы памяти.Для управления памяти используется 4 ключевых слова:auto – автоматическая переменная. (автоматическая активация при входе в блок – на самом деле онохолостое)Пример:int main (void){…..auto int m; //на самом деле ничего не изменилось – т.е.
исторически оставшаяся вещь…..}Register – регистрационная переменная (динамическая, памяти не имеет, рекомендуится располагать врегистре)register int n; //пожелание транслятору располагать не в памяти, а на регистре. В современныхусловиях не используется. Чаще выносятся счетчики, и то не факт.…..}Два действительно полезных слова:static – статическая переменнаяextern – внешняя переменнаяStatic:1.На уровне функции –Размещается в статической памяти.Глобально по времени, но локально внутри функции.Инициализирована нулем.Пример:int func (void){static int m;……….}2.На уровне модуля.Ограничивает видимость объекта одним модулем. Т.е.
ограничение на экспорт.Рис. 22.2. Обозначает разные вещи в различныхмодулях.Определение переменной1.Выделение памяти.2. Возможность использования.Описание переменной.1.Возможность использования.Т.е. у нас есть оттеночные отличия определить и описать переменную. Таким образом мы в каком-то модулеопределяем переменную, а в других модулях, импортирующих, мы описываем.Возможность, право на использование и есть extern. Т.е.
описание. Память, кстати, не выделяется.Напоминание: модели языков программирования:1.Способ хранения.2.Способы структуризации.1.Порождение новых типов.2.использование аппарата указателей.3.использование структур (struct)4.использование объединений (union)Рис.22.3Рис.22.4.У нас так же есть возможность породитьНОВЫЙ кирпичик. (естественно мы неоткажемся)Итак, typedefПример:typedef struct {char Autor [100];cahr Title[256];int Year;int Pages;} BOOK;BOOK Catalog[100];BOOK *CafPtr;Struct – структура (агрегирование с последовательным размещением полей в памяти)Union – объединение (агрегирование с использованием общей памяти (наложение))Рис. 22.5.{ typedef union {VALUE V;}double q;char b[9];} VALUE;v.q. v.b[0]Лекция № 2315.12.2010Структуры данныхI Классификация1.Статические структуры (количество переменных не изменяется)2.Динамические структуры (количество переменных изменяется)(3.)Полустатические – «…эмуляция на тему динамических структур…»II Классификация1.Однородные структуры (много одинаковых элементов)2.Неоднородные структуры (есть неодинакового типа элементы – к примеру, в таблицах с разнымизаголовками)III Классификация1.Оперативные структуры(скорость доступа велика, «..и все хорошо»)2.Внешние структуры (скорость доступа мала (к примеру, на дисковом накопителе), перемещениязамедлены, передача невозможна) – к примеру, файловые системыIV Классификация1.Непрерывные структуры (есть порядок следования - «есть первый, второй….
есть данный, естьследующий…», и есть физическое проявление)2.Ссылочные структуры.Будем много говорить о стэке.Рис.23.1. ( Общий пример)Набор предписаний – некоторый набор действий, которые могут быть выполнены. Если набор предписанийправильный – мы получим результат. Если он неверен или не может быть выполнен, тогда получим отказ.Обычный пример «…из жизни…»:Рис.23.2. (Есть рисующая (пишущая) машина. Бегунок движется влево,вправо, вверх, вниз. А также поднять и опустить перо. Следовательно,имеем 6 предписаний. В углу же мы получим отказ, так как нельзя будетвыполнить часть предписаний.)Рис.23.3. (Между черчением иумением рисовать литеру лежитогромная дистанция.
Проблемадаже не в этом. Дело в том, чтомодуль, который обслуживаетчеловека, не должен делать все.Поэтому мы дробим нашупрограмму. И мы начинаемреализовывать верхний уровеньза счет процедур промежуточного. Проектирование ведется сверху вниз дроблением.)Что принципиально дают объектно-ориентированные языки. Доступ к параметрам состояния должен иметьтолько этот объект. Также это может делать интерфейс. Больше никто. Если же мы берем обычный язык Сирис.23.4. Данные – тонад чем, производитсядействие. Функции –активные элементы.Данные и функцииживут самостоятельно.Если мы обратимсяизвне, то мы можемполомать структуру.) Вобъектноориентированных структурах, типа Си++ (рис.23.4.) у нас все сохраняется. Так же появляется такая вещь, каккласс.