Как iTunes продолжает проигрывать музыку, если вся система заморожена?

Я заметил это сегодня - вся моя система замерзла, часы зависли, ничто не реагирует на щелчки и нажатия клавиш, и моя анимация машины времени перестала работать. Пока переделал мой загрузочный диск. У меня также был открыт iTunes, который продолжал играть музыку. Каким образом iTunes удается воспроизводить медиафайлы, если вся ОС замерзла? Никакой другой медиаплеер OS X, который я видел, не может сделать это, и я хотел бы знать, как это возможно.

Благодарю.

2 ответа

Решение

Я считаю, что iTunes использует real-time threads, который является определенным типом потоков, которым дается постоянная доля времени, что бы ни происходило на машине. Смотрите этот документ Apple для краткого обсуждения. Вы можете найти больше информации во внутренней книге OS X. Книга немного устарела (в основном обсуждается 10.4 Tiger), но внутренняя часть ядра не претерпела существенных изменений.

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

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

Другие вопросы по тегам