Обеспечение высокой производительности

"Плоская" модель основной памяти

Как уже отмечалось, компилятор Watcom C генерирует код, использующий преимущества архитектуры процессоров 80386 и 80486. Он использует 32-битовые ближайшие указатели (near pointers) и 4-байтовые целые числа. Использование 32-битовых указателей делает концепцию моделей памяти (Tiny, Small, Compact, Medium, Large, Huge и т. д.) во многом ненужной. NLM-модули компилируются для непрерывной модели памяти с абсолютной адресацией ("плоской" модели), в которой сегментация памяти гораздо менее важна, чем в других. Однако 32-битового указателя достаточно для адресации всей доступной памяти. Кроме того, компилятор генерирует код, выполняемый в виртуальном режиме (для NetWare 4.х).

Таким образом, основная память файлового сервера NetWare интерпретируется как один большой сегмент, но идентифицируется для использования NLM с помощью функций распределения.

Когда процесс (нить) запрашивает память, ему выделяется пул памяти. Этот пул может быть освобожд╦н, но оставлен в пуле процесса, либо освобожд╦н и возвращ╦н в системный пул.

Когда запрашивается память, NetWare использует три массива указателей для определения того, где находится доступная память. Это массивы отслеживают блоки доступной памяти. Первый массив отслеживает блоки с 16-байтовыми приращениями от 16 байтов до 1024 байтов каждый. Второй массив отслеживает блоки с 256-байтовыми приращениями. Третий массив указателей отслеживает блоки, превышающие 4 Кб. Основываясь на размере запрошенной NLM-модулем памяти, NetWare выполняет поиск в соответствующем массиве, пока не находит затребованный объ╦м памяти.

В NetWare 4.х внесены следующие улучшения:

  1. Когда память выделяется и освобождается снова и снова, это может привести к е╦ фрагментации, и некоторые блоки будут оставаться неиспользуемыми. В таких случаях выполняется некоторая работа по очистке. Такая "сборка мусора" обеспечивает использование ранее недоступных блоков памяти. В таблице 2.13 перечислены SET-параметры NetWare 4.х, регулирующие "сбор мусора".
  2. Предыдущие версии NetWare имели несколько пулов памяти, с которыми должен был работать программист, создающий NLM-модуль. В NetWare 4.х он может работать с одним системным пулом. После того, как память получена из системного пула, каждый NLM-модуль работает со своим собственным пулом памяти, пока память не возвращается в системный пул.

Таблица 2.13. SET-параметры, регулирующие "сбор мусора" в NetWare 4.х

SET-параметрЗначение по
умолчанию
Границы
изменения
Примечания
Garbare Collection
Interval
15 мин.1 мин. - 1 часОпределяет максимальный интервал времени между "чистками" памяти.
Number of Frees for
Garbare
1000100 - 10000Определяет минимальное число освобождений памяти для запуска системной программы чистки памяти.
Minimum Free Memory for Garbare Collection80001000-1000000Определяет минимальный размер освобождаемой памяти для запуска программы чистки памяти.
Невытесняющая многозадачность

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

Большинство многозадачных сетевых операционных систем, таких, как OS/2 и UNIX, являются системами, где поддерживается модель с приоритетами. Предположим, что в одной из этих ОС выполняются две задачи (рисунок 2.33 а), прич╦м задача 2 имеет более высокий приоритет, чем задача 1.

После операции с диском (чтение или запись) операционная система активизирует задачу 2, имеющую более высокий приоритет (рисунок 2.33 а, точка 1). При этом задача 1 прерывается (вытесняется) и переходит в состояние ожидания. Если для задачи 2 требуется выполнить операцию с диском, то операционная система приостановит е╦ и переда╦т управление задаче 1 (рисунок 2.33 а, точка 2) и т. д.

Рис. 2.33. Схемы переключения процессов
(а - для модели с приоритетами, б - для модели без приоритетов)

Многозадачная сетевая операционная система NetWare является системой, где поддерживается модель без приоритетов (невытесняющая многозадачность). Если какая-либо задача (нить) выполняет функцию ThreadSwitch, то ОС помещает е╦ в конец очереди RunList и переда╦т управление другой задаче (рисунок 2.33 б, точки 1,2).

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

В системах с приоритетами необходимо перед обновлением ресурсов (областей основной памяти, записей файлов и т. д.) выполнить их блокировку (рисунок 2.34 а, точки 1, 2, 3, 4).

Это связано с тем, что задача может быть прервана в любой момент времени. Но, во-первых, на блокировку и разблокировку разделяемых ресурсов тратится процессорное время, что снижает производительность системы. Во-вторых, при использовании блокировок часто возникают тупиковые ситуации.

Предположим, что задача 1 заблокировала запись 1 какого-либо файла (рисунок 2.34 а, точка 1) и была прервана задачей 2. Пусть задача 2, в свою очередь, блокирует запись 2 (точка 2). При попытке заблокировать запись 1 задача 2 переходит в состояние ожидания, так как эта запись уже заблокирована задачей 1. Управление переда╦тся задаче 1, которая пытается блокировать запись 2 и переходит в состояние ожидания, так как эта запись уже была заблокирована задачей 2. Таким образом, ни одна из задач (1 и 2) не может продолжить выполнение из-за возникшей тупиковой ситуации.

Преимуществом системы с приоритетами является то, что при выполнении операции с диском процессор переключается на выполнение другой задачи.

В NetWare, где поддерживается модель использования процессора без приоритетов, переключение на другую задачу планирует сама программа (NLM-модуль), используя команду ThreadSwitch в подходящий момент. Т. е. задача 1 может выполнить все требуемые обновления в разделяемых записях 1 и 2, а затем передать управление другой нити с помощью команды ThreadSwitch (рисунок 2.34 б). В этом случае нет необходимости в использовании блокировок ресурсов. Это, во-первых, повышает быстродействие системы, а, во-вторых, устраняет возможность возникновения тупиковых ситуаций.

Рис. 2.34. Схемы использования разделяемых ресурсов
(а - для модели с приоритетами, б - для модели без приоритетов)

Недостатком системы без приоритетов является то, что при выполнении операции с диском (чтение в кэш с диска) операционная система NetWare не переключает процессор на выполнение другой прикладной задачи. Но этот недостаток компенсируется тем, что в NetWare, как правило, используется кэш-память большого размера, и 90% запросов на ввод данных удовлетворяется из этого кэша.

Предыдущая глава || Оглавление || Следующая глава

Copyright © CIT