Многозадачность в защищенном

Тема в разделе "WASM.OS.DEVEL", создана пользователем OloLilo, 22 ноя 2009.

  1. OloLilo

    OloLilo New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2009
    Сообщения:
    3
    Я не пишу своё ядро,я разбираюсь с многозадачностью в защищенном режиме, архитектура x86(с остальным вроде в защищенном режиме худо-бедно разобрался). Читал форум. Понял, что переключать задачи нужно не аппаратно, а ручками. Что я сделал: взял конкретный случай,когда есть 2 задачи (для удобства). В обработчике IRQ0 (системный таймер) написал, чтобы в одну свою TSS1 (или TSS2), записывались все регистры, ну и ip текущей задачи. И в sp+0 (там текущий ip лежит) записываю ip второй задачи, чтобы при выходе из обработчика выполнялась вторая задача. И удивительно, оно работает. Обрадовался.

    И собственно вопрос. Переключать задачи нужно по IRQ0 (системному таймеру)? Если да, то системный таймер нужно еще перепрограммировать, а то 18.2 переключений задач в секунду маловато, правильно понял?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Если речь идет про "настоящее" ядро, перепрограммировать надо. Если "для домашнего пользования" -- зависит от задачи. А вообще у Таненбаума все хорошо описано -- и про планировщик и про все остальное :).
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Это лишь один вариант из нескольких, которые должны быть задействованы. В силу этого смену eip лучше выполнять не при выходе из обработчика прерывания, а внутри спец. подпрограммы, которая будет вызываться в обработчике. Кстати без переключения стеков нормальное переключение задач не выполнить, поэтому вполне естественно значение eip хранить исключительно в стеке (оно туда попадает при вызове подпрограммы переключения), как впрочем и значения сегментных регистров, и регистров общего назначения за исключением самого указателя стека (ss:)esp.

    Да, маловато. 100-1000 - в самый раз, хотя Mika0x65 в общем-то прав - все зависит от решаемых задач (к примеру иногда и этого бывает мало).
     
  4. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А иногда переключать вообще не надо -- пущай себе дальше работает. От задачи зависит-с :)
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Зависит от того, исчерпала ли задача свой лимит времени или нет. Также можно не переключаться, если задача одна в очереди, а можно переключиться на саму себя :)
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Phantom_84
    В некоторых системах (например, OS/360) ещё предусмотрено так называемое "состояние обязательного завершения действия" -- задачу, находящуюся в таком состоянии, снимать с процессора нельзя, даже если свой квант времени она исчерпала. Правда, наличие такой фишки чревато боком, но... В общем, опять приходим к тому же: от задачи зависит :)
     
  7. OloLilo

    OloLilo New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2009
    Сообщения:
    3
    Спасибо за разъяснения.
     
  8. xssww2

    xssww2 New Member

    Публикаций:
    0
    Регистрация:
    11 апр 2009
    Сообщения:
    84
    я как то в своей ос делал переключение по часам реального времени, тоже вариант
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    SII, это используется во многих системах. Я это состояние называю просто блокировкой. Блокировка может быть приведена в действие только в режиме ядра; при возврате в user mode или при уходе на ожидание блокировка принудительно сбрасывается. Блокировка обычно используется системным ПО для работы с общесистемными структурами ядра, а для работы с аппаратурой используется просто cli/sti.
     
  10. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Phantom_84
    В том-то и дело, что это состояние не связано с режимом ядра, и блокировкой называть его некорректно.
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    И как тогда это будет работать в защищенной многозадачной ОС? И почему захват процессора для монопольного использования какой-либо задачей некорректно называть блокировкой? Время процессора - такой же разделяемый ресурс, как и многие другие.
     
  12. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Это не захват процессора. Это просто запрет снимать задачу пользовательского режима и ставить на выполнение другую. Код системы при этом выполняется как обычно. И реализуется сие исключительно планировщиком задач (он проверяет, находится ли текущая задача в состоянии обязательного завершения действия, и если находится, не передаёт процессор другой задаче).
     
  13. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Понятно, что система не должна терять контроля. То, что ты описываешь, сильно похоже на реализацию realtime-приоритета в ОС общего назначения и фактически является режимом кооперативной многозадачности. Этот режим не очень популярен, т.к. использование даже одной задачи с realtime-приоритетом часто приводит к чрезмерному простою других задач.
     
  14. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Угу, именно это. Правда, к реалтайму там никакого отношения не было, сама ось для пакетной обработки предназначена. Думаю, ввели такую возможность из-за того, что часть системных функций выполняли программы пользовательского режима. Правда, для системы разработки середины 1960-х такое вполне простительно :)

    Ну а сказано всё было лишь для того, чтобы показать автору темы: момент переключения с одной задачи на другую связан с особенностями ОС и текущим состоянием задач, а не просто с прерыванием от таймера или ещё с чем.
     
  15. OloLilo

    OloLilo New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2009
    Сообщения:
    3
    Спасибо, понимаю.