Важная информация

User Tag List

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 41 по 50 из 77

Тема: Менеджер памяти для многозадачной ОС

  1. #41
    Activist Аватар для Alex/AT
    Регистрация
    14.03.2005
    Адрес
    Russia, Saint-Petersburg
    Сообщений
    213
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    lvd: если у оси будет допустим 1024 функции, то это аж 3 килобайта на одну таблицу переходов... немножко расточительно если просто таблицу функций, где точки входа хранить дельтами от предыдущей точки входа (-64..63 байт - 0xxxxxxx, до -16384..16383 - 1xxxxxxx, 0xxxxxxx [принцип думаю понятен]), то памяти уйдет куда меньше. Настройка прог будет тоооормозная, но во время загрузки вполне нормально...

  2. #42
    Activist Аватар для Spectre
    Регистрация
    26.01.2005
    Адрес
    Минск
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex/AT
    lvd: если у оси будет допустим 1024 функции, то это аж 3 килобайта на одну таблицу переходов... немножко расточительно если просто таблицу функций, где точки входа хранить дельтами от предыдущей точки входа (-64..63 байт - 0xxxxxxx, до -16384..16383 - 1xxxxxxx, 0xxxxxxx [принцип думаю понятен]), то памяти уйдет куда меньше. Настройка прог будет тоооормозная, но во время загрузки вполне нормально...
    Какие 1024 функции?! Хоть бы сотня набралась...

  3. #43
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Spectre
    Ну это просто смешно. Сначала попробуйте, а потом утверждайте:

    EX (SP),HL
    LD reg,(HL)
    INC HL
    EX (SP),HL

    Целых 4 байта, целый 51 такт! Регистр используется только 1, какой - на ваш выбор.
    ну вот ты и доказал- по сравнению с
    ld reg,N
    rst M

    и

    rst M
    db N

    разницы 4 байта и 51 такт %)
    а если точнее, то 1 байт выгоды на каждый вызов и 44 такта проигрыша (это с учетом загрузки параметра и доп. обвязки)

    Цитата Сообщение от Spectre
    p.s. Я вовсе не сторонник метода RST (отлаживать не очень удобно), но просто ради справедливости.
    во всем есть свои плюсы и минусы. хотя метод прямых вызовов и требует дополнительных затрат на настройку, она делается один раз и в дальнейшем все работает самым быстрым способом

  4. #44
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Exclamation Вот нифига себе

    Всего два дня меня не было...

    Насчёт интерфейса работы с памятью, я так понял, все согласились что наиболее оптимально использовать именно таким образом (всё черзе систему).

    Насчёт вызовов: имеется два подхода

    1) Работа с Call и трансляцией этих вызовов под адреса функций системы в процессе инициализации процесса/приложения
    +: Скорость работы приложения, выигрыш в скорости прямопропорционален количеству попаданий данных вызовов в теле программы
    -: Система должна подстраивать тело процесса (релоцировать его) под вызов функций
    Замечание: Если вы взгляните на zxdocs.fatal.ru в резделе кодинг модульную структуры вы увидите, что уже есть разработанный формат приложений, который задаёт как точки релокации внутренние, так и точки релокации внешние (т.е. вызов внешних процедур, например, процедур системы). Имеено такая модульная система является прототипом приложения для многозадачной ОС.

    2) Работа через классические вызовы с обвязкой в виде Defb Defw до/после RST/Call и обвязкой через регистры
    +: Очень удобно писать программы с вызовом процедур из ПЗУ
    -: Необходимо транслировать, что является классом функций в передаваемых параметрах, что является подтипом функций в передаваемых параметрах, на что требуется опять же работа системы, однако такая работа будет производится при каждом вызове, чем больше вызовов в теле программы, тем больше затраты системы на трансляцию таких вызовов (тоже проямопропорционально)
    Замечание: такой метод имеет право жить хотя бы потому, что он используется, как заметил коллега, уже 25 лет. Однако, в этом варианте код команды (вместе с обвязкой, в байтах и в тактах) вообще говоря увеличивается, т.к. теперь класс команды и подтип указываются уже в обвязке а не прямым указанием.

    Ну теперь на таком сравнительном представлении каждого из методов станет ясно почему мы с Витамином выбрали именно первый способ представления системных вызовов...
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  5. #45
    Activist Аватар для random
    Регистрация
    21.01.2005
    Адрес
    ссср
    Сообщений
    468
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    -: Необходимо транслировать, что является классом функций в передаваемых параметрах, что является подтипом функций в передаваемых параметрах, на что требуется опять же работа системы, однако такая работа будет производится при каждом вызове, чем больше вызовов в теле программы, тем больше затраты системы на трансляцию таких вызовов (тоже проямопропорционально)
    неправда, никаких обвязок в DEFB/DEFW после вызова не делается. про RST уже забыли, используется структура типа CALL malloc, где malloc: defb 0x, а по адресу 0х в пзу записано JP XXXX.

    все остальное в параметрах. скорость исполнения практически равна прямому вызову в теле программы.

    какие классы?

  6. #46
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от GriV
    Имеено такая модульная система является прототипом приложения для многозадачной ОС.
    не только приложений, а и самого ядра (на этапе сборки) и библиотек (как статически линкуемых, так и динамически)

  7. #46
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #47
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от random
    неправда, никаких обвязок в DEFB/DEFW после вызова не делается. про RST уже забыли, используется структура типа CALL malloc, где malloc: defb 0x, а по адресу 0х в пзу записано JP XXXX.

    все остальное в параметрах. скорость исполнения практически равна прямому вызову в теле программы.
    +3 байта и 10 тактов на каждую точку. по тактам не так накладно, зато по памяти на 1 байт больше предлагаемого варианта (без учета размера кода настройщика)

    Цитата Сообщение от random
    какие классы?
    классы функций- работа с памятью, работа с процессами и т.д.

  9. #48
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Цитата Сообщение от random
    неправда, никаких обвязок в DEFB/DEFW после вызова не делается. про RST уже забыли, используется структура типа CALL malloc, где malloc: defb 0x, а по адресу 0х в пзу записано JP XXXX.

    все остальное в параметрах. скорость исполнения практически равна прямому вызову в теле программы.

    какие классы?
    Классами называются принципиально разные функции системы (для работы с задачами, файлами и т.д.). Если посмотреть то, что ты предлагаешь то вместо обвески из Defb и Defw получается обвеска из Jp, да причём если там всё могло обойтись двумя байтами Defb для указания класса и подкласса функции, то здесь же тратится совершенно напрасно сразу три байта... Про это собственно и речь...
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  10. #49
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    2Random> и потом, здесь реализуется подход открытых точек системы.
    Т.е. например, разработчик системы (скажем это Vitamin) пишет, что для переключения банков памяти используется точка системы mem_bank_changer. Тогда система смотрит при загрузке приложения/процесса и автоматом подменяет указанную переменную (в нужном месте конечно), прописав вместо Call 0 - Call #1234, где #1234 - адрес той самой mem_bank_changer.
    Однако, если система не знает такой внутренней для себя и внешней для приложения точки вызова, то она просто не запустит приложение, указав на неизвестный метод вызова.
    С другой стороны, при фиксированной ссылке Call -> Jp при расширении системы просто может запросто произойти такой случай, что базовых точек может не хватить (неверно составлена таблица функций, требуется перераспределение, очень реальная ситуация, часто встречается на практике). Тогда все приложения надо переписывать, надо смотреть какая версия приложения, под какую версию ОСь и т.д.
    Мне кажется из указанного примера очевидна перспективность конструкций с ретрансляцией системных вызовов, согласно импортируемых точек, по сравнению с той что предлагаешь ты.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  11. #50
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    соглашусь с тем, что call adr+k*N самый быстрый и простой для компилятора (не надо никаких прибамбасов в компиляторе) способ. Могу предложить способ "настройки" вызывающей функции "по месту":

    org 100h
    call adjust_jp
    defw function1

    org 105h
    call adjust_jp
    defw function2

    ;...
    adjust_jp proc ; adjust caller and jump to function
    ex (sp),hl ; hl->defw function1, sp->hl,retaddr
    push de ; hl->defw function1, sp->de,hl,retaddr
    ld e,(hl):inc hl:ld d,(hl) ; de=function1
    ex de,hl ; hl=function1
    push ix
    ld ix,0 : add ix,sp ; ix=sp->ix,de,hl,retaddr
    ld e,(ix+6) : ld d,(ix+7) ; de=retaddr
    ex de,(ix) ; ix=retaddr
    ld (ix-1),h : ld (ix-2),l ; caller adjusted!
    pop ix : pop de
    ex (sp),hl ; sp->function1,retaddr
    ret

    В этом варианте функции идут с адреса 100h с шагом 5. Но если под вызов настройщика выделить rst, то можно сделать с шагом 3. Получается, что программа вызывает системные ф-ции изначально по заранее заданным адресам (100h, 103h, ...), а при каждом вызове происходит автоподстройка, и в следующий раз этот же вызов уже напрямую вызывает function1. Да, использоваться в этом случае могут call cond, а не только call. К сожалению jp работать не будет корректно.

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 6
    Последнее: 10.09.2013, 16:04
  2. Порты памяти - Scorpion и др.
    от ASMAN в разделе Программирование
    Ответов: 27
    Последнее: 18.06.2008, 12:20
  3. Unreal. Breakpoint на чтение памяти.
    от valker в разделе Эмуляторы
    Ответов: 1
    Последнее: 12.02.2005, 12:58

Ваши права

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