Потребление памяти напрямую зависит от конфигурации системы. В качестве примера рассмотрим минимальную конфигурацию на 64-х битной системе, включающую в себя Супервизор, сервис терминала и одну пользовательскую задачу - alone. В рассмотренном примере процесс alone является первым и единственным пользовательским процессом.
Эта конфигурация системы Хамелеон использует 496 килобайт оперативной памяти, которую занимают составные сегменты и динамически аллокированные страницы.
Процесс
Процесс - это одна или нескольк Задач, выполняющихся в выделенном (своём собственном) адресном пространстве.
Задача
Термин Задача подразумевает программный поток (нить исполнения) выполняющийся в каком либо адресном пространстве.
Составные сегменты
Код, константы и статические переменные исполняемых файлов распологаются в составных сегментах. Эти сегменты создаются в момент загрузки исполняемых файлов и существуют до тех пор, пока существует хотя бы одна копия загруженного процесса.
При порождении новой копии процесса дочерний процесс использует код и константы родительского процесса. При этом статические переменные родительского процесса, куча процесса и стек копируются в динамически выделяемые сегменты порождённого процесса.
Таким образом три модуля используют для кода, констант и статических переменных три составных сегмента - по составному сегменту на каждый модуль:
Общий объём используемой статической памяти - 256 килобайт для трёх модулей.
Динамически аллокированные страницы
Система использует динамическое распределение памяти для кучи и стека. Единственная задача, использующая статически объявленный стек - roottask (в рассматриваемой конфигурации - задача Supervisor-64). Все остальные задачи, независимо от того, работают ли они в контексте Супервизора или в собственном адресном пространстве, используют динамическое выделение стека.
Общий размер стека, используемый всеми задачами Хамелеона в рассматриваемой конфигурации, составляет 108 килобайт. Задачи Sigma1, Timer, HAL, tty-64 и Logger используют по 8 килобайт стека, обработчик прерываний клавиатуры (задача irq0 - keyboard) использует 4 килобайта стека, а пользовательский процесс использует стек размером 64 килобайта.
Куча используется для динамического выделения памяти. Пользовательская функция выделения памяти ищет свободный блок в куче и если не находит подходящий блок, посылает Супервизору запрос "ChangeHeapSize", при помощи которого Супервизор добавляет необходимое количество страниц памяти к куче процесса.
Освобождение ресурсов
В случае завершения задачи или процесса занимаемые ими ресурсы возвращаются Супервизору и впоследствии могут быть делегированы другой задаче или процессу.
Возможности системы в рассматриваемой конфигурации
Супервизор предоставляет интерфейс для управления процессами, задачами, памятью, таймерами и сигналами, а также для регистрации и поиска сервисных задач операционной системы.
Сервис терминала предоставляет 10 виртуальных ANSI-совместимых терминалов на основе EGA/VGA видеокарты. Поддерживает LineDiscipline и стандартный набор ioctl.
Процесс init (в рассматриваемой конфигурации - процесс alone), помимо первоначальной настройки системы и связывания модулей, предоставляет простейший интерпретатор команд, с помощью которого пользователь может взаимодействовать с модулями системы. В случае, если по какой-то причине невозможно монтировать корневую файловую систему, процесс init может использоваться для отладки или ручного старта системы.
Неиспользуемые модули в рассматриваемой конфигурации
Эта конфигурация не содержит модуль файловой системы и сетевой модуль, а так же не содержит сервисов, кроме драйвера ANSI терминалов.
Возможности оптимизации потребления памяти
Потребление оперативной памяти при необходимости можно сократить:
Этот обзор не рассматривает память, необходимую самому микроядру и корневому менеджеру памяти - Sigma0.