home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
noyau
/
dispatch.lst
< prev
next >
Wrap
File List
|
1994-05-25
|
17KB
|
475 lines
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Page 1 - 1
;
;
; DISPATCHER / ELIGIBLE / P / V
;
;
; ART OF CODE 1994
;
;
; Dispatch.asm
;
PAGE 60,132
TITLE TP ASSEMBLEUR / SE N°2
.MODEL SMALL,OS_DOS
.286
INCLUDE gestlist.inc ; importe les fonctions de gestion de liste
C ; Gestlist.inc
C ;
C ;....... Importation des fonctions de gestion de liste ..............
C ;
C
C EXTERNDEF insere : NEAR
C EXTERNDEF recherche : NEAR
C EXTERNDEF InsereItem : NEAR
C
C EXTERNDEF extrait : NEAR
C EXTERNDEF PremierDeListe : NEAR
C EXTERNDEF DernierDeListe : NEAR
C
C EXTERNDEF FileVide : NEAR
C EXTERNDEF InitVide : NEAR
C
C EXTERNDEF empiler : NEAR
C EXTERNDEF Depiler : NEAR
C
INCLUDE descript.inc ; définition du type DESCRIPTEUR
C ; descript.inc
C ;
C ; Description d'un objet du noyau
C ;
C ;
C
0009 C DESCRIPTEUR STRUCT
0000 0000 C precedent WORD ? ; lien de chainage sur le descripteur précédent
0002 0000 C suivant WORD ? ; lien de chainage sur le descripteur suivant
0004 0000 C identite WORD ? ; n° de poste dans la table des descripteurs de l'objet
0006 00 C TypeObjet BYTE ? ; type de l'objet référencé par le descripteur
0007 00 C etat BYTE ? ; état actuel du descripteur ou de l'objet
0008 00 C priorite BYTE ? ; clé d'ordonnancement des descripteurs
C DESCRIPTEUR ENDS
C
= WORD PTR identite C identification EQU <WORD PTR identite> ; identification de l'objet
= 0009 C DimDescripteur EQU SIZEOF DESCRIPTEUR ; nombre d'octets du descripteur
C
INCLUDE queue.inc ; définition du type QUEUE
C ; Queue.inc
C
= DESCRIPTEUR C QUEUE EQU <DESCRIPTEUR> ; Une queue est un DESCRIPTEUR
C
INCLUDE etats.inc
C ;
C ; fichier des etats d'un processus ou d'un descripteur d'objet
C ;
C ; Etats.inc
C ;
C
= 0000 C nEtat = 0
C FOR EtatProc,<NON_EXISTANT,ACTIF,PRET,BLOQUE,EN_ATTENTE,SUSPENDU>
C &EtatProc EQU nEtat+0
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Page 2 - 1
C nEtat = nEtat + 1
C ENDM
= 0000 1C NON_EXISTANT EQU nEtat+0
= 0001 1C nEtat = nEtat + 1
= 0001 1C ACTIF EQU nEtat+0
= 0002 1C nEtat = nEtat + 1
= 0002 1C PRET EQU nEtat+0
= 0003 1C nEtat = nEtat + 1
= 0003 1C BLOQUE EQU nEtat+0
= 0004 1C nEtat = nEtat + 1
= 0004 1C EN_ATTENTE EQU nEtat+0
= 0005 1C nEtat = nEtat + 1
= 0005 1C SUSPENDU EQU nEtat+0
= 0006 1C nEtat = nEtat + 1
C
= 0000 C TERMINE EQU NON_EXISTANT
= 0000 C LIBRE EQU NON_EXISTANT
=-0001 C OCCUPE EQU (NOT LIBRE)+0
=-0001 C INFINI EQU (NOT LIBRE)+0
C
INCLUDE types.inc
C ; Types.inc
C ;
C ;............ Définition des types d'objets ................
C ;
C
= 0003 C TypeSemaphore EQU 00000011b ; sémaphore sans delta-liste (DIJKSTRA)
C
= 0004 C TypeTampon EQU 00000100b ; tampon circulaire de communication
C
= 000C C TypeQueue EQU 00001100b ; cellule de garde d'une liste chainée
C
= 001C C TypeProcTPU EQU 00011100b ; processus utilisateur temps partagé
= 001D C TypeProcTRU EQU 00011101b ; processus utilisateur temps réel
= 001E C TypeProcTPS EQU 00011110b ; processus système temps partagé
= 001F C TypeProcTRS EQU 00011111b ; processus système temps réel
= 001C C TypeProcessus EQU TypeProcTPU ; type générique pour les processus
C
INCLUDE semphor.inc
C ; SEMPHOR.INC
C ; Definition du type semaphore
C ;
C
000A C SEMAPHORE STRUCT
0000 0000 0000 0000 03 C DESCRIPTEUR <,,,TypeSemaphore,LIBRE,INFINI>
00 FF
0009 00 C compteur BYTE ?
C SEMAPHORE ENDS
C
INCLUDE process.inc
C ; Process.inc : descripteurs de processus
000F C PROCESSUS STRUCT
0000 0000 0000 0000 1C C DESCRIPTEUR <,,,TypeProcessus,LIBRE,>
00 00
0009 0000 C Reg_SP WORD ?
000B 0000 C Reg_SS WORD ?
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Page 3 - 1
000D 0000 C file WORD ?
C PROCESSUS ENDS
C
INCLUDE donnees.inc
C ;
C ; Segment des données du noyau
C ;
C ; donnees.inc
C
C EXTERNDEF EnCours : WORD ; pointeur sur descripteur processus ACTIF
C EXTERNDEF QueueExp : WORD ; pointeur sur liste des descripteurs procs PRETs
C EXTERNDEF NonPreemptif : BYTE ; état d'execution du noyau
C EXTERNDEF FinNoyau : BYTE ; marque le noyau terminé
C EXTERNDEF NoyauFini : BYTE ; marque la tâche horloge terminée
C EXTERNDEF pHorloge : PROCESSUS ; descripteur du processus HORLOGE
C EXTERNDEF pPrincipal : PROCESSUS ; descripteur du processus PRINCIPAL
C
INCLUDE code.inc
C ;
C ; CODE.INC
C ; Import/export des fonctions du noyau
C ;
C
C EXTERNDEF eligible : NEAR
C EXTERNDEF dispatcher : NEAR
C EXTERNDEF P : NEAR
C EXTERNDEF V : NEAR
C
0000 .CODE
;
; PROCEDURE DISPATCHER
;
;
0000 DISPATCHER PROC NEAR
assume ds:@data
0000 9C pushf
0001 FA cli ; masquage des interruptions
0002 06 push es
0003 1E push ds
0004 60 pusha
0005 B8 ---- R mov ax,@data ; au cas où ....
0008 8E D8 mov ds,ax
000A 80 3E 0000 E 00 cmp NonPreemptif,0 ; test si noyau non preemptif
000F 75 3A jne fin_dispatch ; si oui on demasque et on quitte
0011 8B 1E 0000 E mov bx,[EnCours]
0015 8B 36 0000 E mov si,[QueueExp]
0019 80 7F 07 01 cmp (DESCRIPTEUR PTR [bx]).etat,ACTIF
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Page 4 - 1
001D 75 10 jne Change_EnCours ; si EnCours pas actif -> on rend le processus le plus prioritaire actif
; sinon
001F 8B FE mov di,si ; di pointe sur la cellule de garde
0021 8B 7D 02 mov di,(DESCRIPTEUR PTR [di]).suivant ; di pointe sur le descripteur le plus prioritaire
0024 8A 47 08 mov al,(DESCRIPTEUR PTR [bx]).priorite
0027 3A 45 08 cmp al,(DESCRIPTEUR PTR [di]).priorite
002A 76 1F jbe fin_dispatch ; si Encours est le plus prioritaire on ne fait rien
; sinon on réalise la transition ACTIF - > PRET
002C E8 0050 R call ELIGIBLE ; On place EnCours dans la queue d'exploitation
; Puis, le premier de la queue d'exploitation devient
; le processus EnCours
002F Change_EnCours:
002F 8C 57 0B mov (PROCESSUS PTR [bx]).Reg_SS,ss ; on sauvegarde la pile privée
0032 89 67 09 mov (PROCESSUS PTR [bx]).Reg_SP,sp ; du programme EnCours
0035 E8 0000 E call PremierDeListe ; DS:BX= ptr sur l'EnCours nouveau
0038 89 1E 0000 E mov [EnCours],bx
003C 8E 57 0B mov ss,(PROCESSUS PTR [bx]).Reg_SS ; on retablit la pile privée
003F 8B 67 09 mov sp,(PROCESSUS PTR [bx]).Reg_SP ; du programme EnCours
0042 C6 47 07 01 mov (DESCRIPTEUR PTR [bx]).etat,ACTIF ; on le rend ACTIF
0046 C7 47 0D 0000 mov (PROCESSUS PTR [bx]).file,0
004B fin_dispatch:
004B 61 popa
004C 1F pop ds
004D 07 pop es
004E 9D popf
004F C3 ret
0050 DISPATCHER ENDP
;
; PROCEDURE ELIGIBLE
;
; Réalise la transition ??? -> PRET
;
; Entrée : DS:BX pointe sur le DdP à inserer
;
0050 ELIGIBLE PROC NEAR
assume ds:@data
0050 56 push si
0051 8B 36 0000 E mov si,[QueueExp]
0055 C6 47 07 02 mov (DESCRIPTEUR PTR [bx]).etat,PRET
0059 89 77 0D mov (PROCESSUS PTR [bx]).file,si
005C E8 0000 E CALL INSERE ; On insere le DdP à sa place.
005F 5E pop si
0060 C3 ret
0061 ELIGIBLE ENDP
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Page 5 - 1
;
; PROCEDURE P - Wait ( sémaphore s )
;
; Entrée : (DS:SI) = pointeur sur le sémaphore s
;
0061 P PROC NEAR
assume ds:@data
0061 9C pushf
0062 FA cli
0063 53 push bx
0064 1E push ds
0065 BB ---- R mov bx,@data
0068 8E DB mov ds,bx
006A 80 7C 09 00 cmp (SEMAPHORE PTR[si]).Compteur,0 ; compteur nul ?
006E 74 05 je Extraction ; oui, on bloque
0070 FE 4C 09 dec (SEMAPHORE PTR [si]).Compteur ; sinon, cpt = cpt - 1
0073 EB 0E jmp Fin_Wait
0075 Extraction:
0075 8B 1E 0000 E mov bx,[EnCours]
0079 C6 47 07 03 mov (DESCRIPTEUR PTR [bx]).Etat,BLOQUE
007D E8 0000 E call empiler
0080 89 77 0D mov (PROCESSUS PTR [bx]).file,si
0083 Fin_Wait:
0083 1F pop ds
0084 5B pop bx
0085 9D popf ; rétablit l'ancien registre d'état ( voire les interruptions )
0086 E8 FF77 call DISPATCHER
0089 C3 ret
008A P ENDP
;
; PROCEDURE V - Signal( sémaphore s )
;
; Entrée : (DS:SI) = pointeur sur le sémaphore s
;
008A V PROC NEAR
assume ds:@data
008A 9C pushf
008B FA cli
008C 56 push si
008D 53 push bx
008E 1E push ds
008F BB ---- R mov bx,@data
0092 8E DB mov ds,bx
0094 E8 0000 E call FileVide ; La file d'attente du sémaphore est elle vide ?
0097 75 05 jne Sema_non_vide
; oui ! On augmente la valeur du sémaphore
0099 FE 44 09 inc (SEMAPHORE PTR [si]).Compteur
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Page 6 - 1
009C EB 06 jmp Fin_Signal
009E Sema_non_vide:
009E E8 0000 E call DernierDeListe ; on extrait un DdP de la file d'attente
00A1 E8 FFAC call Eligible ; dans la queue d'exploitation
00A4 Fin_Signal:
00A4 1F pop ds
00A5 5B pop bx
00A6 5E pop si
00A7 9D popf
00A8 E8 FF55 Call Dispatcher
00AB C3 ret
00AC V ENDP
END
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Symbols 7 - 1
Structures and Unions:
N a m e Size
Offset Type
DESCRIPTEUR . . . . . . . . . . 0009
precedent . . . . . . . . . . 0000 Word
suivant . . . . . . . . . . . 0002 Word
identite . . . . . . . . . . . 0004 Word
TypeObjet . . . . . . . . . . 0006 Byte
etat . . . . . . . . . . . . . 0007 Byte
priorite . . . . . . . . . . . 0008 Byte
PROCESSUS . . . . . . . . . . . 000F
precedent . . . . . . . . . . 0000 Word
suivant . . . . . . . . . . . 0002 Word
identite . . . . . . . . . . . 0004 Word
TypeObjet . . . . . . . . . . 0006 Byte
etat . . . . . . . . . . . . . 0007 Byte
priorite . . . . . . . . . . . 0008 Byte
Reg_SP . . . . . . . . . . . . 0009 Word
Reg_SS . . . . . . . . . . . . 000B Word
file . . . . . . . . . . . . . 000D Word
SEMAPHORE . . . . . . . . . . . 000A
precedent . . . . . . . . . . 0000 Word
suivant . . . . . . . . . . . 0002 Word
identite . . . . . . . . . . . 0004 Word
TypeObjet . . . . . . . . . . 0006 Byte
etat . . . . . . . . . . . . . 0007 Byte
priorite . . . . . . . . . . . 0008 Byte
compteur . . . . . . . . . . . 0009 Byte
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Symbols 8 - 1
Segments and Groups:
N a m e Size Length Align Combine Class
DGROUP . . . . . . . . . . . . . GROUP
_DATA . . . . . . . . . . . . . 16 Bit 0000 Word Public 'DATA'
_TEXT . . . . . . . . . . . . . 16 Bit 00AC Word Public 'CODE'
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Symbols 9 - 1
Procedures, parameters and locals:
N a m e Type Value Attr
P . . . . . . . . . . . . . . . P Near 0061 _TEXT Length= 0029 Public
Extraction . . . . . . . . . . L Near 0075 _TEXT
Fin_Wait . . . . . . . . . . . L Near 0083 _TEXT
V . . . . . . . . . . . . . . . P Near 008A _TEXT Length= 0022 Public
Sema_non_vide . . . . . . . . L Near 009E _TEXT
Fin_Signal . . . . . . . . . . L Near 00A4 _TEXT
dispatcher . . . . . . . . . . . P Near 0000 _TEXT Length= 0050 Public
Change_EnCours . . . . . . . . L Near 002F _TEXT
fin_dispatch . . . . . . . . . L Near 004B _TEXT
eligible . . . . . . . . . . . . P Near 0050 _TEXT Length= 0011 Public
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Symbols 10 - 1
Symbols:
N a m e Type Value Attr
@CodeSize . . . . . . . . . . . Number 0000h
@DataSize . . . . . . . . . . . Number 0000h
@Interface . . . . . . . . . . . Number 0000h
@Model . . . . . . . . . . . . . Number 0002h
@code . . . . . . . . . . . . . Text _TEXT
@data . . . . . . . . . . . . . Text DGROUP
@fardata? . . . . . . . . . . . Text FAR_BSS
@fardata . . . . . . . . . . . . Text FAR_DATA
@stack . . . . . . . . . . . . . Text DGROUP
ACTIF . . . . . . . . . . . . . Number 0001h
BLOQUE . . . . . . . . . . . . . Number 0003h
Depiler . . . . . . . . . . . . L Near 0000 External
DernierDeListe . . . . . . . . . L Near 0000 External
DimDescripteur . . . . . . . . . Number 0009h
EN_ATTENTE . . . . . . . . . . . Number 0004h
EnCours . . . . . . . . . . . . Word 0000 External
FileVide . . . . . . . . . . . . L Near 0000 External
FinNoyau . . . . . . . . . . . . Byte 0000 External
INFINI . . . . . . . . . . . . . Number -0001h
InitVide . . . . . . . . . . . . L Near 0000 External
InsereItem . . . . . . . . . . . L Near 0000 External
LIBRE . . . . . . . . . . . . . Number 0000h
NON_EXISTANT . . . . . . . . . . Number 0000h
NonPreemptif . . . . . . . . . . Byte 0000 External
NoyauFini . . . . . . . . . . . Byte 0000 External
OCCUPE . . . . . . . . . . . . . Number -0001h
PRET . . . . . . . . . . . . . . Number 0002h
PremierDeListe . . . . . . . . . L Near 0000 External
QUEUE . . . . . . . . . . . . . Text DESCRIPTEUR
QueueExp . . . . . . . . . . . . Word 0000 External
SUSPENDU . . . . . . . . . . . . Number 0005h
TERMINE . . . . . . . . . . . . Number 0000h
TypeProcTPS . . . . . . . . . . Number 001Eh
TypeProcTPU . . . . . . . . . . Number 001Ch
TypeProcTRS . . . . . . . . . . Number 001Fh
TypeProcTRU . . . . . . . . . . Number 001Dh
TypeProcessus . . . . . . . . . Number 001Ch
TypeQueue . . . . . . . . . . . Number 000Ch
TypeSemaphore . . . . . . . . . Number 0003h
TypeTampon . . . . . . . . . . . Number 0004h
empiler . . . . . . . . . . . . L Near 0000 External
extrait . . . . . . . . . . . . L Near 0000 External
identification . . . . . . . . . Text WORD PTR identite
insere . . . . . . . . . . . . . L Near 0000 External
nEtat . . . . . . . . . . . . . Number 0006h
pHorloge . . . . . . . . . . . . PROCESSUS 0000 External
pPrincipal . . . . . . . . . . . PROCESSUS 0000 External
recherche . . . . . . . . . . . L Near 0000 External
0 Warnings
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:44
TP ASSEMBLEUR / SE N°2 Symbols 11 - 1
Symbols:
N a m e Type Value Attr
0 Errors