• Минимальный заказ 800 руб, такси межгород

    Минимальный заказ 800 руб, такси межгород

    www.translux.ru





Linux Kernel (Ядро линукса) (часть 2)


Управление выделением дескрипторов запросов

Читать про богатых людей. истории успеха предпринимателей

При высокой активности обращений к диску ограниченный объем динамической памяти может стать узким местом для процессов, добавляющих новые запросы в очередь q. Чтобы справиться с подобной ситуацией, каждый дескриптор request queue Содержит Структуру request list, КОТОрая СОСТОИТ ИЗ!
- указателя на пул памяти для дескрипторов запросов (см. главу 8);
- двух счетчиков, отслеживающих количество дескрипторов запросов, выделенных для чтения и записи соответственно;
- двух флагов, показывающих, возникли ли ошибки при последнем выделении дескрипторов запросов для чтения и записи соответственно;
- двух очередей, содержащих приостановленные процессы, ожидающие выделения дескрипторов запросов для чтения и записи соответственно;
- очереди из процессов, ожидающих, когда очередь запросов будет принудительно опустошена.

новости федерации бокса город Челябинск

Функция bik get request о пытается получить свободный дескриптор запроса из пула памяти, выделенного для данной очереди запросов. Если памяти не хватает, а пул исчерпан, функция либо приостанавливает текущий процесс, либо (если управляющий тракт ядра не может быть блокирован) возвращает null. В случае успешного выделения дескриптора запроса функция сохраняет в поле ri дескриптора адрес структуры request iist, принадлежащей данной очереди запросов. Функция bik put request о освобождает дескриптор запроса, причем, если его счетчик ссылок стал равен нулю, дескриптор возвращается в пул, из которого был взят.

Борьба с переполнением очереди запросов

Для каждой очереди установлено максимальное количество ждущих запросов. Поле nr requests дескриптора запроса хранит это максимальное число для пересылки данных в каждом направлении. По умолчанию очередь может содержать до 128 ждущих запросов на запись и столько же на чтение. Если количество ждущих запросов на чтение (запись) превысит значение nr requests, очередь помечается как заполненная до отказа путем установки флага QUEUE_FLAG_READFULL (QUEUE_FLAG_WRITEFULL) В ПОЛе queue_flags ДеСКриптора очереди запросов. Процессы, которые могут быть блокированы, но пытаются добавить запросы на пересылку данных в этом направлении, приостанавливаются, т. е. заносятся в соответствующую очередь структуры
request_list.

Заполненная до отказа очередь запросов отрицательно влияет на производительность системы, потому что она вынуждает многие процессы находиться в приостановленном состоянии в ожидании завершения операций ввода/вывода. Поэтому, если количество запросов, ждущих пересылку данных в определенном направлении, превысит значение поля nr congestion on дескриптора запроса (по умолчанию равное 113), то ядро уже считает очередь переполненной и пытается понизить скорость создания новых запросов. Переполненная очередь запросов перестает считаться таковой, когда количество запросов в ней опускается ниже значения поля nr congestion off (по умолчанию 111). Функция bik congestion wait о приостанавливает текущий запрос до тех пор, пока очередь не перестанет считаться переполненной, либо до истечения некоторого времени.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без проблем

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга для вас. А так как к книге прилагается компакт- диск с готовой к работе операционной системой Knoppix Live CD, то лишь достаточно вставить его в привод и перегрузить компьютер,...

Linux Kernel (Ядро линукса) (часть 1)

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

Linux Kernel (Ядро линукса) (часть 2)

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

Linux Kernel (Ядро линукса) (часть 3)

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer head. Этот дескриптор содержит всю информацию, необходимую ядру для работы с блоком, так что перед обработкой блока ядро обязательно проверяет голову...