Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Многозадачность в WinNT (продолжение)  (Прочитано 11160 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Грызун А.Н.
Гость
« : 15-05-2004 18:56 » 

Продолжение. Начало смотрите в "Многозадачность в WinNT"
Попытаюсь развить свою мысль, начатую в предыдущем сообщении. Для переключения задач в Windows 3.X использовался механизм, называемый корпоративной многозадачностью. Заключался он в следующем: обработав очередное сообщение, приложение передает управление операционной системе, которая может передать управление другому приложению. Недостатки этого механизма очевидны: если обработка сообщения затягивается или, неважно по какой причине, в программе образовался бесконечный цикл, то ОС не может переключиться на другую задачу.
   В Windows 4.X и в Windows NT реализован принципиально другой вид многозадачности, в котором операционная система действительно контролирует и управляет процессами, потоками и их переключением. Способность операционной системы прервать выполняемый поток практически в любой момент времени и передать управление другому ожидающему потоку определяется термином preemptive multitasking — преимущественная, или вытесняющая, многозадачность.
   Реализация ее выглядит так: все существующие в данный момент потоки, часть из которых может принадлежать одному и тому же процессу, претендуют на процессорное время и, с точки зрения пользователя должны выполняться одновременно. Для создания этой иллюзии система через определенные промежутки времени забирает управление, анализирует свою очередь сообщений, распределяет сообщения по другим очередям в пространстве процессов и, если считает нужным, переключает потоки.
   Так вот интерес (затруднение), вызвал механизм, помогающий забрать управление с любой задачи пользователя.
   Проведём эксперимент: зациклим свою программу, одним из известных способов (я, например, делал это так: jmp $) и запустим в среде Windows NT (в моём случае это Windows NT 5.0). Система тормозит (окно диспетчера задач прорисовывается около минуты), но не виснет. То есть шанс есть завершить зависшую задачу.

   С уважением Грызун А.Н.
      gryzun@rbcmail.ru
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 15-05-2004 21:36 » 

Теоретически, это должно быть описано у Танненбаума.  Я, признаться, не имел возможности прочитать как следует, пришлось листать по диагонали.  Но он подробно разбирает планировщики, поэтому можно ожидать, что тему насильственного переключения контекстов он тоже разбирает.

Можно предложить такой дизайн.  Через некоторые промежутки времени аппаратный таймер выбрасывает немаскируемое прерывание.  Обработчик этого прерывания передаёт управление планировщику (например, подменяет в стеке кадр с адресом точки возврата).  А уж планировщик сам решает, что делать.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Xeysan
Гость
« Ответ #2 : 16-05-2004 10:52 » 

Это должно  быть описано у Соломона, Руссиновича. Никак не могу найти время прочитать  :? , но в оглавлении эта тема встречается.
Записан
Грызун А.Н.
Гость
« Ответ #3 : 16-05-2004 18:18 » 

Цитата: Xeysan
Это должно  быть описано у Соломона, Руссиновича. Никак не могу найти время прочитать  :? , но в оглавлении эта тема встречается.
Мне много не надо! Объясните на пальцах.
С уважением Грызун А.Н.
gryzun@rbcmail.ru
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #4 : 19-05-2004 02:03 » 

Грызун А.Н. ,а почему ты здесь не зарегистрируешься ?


Если в 2х словах про многозадачность ( IMHO ) :
NT обрабатывая маскируемое прерывание таймера IRQL=28, через DPC вызывает планировщик , на DPC уровне IRQL=2 планировшик, когда до него дойдет очередь , решает какой поток выполнять , когда IRQL становиться passive IRQL=1 начинает выполняться выбраный поток . Чем до этого занимался текущий поток значения не имеет . Единственно , что если нет потока с большим приоритетом и квант времени текушего потока не израсходован, то он продолжит свое выполнение .

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

подробнее, как и говорил Xeysan , есть в insidew2k

Xeysan , не знаешь ссылки на insideXP ?
Записан

1n c0de we trust
Xeysan
Гость
« Ответ #5 : 19-05-2004 06:42 » 

>Xeysan , не знаешь ссылки на insideXP ?
А разве она такая есть?
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #6 : 21-05-2004 01:42 » 

Xeysan,   , месяца 3 назад я лазил на sysinternals , там вроде писали , что  insideXP должна была вот вот издаться .
Записан

1n c0de we trust
gryzun
Гость
« Ответ #7 : 23-05-2004 19:09 » 

А можно ссылку?
Записан
Mayor
Специалист

ru
Offline Offline

« Ответ #8 : 01-06-2004 02:42 » 

gryzun,  если ты про insidewin2k:
 
 ftp://tatarchouk.com/docs/
 
 если не работает, я вроде еще где-то видел, могу поискать.
Записан

1n c0de we trust
gryzun
Гость
« Ответ #9 : 01-06-2004 19:28 » 

Большое спасибо. Выкачиваю!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines