Date: 2013-01-28 20:25 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
сакрализация имеющихся знаний и умений -- в корне неверный подход

Date: 2013-01-28 20:46 (UTC)
From: [identity profile] kondybas.livejournal.com
"Патамушто железо для людей, а не люди для железа..."

Date: 2013-01-28 20:55 (UTC)
From: [identity profile] archaicos.livejournal.com
Если я не ошибаюсь, Windows 3.xx, запущенный на 80286 или не в самом каком-то там расширенном режиме на 80386, работал с сегментами, и в OS/2 также использовались сегменты.

Четыре уровня - многовато на практике. Тем не менее, некоторые виртуальные машины использовали один (1-й) в дополнении к двум основным (0 и 3).

С задачами вышла промашка - медленно. Однако, если происходит переполнение стека в ядре на 0-м уровне, единственный гарантированный механизм не умереть прямо там по #DF - использовать задачу в качестве обработчика исключения #DF.

Date: 2013-01-28 21:31 (UTC)
From: [identity profile] archaicos.livejournal.com
Медленность не в задачах, а в том, как было сделано аппаратное переключение между ними. Не всегда нужно сохранять и восстанавливать так много контекста и со всеми проверками, не всегда нужно перезагружать корень таблицы страниц, сбрасывая при этом весь TLB, просто читать TSS из памяти - дополнительный тормоз тогда, как, в сегментных регистрах кода ядра обычно сидят константы - чего их из TSS читать-то? Можно так загрузить. Короче, сразу сделать быстро не вышло, а потом уже поздно было - т.к. уже обошлись без и вряд ли бы переписывали, если бы сделали примерно так же быстро - уже ж работает.

Date: 2013-01-28 21:49 (UTC)
From: [identity profile] archaicos.livejournal.com
Всех подробностей не знаю/помню, но корень сбрасывать точно не надо, т.к. с перезагрузкой CR3 на 80386 уйдут и записи в TLB для кода и данных ядра, которые должны быть адресуемы в контекстах всех процессов и ниток (иначе как вызывать ф-ции ядра и данными с ним обмениваться?). Потом в 80486 Pentium специально добавили бит Global в элементы таблиц страниц чтобы TLB для таких общих страниц не сбрасывались.
Edited Date: 2013-01-28 21:50 (UTC)

Date: 2013-01-28 21:58 (UTC)
From: [identity profile] kondybas.livejournal.com
Ну, до определенного предела, все-таки :)

Date: 2013-01-28 22:07 (UTC)
From: [identity profile] archaicos.livejournal.com
В какой-то момент придётся, да. Если не это, то ещё есть аргумент гибкости кода без TSS - одной специфичной для железа деталькой меньше (комментарий в старом коде Linux об этом говорит).

Date: 2013-01-28 22:52 (UTC)
From: [identity profile] oboguev.livejournal.com
В х86 нет четырех уровней защиты.
Page table entries предусматривают только два.

Date: 2013-01-28 23:13 (UTC)
From: [identity profile] oboguev.livejournal.com
И что толку от сегментов без страниц?
Никакую реально существующую систему с виртуальной памятью и 4 кольцами перенести на x86/x64 с сохранением архитектуры нельзя.

Date: 2013-01-28 23:32 (UTC)
From: [identity profile] oboguev.livejournal.com
Вы же и говорите в заглавном комментарии: "коммерческая операционная система".

Вот, пожалуйста: OpenVMS использует 4 кольца и требует 15 уровней защиты страницы.
В Itanium-е это есть (и больше, с добавкой доступа Execute), а в x86 -- нет.
OpenVMS работает на IA64, а на x64 -- ее не переносили, разумеется не по этой причине, но если бы встал вопрос о переносе, то отсутствие поддержки 4 колец защиты виртуальной памяти стало бы значимым техническим препятствием.

Date: 2013-01-29 02:09 (UTC)
From: [identity profile] mandrykin.livejournal.com
Простите, я бы поспорил с этим утверждением. Можно придумать массу мотивов для "сакрализации". Вот если бы мы жили в идеальном обществе, тогда да.

Date: 2013-01-29 02:20 (UTC)
From: [identity profile] mandrykin.livejournal.com
> Виртуальную память можно точно так же организовать на базе сегментов, как и на базе страниц. Сложнее? Да! Гибче? Несомненно!


Как удивительно это пересекается с тем, над чем сейчас думаю. На базе сегментов вполне можно организовать страничную память. В некотором роде "костыль", но при этом обработчик исключения по нарушению границы сегмента может эмулировать страницы любого размера. Т.е. даже на такой схеме можно получить некоторый выигрыш.

Date: 2013-01-29 02:32 (UTC)
From: [identity profile] oboguev.livejournal.com
Ну и, нельзя виртуальную память точно так же организовать на базе сегментов, как на базе страниц.
Либо количество страниц в виртуальном пространстве получится ограниченным, либо страницы большими и wasteful.
Хуже же всего, что void* окажется 128-битным типом, и адресация к каждому элементу памяти будет медленной из-за необходимости постоянных перезагрузок сегментных регистров.
И наконец, last but not least, в х86/х64 с помощью сегментных регистров можно задать защиту KW, EW, SW и UW, но не UR или URKW.

Date: 2013-01-29 02:37 (UTC)
From: [identity profile] mandrykin.livejournal.com
Может быть, но есть вопросы.

Какие системы организуют страничную память на основе сегментов? Какой в этом смысл для секцмй .text и .data, если каждую из них всегда можно описать одним сегментом? Интересная картина могла бы получиться для стека и кучи - но на x86 это дорого и громоздко.


Date: 2013-01-29 02:38 (UTC)
From: [identity profile] oboguev.livejournal.com
Опечатка:
И наконец, last but not least, в х86/х64 с помощью сегментных регистров можно задать защиту (K/E/S/U)(R/W), но не напр. URKW.

Date: 2013-01-29 02:50 (UTC)
From: [identity profile] oboguev.livejournal.com
Фиксированность размера страницы определяется необходимостью иметь manageable paging algorithms.
Указатель должен быть адресовать всё адресное пространство, приключения с разными категориями указателей никому не нужны.
Указатели данных могут приходить из самых разных, наперед неизвестных сегментов, поэтому перегрузка сегментного регистра потребуется практически перед каждой инструкцией или, в лучшем случае, коротким блоком инструкций. Поскольку же выяснится, что данные могут также пересекать границы сегментов-страниц, то реально проверка на переполнение указателя потребуется при каждом обращении с индексацией или инкрементом или попросту при возможности того, что поле атомарного типа пересечет границу сегментов. См. FAR-указатели в 16-битном Windows.

Date: 2013-01-29 02:56 (UTC)
From: [identity profile] oboguev.livejournal.com
> Фиксированность размера страницы определяется необходимостью иметь manageable paging algorithms.

И, конечно, собственно вообще иметь paging.

Date: 2013-01-29 03:05 (UTC)
From: [identity profile] mandrykin.livejournal.com
> Скажем, в самом простом случае каждая функция помещается в свой сегмент.

Это не даст никаких преимуществ, а лишь убьёт производительность. Фишка как раз в том, чтобы на основе сегментов реализовать страничную память там, где она больше всего нужна - стек и куча. Размер стека и кучи - динамический. Увеличивать, наращивая границы сегмента, не получится - рано или поздно сегмент упрётся в другой сегмент. Менеджер памяти мог бы "тасовать" сегменты, создавая иллюзию непрерывного адресного пространства.

Date: 2013-01-29 03:37 (UTC)
From: [identity profile] mandrykin.livejournal.com
На x86 это интересно разве что в академических целях, как демонстрация возможностей. Скорости это никак не прибавит, потому что в "аппаратной" страничной реализации участвует TLB. Программная эмуляция в любом случае будет медленнее - переключение сегментов по исключениям будет сильно тормозить.

А вот что касается уровня привелегий - то они как бы и не нужны вовсе. Вполне достаточно прав rwx на виртуальную страницу для организации защищённой системы. Уровень привлегий - лишняя сущность. Защита на уровне страниц вполне покрывает все нужды. Пожалуй, единственное исключение из этого утверждения - это средства виртуализации. Тут бы хватило два уровня привелегий - гипервизор и всё остальное.
Edited Date: 2013-01-29 03:40 (UTC)

Date: 2013-01-29 05:34 (UTC)
From: [identity profile] oboguev.livejournal.com
То, что вы описываете -- это система без виртуальной памяти с ручной организацией подкачки. Всё это можно делать и раньше делалось (оверлеи кода и данных и т.д.), но это никому не нужно.

Как только вводится виртуальная память, возникает агностическое разбиение ядром адресного пространства на страницы фиксированного размера, реализация которых с помощью сегментов x86 ведёт ко всем перечисленным последствиям.

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

