• Продажа авиабилетов и онлайн бронирование авиабилетов

    продажа авиабилетов и онлайн бронирование авиабилетов

    avia.tickets.ua

  • Скачать бесплатно обмен webmoney keeper Приват24 УКРАИНА

    скачать бесплатно обмен webmoney keeper Приват24 УКРАИНА

    comfortmoney.ru





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


Алгоритм утилизации страничных кадров

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

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

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

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

Таким образом, рано или поздно вся память оказывается выделенной процессам и кэшам. Алгоритм утилизации страничных кадров ядра Linux пополняет списки свободных блоков системы, воруя” страничные кадры как у процессов режима пользователя, так и у кэшей ядра.

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

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

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




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

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

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

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

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

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

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

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

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