The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Новости Ubuntu: отказ от CD, удаление Mono, акцент на 64-раз..."
Отправлено Аноним, 05-Ноя-11 21:37 
> Приплыли.

Всю ночь гребли, а лодку отвязать забыли?

> Эффективные менеджеры атакуют? Только одна гастроль, проездом из Сколково?

Не знаю, вам виднее.

> Воообще то набор команд Intel x86_32 это самый сложный за всю историю
> процессоров, в нем есть практически все что придумал воспаленный мозг за
> период 1969-2011гг. И не только относительная адресация.

К чему здесь этот маркетоидный буллшит? В x86-32 нет адресации относительно текущего места выполнения (относительно текущего значения program counter-а).Наследственная болячка x86. Поэтому в х86 программах есть такой костыльный лулз как большая таблица релокаций. Потому что программу просто так нельзя загрузить по иным адресам нежели было задумано изначально. В частности у x86-32 нет команд перехода на кусок кода адресованый относительно текущего места выполнения относительным смещением от этого места до нужного участка кода. Можно только абсолютный адрес ткнуть. Который имеет свойство меняться, что очень доставляет. Для того чтобы все-таки вгрузить программу в адреса отличные от дефолтных - загрузчик программ ОС читая программу до кучи разбирает таблицу релокаций (отдельная секция выполняемого файла) и на ходу патчит все адреса которые ссылаются на абсолютные адреса, пересчитывая все ссылки по абсолютному адресу под новый базовый адрес, отличный от исходного. Стоит ли говорить что фокусы типа ALSR при которых как раз программы грузят в разные адреса каждый раз, чтобы усложнить хакинг - тормозят загрузку этих самых программ, потому как приходится постоянно педалить огромные таблицы и на ходу хакать полпрограммы в памяти. В нормальных процессорах давно уже сделаны режимы адресации относительно текущего места выполнения. При этом не важно в какой адрес грузится программа - патчить ничего не надо: если сказано "от сих 60 байтов вперед" - при этом не важно какой там базовый адрес был.

> Со времен Klamanch ( Pentium 2) этот код видимый программистом вообще не
> имеет смысла, потому как сам микропроцессор скрыт от глаз программиста блоком перекодировки.

Капитан информирует что на самом деле, microcode ROM - это неотъемлимая часть CISC-процессора. Этот ROM разваливает сложные команды CISC в более простые RISC-образные субкоманды для относительно простых блоков выполнения. Так было даже в 8086, просто менее явно светилось наличие микрокода и он был не обновляемым. Обновляемым его сделали после парочки годных фэйлов с Pentium (первым). Где часть камней пришлось пустить под пресс и бесплатно заменять, потому что во первых вылезла ошибка вычислений, а во вторых - определенная последовательность байтов намертво вешала проц, поэтому даже самый бесправный юзер в операционке мог поставить колом все вокруг. Интел высрал гору кирпичей и где-то немного опосля сделал microcode ROM обновляемый (биос содержит эти файлики, также они иногда встречаются отдельно, Linux умеет их вгружать в проц, если они у вас есть). Поэтому часть ошибок дизайна стало можно чинить после выпуска проца и не пуская его под пресс. Но на самом деле microcode ROM придумал не интел, это почти стандартная часть дизайна CISC. Просто потому что сделать блоки выполнения в которые напрямую можно пхнуть сложные CISC команды - очень сложно. И багов в них будет немеряно. А поскольку все это в железе - сколько процов пойдет под пресс? Microcode ROM упрощает дело, переводя по таблице сложные команды в простые для куда более простых блоков, типа обычного простого ALU и прочих. Вроде были психи которые пробовали делать в своих процах декод CISC команд прямо в железе, без перекодирующего ROM, но они потерпели дружный FAIL в силу нетривиальности затеи и сложности блоков. И в итоге все такие давно самовыпилились.

> Внутри P2 на самом деле RISC-подобный процессор, систему команд которого
> скрывают с секрете, а при выполнении "86" кода его на лету
> перекодируют и оптимизируют во внутренний код ( uops ).

На самом деле - ничего нового там нет. Висит декодер, разваливающий (не без помощи microcode ROM) сложные CISC команды в RISC-подобные команды. RISC зачастую представляет собой то же самое, только декодер оторван, а упрощенный набор команд подается в блоки без преобразований через microcode ROM. Логично что ядро RISC априори проще ядра CISC. Потом дошло что можно в принципе пихать и побольше одинаковых блоков за декодер, так что за раз сможет выполняться и более одной команды.

Основная проблема всего этого: программам и компилерам не видно что там внутри. Поэтому оптимизация из очевидного действа превращается в то еще разгадывание ребусов архитектуры и укладывание костылей и подпорок.

> Так что и относительная адресация есть, и малый размер регистрового пула тоже
> сглаживается оптимизитором, по крайней мере для простых коротких циклов.

На самом деле сглаживается оно в основном умным кешированием, так что стек первым делом оседает в кеше и не покидает его. Но это не отменяет того факта что даже так проц занимается глупой тасовкой регистров в стек и обратно (суммарный эффект от push + pop равно NOP, т.к. бесполезная служебная операция никак не связанная с реализацией логики программы). А вот х64 с его кучей регистров намного чаще может посчитать все вообще не лазя в стек. Там даже ABI построено так, что часть регистров - для передачи параметров в функцию, часть для локальных рассчетов, часть для возврата результата. На все хватает, в отличие от х86 уродца, который в этом месте обтасуется регистрами. Ну по крайней мере в типовых случаях. В том числе и поэтому часто дергаемые функции с 20 сложными параметрамми - плохая идея (если не хватит регистров - придется пушить в стек).

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

Наружу вывешивается система команд х86. И потому - не важно что там внутри, танцевать приходится по этим правилам. Воспользоваться преимуществами указанного комплекса, даже если б они были - нельзя. Потому что рукояток наружу нет. И если вы в системе команд х86 не можете адресоваться относительно текущего места кода, вы это не можете и все тут. Это ограничение системы команд, а как система команд внутри реализована - да какая разница вообще?! Вы все равно за пределы возможностей системы команд не прыгнете. В х64 это тупое упущение исправили, сделав наконец относительную адресацию, как во всех нормальных процах. Которую, блин, программы, компилеры и программеры могут явно юзать на свое благо. Поэтому если мы хотим сгененить position-independent code - мы наконец то можем это делать и без отсыла в немеряные таблицы релокаций! Алилуя!

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру