Модераторы: Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос о реализации регистровых банков 
:(
    Опции темы
actuator
Дата 14.1.2012, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 15.12.2011

Репутация: нет
Всего: 3



Сам аппаратным синтезом не занимаюсь, но хотелось бы услышать мнение специалистов.

Когда-то я учился программировать микроконтроллеры на архитектуре MCS-51. Оттуда мне запомнилось наличие нескольких банков регистров, переключение между которыми практически бесплатно. Это ж во как здорово для любых видов многозадачности! Не нужно заталкивать регистры в стек, достаточно просто переключиться на другой банк. Я так делал для прерываний.

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

В связи с этим вопрос - можно ли сделать процессор с относительной адресацией регистров? Ну, чтобы использовать не целый банк, а столько, сколько их нужно, как мы поступаем со стеком? Например, сделать дополнительный регистр r с номером смещения в регистровом файле. Функции тогда будут обращаться не по абсолютному номеру "reg(4)", а по относительному "reg(r + 4)". Когда потребуется сохранить/восстановить контекст, компилятор в зависимости от наличия места в файле либо просто переключит номер регистра (дешево?), либо загрузит файл целиком из стека/памяти и тоже переключит номер. Так, я думаю, можно будет избавиться от большого количества сохранений контекста в стек. Забавно, выглядело бы это как стековый процессор, у которого в роли инструкций функции программы. К тому же, у меня подозрение, что именно так работает многозадачность на современных видеокартах - с аппаратным планировщиком и контроллером памяти, реализующими ту же стратегию.
PM MAIL   Вверх
xvr
Дата 16.1.2012, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6996
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 1
Всего: 222



Цитата(actuator @  14.1.2012,  22:47 Найти цитируемый пост)
В связи с этим вопрос - можно ли сделать процессор с относительной адресацией регистров?

Есть такие. SPARC например.

PM MAIL   Вверх
actuator
Дата 16.1.2012, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 15.12.2011

Репутация: нет
Всего: 3



Спасибо, похоже, я изобрел то, что уже сделано до меня, по научному Register Windows. И даже используется примерно так, как я подумал. Присмотрюсь к Спаркам повнимательнее.
PM MAIL   Вверх
xvr
Дата 16.1.2012, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6996
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 1
Всего: 222



Еще посмотрите в сторону Itanium'а, там не только Register Windows, там есть полноценные косвенные адресации к регистрам (смотреть в сторону циклов с Software Pipeline)

PM MAIL   Вверх
ТарасАтавин
Дата 23.11.2013, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(actuator @  14.1.2012,  22:47 Найти цитируемый пост)
Когда-то я учился программировать микроконтроллеры на архитектуре MCS-51. Оттуда мне запомнилось наличие нескольких банков регистров, переключение между которыми практически бесплатно. Это ж во как здорово для любых видов многозадачности! Не нужно заталкивать регистры в стек, достаточно просто переключиться на другой банк. Я так делал для прерываний.
Количество банков всегда ограничено, кроме того, обычно требуется после сохранения регистров в стек переписать значения лишь некоторых регистров, а у остальных должны остаться значения, которые они имели до сохранения, переключение же на другой банк заменяет все регистры банка. Я писал для двухбанкового камня, но ни разу не смог использовать переключение банков. Более менее понятно, как программировать камень, у которого сразу несколько слотов, в каждый из которых можно выбирать банк регистров, или как программировать многобанковый камень, используя стек для восстановления части регистров после переключения банков.

Это сообщение отредактировал(а) ТарасАтавин - 23.11.2013, 15:12


--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
TarasProger
Дата 17.8.2015, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 5.8.2015

Репутация: нет
Всего: нет



Цитата(actuator @  14.1.2012,  22:47 Найти цитируемый пост)
Когда-то я учился программировать микроконтроллеры на архитектуре MCS-51. Оттуда мне запомнилось наличие нескольких банков регистров, переключение между которыми практически бесплатно. Это ж во как здорово для любых видов многозадачности! Не нужно заталкивать регистры в стек, достаточно просто переключиться на другой банк. Я так делал для прерываний.
Сколько у тебя банков? И сколько задач? Стек тупо больше.

PM MAIL   Вверх
Google
  Дата 23.8.2019, 16:56 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разное (электроника) | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.