Як операційна система (бажано Linux) знає, що ви отримали доступ до місця пам'яті, до якого вам заборонено?
Це питання надихнуло цих проклятих покажчиків! Як я це бачу: усе в комп’ютерах полягає в компромісі між швидкістю, безпекою, цілісністю і подібними речами.
Я добре знаю карти пам’яті в Linux, але мені здається трохи смішним, що ядро перевіряє, чи місцезнаходження, до якого ви намагаєтесь отримати, знаходиться у дійсному діапазоні КОЖНЕ ЧАС, коли ви робите доступ. Це здається, що це витратить стільки часу, який можна витратити, роблячи щось більш продуктивне (але, можливо, менш безпечне, без перевірки!). Чи, можливо, він запам'ятовує всі недавні доступу та перевіряє їх на кожній галочці апаратного таймера? (Але це звучить небезпечно, і знову ж таки повільно.)
Мене здивувало, що це питання, як видається, не відповідає ніде. Мені це завжди було цікаво. Змушує мене думати, що є розділ апаратного забезпечення, який зробить це від імені ОС, на приємному, зручному рівні абстракції. Але все ж, можливо, буде потрібно завантажувати наступні карти пам'яті процесів на кожен контекстний комутатор, який знову звучить повільно.
Так, так, у будь-якому випадку, я продовжую трохи: як ОС виявляє порушення пам'яті?
Спасибі