Защита адреса при записи
Дошёл до реализации необычного свойства процессора микро-БЭСМ, отсутствующего у современных компьютеров. Каждое слово в оперативной памяти имеет дополнительный бит запрета записи. При попытке записи по этому адресу возникает прерывание "защита адреса при записи". Чтобы всё-таки иметь возможность изменить значение (и бит запрета), память имеет дополнительный сигнал, отменяющий защиту.
Получается полезная возможность, похожая на const в языке Си, но при этом защиту можно включать и отключать по ходу выполнения программы. Что-то отдалённо похожее - теговая архитектура - существовало в некоторых ранних компьютерах, но не прижилось.
Получается полезная возможность, похожая на const в языке Си, но при этом защиту можно включать и отключать по ходу выполнения программы. Что-то отдалённо похожее - теговая архитектура - существовало в некоторых ранних компьютерах, но не прижилось.
no subject
Все влазят, но не всех убивает.
no subject
no subject
void foo(void)
{
#pragma push(fuck)
#pragma fuck(off)
a = 0;
#pragma pop(fuck)
}
no subject
const_cast
(no subject)
(no subject)
(no subject)
no subject
no subject
no subject
Это наверное легко реализуется на встроенных блоках FPGA. А если память реализована на обычной SDRAM? Все равно, если защита записи включена и идет обращение на запись без явного отключения защиты, придется этот контрольный бит сначала прочитать. Ну да, кеширование и прочее как-то помогут, да и запись менее частое событие. Но, думаю, на дескрипторы страниц (вместо битов для отдельных слов) не просто так перешли в более свежих архитектурах.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
no subject
no subject
no subject
If CR4.PKE = 1, IA-32e paging associates with each linear address a protection key.
The protection-key feature provides an additional mechanism by which IA-32e paging controls access to user-mode addresses. When CR4.PKE = 1, every linear address is associated with the 4-bit protection key located in bits 62:59 of the paging-structure entry that mapped the page containing the linear address (see Section 4.5). The PKRU register determines, for each protection key, whether user-mode addresses with that protection key may be read or written.
The PKRU register (protection key rights for user pages) is a 32-bit register with the following format: for each i
(0 ≤ i ≤ 15), PKRU[2i] is the access-disable bit for protection key i (ADi); PKRU[2i+1] is the write-disable bit for protection key i (WDi).
Software can use the RDPKRU and WRPKRU instructions with ECX = 0 to read and write PKRU. In addition, the PKRU register is XSAVE-managed state and can thus be read and written by instructions in the XSAVE feature set.
> Причём всё это на аппаратном уровне
Учитывая, что у SPARC, в отличие от x86, вообще нет каталогов страниц, это, конечно, для него существенно.
У x86 всё управление доступом "аппаратное" и разницы нет.
no subject
no subject
Самый прикол в том, что признак const у слова можно менять в рантайме. Ни один из известных языков даже мысли такой не допускает.
no subject
no subject
Тогда при вызове функции можно сразу по умолчанию запрещать переписывать данные стека, например. Или наоборот, разрешать запись только в выделенную память (правда это будет медленно).
Зато у вас будет большой геморрой с многопоточностью. :-)
no subject
no subject
no subject
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Но теги гораздо гибчее потенциально.