Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

Obsah / Utility / BUFFER / Deklarace pole bufferů

Zdrojový kód: INCLUDE\UTIL\BUFFER.INC, UTIL\BUFFER.ASM


Deklarace pole bufferů


; ------------- Macro - initialized buffer array head
; %1 = size of one buffer entry, %2 = size of buffer block (must be power of 2)

%macro		BUFFER	2

		LISTHEAD		; list of free buffer entries
		SPINLOCK		; lock of buffer array
		dd	%1		; size of one buffer entry (min. 8)
		dd	%2		; size of buffer block (power of 2)
		dd	~(%2-1)		; block mask (to get block head)
		dd	(%2-BUFBLOCK_size)/%1 ; number of entries per block
		dd	NULL		; reserved block (NULL=none)
%endmacro

Pole bufferů bývá deklarováno jako globální datová struktura. K jeho deklaraci slouží makro BUFFER.

Prvním parametrem makra je velikost jedné alokační položky. Minimální velikost alokační položky je 8 bajtů, maximální velikost je dána maximální velikostí systémového bloku paměti (konstanta MAXMEM, typicky to je 64 KB) sníženému o hodnotu 8. Velikost alokační položky nemusí být mocninou 2.

Druhým parametrem je velikost alokačního bloku - viz popis položky BUFH_BlockSize.

Příkladem použití je alokace popisovačů virtuální paměti v souboru VIRTMEM.ASM. Jeden popisovač má velikost například 70 bajtů (údaj se během vývoje systému mění), velikost alokačního bloku byla zvolena 4 KB. V tom případě se vejde do jednoho alokačního bloku 58 položek popisovačů (zbyde 28 bajtů nevyužitého místa na konci bloku). Maska adresy bloku bude 0FFFFF000h. Pokud by se nepoužilo pole bufferů, bylo by potřeba alokovat bloky o velikosti 128 bajtů, v tom případě by se vešlo do prostoru 4 KB pouze 32 položek popisovačů.


Obsah / Utility / BUFFER / Deklarace pole bufferů