feat: rajout de la fonction mbclean permettant de fusionner les espaces libres et cela de maniere systematique lors d'une liberation de mémoire.

This commit is contained in:
Nicolas Hordé 2004-11-03 00:32:19 +00:00
parent d5a9d98391
commit 7dbba04017
1 changed files with 69 additions and 5 deletions

View File

@ -9,7 +9,7 @@ include ..\include\mem.h
include ..\include\divers.h include ..\include\divers.h
start: start:
maxfunc equ 8 maxfunc equ 9
jmp tsr ;Saute à la routine résidente jmp tsr ;Saute à la routine résidente
nameed db 'MB' ;Nom drivers nameed db 'MB' ;Nom drivers
@ -62,9 +62,66 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI
dw MBFind dw MBFind
dw MBChown dw MBChown
dw MBAlloc dw MBAlloc
dw MBclean
FirstMB dw 0 FirstMB dw 0
;Mise a nivo de la mémoire (jonction de blocs libre)
MBclean:
push ax bx dx es gs
mov bx,cs:firstmb
dec bx
dec bx
xor ax,ax
xor dx,dx
searchfree3:
mov gs,bx
cmp gs:[MB.Check],'NH'
jne erroronsearch
inc bx
inc bx
add bx,gs:[MB.Sizes]
cmp word ptr gs:[MB.Sizes],0
je erroronsearch
cmp gs:[MB.Reference],Free
jne notfreeatall
cmp ax,0
je notmeetafree
add dx,gs:[MB.Sizes]
mov word ptr gs:[MB.Check],0
mov dword ptr gs:[MB.Names],0
mov dword ptr gs:[MB.Names+4],0
inc dx
inc dx
jmp nottrigered
notmeetafree:
xor dx,dx
mov ax,gs
jmp nottrigered
notfreeatall:
cmp ax,0
je nottrigered
mov es,ax
add es:[MB.Sizes],dx
xor ax,ax
nottrigered:
cmp gs:[MB.IsNotLast],true
je searchfree3
cmp ax,0
je reallyfinish
mov es,ax
add es:[MB.Sizes],dx
mov es:[MB.IsNotLast],False
reallyfinish:
clc
pop gs es dx bx ax
ret
erroronsearch:
stc
pop gs es dx bx ax
ret
;Initialise les blocs de mémoire en prenant memorystart pour segment de base ;Initialise les blocs de mémoire en prenant memorystart pour segment de base
MBinit: MBinit:
push ax cx es push ax cx es
@ -95,7 +152,7 @@ notforfree:
;Libère le bloc de mémoire GS ;Libère le bloc de mémoire GS
MBFree: MBFree:
push bx es push ax bx es
mov bx,gs mov bx,gs
mov ax,bx mov ax,bx
dec bx dec bx
@ -130,11 +187,18 @@ searchtofree:
nottofree: nottofree:
cmp gs:[MB.IsNotLast],true cmp gs:[MB.IsNotLast],true
je searchtofree je searchtofree
pop es bx call MBclean
pop es bx ax
ret ret
wasfree: wasfree:
pushad
mov ah,0Dh
mov cx,16
mov dx,1999h
int 47h
popad
stc stc
pop es bx pop es bx ax
ret ret
;Change le proprietaire de GS a dx ;Change le proprietaire de GS a dx