Solaris может более или менее читать вперед. В отличие от Linux, Solaris полностью динамичен в ядре и решает, что делать, в зависимости от ограничений и доступной памяти ядра.
Существует также упреждающее чтение, которое контролируется файловой системой, и может быть другой кеш, чем исторический кеш, если вы используете, например, ZFS.
Для лучшего ответа было бы важно, действительно ли вам нравится читать буферизованные устройства, что не выглядит разумным, и было бы важно знать, почему вы хотите узнать что-то о деталях реализации.
Обычно в Solaris вызовы read () к буферизованному фоновому хранилищу преобразуются в копию временной области отображения отображения ядра. В 32-битном ядре IIRC эта переходная область отображения составляет 2 МБ, в 64-битных ядрах она больше. Операции упреждающего чтения реализуются посредством запускаемых вручную вызовов сбоя, которые устанавливаются соответствующим драйвером сегмента (драйвером, который находится между виртуальной памятью переднего плана и фоновой памятью).AFAIK, единственное доступное описание есть в моей дипломной работе WOFS. По этой причине его использовали сотрудники Sun.
Для лучшего понимания полезно знать историческую подоплеку:
28 лет назад SunOS-4.0 была опубликована с новой подсистемой виртуальной памяти. Все современные ОС копируют как минимум идею mmap () из SunOS-4.0. SunOS-4.0, однако, представляет собой нечто большее, поскольку реализует объектно-ориентированную подсистему виртуальных машин.
Есть виртуальная память переднего плана, драйвер сегмента, уровень HAL (MMU) и фоновое хранилище.
В зависимости от типа объекта памяти переднего плана и типа фонового объекта существует специальный драйвер сегментации.
Если у вас есть файловая система в качестве объекта переднего плана и дисковое хранилище в качестве фоновой памяти, драйвер сегмента называется seg_vn
. Если у вас есть сопоставление с устройством, используется sev_dev
.
Чтобы понять, что опережение чтения зависит от объекта, вы можете проверить ufs_vnops.c
и найти ufs_getpage_ra ()
.
Это довольно неэлегантно, но
perl -lne '
($a,$b) = ($2 == "" ? $1 : $2,$1) if /\[(\d+)(?:\:(\d+))?\]/;
for $n (reverse $a..$b) {
print s/\[.*?\]/"[$n]"/re
}
' file
Попробуйте также
$ awk '{split ($1, T, "[][:]"); for (i=T[3]?T[3]:T[2]; i<=T[2]; i++) {$1 = T[1] "[" i "]"; print}}' OFS="\t" file3
signal_a[74] No No No INPUT
signal_a[75] No No No INPUT
signal_a[76] No No No INPUT
signal_a[77] No No No INPUT
signal_a[78] No No No INPUT
signal_a[79] No No No INPUT
signal_b[81] No No No INPUT
signal_b[82] No No No INPUT
signal_b[83] No No No INPUT
signal_c[91] No No No INPUT