
- •/Классификация операционных систем
- •Сравнительные характеристики ос.
- •/Процессы и примитивы.
- •Примитивы.
- •Процессы.
- •/Предполагаемая среда выполнения процессов.
- •/ Диаграмма переходов.
- •/Создание процессов.
- •/Уровневое представление ос unix
- •/Функции ядра операционной системы.
- •/Понятие прерываний в ос
- •/Структура ос
- •/Обзор подсистем ядра Unix
- •Описание подсистем ядра unix
- •Планирование но наивысшему приоритету (hpf)
- •Метод круговорота (карусель)
- •Очереди с обратной связно (fв)
- •Планирование в unix.
- •Типы многозадачности.
- •Состав планировщика
- •Зависимости подсистем ядра
- •Контроллер памяти (Метоrу Manager)
- •Механизм свопинга (Swapping)
- •Механизм пейджинга (Paging)
- •Внешний интерфейс
- •Verify_area()– проверка прав на доступ к выделенному региону памяти; get_free_page() / free_page() – выделение и освобождение физической памяти.
- •Реализация программ выделения памяти
- •Сборка мусора
- •Типы сборщиков памяти
- •Взаимодействие внутренних модулей мм
- •Архитектура vfs
- •Интерфейсы файловой системы
- •Ioctlo: установить атрибуты файла;
- •Защита файлов
- •Списки прав доступа
- •Механизмы обмена данными в vfs
- •Буферный кэш.
- •Механизмы обмена данными.
- •Логическая файловая система
- •Физическая организация файловой системы
- •Структура файла обычного типа
- •Примечания к физической организации vfs
- •Сетевая подсистема (Net)
- •Состав сетевой подсистемы
- •Представление и структуры данных
- •Внутренняя структура подсистемы
- •Зависимости сетевой подсистемы
- •Подсистема межпроцессного взаимодействия
Внешний интерфейс
Контроллер памяти (ММ) имеет два вида интерфейсов для реализации
своих функций. Это интерфейс процесса пользователя и интерфейс для
связи с другими модулями ядра. Приведем некоторые функции интерфейса пользователя (System Сal1 Interface):
-
mаlloc / free()– выделение/освобождение региона памяти для использования в процессе пользователя; например вызов void *mallос(long пumbytes); выделяет заданное число байтов памяти и возвращает указатель на первый байт.
-
brk() –это очень простой системный вызов. При выделении памяти под конкретный процесс определяются его границы в памяти. Так вот, brk() просто сдвигает одну из них (в сторону уменьшения или увеличения), для добавления или удаления памяти процессу. Необходимо заметить, что этот вызов не включен в стандарт Си (ANSI) и POSIX.
-
mmap() / munmap() / msync() / mremap() – создание и использование виртуального файла в некотором регионе памяти. Функция mmap() или "memory mар" (карта памяти) похожа на brk(), но более гибкая. Во-первых, она может разметить память где угодно, а не только на границе памяти процесса. Во-вторых, она не только может соотнести виртуaльные адреса и физические для ОЗУ или свопинг-файла, но также может сделать то же самое и для файлов и их расположений, так что адресация памяти при чтении и записи будет иметь эффект записи и чтения данных напрямую из файла.
-
mprotect() – Блокирование виртуального файла от изменений;
-
mlock() / mlockall() / munlock() / munlockall() – фиксирование/освобождение области памяти от процесса свопинга;
-
swapon() / swaponff() – добавление/удаление файла свопинга в систему;
К внутреннему системному интерфейсу относятся функции:
-
kmalloc() / kfree() – выделение и освобождение памяти для использования в структурах данных ядра;
-
Verify_area()– проверка прав на доступ к выделенному региону памяти; get_free_page() / free_page() – выделение и освобождение физической памяти.
Реализация программ выделения памяти
Если вы хотите оценить и/или изменить требуемый объем памяти, то вам придется столкнуться со следующими действиями:
-
определить, достаточно ли у вас памяти для обработки данных;
-
получить секцию памяти из доступной памяти;
-
вернуть эту секцию обратно в пул доступной памяти, чтобы потом ее могли использовать другие программы.
Библиотеки, которые реализуют функции для динамической работы с
памятью, называются аллокаторами (allocators). Название произошло от их основных функций – выделение (allocating) и освобождение (deallocating) памяти. Чем программа динамичнее (в плане работы с ресурсами), тем
больше внимания необходимо уделять вопросу управления памятью и тем ответственнее становится выбор механизмов ра6оты аллокатора.
Существуют много реализаций функции malloc() (которая является основной функцией любого аллокатора), каждая из них имеет свои сильные и слабые стороны. Есть несколько неоднозначных моментов, которые необходимо учитывать при использовании некоторого аллокатора, включая:
-
скорость выделения памяти;
-
скорость осво6ождения памяти;
-
поведение в условиях потока (threaded environment);
-
поведение, когда память почти закончилась;
-
расположение Кэша;
-
переполнение памяти с управляющими данными;
-
поведения в условиях виртуальной памяти (Virtual Memory Environments);
-
работы с малыми и большими объектами;
-
поддержка режима реального времени.
Поведение аллокатора при работе с каждой такой позицией определяет качество работы программы. И для повышения качества программ нужно стараться выбрать наиболее оптимальный аллокатор из имеющихся.