IVirtualProcessorRoot – struktura
Abstrakce hardwarového vlákna, na kterém může být spuštěn proxy vlákno.
Syntaxe
struct IVirtualProcessorRoot : public IExecutionResource;
Členové
Veřejné metody
Název | Popis |
---|---|
IVirtualProcessorRoot::Activate | Způsobí, že proxy vlákna přidružené k rozhraní pContext kontextu spuštění se spustí v tomto kořenovém adresáři virtuálního procesoru. |
IVirtualProcessorRoot::D aktivace | Způsobí, že proxy vlákna aktuálně spuštěný v tomto kořenovém adresáři virtuálního procesoru přestane odesílat kontext spuštění. Proxy vlákno bude pokračovat v provádění volání Activate metody. |
IVirtualProcessorRoot::EnsureAllTasksVisible | Způsobí, že data uložená v hierarchii paměti jednotlivých procesorů budou viditelná pro všechny procesory v systému. Zajišťuje, že se na všech procesorech před vrácením metody spustí plot plné paměti. |
IVirtualProcessorRoot::GetId | Vrátí jedinečný identifikátor kořenového adresáře virtuálního procesoru. |
Poznámky
Každý kořen virtuálního procesoru má přidružený spouštěcí prostředek. Rozhraní IVirtualProcessorRoot
dědí z rozhraní IExecutionResource . Více kořenových virtuálních procesorů může odpovídat stejnému základnímu hardwarovému vláknu.
Resource Manager uděluje kořenovým certifikátům virtuálního procesoru plánovačům v reakci na požadavky na prostředky. Plánovač může k provádění práce použít kořen virtuálního procesoru aktivací s kontextem spuštění.
Hierarchie dědičnosti
IVirtualProcessorRoot
Požadavky
Hlavička: concrtrm.h
Namespace: souběžnost
IVirtualProcessorRoot::Activate – metoda
Způsobí, že proxy vlákna přidružené k rozhraní pContext
kontextu spuštění se spustí v tomto kořenovém adresáři virtuálního procesoru.
virtual void Activate(_Inout_ IExecutionContext* pContext) = 0;
Parametry
pContext
Rozhraní pro kontext spuštění, který bude odeslán v tomto kořenovém adresáři virtuálního procesoru.
Poznámky
Resource Manager poskytne proxy vlákno, pokud není přidružený k rozhraní kontextu spuštění. pContext
Tuto Activate
metodu lze použít ke spuštění práce na novém kořenovém adresáři virtuálního procesoru vráceného Resource Managerem nebo k obnovení proxy vlákna v kořenovém adresáři virtuálního procesoru, který byl deaktivován nebo se chystá deaktivovat. Další informace o deaktivaci najdete v tématu IVirtualProcessorRoot::D eactivate . Při obnovení deaktivovaného kořenového adresáře virtuálního procesoru musí být parametr pContext
stejný jako parametr použitý k deaktivaci kořenového adresáře virtuálního procesoru.
Jakmile se kořen virtuálního procesoru poprvé aktivuje, další dvojice volání Deactivate
a Activate
mohou mezi sebou závodit. To znamená, že je přijatelné, aby Resource Manager obdržel volání Activate
před tím, než přijme Deactivate
volání, pro které byl určen.
Při aktivaci kořenového adresáře virtuálního procesoru signalizujete Resource Manageru, že tento kořen virtuálního procesoru je momentálně zaneprázdněný prací. Pokud plánovač nemůže najít žádnou práci, která by se spustila v tomto kořenovém adresáři, očekává se, že vyvolá metodu Deactivate
informující o tom, že kořen virtuálního procesoru je nečinný. Resource Manager používá tato data k vyrovnávání zatížení systému.
invalid_argument
je vyvolán, pokud argument pContext
má hodnotu NULL
.
invalid_operation
je vyvolána, pokud argument pContext
nepředstavuje kontext spuštění, který byl naposledy odeslán tímto kořenovým serverem virtuálního procesoru.
Aktivace kořenového adresáře virtuálního procesoru zvýší úroveň předplatného základního hardwarového vlákna o jednu. Další informace o úrovních předplatného najdete v tématu IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::D eactivate – metoda
Způsobí, že proxy vlákna aktuálně spuštěný v tomto kořenovém adresáři virtuálního procesoru přestane odesílat kontext spuštění. Proxy vlákno bude pokračovat v provádění volání Activate
metody.
virtual bool Deactivate(_Inout_ IExecutionContext* pContext) = 0;
Parametry
pContext
Kontext, který právě odesílá tento kořenový adresář.
Návratová hodnota
Logická hodnota. Hodnota true
označuje, že proxy vlákna vráceno z Deactivate
metody v reakci na volání Activate
metody. Hodnota false
značí, že proxy vlákna vrácené z metody v reakci na událost oznámení v Resource Manageru. V plánovači vláken v režimu uživatele (UMS) to znamená, že položky se zobrazily v seznamu dokončení plánovače a plánovač je nutný ke zpracování.
Poznámky
Tuto metodu použijte k dočasnému zastavení spouštění kořenového adresáře virtuálního procesoru, pokud v plánovači nemůžete najít žádnou práci. Volání Deactivate
metody musí pocházet z Dispatch
metody kontextu spuštění, se kterým byl naposledy aktivován kořen virtuálního procesoru. Jinými slovy, proxy vlákna vyvolání Deactivate
metody musí být ten, který se aktuálně spouští v kořenovém adresáři virtuálního procesoru. Volání metody v kořenovém adresáři virtuálního procesoru, na který se nespouštějí, může způsobit nedefinované chování.
Deaktivovaný kořen virtuálního procesoru může být vyvolána voláním Activate
metody se stejným argumentem, který byl předán metodě Deactivate
. Plánovač zodpovídá za zajištění spárování volání Activate
metod a Deactivate
metod, ale není nutné je přijímat v určitém pořadí. Resource Manager dokáže zpracovat příjem volání metody Activate
předtím, než přijme volání metody, Deactivate
pro kterou byla určena.
Pokud se kořen virtuálního procesoru probouzí a návratová hodnota z Deactivate
metody je hodnota false
, plánovač by měl dotazovat seznam dokončení UMS prostřednictvím IUMSCompletionList::GetUnblockNotifications
metody, jednat na dané informace a následně metodu Deactivate
znovu volat. To by se mělo opakovat, dokud metoda Deactivate
nevrátí hodnotu true
.
invalid_argument
je vyvolán, pokud má argument pContext
hodnotu NULL.
invalid_operation
je vyvolána, pokud se kořen virtuálního procesoru nikdy neaktivoval nebo argument pContext
nepředstavuje kontext spuštění, který byl naposledy odeslán tímto kořenovým serverem virtuálního procesoru.
Deaktivace kořenového adresáře virtuálního procesoru sníží úroveň předplatného základního hardwarového vlákna o jednu. Další informace o úrovních předplatného najdete v tématu IExecutionResource::CurrentSubscriptionLevel.
IVirtualProcessorRoot::EnsureAllTasksVisible – metoda
Způsobí, že data uložená v hierarchii paměti jednotlivých procesorů budou viditelná pro všechny procesory v systému. Zajišťuje, že se na všech procesorech před vrácením metody spustí plot plné paměti.
virtual void EnsureAllTasksVisible(_Inout_ IExecutionContext* pContext) = 0;
Parametry
pContext
Kontext, který právě odesílá tento kořenový server virtuálního procesoru.
Poznámky
Tato metoda může být užitečná, když chcete synchronizovat deaktivaci kořenového adresáře virtuálního procesoru s přidáním nové práce do plánovače. Z důvodů výkonu se můžete rozhodnout přidat pracovní položky do plánovače bez spuštění paměťové bariéry, což znamená, že pracovní položky přidané vláknem spuštěným na jednom procesoru nejsou okamžitě viditelné pro všechny ostatní procesory. Použitím této metody ve spojení s metodou Deactivate
můžete zajistit, že plánovač neaktivuje všechny jeho kořeny virtuálního procesoru, zatímco pracovní položky existují v kolekcích plánovače.
Volání EnsureAllTasksVisibleThe
metody musí pocházet z Dispatch
metody kontextu spuštění, se kterým byl naposledy aktivován kořen virtuálního procesoru. Jinými slovy, proxy vlákna vyvolání EnsureAllTasksVisible
metody musí být ten, který se aktuálně spouští v kořenovém adresáři virtuálního procesoru. Volání metody v kořenovém adresáři virtuálního procesoru, na který se nespouštějí, může způsobit nedefinované chování.
invalid_argument
je vyvolán, pokud argument pContext
má hodnotu NULL
.
invalid_operation
je vyvolána, pokud se kořen virtuálního procesoru nikdy neaktivoval nebo argument pContext
nepředstavuje kontext spuštění, který byl naposledy odeslán tímto kořenovým serverem virtuálního procesoru.
IVirtualProcessorRoot::GetId – metoda
Vrátí jedinečný identifikátor kořenového adresáře virtuálního procesoru.
virtual unsigned int GetId() const = 0;
Návratová hodnota
Celočíselné identifikátory.