Сегменты нарезал пейджер.

Date: 2013-01-29 07:04 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
возможность придумать мотивы мое утверждение не опровергает

Date: 2013-01-29 07:08 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
во всем этом нет ничего невозможного.
никаких сакральных знаний в этом нет, в конце уонцов то, что существует сейчас когда не существовало вообще.
а особенно в "убедить" --- специалисты часто подки на новинки, по крайне мере "на пощупать".
ну то, что не всякая идея на самом деле стреляет -- это другой вопрос. но тут похоже никто не может заранее угадать меру успеха или провала

Date: 2013-01-29 07:29 (UTC)
From: [identity profile] izard.livejournal.com
Из крупняков аппаратную поддержку задач использовала ОС в коммутаторах от Nokia.

Date: 2013-01-29 09:39 (UTC)
From: [identity profile] gineer.livejournal.com
да, в простом банальном "как сделать", нет ничего сакрального
а вот в "как сделать так чтобы вытрелило и принесло (кучу) прибыли" -- дофига

Date: 2013-01-29 11:11 (UTC)
From: [identity profile] mandrykin.livejournal.com
Вполне благородная. Но c помощью прав страниц это делается легко.

Date: 2013-01-29 11:38 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
там тоже нет сакрального знания.
подчеркиваю -- знания.
побольшей части там удача. иногда у некоторых персонажей вроде как есть чуйка. но отделить и обучить они не способны.
вот к примеру фирма dec сделала охрененую линейку pdp. подняла бабла.
сделала хорошую железку vax-11, к ней операционку vax/vms. из них до сих пор идеи черпаются.
с баблом на этом получилось уже не так хорошо.
сделали альфу. с баблом вообще не вышло.

Date: 2013-01-29 12:41 (UTC)
From: [identity profile] mandrykin.livejournal.com
Давайте копнём чуть глубже - Стив Джобс и Стив Возняк. Первый - талантливый предприниматель, второй - талантливый инженер. На Джобса молились миллионы, а Возняк известен лишь в технических кругах. Но кем бы был Джобс, если бы Возняк не собрал свой Apple-I? Наиболее вероятно - "сторчался" бы от каких либо синтетических наркотиков и закончил свою жизнь в подворотне. Если верить источникам, предпосылки для этого были.

Хотя, время расставило всё по местам - Джобса уже нет, а Возник здравствует, несмотря на избыточный вес.

Я ведь к чему клоню - знания и умения в одних головах, а сливки снимают другие. Т.ч. сокрытие знаний это некий элемент поддержания справедливости. Это ж каким бессребреником надо быть, чтобы ютясь по съёмным квартирам и питаясь лапшой быстрого приготовления, радоваться что кто-то получает хороший профит за счёт твоего труда. Не всем же быть Перельманами.



Date: 2013-01-29 12:51 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
нихрена не понял связи с постом и моим утверждением.

а, наверное ты неверно понимаешь слово сакрализация?

так вот тут это "знания свалились на нас свыше, раньше их было больше, самим придумать ничего нельзя, знания только пропадают" и т.д.

это путь в деградацию. может локально ты и снимешь какие-то сливки, то на длительном интервале -- полная деградация

Date: 2013-01-29 13:58 (UTC)
From: [identity profile] eentropy.livejournal.com
говоря x86 - мы давно уже говорим о 386DX и старше

Date: 2013-01-29 14:05 (UTC)
From: [identity profile] mandrykin.livejournal.com
Да, вероятно я не правильно понял смысл слова "сакрализация".

Не могу найти пример сакрализации в области современной науки и технологий. Это все же больше из области религии.

Date: 2013-01-29 14:12 (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
ну мне кажется в стартовом посте по ссылке именно оно.
типа у нас есть, а остальным недоступно.
откуда у нас оно взялось -- а свыше спустилось [неявно предполагается]

Date: 2013-01-29 15:58 (UTC)
From: [identity profile] izard.livejournal.com
DX200 была еще на 8086, но это было 30 лет назад. 7 лет назад мне приходил баг репорт о TSS в новом железе, на котором должны была работать DMX

Date: 2013-01-29 17:49 (UTC)
From: [identity profile] mandrykin.livejournal.com
А что может случиться страшного, если процессор начнёт исполнять данные? Вряд-ли он успеет навредить системе или другому процессу, прежде чем наткнётся на несуществующую команду или обратится по неправильному адресу. Самое страшное, что может случиться - завснет в бесконечном цикле.

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