• Фанера 12мм в Москве купить

    фанера 12мм в Москве купить

    www.fantorg.ru

  • Заказать газель по москве

    Для вас в нашей организации заказать газель по москве по привлекательной цене.

    obozz.ru





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


Seqlock-блокировки

Когда используются спин-блокировки чтения/записи, запросы, выдаваемые трактами ядра на выполнение операции read iock или write iock, имеют одинаковый приоритет. Читающие тракты должны ждать, пока завершится пишущий тракт, а пишущему тракту приходится ждать завершения всех читающих.
Seqlock-блокировки, введенные в Linux 2, аналогичны спин-блокировкам чтения/записи, но предоставляют пишущим трактам намного более высокий приоритет. Пишущему тракту разрешается работать даже при наличии активных читающих потоков. Положительная сторона этой стратегии состоит в том, что пишущий тракт никогда не ждет (если нет другого активного пишущего потока); отрицательная же заключается в том, что читающему тракту иногда приходится несколько раз считывать одни и те же данные, пока он, наконец, не получит действующую копию.
Каждая seqlock-блокировка представлена структурой seqiock t, которая состоит из двух полей: поля lock, имеющего тип spiniock t, и целочисленного поля sequence. Это второе поле играет роль счетчика порядковых номеров.

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

Переменная seqiock t инициализируется в состояние разблокировано”, для чего ей напрямую присваивается значение seqlock unlocked, либо вызывается макрос seqiock init. Пишущие тракты получают и освобождают seqlock- блокировку, вызывая функции write_seqlock И write sequnlock . Первая функция захватывает спин-блокировку в структуре seqiock t, затем увеличивает на единицу счетчик порядковых номеров. Вторая функция увеличивает счетчик еще раз и освобождает спин-блокировку. В результате получается, что, когда пишущий тракт занимается своим делом, счетчик содержит нечетное число, а когда трактов потоков нет, в счетчике хранится четное.

Предыдущая страница | 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 | Следующая страница




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

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

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

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

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

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

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

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

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