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


Системные вызовы для таймеров POSIX

Стандарт POSIX 1003.lb вводит новый тип программных таймеров для программ, работающих в режиме пользователя, в частности, для многопоточных приложений и приложений реального времени. Эти таймеры нередко называются таймерами POSIX.
Любая реализация таймеров POSIX должна предлагать программам пользовательского режима часы POSIX, т. е. виртуальные источники отсчета времени, имеющие заранее определенную точность и другие свойства. Всякий раз, когда приложению нужно воспользоваться таймером POSIX, оно создает новый таймерный ресурс, выбирая из существующих часов POSIX в качестве базы для хронометрирования. Системные вызовы, позволяющие пользователям работать с часами и таймерами POSIX

Ядро Linux предлагает два вида часов POSIX:

- clock realtime— эти виртуальные часы представляют системные часы реального времени, фактически, переменную xtime. Точность показаний, возвращаемая системным вызовом ciock getresо, равна 999 848нс, что соответствует приблизительно 1 ООО обновлений переменной xtime в секунду;
- clock monotonic— эти виртуальные часы представляют системные часы реального времени, свободные от каких-либо искажений, связанных с синхронизацией с внешним источником времени. Фактически, эти виртуальные часы представлены суммой двух переменных: xtime и waii_ to monotonic. Точность этих часов POSIX, возвращаемая системным вызовом ciock getres , равна 999 848 наносекундам.
Ядро Linux реализует таймеры POSIX с помощью динамических таймеров. Таким образом, они аналогичны традиционным таймерам интервалов типа itimer real, описанным в предыдущем разделе. Вместе с тем, таймеры POSIX намного надежнее традиционных таймеров интервалов.

Приведем два существенных различия между ними:

- когда истекает время традиционного таймера интервалов, ядро в любом случае посылает процессу, активизировавшему таймер, сигнал sigalrm. Когда же истекает время таймера POSIX, ядро может послать сигнал лю
бого типа либо всему многопоточному приложению, либо одному заданному потоку. Ядро также может форсировать выполнение уведомляющей функции в потоке приложения, а может и ничего не предпринимать (здесь все зависит от библиотеки режима пользователя, обрабатывающей это событие);
- если время традиционного таймера интервалов истекало неоднократно, а процесс режима пользователя не мог принять сигнал (например, потому что сигнал был блокирован, или процесс не выполнялся), только первый сигнал доходит до процесса, а остальные сигналы sigalrm теряются. То же самое справедливо и в отношении таймеров POSIX, но процесс может сделать системный вызов, чтобы узнать, сколько раз истекало время таймера с момента генерирования первого сигнала.

Предыдущая страница | 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 без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

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

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

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

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

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

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...