User Tag List

Страница 3 из 7 ПерваяПервая 1234567 ПоследняяПоследняя
Показано с 21 по 30 из 67

Тема: Перемещаемость на лету

  1. #21

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    1) Типизация стека и регистров. В стек каждый раз пишется не 2 байта, а 4 (данные и тип - число/указатель). Области смены типа регистров, а также EXX'ы обрамляются системными вызовами.
    Достаточно будет 1 раз "зарегистрировать" (при загрузке) для задачи мета-данные описывающие по какому смещению от начала "адресса в памяти" и перечень тех регистров которые содержат адресса, позже можно добавить или поменять "декларацию" по ходу выполнения программы, чтобы OS всегда хранила для каждой задачи все места где лежат указатели. Со стеком можно поступить жестко - определить ему место с адреса #ffff и запретить его использование кроме как для адресов возврата (т.е. в нем будут только 2-х байтные адреса возврата). Для передачи параметров в функции использовать регистры.

    2) Чтение данных по указателям - только через системные вызовы (очень медленно!). В указателях только смещения относительно начала блока программы. CALL и RET - через системные макросы (тоже по смещению, и в стеке лежит смещение точки возврата).
    Нужно эмулировать виртуальную память c таким интерфейсом:
    1. выделить регион памяти (возвращает id региона)
    2. получить указатель на регион памяти и зафиксировать его (при этом он становится неперемещаемый)
    3. инвалидировать указатель на регион и разрешить его премещение
    4. освободить память занимаемую регионом
    При этом вместо адресов на структуры в памяти нужно будет передавать id региона.

    3) CALL и RET - через системные макросы (в стеке лежит смещение точки возврата). Типы регистров никогда не меняются.
    Если указатели - HL и DE, то проблема с 16-битной арифметикой.
    Если указатели - IX и IY, то всё медленно.
    Если только один указатель и буферизация данных в стеке, то ещё медленнее и вообще изврат.
    Компромисс - IX и DE (или DE и DE').
    Тут нужно будет ввести понятие short call - который сможет и напрямую работать (при условии что тот кого он собрался вызывать перемещается всегда вместе с тем кто использует этот short call). Ну и far call - через системный вызов.

    4) Интерпретируемый язык (очень медленно!).
    [/QUOTE]

    Что значит очень? forth даст замедление в 3...4 раза всего то, это сравнимо со скоростью компилируемой программы на С, при этом размер стека можно сделать автоконтроллируемым и легко использовать всю спекки память из форт программы не замечая ограничения адреса в 16bit.

  2. #22

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    alone, загляни в исходники mp/m. там программы перемещаемые. всё придумано до нас. софтина компилируется под адрес 0. в конце файла есть карта. перемещаемость кратная 256 байт если не ошибаюсь. более детально тебе подскажет исходник самой mp/m. если надо, то смотреть тут. разделы mp/m I и mp/m II.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  3. #23

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    alone, загляни в исходники mp/m. там программы перемещаемые. всё придумано до нас. софтина компилируется под адрес 0. в конце файла есть карта. перемещаемость кратная 256 байт если не ошибаюсь. более детально тебе подскажет исходник самой mp/m. если надо, то смотреть тут. разделы mp/m I и mp/m II.
    Я в свое время для спека делал поддержку компиляции релоцируемых объектников со всеми таблицами http://zxdocs.fatal.ru/coding/module.zip

  4. #24

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Не знаю как сейчас, а во времена дисководов запрет прерываний на длительное время - неизбежность при работе любой оси.
    Дисковод не нужен. Есть винты/карточки.

    Цитата Сообщение от bigral Посмотреть сообщение
    Со стеком можно поступить жестко - определить ему место с адреса #ffff и запретить его использование кроме как для адресов возврата
    Нужен стек для регистров, иначе невозможно реализовать даже самые примитивные системные вызовы типа переключения страниц. Они должны быть реентерабельными, так что сохранять в переменные не могут, только в стек.

    Цитата Сообщение от bigral Посмотреть сообщение
    Тут нужно будет ввести понятие short call - который сможет и напрямую работать (при условии что тот кого он собрался вызывать перемещается всегда вместе с тем кто использует этот short call).
    Требует опять-таки стека только для адресов, то есть невозможно (см. выше).

    Цитата Сообщение от Sayman Посмотреть сообщение
    alone, загляни в исходники mp/m. там программы перемещаемые. всё придумано до нас. софтина компилируется под адрес 0. в конце файла есть карта. перемещаемость кратная 256 байт если не ошибаюсь. более детально тебе подскажет исходник самой mp/m. если надо, то смотреть тут. разделы mp/m I и mp/m II.
    Где там перемещаемость на лету?

    Цитата Сообщение от bigral Посмотреть сообщение
    forth даст замедление в 3...4 раза всего то
    Это на математических задачах. А на задачах перемалывания памяти скорее раз в 30..40.

  5. #25

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Нужен стек для регистров, иначе невозможно реализовать даже самые примитивные системные вызовы типа переключения страниц. Они должны быть реентерабельными, так что сохранять в переменные не могут, только в стек.
    Аналогично стеку malloc тоже выделяет память так что храни свои регистры в выделенном регионе памяти. Скорость выделения конечно намного меньше чем через стек. Прийдется продумывать наперед какой кусок запросить чтобы не вызывать malloc сильно часто. Тяжелый и тормозной случай только рекурсия (не знаешь сколько памяти попросить). Но реентерабельность будет обеспеченна.

    ---------- Post added at 10:49 ---------- Previous post was at 10:36 ----------

    Цитата Сообщение от alone Посмотреть сообщение
    Это на математических задачах. А на задачах перемалывания памяти скорее раз в 30..40.
    Ну классический forth с одним стеком давно умер. Я имел в виду виртуальную машину которая выполняет команды из очереди инструкций которые оперируют стеками данных через указатели на вершины стеков (команды типа (SP1+offset) + (SP1+offset+1) -> (SP2+offset)).

  6. #26

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Я имел в виду виртуальную машину которая выполняет команды из очереди инструкций которые оперируют стеками данных через указатели на вершины стеков (команды типа (SP1+offset) + (SP1+offset+1) -> (SP2+offset)).
    Можно пример кода, реализующего аналог следующего?
    loop
    ld a,(hl)
    cpl
    ld (de),a
    inc de
    cpi
    jp pe,loop
    Последний раз редактировалось alone; 22.03.2012 в 13:05.

  7. #27

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Можно пример кода, реализующего аналог LDIR?
    я в фортах не силен но смысл в том что есть команды копирования значений из одного стека в другой и непосредственно в память, стеки в этом случае содержат как бы массивы регистров.

  8. #28

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чтобы выполнить элементарную команду на форте, нужно не меньше 100 тактов. А в этом цикле их надо 7.

  9. #29

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Чтобы выполнить элементарную команду на форте, нужно не меньше 100 тактов. А в этом цикле их надо 7.
    Возможно, мне тоже не понравились те процессоры которые IMak разрабатывает (стековые), сделать такой виртуальный тоже не легко наверное будет тормоз. Хотя подкупает идея маленького контекста задачи который надо сохранять при переключении, но на практике как оно выглядит не представляю.

    Так а что с этой темой? Есть ли более менее полная картина как можно реализовать на спеке эфективную многозадачную среду?
    Последний раз редактировалось bigral; 27.03.2012 в 16:50.

  10. #30

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Так а что с этой темой? Есть ли более менее полная картина как можно реализовать на спеке эфективную многозадачную среду?
    Эффективная многозадачная среда и перемещаемость на лету - это разные вещи. Одно может существовать без другого. Ты определись, что тебя больше интересует.

Страница 3 из 7 ПерваяПервая 1234567 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •