vak: (Улыбка)
[personal profile] vak
Дошёл до реализации необычного свойства процессора микро-БЭСМ, отсутствующего у современных компьютеров. Каждое слово в оперативной памяти имеет дополнительный бит запрета записи. При попытке записи по этому адресу возникает прерывание "защита адреса при записи". Чтобы всё-таки иметь возможность изменить значение (и бит запрета), память имеет дополнительный сигнал, отменяющий защиту.

Получается полезная возможность, похожая на const в языке Си, но при этом защиту можно включать и отключать по ходу выполнения программы. Что-то отдалённо похожее - теговая архитектура - существовало в некоторых ранних компьютерах, но не прижилось.

Date: 2016-12-10 23:47 (UTC)
From: [identity profile] archaicos.livejournal.com
В мире ощущается острый недостаток const!
Все влазят, но не всех убивает.

Date: 2016-12-11 05:00 (UTC)
From: [identity profile] archaicos.livejournal.com
const a = 1;
void foo(void)
{
#pragma push(fuck)
#pragma fuck(off)
a = 0;
#pragma pop(fuck)
}

(no subject)

From: [identity profile] dvv.livejournal.com - Date: 2016-12-14 02:46 (UTC) - Expand

Date: 2016-12-11 01:11 (UTC)
From: [identity profile] spamsink.livejournal.com
Выходит, каждая запись - не одно обращение к памяти, а два? Накладно.

Date: 2016-12-11 08:01 (UTC)
From: [identity profile] 1801bm1.livejournal.com
>>немедленно формирует ответ в виде текущего тега
Это наверное легко реализуется на встроенных блоках FPGA. А если память реализована на обычной SDRAM? Все равно, если защита записи включена и идет обращение на запись без явного отключения защиты, придется этот контрольный бит сначала прочитать. Ну да, кеширование и прочее как-то помогут, да и запись менее частое событие. Но, думаю, на дескрипторы страниц (вместо битов для отдельных слов) не просто так перешли в более свежих архитектурах.

(no subject)

From: [identity profile] netch80.livejournal.com - Date: 2016-12-15 08:04 (UTC) - Expand

(no subject)

From: [identity profile] skolk.livejournal.com - Date: 2016-12-15 00:17 (UTC) - Expand

(no subject)

From: [identity profile] 1801bm1.livejournal.com - Date: 2016-12-15 07:27 (UTC) - Expand

(no subject)

From: [identity profile] skolk.livejournal.com - Date: 2016-12-15 10:33 (UTC) - Expand

(no subject)

From: [identity profile] netch80.livejournal.com - Date: 2016-12-15 08:09 (UTC) - Expand

(no subject)

From: [identity profile] skolk.livejournal.com - Date: 2016-12-15 10:54 (UTC) - Expand

(no subject)

From: [identity profile] netch80.livejournal.com - Date: 2016-12-15 13:13 (UTC) - Expand

(no subject)

From: [identity profile] skolk.livejournal.com - Date: 2016-12-15 13:38 (UTC) - Expand

(no subject)

From: [identity profile] netch80.livejournal.com - Date: 2016-12-22 17:09 (UTC) - Expand

(no subject)

From: [identity profile] 18cc.livejournal.com - Date: 2016-12-22 18:49 (UTC) - Expand

(no subject)

From: [identity profile] netch80.livejournal.com - Date: 2016-12-22 21:40 (UTC) - Expand

Date: 2016-12-11 04:42 (UTC)
From: [identity profile] spamsink.livejournal.com
Не вижу проблемы, чтобы пейджинг происходил 9-килобайтными блоками вместо 8-килобайтных. Как DMA организуешь, так и будет. В ELF-файле держать теги не надо, их можно формировать в зависимости от типа секции. А вот то, что при современной памяти (которая на порядки медленнее процессора) надо было бы перед записью отдельно читать, всю идею и подкосило.

(no subject)

From: [identity profile] Евгений Х. - Date: 2016-12-11 13:45 (UTC) - Expand

(no subject)

From: [identity profile] netch80.livejournal.com - Date: 2016-12-15 08:11 (UTC) - Expand

Date: 2016-12-11 04:22 (UTC)
From: [identity profile] rbs-vader.livejournal.com
У SPARC в последних реализациях что-то похожее есть, но даже посложнее. Регионы памяти помечаются "цветом", в чужой регион запись невозможна (и вообще доступ). Причём всё это на аппаратном уровне, там никакой Интел и рядом не лежал.
Edited Date: 2016-12-11 04:22 (UTC)

Date: 2016-12-11 22:04 (UTC)
From: [identity profile] rbs-vader.livejournal.com
Да там и весь процессор прекрасен, очень жаль, что общие масссы вынуждены довольствоваться этим убогим х86...

Date: 2016-12-15 00:30 (UTC)
From: [identity profile] skolk.livejournal.com
А там S/370 - i386 style paging MMU есть? Если да, зачем цвет? Он был в S/360...

Date: 2016-12-15 08:17 (UTC)
From: [identity profile] netch80.livejournal.com
> там никакой Интел и рядом не лежал.

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 всё управление доступом "аппаратное" и разницы нет.

Date: 2016-12-11 08:53 (UTC)
From: [identity profile] izard.livejournal.com
в x86 можно пометить страницу (4к), можно ли из нее читать-писать-запускать код, потом пускай компилятор в read-only страницы константы аллоцирует.

Date: 2016-12-11 21:48 (UTC)
ext_646638: (Default)
From: [identity profile] rdia.livejournal.com
А какой в этом смысл? Против злоумышленника это не поможет, а в ЯВУ и так всё, что не нужно, закрыто на этапе компиляции.

Date: 2016-12-11 21:55 (UTC)
ext_646638: (Default)
From: [identity profile] rdia.livejournal.com
Я, конечно, не рассматриваю тут кросс-платформенные ассемблеры С/С++. В них - очень кстати, особенно, если в программе снятие защиты делается каким-то очень явным образом.

Тогда при вызове функции можно сразу по умолчанию запрещать переписывать данные стека, например. Или наоборот, разрешать запись только в выделенную память (правда это будет медленно).

Зато у вас будет большой геморрой с многопоточностью. :-)

Date: 2016-12-11 09:01 (UTC)
From: [identity profile] vit-r.livejournal.com
Весьма полезная вещь, если писать на ассемблере. Думаю, на языке высокого уровня эта особенность превратится в ад, потому и не прижилась.

Date: 2016-12-11 11:39 (UTC)
From: [identity profile] nms.livejournal.com
Burroughs, однако!

Date: 2016-12-12 04:25 (UTC)
From: [identity profile] nms.livejournal.com
Не понимай ссылку на Burroughs буквально. ;-)

(no subject)

From: [identity profile] b0p0h0k.livejournal.com - Date: 2016-12-12 07:58 (UTC) - Expand

(no subject)

From: [identity profile] b0p0h0k.livejournal.com - Date: 2016-12-14 02:32 (UTC) - Expand

(no subject)

From: [identity profile] netch80.livejournal.com - Date: 2016-12-15 08:23 (UTC) - Expand

Date: 2016-12-12 16:05 (UTC)
From: [identity profile] http://users.livejournal.com/katarsis_/
православный эльбрус хвастался подобным. по мне так RWX в TLB достаточно.