Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Segment pamięci to ciągły zakres adresów wirtualnych mapowanych na ciągły zakres adresów fizycznych. Zostały one wprowadzone w systemie Windows Vista.
Menedżer pamięci wideo (VidMm) jest odpowiedzialny za zarządzanie przestrzenią adresową procesora GPU. Zanim będzie mógł to zrobić, sterownik miniportu trybu jądra (KMD) musi opisać przestrzeń adresową procesora GPU do VidMm, używając segmentów pamięci.
KMD tworzy segmenty pamięci w celu uogólniania i wirtualizacji zasobów pamięci wideo. Może skonfigurować segmenty pamięci zgodnie z typami pamięci, które obsługuje sprzęt (na przykład pamięć buforu ramki lub przysłonę pamięci systemowej).
Podczas inicjalizacji sterownika KMD musi zwrócić listę typów segmentów, które opisują, w jaki sposób VidMm może zarządzać zasobami pamięci. KMD określa liczbę typów segmentów, które obsługuje, i opisuje każdy typ segmentu, odpowiadając na wywołania funkcji DxgkDdiQueryAdapterInfo. Sterownik opisuje każdy segment przy użyciu struktury DXGK_SEGMENTDESCRIPTOR. Aby uzyskać więcej informacji, zobacz Inicjowanie użycia segmentów pamięci.
Następnie liczba i typy segmentów pozostają niezmienione. VidMm:
Gwarantuje, że każdy proces otrzyma sprawiedliwy udział zasobów w dowolnym konkretnym segmencie,
Zarządza wszystkimi segmentami niezależnie.
Segmenty nie nakładają się. Dlatego VidMm może przydzielić znaczną ilość zasobów pamięci wideo z jednego segmentu niezależnie od ilości zasobów przechowywanych przez aplikację z innego segmentu.
KMD przypisuje identyfikator segmentu do każdego ze swoich segmentów pamięci. Później, gdy VidMm żądanie utworzenia alokacji dla zasobów wideo i renderowania tych zasobów, KMD:
Identyfikuje segmenty, które obsługują żądanie.
Określa segmenty, których w kolejności użycia preferuje sterownik VidMm.
Aby uzyskać więcej informacji, zobacz Określanie segmentów podczas tworzenia alokacji.
Moduł KMD nie musi określać wszystkich zasobów pamięci wideo dostępnych dla karty graficznej w jej segmentach pamięci. Jednak KMD musi określić wszystkie zasoby pamięci, które VidMm zarządza pomiędzy wszystkimi procesami uruchomionymi w systemie. Na przykład:
Mikrokod wierzchołkowego cieniowania, który implementuje stały potok funkcji, może przebywać w przestrzeni adresowej procesora GPU, ale poza pamięcią, którą zarządza VidMm, czyli nie jest częścią segmentu. Ta konfiguracja jest możliwa, ponieważ mikrokod jest zawsze dostępny dla wszystkich procesów i nigdy nie jest źródłem rywalizacji między procesami.
W przypadku zasobów, takich jak bufory wierzchołków, tekstury, cele renderowania i kod cieniowania specyficzny dla aplikacji, VidMm musi przydzielić zasoby pamięci wideo z jednego z segmentów pamięci sterownika. To wymaganie jest spowodowane tym, że typy zasobów muszą być dość dostępne dla wszystkich procesów.
Na poniższej ilustracji przedstawiono przykład sposobu konfigurowania segmentów pamięci przez usługę KMD z przestrzeni adresowej procesora GPU.
Liczby na rysunku odpowiadają następującym segmentom pamięci:
Segment liniowy dostępny dla procesora CPU: ten segment jest dostępny dla procesora CPU i jest zorganizowany jako liniowa przestrzeń adresowa.
Segment liniowy niedostępny dla procesora CPU: ten segment jest zorganizowany jako liniowa przestrzeń adresowa, ale nie jest dostępny dla procesora CPU. Jest używany w przypadku zasobów, które nie wymagają dostępu do CPU.
Segment przysłony AGP tylko do odczytu: ten segment jest używany do dostępu tylko do odczytu do pamięci AGP (przyspieszonego portu grafiki).
Segment apertury: Ten segment jest używany w przypadku zasobów, do których uzyskuje się dostęp za pośrednictwem apertury AGP.
Ukryte skrzynki reprezentują segmenty pamięci, których KMD nie ujawnia VidMm. Pamięć wideo ukryta przed VidMm nie może być mapowana na przestrzeń użytkownika ani stać się wyłącznie dostępna dla żadnego konkretnego procesu. Spowoduje to przerwanie podstawowych reguł pamięci wirtualnej, które wymagają, aby wszystkie procesy uruchomione w systemie miały dostęp do całej pamięci.