- •1.Элементы пвэм. 2. Узлы и блоки пэвм.
- •3.Память статического типа
- •4.Память динамического типа
- •8. Интерфейс rs-232с
- •9. Передача данных по usb
- •10. Линии питания и данных usb
- •11. Архитектура usb
- •12. Пакеты usb
- •13.Память эвм
- •Назначение и виды памяти.
- •Современные микросхемы озу бывают двух видов - статические и динамические.
- •Организация внутренней памяти
- •14.Виртуальная модель памяти
- •1.2. Критерии эффективности работы сети
- •1.2.1. Время реакции
- •1.2.2. Пропускная способность
- •1.2.3. Показатели надежности и отказоустойчивости
- •21 Операцио́нная систе́ма
- •22.Ос реального времени.
- •26.Сетевое взаимодействие ос и клиентских приложений.
- •27. Выделение памяти для приложения.
- •28. Синхронизация
- •29. Тупики
- •30.Семафоры Дейкстры
- •32. Организация памяти
- •33. Файловые системы
- •36. Сравнение файловых систем
- •Объектно-ориентированные особенности языка
- •Модульность программного кода
- •Основные понятия
- •Определение ооп и его основные концепции
- •43. Указатель
- •44.Умный указатель
- •Владеющие указатели
- •Указатели с подсчётом ссылок
- •Реализации
- •Проблема циклических ссылок
27. Выделение памяти для приложения.
Память в современных ПК представляет собой иерархическую структуру. Небольшая часть –быстрая, дорогая, энергозави-симая кэш-память. Среднее кол-во среднескоростной, средней по цене, энергозависимой памяти ОЗУ, и большое кол-во мед-ленной, дешевой, энергонезависимой памяти на жестком диске. Одна из задач ОС – координация использования всех этих составляющих. Часть ОС, отвечающая за управление памятью называетсяменеджером памяти. Он отслеживает, какая часть памяти свободна, какая занята, при необходимости выделяет память ресурсам и освобождает их по завершении про-цесса, управляет обменом между ОЗУ и диском. В общем случае адреса в программе могут быть абсолютными, т.е. компилятор генерирует код с непосредственными физическими адресами. Могут быть относительными. В этом случае процесс загружается в память целиком, однако адрес его загрузки заранее неизвестен. Компилятор генерирует специальную таблицу настройки адресов, которая используется при загрузке процесса. Термин виртуальная память используется, когда физический адрес страницы может изменяться в процессе выполнения программы в результате выгрузки и загрузки в другую область. В этом случае настройка адресов происходит аппаратно-программным способом. Рассмотрим методы организации памяти.
Непрерывная организация. В этом случае фактически вся память разделена на три области: память, занимаемая ОС, память, занимаемая программой, свободная память. ОС может находиться в нижней части памяти, начиная с нулевых адресов ОЗУ. Эта модель ранее применялась на майнфреймах и мини-компьютерах, в настоящее время малоупотребима. ОС может располагаться в верхних адресах памяти, в ПЗУ. Этот вариант используется в некоторых карманных компьютерах и встроенных системам. Третий вариант – драйверы устройств находятся вверху, в ПЗУ, а остальная часть ОС в ОЗУ. Этот вариант устанавливался на ранних моделях ПК, например, MS-DOS. В случае непрерывной организации в каждый конкретный момент времени может работать только один процесс. Как только с терминала вводится команда. ОС копирует заданную программу с диска в память, запускает ее. После окончания ждет новой команды. Новая программа в памяти грузится поверх старой.
Использование оверлеев предполагает, что вся программа может быть разбита на части – сегменты. Оверлейная программа имеет одну главную часть и несколько сегментов, причем в памяти одновременно могут находиться только часть сегментов, включая главный. Структура использовалась, когда логическое адресное пространство программы было больше, чем сво-бодная память .Пока в ОЗУ находятся выполняющиеся сегменты, остальные находятся во внешней памяти. После заверше-ния текущего сегмента либо он сам обращается кОС с указанием, какой сегмент теперь необходимо загрузить, либо возвра-щает управление главному сегменту, который и взаимодействует с ОС, какой сегмент выгрузить, а какой загрузить. Вначале обязанность выполнить соответствующие системные вызовы ложилась на программистов, потом системы программирова-ния стали выполнять это автоматически при указании соответствующего режима.
Фиксированные границы раздела. Весь объем ОЗУ разбивается на несколько, возможно, различных по объему, разделов. В каждом разделе в один момент времени может располагаться только один процесс. При этом можно использовать и овер-лейные структуры. Первые мультипрограммные ОС строились по такому принципу.
В случае отдельных очередей к каждому из сегментов возникает проблема: к некоторым большим сегментам нет очереди, в то же время небольшие задачи могут организовать значительную очередь, ожидая запуска, хотя память в принципе свободна. В случае общей очереди имеется несколько стратегий выбора раздела для размещения задачи. 1 вариант. Задача, находящаяся ближе всего к началу очереди и подходящую для выполнения в освободившемся разделе, загружается и начинается обработка. 2 вариант. Небольшие задачи нежелательно загружать в большие сегменты. В очереди происходит поиск наибольшей из помещающихся в разделе задач, которая и запускается. Чтобы избежать дискриминации маленьких задач, в системе существует хотя бы один раздел достаточно маленького размера. Второй вариант – задача не может быть пропущена более заданного числа раз.
В любом случае существует проблема – часть памяти в каждом разделе не используется, что не рационально. Использование двух принципов решает эту проблему: выделять ровно такой памяти, какой необходим процессу, размещать процесс не в одной непрерывной области, а в нескольких, в т.ч. и не смежных.
Разделы с подвижными границами. В этих системах использованы указанные выше принципы. При этом используется своппинг или подкачка. Каждый процесс полностью переносится в память, работает, затем целиком выгружается на диск. Основное отличие в том, что количество, размещение и размер разделов изменяются динамически по мере поступления и завершения процессов. Это улучшает использование памяти, но усложняет операции размещения процессов и освобождения памяти.
Как видно из рисунка, возникает фрагментация памяти. Из-за сильной фрагментации может сложиться ситуация, когда диспетчер не сможет образовать новый раздел, хотя общий объем свободной памяти и достаточен для запуска процесса. В этом случае может использоваться уплотнение памяти – когда все разделы сдвигаются, устраняя фрагментацию. На это может потребоваться достаточно длинное время. Помимо фрагментации имеется и еще одна проблема – процесс может потребовать дополнительного распределения памяти уже во время выполнения. Какой объем памяти предоставлять процессу при образовании сегмента? Как правило, им предоставляют несколько больше памяти, чем необходимо. Если же и эта память закончится, то либо процесс переносится в больший сегмент, либо выгружается на диск до момента, когда станет возможным организовать сегмент необходимого размера. При этом возможна следующая схема: область данных и стек, которые по мере необходимости растут по направлению друг к другу. Свободная область используется как куча для распределения памяти под данные.