Максимальная память, применимая системой RHEL 6 на 32 бита

Если $COMP_WORDBREAKS содержит (который является значением по умолчанию в моей системе), затем, серьезные проблемы возникают, который я не мог решить (после того, как нажатие Tab и Enter один было удалено).

Но если Вы удаляете его из той переменной среды затем, это работает:

_foo () {
  if [[ "$COMP_WORDBREAKS" =~ "@" ]]; then
    echo ""
    echo '$COMP_WORDBREAKS contains "@"; aborting'
    COMPREPLY=()
  else
    at_in=no
    if [[ ${COMP_WORDS[COMP_CWORD]} =~ "@" ]]; then
      var="${COMP_WORDS[COMP_CWORD]}"
      tail="${var#*@}"
      prefix="${var%"$tail"}"
    else
      prefix=""
    fi
    COMPREPLY=($(cut -f 1 -d ' ' <~/.ssh/known_hosts |
      sed -e 's/,/\n/g' | uniq |
      awk -v prefix="${prefix}" '/\[/ {next}; {print prefix $0;}'))
    COMPREPLY=($(compgen -W "${COMPREPLY[*]}" "${COMP_WORDS[COMP_CWORD]}"))
  fi
}

complete -F _foo ssh
5
13.04.2017, 15:37
2 ответа

Ну, я не ожидаю краткого ответа, чем тот, который доступен из здесь .

То, что я понимаю о 32-битной ОС, адрес выражается в 32 битах, поэтому, у большинства ОС может использовать пространство памяти 2 ^ 32 = 4 ГБ

, тем самым то, что процесс может Адрес составляет 4 ГБ. Вы потенциально запутаете память с адресным пространством . Процесс может иметь больше памяти, чем адресное пространство. То есть совершенно законно и , довольно распространенные при обработке видео и других памяти интенсивных приложений. Процесс можно выделить десятки ГБ памяти и поменять его в и из адресной площади по желанию. Только 2 ГБ может попасть в пользователь адресное пространство одновременно.

Если у вас есть гараж из четырех автомобилей в вашем доме, вы все еще можете владеть пятьдесят автомобилей. Вы просто не можете держать их всех в своем гараже. Вы должны иметь вспомогательное хранилище где-то еще, чтобы хранить не менее 46 из них; Какие машины вы держите в своем гараже и какие из них вы держите на стоянке на улице, до вас до вас.

Означает ли это любую 32-бильную ОС, будь то Windows или Unix, если машина имеет файл RAM + Page на жестком диске более чем на 4 ГБ, например 8 ГБ оперативной памяти и файла страницы 20 ГБ, там никогда не будет использоваться память "?

Абсолютно это не значит. Один процесс может использовать больше памяти, чем это! Опять же количество памяти, которое использует процесс, почти полностью не связан с объемом виртуального адреса пространства. Процесс использует. Также как количество автомобилей, которые вы держите в своем гараже, совершенно не связаны с количеством собственного автомобилей.

Более того, Два процесса могут делиться не частными страницами памяти . Если двадцать процессов все загружают ту же DLL, процессы все разделяют страницы памяти для этого кода. Они не делятся адрес виртуальной памяти , они разделяют память .

Моя точка зрения, если это не понятно, состоит в том, что вы должны перестать думать о памяти и адресное пространство как то же самое, потому что они не одно и то же самое.

Если эта 32-битная машина OS имеет 2 ГБ ОЗУ и файл страницы RAM и 2 ГБ, увеличение размера файла страницы не поможет производительности. Это правда?

У вас есть пятьдесят автомобилей и гараж из четырех автомобилей, а также 100 автостоянки на улице. Вы увеличиваете размер парковочной площадки до 200 мест. Любой из ваших автомобилей становится быстрее в результате у вас сейчас 150 дополнительных парковочных мест вместо 50 дополнительных парковочных мест?

2
27.01.2020, 20:40

Ответ Рамеша совершенно неверен. У процесса не может быть больше памяти, чем адресное пространство, и просто потому, что он не может адресовать его !! Чтобы использовать более 4 ГБ, процессу необходимо обращаться к нему по адресу, как при использовании ponters в C / C ++ . Если у вас предположительно может быть, например, 10 ГБ ОЗУ, как вы можете указать процессу, чтобы он обращался к данным, расположенным в 5 ГБ, если ваши указатели в 32-битном формате могут достигать не более 4 ГБ? Это невозможно. Все его объяснения относятся к операционной системе. Он может активировать определенные блоки размером не более 4 ГБ из пула, скажем, 64 ГБ. Таким образом, всегда есть максимум 4 ГБ одновременно, и любой процесс может получить доступ не более 4 ГБ. Затем для другого процесса SO может активировать другой блок размером 4 ГБ из пула, но процесс снова будет ограничен 4 ГБ. На самом деле, даже если 32-разрядный указатель может адресовать до 4 ГБ, предел для 32-битного процесса составляет 3 ГБ.

2
27.01.2020, 20:40

Теги

Похожие вопросы