home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
noyau
/
noyau.asm
< prev
next >
Wrap
Assembly Source File
|
1994-05-18
|
2KB
|
92 lines
.286
.MODEL SMALL,OS_DOS
;
;
; DEFINITION DU PROCESSUS NOYAU : POINT D'ENTREE DU PROGRAMME
;
;
;
INCLUDE dos.inc
INCLUDE types.inc
INCLUDE const.inc
INCLUDE etats.inc
INCLUDE descript.inc
INCLUDE queue.inc
INCLUDE semphor.inc
INCLUDE process.inc
INCLUDE gestlist.inc
INCLUDE donnees.inc
INCLUDE code.inc
.STACK 1024 ; pile privée de pNoyau
PilePrincipal SEGMENT WORD PUBLIC 'STACK'
EXTERN SP_PilePrincipal : WORD
PilePrincipal ENDS
.DATA
TableCentrale LABEL WORD
EnCours WORD ? ; pointeur sur le DdP du processus ACTIF
QueueExp WORD ? ; pointeur sur la cellule de garde de la Queue d'exploitation
TableProcessus LABEL WORD
pNoyau PROCESSUS <{,,,TypeProcessus,ACTIF,254}> ; Processus Noyau
pPrincipal PROCESSUS <{,,,TypeProcessus,SUSPENDU,128},OFFSET SP_PilePrincipal,PilePrincipal,NIL>
qe QUEUE <OFFSET @data:qe,OFFSET @data:qe,,TypeQueue,OCCUPE,INFINI>
NonPreemptif BYTE 0 ; Le noyau est initialement préemptif
FinNoyau BYTE ENCORE ; flag pour que pHorloge rétablisse l'ancien vecteur
; d'interruption
NoyauFini BYTE ENCORE ; flag pour prévenir pNoyau qu'il peut rendre la main
; à MS DOS
.CODE
Noyau PROC
assume ds:@data
mov ax,@data
mov ds,ax
lea ax,pNoyau ; initialisation de Encours
lea si,EnCours
mov [si],ax
lea si,QueueExp ; et de la Queue d'exploitation
mov [si],OFFSET qe
mov bx,OFFSET pHorloge ; on place pHorloge dans la queue d'exploitation
call eligible
call dispatcher ; et on lui donne la main
mov bx,OFFSET pPrincipal ; on place pPrincipal dans la queue d'exploitation
call eligible
call dispatcher ; et hop, pPrincipal s'execute (car sa priorité est
; plus forte).
; le dispatcher à rendu la main à pNoyau, donc tous les autres processus
; sont bloqués ou terminés.
; donc,on termine le noyau !
mov di,offset FinNoyau ; on demande à pHorloge de rétablir l'ancien
mov BYTE PTR [di],FIN ; vecteur d'interruption
mov si,offset NoyauFini
attente_fin:
cmp BYTE PTR [si],FIN ; on attend.
jne attente_fin
; le système n'est plus multitache.
; on retourne au dos
Mov ax,4C00h
Int 21h ; on rend la main à MS DOS
Noyau ENDP
END NOYAU