Причина, по которой ядро ограничивается 896 мегабайтами, связана с производительностью.
Чем больше места доступно ядру, тем меньше адресного пространства, доступного для пространства пользователя. Это разделение на 3/1 означает, что наибольшее количество адресного пространства, которое пользовательский процесс может выделить, составляет 3 гигабайта - конечно, из-за фрагментации памяти на практике он начинает давать сбой около 2,5 гигабайт.
Доступны различные разбиения: 2/2 и 1/3, которые выделяют два гигабайта адресного пространства для ядра и два гигабайта для пространства пользователей, и три гигабайта для ядра и одно гигабайта адресного пространства для пространства пользователей. (Это firefox
означает сейчас , потребляющее 1249 мегабайт, поэтому оно не может поместиться в одно из этих 1/3 разделенных ядер.)
Существуют некоторые ядра (возможно, только для поставщиков?), Которые поддерживают то, что известно как разделение 4: 4 - четыре гигабайта адресного пространства для ядра и четыре гигабайта адресного пространства для пространства пользователей. Они чрезвычайно полезны для 32-разрядных систем, которые имеют 32 или 64 гигабайта памяти - поскольку большая система, вероятно, имеет много дисков, много операций ввода-вывода в полете и требует значительной буферизации как для блочных устройств, так и для сетевого трафика. Однако эти ядра 4: 4 требуют очистки кэша TLB при входе и выходе из каждого системного вызова. Эти сбросы TLB приводят к значительному замедлению работы в «малых» системах и имеют смысл только в «больших» системах, где дополнительная память может кэшировать достаточно дисковых / сетевых ресурсов для повышения производительности системы.
Другие разделы не вызывают этот сброс TLB, потому что TLB поддерживает бит разрешений, указывающий, доступны ли страницы, когда ЦП находится в состоянии пользователя или в режиме супервизора: страницы ядра всегда отображаются, но помечаются как доступные только тогда, когда Флаг супервизора ЦП установлен. Таким образом, вход и выход из ядра происходит быстро при выходе из процесса, который вошел в ядро. При переключении контекста, конечно, TLB должен быть сброшен.