abbra пишет:Из упрощенных по интерфейсу приложений -- камера и медиа-плеер.
Эээм, а вам не кажтся, что это из-за того, что они просто не успевают реализовать в софте всё, что хотелось бы юзерам? Ну либо тогда ссылку, где пинокия призналась, что из-за аппаратных ограничений они не могут сделать это.
abbra пишет:Взгляд, что все детали должны быть спрятаны от приложений в драйверах и системный демонах, несколько наивен. Это мечты -- конечно же хотелось, чтобы всегда так было, но увы, это практически невозможно. Режимы энергосбережения в железе хороши только тогда, когда приложения не требуют постоянно это железо просыпаться и себя исполнять.
И всё же, юзерспейс приложения от сторонних разработчиков, да и от самих разрабов пинокии не должны ничего знать как и что там должно быть в подсистеме по энергосбережению.
abbra пишет:Удивительно, но факт -- мало кто может написать приложение корректно так, чтобы с первого раза оно дело все то, что нужно для энергосбережения -- спало там, где нет обработки, координировало свои просыпания и сетевую активность с другими приложениями и просыпалось не 50-60 раз в секунду, а один, а то и вообще реже, особенно если оно висит в фоне или является виджетом на рабочем столе.
Ну с этим я соглашусь в том, что разработчик прикладного софта должен задумываться о том, а не излишне ли он использует к примеру while(1){ sleep(50);}, вместо того, что бы использовать ивенты. В Qt и так всё на ивентах сидит. Если опуститься например пониже, то для использования сокетов и вместо постоянной проверки select'ом, а не пришло ли там чего, есть epoll.
abbra пишет:Среди приложений в extras очень много таких, которые этим условиям не удовлетворяют. Например, апплет для фейсбука выедает батарейку только в путь, перерисовывая себя даже тогда, когда он не виден на экране. Mauku (твиттер-клиент) не лучше, у него мало того, что периодически перерисовывается пользовательский интерфейс, так еще и в фоне демон, который собирает данные от социальных сетей, себя ведет несообразно поведению апплета.
Нокийские приложения тоже не идеальны, например, почтовый клиент, но их кропотливо вычищают. Работа над вычисткой обычно занимает от трех-четырех месяцев. Так что наивно думать, что если уж какие-то функции заявлены в рекламных документах на ту или иную железку или библиотеку, то их можно сразу использовать и наслаждаться результатом. Как правило, все эти рекламные штуки напоминают старый советский анекдот про мужика и окна женской бани -- "Но отсюда же не видно. - А вы на шкаф залезьте!" Для того, чтобы все работало как надо, необходимо залезать и на шкаф, и под кровать, и воду в кране перекрывать. Хорошо, что еще от фазы луны не зависит...
В начале сентября в рассылку, посвященную разработке ядра Linux на платформе ARM, пришло исправление от Нокии, связанное с неккоретным сохранением и восстановлением регистров после сбоев. Если приложение пыталось исполнить код, находящийся в странице памяти, помеченной как неисполняемая (только данные), то происходил сбой, управление сбрасывалось в ядро. Ядро видело, что что-то не так с памятью, но у него в этом месте был только один вариант "что не так" -- нужная страница памяти не загружена из раздела подкачки, ее нужно подгрузить и передать туда управление. Ядро пыталось подгрузить страницу, обнаруживало, что страница и так уже загружена, возвращало управление обратно в приложение, а приложение снова пыталось исполнить код, находящийся в странице памяти, помеченной как неисполняемая. Все это было из-за ошибки в интерпретаторе JavaScript в браузере, приводившей к порче указателей на несколько функций так, что они указывали на эту самую неисполняемую память. В результате возникал бесконечный цикл, который разряжал батарейку за 20 минут.
Это уже не проблемы как таковой задачи энергосбережения, это уже умение грамотно написать код юзерспейс приложения, что бы не было лишних ляпов, которые бы создавали загрузку аппаратных ресурсов.
abbra пишет:Оказалось, что для ARM обработка подобных исключений сделана в ядре неполностью, несмотря на то, что возможность пометки страниц памяти как неисполняемых есть уже лет пять (а на других платформах и того больше), да и устройств на ARM под Linux выпущено за это время очень много. Но Нокия была первой, кто нарвался на эту ошибку. После того, как конкретные условия ее возникновения были определены, народ легко воспроизвел ее и на более старых ревизиях железа. Исправление заняло около месяца и было завершено где-то за три недели до выпуска. И это только один небольшой пример.
Ошибки есть везде, их нет только у тех, кто ничего не делает. Так же не новость, что да, может быть не полная реализация того, что умеет железка и помечено как туду или фиксми, или просто упущено из виду.
Странно звучит про жабо скрипт, мб имелось ввиду, что ошибку заметили, когда юзался движок js. Юзерспейс приложения работают с виртуальной памятью и их не интересует, что и как там делает ведро. Если ошибка в ведре, то это вылезет в любом приложении, надо только знать факторы, при которых этого можно добиться.
kernel panic, core dumped, system halted, please reboot this world.