В Linux ядро поддерживает трехуровневую таблицу страниц (независимо от возможностей ЦП). Верхний уровень — это глобальный каталог страницы, и у каждого процесса есть свой собственный каталог,pgd
в mm_struct
. Таким образом, каждый процесс может иметь свои собственные сопоставления, поэтому адрес 12345 в разных процессах указывает на разные физические адреса.
Процессоры на самом деле не знают о процессах, но, как правило, имеют функции для их поддержки. В процессорах типа x86 есть различные функции, связанные с задачами, но на самом деле они, как правило, игнорируются. Поскольку планирование процессов управляется ядром, оно может само отслеживать изменения в таблице страниц и обновлять любое состояние процессора, необходимое для переключения на таблицу страниц нового процесса при переключении задач. На компьютерах с архитектурой x86 это включает обновление управляющего регистра CR3, который указывает на каталог страниц.
Глава Управление таблицей страницв книге Мела Гормана Understanding the Linux Virtual Memory Managerдает хороший обзор.
Вместо того, чтобы использовать лестницу if..elif..elif
, просто проведите один тест на максимальную и минимальную длину:
#!/bin/bash
read -p 'Enter a word :' word
if [[ ${#word} -le 2 ]] || [[ ${#word} -ge 11 ]]; then
echo "Word is too short or long."
else
rev < <(echo ${word})
fi