User Tag List

Страница 7 из 7 ПерваяПервая ... 34567
Показано с 61 по 67 из 67

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

  1. #61

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

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    Прерывания тут причем?
    А зачем отдавать управление системе каждый фрейм?

    Цитата Сообщение от bigral Посмотреть сообщение
    Речь шла о "добровольном" сохранении адресов в заранее известное системе место и последующей передаче управления системе с тем чтобы система смогла произвести перемещение модуля и произвести коррекцию адресов в модуле.
    Я предложил более простой и очевидный вариант:
    - процесс работает столько, сколько считает нужным. Все это время его никто не перемещает (кооперативная многозадачность)
    - когда процесс решает прерваться (сам), он вызывает системную функцию шедулинга. В процессе вызова процесс _может_ быть перемещен по памяти (только кодовая область)
    - процессы, требующие прерываний, регистрируют callback в системе
    - выделенные блоки памяти адресуются не адресами, а хендлами. Для получения абсолютного адреса и работы делается системный вызов. При этом блок запирается и не перемещается никуда. Когда процесс заканчивает работать с блоком, делается другой вызов и указатель становится невалидным (хендл остается).

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

  3. #62

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

    По умолчанию

    Выделенные блоки памяти просто-напросто должны быть в верхней памяти, тогда перемещать их не потребуется.

    Фигурно добавлять вызовы неизвестно где - ОС делается не для того, чтобы стало труднее писать, а для того, чтобы было легче писать.

    И да, критическая секция - это 21 такт на вход и 31 на выход. Не так уж и страшно, можно хоть на любую операцию адресации вешать. Это может делать компилятор. А вставлять вызовы ОС в хитро продуманных местах он не может.

    К сожалению, остаётся ограничение на размер кода. Чтобы его обойти, надо программные модули оформлять в виде задач. Например, есть редактор паттерна (одна задача), а есть редактор сэмпла (другая задача). Когда пользователь хочет перейти к редактированию сэмплов, первая задача передаёт второй нужные данные и уходит в своп, взамен вылезает вторая. А какая-то часть редактора (например, плеер) всегда остаётся в памяти - третья задача.

  4. #63

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

    По умолчанию

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

    ---------- Post added at 18:28 ---------- Previous post was at 18:27 ----------

    Цитата Сообщение от alone Посмотреть сообщение
    И да, критическая секция - это 21 такт на вход и 31 на выход. Не так уж и страшно, можно хоть на любую операцию адресации вешать. Это может делать компилятор. А вставлять вызовы ОС в хитро продуманных местах он не может.
    В С может быть и не может, а вот в том же С++ задача прекрасно решается идиомой RAII.

  5. #64

    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    что имел в виду я: многозадачность может быть любая, хоть вытесняющая, прерывающая прогу в любом месте. но тогда ее никто не имеет право перемещать. но иногда прога должна вызывать эту спец. функцию, и тогда, если хочется сделать move (или делали недавно, но эту прогу не переместили, т.к. она была "занята"), делается move.

    т.е. не одномоментная акция. а нужна ли она одномоментная?

  6. #65

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

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    И да, критическая секция - это 21 такт на вход и 31 на выход. Не так уж и страшно, можно хоть на любую операцию адресации вешать. Это может делать компилятор. А вставлять вызовы ОС в хитро продуманных местах он не может.
    Ты предполагаешь шедулер на прерывания повешенный?
    соглашение о DI перед запуском критической секции? и EI после оной?
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  7. #66

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

    По умолчанию

    Никаких DI,EI. Это теряет прерывание.
    Критическая секция оформляется так:
    ld hl,flag
    inc (hl)
    ...
    ld hl,flag
    dec (hl)
    call nz,os_проспали_прерывание


    Цитата Сообщение от Vitamin Посмотреть сообщение
    Практически все приложения- это цикл, перемежающий полезные действия и ничегонеделание. Вот в рамках этого цикла и нужно возвращать управление системе.
    Должна быть возможность писать под ОС не только "практически все" приложения, но и вообще все приложения. Например, архиваторы и компиляторы, которые могут занимать процессор на 100% минутами.
    И я выше приводил пример с печатью текста, где хрен поймёшь, куда вставлять вызов ОС.

  8. #67

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

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Должна быть возможность писать под ОС не только "практически все" приложения, но и вообще все приложения. Например, архиваторы и компиляторы, которые могут занимать процессор на 100% минутами.
    И я выше приводил пример с печатью текста, где хрен поймёшь, куда вставлять вызов ОС.
    Тогда прочитай то, что написал psb. Отдельно многозадачность, отдельно перемещаемость.

Страница 7 из 7 ПерваяПервая ... 34567

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

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

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

Ваши права

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