Тема OS23асу. Управление памятью. Иерархическая система памяти компьютера ("гора" памяти). Управление памятью (организация виртуальной памяти, стратегии планирования ресурсов памяти и оперативная диспетчеризация свободных ресурсов памяти - выделение и освобождение памяти). Основная задача классической ОС ограничена управлением основной (оперативной) памятью, т.к. внешней памятью управляют файловые системы (достаточно самостоятельные части ОС), а распределенной памятью сети и кластеров управляют специальные сетевые и кластерные приложения. Кэширование (CASH) и хеширование (HASH) Управление регистровой и оперативной памятью. Кэши 1 и 2 уровня. Управление внешней памятью (магнитные и оптические носители); Управление распределенной памятью (в сети, в кластере и др.) Методы организации и управления основной памятью компьютера в существенной степени определяли развитие операционных систем. Организация памяти - это способ представления и использования основной памяти (для системы с физической памятью): · однопрограммные (одноабонентские) системы; · мультипрограммные системы с фиксированными разделами, · с трансляцией и загрузкой модулей в абсолютных адресах; мультипрограммные системы с фиксированными разделами, · с трансляцией и загрузкой перемещаемых модулей; c мультипрограммные системы с переменными разделами; · системы со свопингом. Цель стратегий управления памятью заключается в том, чтобы обеспечить наиболее эффективное использование такого дорогостоящего ресурса, каким является основная память, и при этом достигнуть наивысших возможных скоростных характеристик машины. Обсуждались три вида стратегий управления памятью: · стратегии выборки; · стратегии размещения; · стратегии замещения. Стратегии выборки ставят своей целью определить, когда следует выбирать очередной блок программы или данных для переписи в основную память. Стратегии выборки по запросу (по требованию) предусматривают загрузку в память блоков программ и данных только в тот момент, когда они запрашиваются. В стратегиях выборки с упреждением система пытается предупредить запросы программы пользователя и загружает соответствующие блоки программ и данных в основную память еще до того, как они реально потребуются; таким образом, эти блоки уже будут находиться в основной памяти, так что обращающаяся к ним программа сможет продолжать свое выполнение без задержки. Стратегии размещения ставят своей целью определить, в какое место основной памяти следует помещать поступающую программу. Рассматривались три стратегии размещения: · <первый подходящий>; · <наиболее подходящий>; · <наименее подходящий>. Выбор первого подходящего свободного участка предусматривает помещение программы в первый найденный свободный участок, который достаточно велик для ее размещения. Выбор наиболее подходящего свободного участка предусматривает помещение программы в <самый тесный> подходящий участок, т. е. в минимальный из имеющихся свободных участков памяти, где программа может уместиться. Выбор наименее подходящего свободного участка предусматривает помещение блока программы или данных в имеющийся свободный участок максимального размера. Выбор первого подходящего участка характеризуется малыми издержками. Выбор наиболее подходящего участка большинству людей интуитивно кажется наиболее выгодным. Выбор наименее подходящего участка имеет то преимущество, что он не оставляет в памяти маленьких дыр. С определенного времени системы памяти компьютеров становятся иерархическими, распадаясь на несколько уровней. Внешняя, или вторичная, память имеет большую емкость, но стоит относительно недорого. Основная, или первичная, память стоит дороже и имеет меньшую емкость, но более высокие скоростные характеристики, чем вторичная память. Чтобы центральный процессор мог работать с программами и данными, они должны размещаться в основной памяти. Программы и данные, которые в настоящий момент не используются, могут храниться во внешней памяти, как правило, на магнитных дисках или барабанах. Кэш-память стоит исключительно дорого, однако обеспечивает высокоскоростное выполнение программных команд и обращение к элементам данных. Системы со связным распределением памяти требуют, чтобы вся программа занимала один блок смежных ячеек памяти. Системы с несвязным распределением допускают, чтобы программы и данные разделялись на ряд блоков меньшего размера, которые могут помещаться в любые свободные участки памяти, даже если эти свободные участки не соседствуют друг с другом. Системы виртуальной памяти, как правило, предусматривают выделение несвязных сегментов памяти. Первые вычислительные машины предоставлялись в каждый момент времени одному пользователю. Эти однопрограммные машины содержали самые примитивные ОС, как правило, системы управления вводом-выводом, существенно упрощающие программирование операций ввода-вывода на машинном уровне. В однопрограммных системах защита памяти осуществлялась при помощи одного граничного регистра, который позволял отделить программу пользователя от операционной системы. Чтобы уменьшить потери машинного времени при переходе с задания на задание и благодаря этому добиться повышения производительности, были разработаны системы однопотоковой пакетной обработки. Со временем стало ясно, что несколько пользователей могли бы одновременно работать с одной машиной, однако необходимо было обеспечить их защиту друг от друга. В системах мультипрограммирования с фиксированными разделами, с трансляцией и загрузкой модулей в абсолютных адресах программы пользователя подготавливаются таким образом, чтобы выполняться в конкретных разделах. Если раздел, предусмотренный для конкретной программы пользователя, занят, то этому пользователю приходится ждать, даже если имеется другой достаточно большой свободный раздел. В мультипрограммных системах с фиксированными разделами, с трансляцией и загрузкой перемещаемых модулей программу можно загружать в любой свободный раздел, размеры которого это позволяют. В мультипрограммных системах со связным распределением памяти защита осуществляется при помощи двух граничных регистров, которые входят в состав ЦП. Каждый раз, когда программа обращается к памяти, система проверяет, нет ли здесь попытки выйти за пределы пространства адресов основной памяти, разрешенного для доступа со стороны этой программы. Пользователь, которому нужно войти в операционную систему для выполнения операций ввода-вывода или других функций, делает это при помощи команды вызова супервизора. Эта команда дает программе пользователя возможность пересечь границу операционной системы, чтобы получить определенные услуги. После того как операционная система окажет эти услуги, она возвращает управление программе пользователя. В мультипрограммных системах с фиксированными разделами значительный объем основной памяти теряется, когда программы пользователя оказываются много меньшими, чем выделяемые для них разделы. В мультипрограммных системах с переменными разделами программа пользователя получает ровно столько памяти, сколько ей требуется (в пределах размера имеющейся основной памяти). Однако в этих системах после завершения выполнения программ пользователя по всей основной памяти остаются разбросанными многочисленные <дыры>. Соседние <дыры> объединяются, чтобы сформировать максимально большие по размеру связные (непрерывные) свободные участки основной памяти. Бывают случаи, когда поступает задание, для которого требуется память, большая по размеру, чем любой из имеющихся индивидуальных свободных участков, но меньшая суммы всех свободных участков. В этом случае содержимое памяти можно уплотнить, чтобы создать свободный участок, достаточно большой для размещения данной программы. При уплотнении памяти все программы пользователя перемещаются таким образом, чтобы они оказались соседними друг с другом и остался один свободный большой участок памяти. Как только стратегические средства выборки определят, что в основную память необходимо ввести новую программу, стратегические средства размещения должны решить, в какое место ее записать. Иногда бывает так, что свободного участка в памяти нет, так что какую-то программу необходимо удалить из основной памяти, чтобы освободить место для записи новой. Подобное решение принимают стратегические средства замещения информации в памяти. Мультипрограммный режим можно реализовать также в системе со свопингом, где в основной памяти в каждый конкретный момент времени находится только одна программа пользователя. Эта программа пользователя выполняется до тех пор, пока это возможно. Затем она <выталкивается> из основной памяти и вместо нее <вталкивается> следующая программа пользователя, которая также выполняется до тех пор, пока это возможно. Такой метод свопинга эффективен, когда основная память имеет довольно ограниченные размеры. Он использовался во многих первых системах разделения времени с относительно небольшим числом пользователей. Более сложные системы со свопингом позволяют размещать в памяти сразу несколько программ. Терминология внешняя, вторичная, память (secondary storage) выборка (информации) по запросу, по требованию (demand fetch) заключительное время, время освобождения машины для выполнения следующего задания (job teardown) защита памяти (storage protection) иерархия памяти (storage hierarchy) команда вызова супервизора (supervisor call(SVC)instruction) кэш-память (cache storage) мультипрограммирование на физической памяти (real storage multiprogramming) мультипрограммирование с переменными разделами (variable partition multiprogramming) мультипрограммирование с фиксированными разделами, с трансляцией и загрузкой модулей в абсолютных адресах (fixed partition multiprogramming with absolute translation and loading) мультипрограммирование с фиксированными разделами, с трансляцией и загрузкой перемещаемых модулей (fixed partition multiprogramming with relocatable translation and loading) несвязное распределение памяти (noncontiguous storage allocation) объединение соседних свободных участков (<дыр>) памяти, слияние <дыр> (coalescing holes) оверлей, оверлейный режим, режим работы с наложением, перекрытием (overlay) однопрограммные, одноабонентские системы (машины) (single user dedicated systems) организация памяти (storage organization) основная, первичная, оперативная память (primary storage) подготовительное время, время подготовки машины к выполнению задания (job setup) регистры границ, граничных адресов; граничные регистры (boundary registers) <сбор мусора> (garbage collection) свободные участки памяти, <дыры> (holes) свопинг (swapping) связное распределение памяти (contiguous storage allocation) сегменты (segments) система управления вводом-выводом (IOCS) (input/output control system) системы пакетной обработки с одним потоком заданий, однопотоковые системы пакетной обработки (single-stream batch processing systems) список свободной памяти (free storage list) стратегия выборки (fetch strategy) стратегия замещения (replacement strategy) стратегия размещения (placement strategy) стратегия размещения с выбором наиболее подходящего (best-fit storage placement strategy) стратегия размещения с выбором наименее подходящего (worst-fit storage placement strategy) стратегия размещения с выбором первого подходящего (first-fit storage placement strategy) стратегии управления памятью (storage management strategies) уплотнение памяти (compaction of storage) управление памятью (storage management) упреждающая выборка, выборка с упреждением (anticipatory fetch) <утряска> памяти ( the storage) физическая, реальная, оперативная память (real storage) фрагментация (fragmentation) Объединение соседних свободных участков памяти Когда в мультипрограммной системе с переменными разделами некоторое задание завершается, мы можем проверить, не соседствует ли освобожденный участок памяти с другими свободными участками (<дырами>). Если соседствует, то мы можем в список свободной памяти занести либо (1) новый свободный участок, либо (2) единый свободный участок, полученный объединением новой <дыры> с соседними. Процесс объединения соседних <дыр> с образованием единого большого свободного участка называется слиянием. Благодаря объединению <дыр> мы формируем непрерывные блоки памяти максимально возможного размера. Уплотнение памяти Часто, даже после объединения соседних свободных участков бывает так, что во всей основной памяти остаются разбросанными отдельные <дыры>, составляющие в целом значительный объем памяти. Иногда очередное задание требует определенного объема основной памяти, но оказывается, что нет ни одного индивидуального свободного участка, достаточно большого для размещения этого задания, несмотря на то, что сумма всех свободных участков превышает общий объем требуемой памяти. Эта проблема решается при помощи метода, называемого уплотнением памяти и состоящего в перемещении всех занятых участков к одному или другому краю основной памяти. Благодаря этому вместо многочисленных небольших <дыр>, обычных для мультипрограммирования с переменными разделами, мы получаем единый большой свободный участок памяти. А уж если вся свободная память представлена одним участком, то ожидающее задание может выполняться, если ему требуется память, не превышающая размера этого единого полученного в результате уплотнения участка. Иногда уплотнение памяти образно называют <утряской памяти>, а среди программистов бытует термин <сбор мусора>. Уплотнение памяти имеет свои недостатки: 1. Оно отнимает ресурсы системы, которые можно было бы использовать продуктивно. 2. Во время уплотнения памяти система должна прекращать любые другие работы. Результатом этого могут стать непрогнозируемые времена ответа для пользователей диалогового режима, и это может оказаться неприемлемым для систем реального времени. 3. Уплотнение предполагает перемещение заданий в памяти. Это означает, что информация, связанная с размещением программы и обычно теряющаяся после загрузки программы, теперь должна сохраняться в легкодоступной форме. В типичном случае быстро меняющейся смеси заданий возникает необходимость частого уплотнения памяти. Затрачиваемые на это системные ресурсы могут не оправдываться получаемыми при этом выгодами.