The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"OpenELEC 1.0 - новый дистрибутив для создания домашних кинот..."
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для контроля за появлением новых сообщений - перед выходом жмите "Пометить прочитанным".
. "OpenELEC 1.0 - новый дистрибутив для создания домашних кинот..." +/
Сообщение от ptr (??), 24-Окт-11, 11:41 
>> Because of its origins on the Xbox console, XBMC runs in a
>> gameloop environment rather than event-driven, meaning that it is constantly re-drawing
>> the UI even when nothing is changing onscreen. This results in
>> very high CPU usage on low-end machines, and hence high temperatures,
>> fan activity and power consumption.
> Какое это отношение имеет к команде HALT?

Объясняю.
Если программа ожидает только одно событие, проблем нет. Вызвали, например, чтение из сокета с ожидаением и висим, пока данные не дадут. Хуже, если нужно ждать одновременно несколько событий.

В DOS, на XBOX и прочих однозадачных системах, допустимо, когда программа выполняет цикл ожидания, опрашивая постоянно ожидаемые события и, возможно, перерисовывая экран. В мультизадачных системах, начиная еще с DesqView, существуют два подхода.

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

Второй способ, исторический, возник во времена, когда асинхрнного ввода-вывода еще не было. Программе приходилось на каждое ожидаемое событие создавать отдельный процесс, который вызывал системный вызов, например read() на сокет и уже в нем, система, если к тому моменту не было диспетчеризируемых задач, выполняла команду HALT. При приходе любого прерывания выполнение возобновляется и система проверяет, не стала ли теперь какая-то задача диспетчеризируема. Если да - ей передается управление. Если нет - опять HALT.

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

Теперь вернемся к цитате.
gameloop environment - это циклический опрос событий без остановки процессора
event-driven environment - это выполнение команды HALT программой или системой в целях ожидания события

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
OpenELEC 1.0 - новый дистрибутив для создания домашних кинот..., opennews, 21-Окт-11, 11:28  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру