Cikkek

A Windows Vista kernel belsejében - MMCSS

kategória: Multimédia — forrás: Mark Russinovich — dátum: 2007-10-23 — értékelés: 5.00Nyomtató

    A felhasználók elvárják a multimédia alkalmazásoktól - beleértve a zene- és videólejátszóktól - a tökéletes és folyamatos playback funkciót. Azonban a velük egyidejűleg futó alkalmazások - mint a víruskereső, tartalom indexelés, vagy akár a levelezőkliens - processzor használata miatt szakadozás alakulhat ki. A jobb playback szolgáltatás eléréséhez a Windows Vista bevezeti az MMCSS-t, mely kezeli a multimédia alkalmazások CPU prioritásait. Az MMCSS a MultiMedia Class Scheduler Service rövidítése.

    Egy multimédiás szoftver - mint a Windows Media Player 11 is - beregisztrálja magát az MMCSS-be az új API-kat használva, megadva a multimédiás jellemzőit melyek lehetséges értékei a registry kulcs alatt vannak felsorolva:

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \
Currentversion \ Multimedia \ SystemProfile \ Tasks


    Az alkulcsok határozzák meg, hogy egy szál - kapcsolatban állva valamilyen média típussal - mekkora figyelmet kapjon a CPUtól és a GPU erőforrásaitól (bár a grafikai processzor (GPU) erőforráskezelése nincs megvalósítva a Windows Vistában). 

    A 3. ábrán láthatjuk az egyik alkulcs tartalmát egy frissen telepített Windows Vista rendszeren, melyhez külső szoftverfejlesztők is hozzáadhatják saját task definíciójukat.


3. ábra - Multimedia Class Scheduler Service Audio feladatok definíciója

    Az MMCSS, mely a %SystemRoot%\System32\Mmcss.dll fájlban van megvalósítva és egy Service Host (svchost.exe) folyamaton belül fut, rendelkezik egy prioritáskezelő szállal, ami 27es prioritáson fut. (Windowsban a szálprioritások 0-31-es értékeket vehetnek fel.) Ez a szál felemeli a regisztrált multimédiás szálak prioritását arra a szintre, mely a task kulcsán belüli Scheduling Category bejegyzésben van definiálva. Windowsban a 16 vagy annál magasabb szálprioritások a valós idejű prioritási tartományba tartoznak és "magasabbak", mint bármely más szál a rendszeren (kivétel ezalól a kernel memóriakezelőjének szálai, melyek 28as és 29es prioritáson futnak.) Az MMCSS futása rendszergazdai fiókok alatt lehetséges, mivel csak itt van megfelelő prioritás növelő jogosultság a szálak valós idejű futtatásához.

    Amikor lejátszunk egy audio fájlt, a Windows Media Player regisztrálja az Audio task szálakat, mikor videót játszunk le, akkor pedig a Playback task szálakat. Az MMCSS minden szálat "megerősít" amely jelzi, hogy streamet fog szolgáltatni akkor, amikor egy előtérben lévő folyamatban fut, s a BackgroundOnly bejegyzésük a registryben a True értéken áll.

    Az MMCSS nem csupán a multimédia szálak CPU-időhöz jutását segíti, de biztosítani szeretné, hogy más szálak is kapjanak legalább egy kevéske CPU-időt ahhoz, hogy a rendszer és más alkalmazások válaszképesek maradjanak. Ezért az MMCSS egy adott százaléknyi CPU-időt fenntart más tevékenységek számára, melyek a következő registry kulcson belül vannak meghatározva.:

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \
Currentversion \ Multimedia \ SystemProfile \ SystemResponsiveness

    Alapértelmezés szerint ez 20%. Az MMCSS figyeli a CPU használatot, hogy biztosan ne lépjék túl a "megerősített" szálak a 8ms-ot egy 10ms-os perióduson belül, ha más szálaknak is szüksége van a processzorra. Hogy a "megerősített" szálak ne legyenek útban az utolsó 2 ms idejére, az ütemező csökkenti a multimédiás szálak prioritását az 1-7 -es tartományba.