русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тема 9: Управление памятью в linux


Дата добавления: 2013-12-23; просмотров: 3865; Нарушение авторских прав


1*. Структура памяти в linux

У каждого процесса в системе linux есть адресное пространство, разделенное на 3 логических сегмента

1. text segment

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

2. data segment

Содержит переменные, строки, массивы и другие данные программы. Он состоит из 2-х частей: инициализированные данные и неинициализированные данные. Инициализированная часть сегмента данных содержит переменные и константы компилятора, значения которых должны быть заданы при запуске. Все переменные в неинициализированной части должны быть сброшены в 0.

3. stack segment

На большинстве компьютеров он начинается около старших адресов виртуального адресного пространства и растет вниз к 0. Если указатель стека оказывается ниже нижней границы стека, то происходит аппаратное прерывание, при котором операционная система понижает границу сегмента стека на одну страницу. Когда программа запускается, ее стек не пуст, он содержит все переменные окружения, а также командную строку, введенную оболочке для вызова этой программы. Рассмотрим случай, когда два пользователя запускают одну и ту же программу (или один пользователь два раза одну и ту же программу). Здесь возможно 2 подхода:

1. Хранить в оперативной памяти две копии исходного текста программы

2. Оба процесса ссылаются на один и тот же участок памяти, где находится текст программы.

Во втором случае используется так называемый текстовый сегмент совместного использования. Сегменты данных и стека никогда не бывают общими. Процессы в linux могут обращаться к данным файлов при помощи отображения файлов на адресное пространство (memory mapped files). Эта функция позволяет отображать файл на часть адресного пространства процесса, чтобы можно было читать из файла и писать в файл так, как если бы это был массив байтов, хранящийся в памяти. Запись в этот файл одним из процессов мгновенно становится видимой всем остальным. Отображения на адресное пространство памяти временного файла представляет собой механизм реализации общей памяти для нескольких процессов. Сегмент данных может изменяться в отличие от сегмента текста. Linux разрешает сегменту данных расти при выделении памяти и уменьшаться при ее освобождению. С помощью системного вызова bkr процесс может установить размер своего сегмента данных. Этим системным вызовом активно пользуются malloc.



Управление физической памятью. Каждый процесс в системе linux на 32-разрядной машине получает 3 Гб виртуального адресного пространства для себя, а оставшийся 1 Гб памяти резервируется для его страничных таблиц и других данных ядра. 1 Гб ядра не виден в пользовательском режиме, но становится доступным в режиме ядра. Память ядра обычно находится в нижних физических адресах, но отображается в верхний гигабайт виртуального адресного пространства процесса. Адресное пространство создается с помощью вызова fork и перезаписывается при помощи системного вызова exec. Чтобы несоклько процессов могли совместно использовать физическую память linux отслеживает использование физической памяти, выделяет при необходимости дополнительную память пользовательским процессам и компонентам ядра, динамически отображает области физической памяти на адресное пространство различных процессов. В linux различают 3 зоны памяти:

1. ZONE_DMA – это страницы, которые можно использовать для операций DMA

2. ZONE_NORMAL – это нормальные отображаемые страницы

3.ZONE_HIGHMEM – Страницы с адресами в верхней области памяти, которые не имеют постоянного отображения. Точные границы и компоновка этих зон памяти зависит от архитектуры, например на платформах x86 некоторые устройства могут выполнять DMA операции только в 1-х 16 мегабайтах, следовательно зона DMA находится в диапазоне от 0 до 16 мегабайт. Ядро поддерживает структуру ZONE для каждой из этих 3-х зон и может выполнять выделение памяти для этих 3-х зон поотдельности. Основная память linux состоит из 3-х частей: 1-е две части – ядро и карта памяти (не вытесняются), остальная память разделена на страничные блоки, каждый из которых может содержать страницу текста, данных, стека, страницу с таблицей страниц или списки свободных страниц. Ядро поддерживает карту памяти, которая содержит всю информацию об использовании физической памяти системы.

Карта памяти организована следующим образом:

1. page desctiptor –описывает каждый физический страничный блок системы. Каждый дескриптор содержит указатель на адресное пространство, которому принадлежит страница, пару указателей, которые позволяют ему сформировать дважды связный список с другими дескрипторами (если страницы свободны) и прочие поля, размер дескриптора страницы равен 32 байтам.

2. zone descriptor – содержит информацию об использовании памяти в зоне, такую как количество активных и неактивных страниц нижний и верхний пределы для алгоритмов замещения страниц и др. Кроме того, дескриптор зоны содержит массив свободных областей. Первый элемент этого массива указывает на 1-й дескриптор страницы 1-го блока и свободных страниц. Наличие данной структуры обусловлено возможностью системы linux переноса на архитектуру NUMA. Каждый дескриптор узла содержит информацию об использовании памяти и зонах для данного конкретного узла.

 

Физическая память используется для различных целей, части которой могут выгружаться или не выгружаться на жесткий диск. Ядро системы, как и ни одна из его частей не выгружается на диск, остальная часть памяти доступна для страниц пользователей.

Кроме того операционная система linux поддерживает динамически загружаемые модули, в основном драйверы устройств. Они могут быть большего размера и каждому из них должен быть выделен непрерывный участок ядра памяти.

 

Виртуальный адрес страницы в linux состоит из 5 частей:

1. Глобальный каталог

2. Верхний каталог

3. Средний каталог

4. Страница

5. Смещение

В системе linux используется 4-х уровневая схема таблиц страниц. Поля каталогов используются как индекс в соответствующем каталоге страниц. Глобальный каталог указывает на верхний каталог, верхний каталог указывает на средний и средний указывает на конкретную страницу, которую необходимо использовать в данный момент времени.

 



<== предыдущая лекция | следующая лекция ==>
Тема 8: Загрузка linux | Тема 14: Алгоритмы замещения страниц.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.