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

User Tag List

Страница 2 из 7 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 67

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

  1. #11
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дим, как писать программу не используя CALL:RET?
    что это будет за программа?
    тут только один вариант
    ld iy,return_adress
    ld ix,procedure_adress
    jp cheduler_call
    return_adress
    jp cheduler_ret
    procedure_adress
    jp cheduler_ret

    по приходу на cheduler_call сторим iy и переходим на ix
    по приходу на cheduler_ret возвращаемся на последнее сохраненное

    но у меня слов нет по такому извращению
    проще и быстрее будет интерпретатор ЯВУ типа FORTH или тотже оберон
    С уважением,
    Jerri / Red Triangle.

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

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Это условие обусловлено архитектурой 128K.
    Условие кривых программистов, не умеющих пользоваться кооперативной многозадачностью?

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

    По умолчанию

    Как выглядит архиватор при кооперативной многозадачности?

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

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Как выглядит архиватор при кооперативной многозадачности?
    Вызвать yield на каждый процент прогресса, не? Или явно вызвать resсhedule при нехватке памяти не?

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

    По умолчанию

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

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

    По умолчанию

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

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

  8. #17
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Даже если программа содержит баг и не будет никогда вызывать упомянутый системный вызов - максимум, чем это грозит - это повышенной фрагментацией памяти. Это не крах системы. А с учетом того, что у Z80 нет защищенного режима, крах системы из-за бага в программе может произойти по тысяче других причин (DI/HALT, например).

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

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    А если быть готовым, что программа будет прервана в любой момент, то на всех машинах будут абсолютно лишние затраты.
    Если шедулер не будет вызываться с частотой 50 раз в секунду, то сдохнет всё, что привязано к таймеру - например, музыка.

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Даже если программа содержит баг и не будет никогда вызывать упомянутый системный вызов - максимум, чем это грозит - это повышенной фрагментацией памяти. Это не крах системы.
    Релокацией управляет ОС, а не сама программа. Необходимость релокации может возникнуть при запуске или снятии другой задачи, в любой момент.

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

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Если шедулер не будет вызываться с частотой 50 раз в секунду, то сдохнет всё, что привязано к таймеру - например, музыка.
    Под прерыванием программы я подразумеваю ее останов и релокацию.

  11. #20
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Если шедулер не будет вызываться с частотой 50 раз в секунду, то сдохнет всё, что привязано к таймеру - например, музыка.
    Не знаю как сейчас, а во времена дисководов запрет прерываний на длительное время - неизбежность при работе любой оси. Соответственно, дохнут часы, музыка, опрос клавиатуры. Никуда от этого не денешься.
    Цитата Сообщение от alone Посмотреть сообщение
    Релокацией управляет ОС, а не сама программа. Необходимость релокации может возникнуть при запуске или снятии другой задачи, в любой момент.
    Все равно, релокация программ не является критичной функцией системы. Она может подождать. Пока система ждет, что какая-нибудь программа позволит себя релоцировать, она может выполнять эту и другие программы, то есть эффективный прогресс работы ОС будет продолжаться.

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

    Ситуация облегчается тем, что дефрагментация памяти по необходимости (а не фоновая) не требует обязательно релоцировать конкретную программу. Задача стоит освободить непрерывный блок, где бы он ни находился. Если одновременно работают несколько задач - то даже если одна из них не готова к релокации, то могут быть готовы другие. Их и релоцировать.

    ---------- Post added at 23:46 ---------- Previous post was at 23:33 ----------

    Цитата Сообщение от alone Посмотреть сообщение
    Если там архивируется 100500 мегабайт, проценты редковато пойдут.
    А если вызывать по каждому килобайту, то на быстрых машинах будут абсолютно лишние переключения.
    Можно по каждому килобайту таймер проверять и, если прошла секунда - переключаться на системный вызов. Я так делаю в своих программах, где требуется индикация прогресса.

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

Страница 2 из 7 ПерваяПервая 123456 ... ПоследняяПоследняя

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

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

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

Ваши права

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