Алгоритм утилизации страничных кадров
Один из удивительных свойств системы 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 | Следующая страница