home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
noyau
/
noyau.lst
< prev
next >
Wrap
File List
|
1994-05-25
|
15KB
|
387 lines
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:46
NOYAU.ASM Page 1 - 1
.286
.MODEL SMALL,OS_DOS
;
;
; DEFINITION DU PROCESSUS NOYAU : POINT D'ENTREE DU PROGRAMME
;
;
;
INCLUDE dos.inc
C ; DOS.INC
C
C MsDos MACRO
C int 21h
C ENDM
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 const.inc
C ;
C ; const.inc
C ;
C
= 0020 C EOI EQU 20h ; octet d'acquittement d'interruption au pic 8259A
= 0020 C PortCTRLpic EQU 20h ; port de controle du PIC
= 03F2 C PortCTRLfdc EQU 03F2h ; port de controle du controleur de disquette
= FFFF C NIL EQU 0FFFFh
= 0001 C ENCORE EQU 1 ; marque suite execution du noyau
=-0002 C FIN EQU NOT ENCORE ; marque la fin
= 0100 C DimPile EQU 256 ; nombre de mots d'une pile privée
= 000C C NbRegs EQU 12 ; nombre de registres du contexte initial
= F202 C ETAT_INITIAL EQU 1111001000000010b ; valeur initiale du registre d'état
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
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 descript.inc
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
C ; Queue.inc
C
= DESCRIPTEUR C QUEUE EQU <DESCRIPTEUR> ; Une queue est un DESCRIPTEUR
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 ?
000D 0000 C file WORD ?
C PROCESSUS ENDS
C
INCLUDE gestlist.inc
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 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
.STACK 1024 ; pile privée de pNoyau
0000 PilePrincipal SEGMENT WORD PUBLIC 'STACK'
EXTERN SP_PilePrincipal : WORD
0000 PilePrincipal ENDS
0000 .DATA
0000 TableCentrale LABEL WORD
0000 0000 EnCours WORD ? ; pointeur sur le DdP du processus ACTIF
0002 0000 QueueExp WORD ? ; pointeur sur la cellule de garde de la Queue d'exploitation
0004 TableProcessus LABEL WORD
0004 0000 0000 0000 1C pNoyau PROCESSUS <{,,,TypeProcessus,ACTIF,254}> ; Processus Noyau
01 FE 0000 0000
0000
0013 0000 0000 0000 1C pPrincipal PROCESSUS <{,,,TypeProcessus,SUSPENDU,128},OFFSET SP_PilePrincipal,PilePrincipal,NIL>
05 80 0000 E ---- R
FFFF
0022 0022 R 0022 R 0000 qe QUEUE <OFFSET @data:qe,OFFSET @data:qe,,TypeQueue,OCCUPE,INFINI>
0C FF FF
002B 00 NonPreemptif BYTE 0 ; Le noyau est initialement préemptif
002C 01 FinNoyau BYTE ENCORE ; flag pour que pHorloge rétablisse l'ancien vecteur
; d'interruption
002D 01 NoyauFini BYTE ENCORE ; flag pour prévenir pNoyau qu'il peut rendre la main
; à MS DOS
0000 .CODE
0000 Noyau PROC
assume ds:@data
0000 B8 ---- R mov ax,@data
0003 8E D8 mov ds,ax
0005 B8 0004 R lea ax,pNoyau ; initialisation de Encours
0008 BE 0000 R lea si,EnCours
000B 89 04 mov [si],ax
000D BE 0002 R lea si,QueueExp ; et de la Queue d'exploitation
0010 C7 04 0022 R mov [si],OFFSET qe
0014 BB 0000 E mov bx,OFFSET pHorloge ; on place pHorloge dans la queue d'exploitation
0017 E8 0000 E call eligible
001A E8 0000 E call dispatcher ; et on lui donne la main
001D BB 0013 R mov bx,OFFSET pPrincipal ; on place pPrincipal dans la queue d'exploitation
0020 E8 0000 E call eligible
0023 E8 0000 E 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 !
0026 BF 002C R mov di,offset FinNoyau ; on demande à pHorloge de rétablir l'ancien
0029 C6 05 FE mov BYTE PTR [di],FIN ; vecteur d'interruption
002C BE 002D R mov si,offset NoyauFini
002F attente_fin:
002F 80 3C FE cmp BYTE PTR [si],FIN ; on attend.
0032 75 FB jne attente_fin
; le système n'est plus multitache.
; on retourne au dos
0034 B8 4C00 Mov ax,4C00h
0037 CD 21 Int 21h ; on rend la main à MS DOS
0039 Noyau ENDP
END NOYAU
Microsoft (R) Macro Assembler Version 6.00 05/26/94 03:29:46
NOYAU.ASM Symbols 2 - 1
Macros:
N a m e Type
MsDos . . . . . . . . . . . . . Proc
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
Segments and Groups:
N a m e Size Length Align Combine Class
DGROUP . . . . . . . . . . . . . GROUP
_DATA . . . . . . . . . . . . . 16 Bit 002E Word Public 'DATA'
STACK . . . . . . . . . . . . . 16 Bit 0400 Para Stack 'STACK'
PilePrincipal . . . . . . . . . 16 Bit 0000 Word Public 'STACK'
_TEXT . . . . . . . . . . . . . 16 Bit 0039 Word Public 'CODE'
Procedures, parameters and locals:
N a m e Type Value Attr
Noyau . . . . . . . . . . . . . P Near 0000 _TEXT Length= 0039 Public
attente_fin . . . . . . . . . L Near 002F _TEXT
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
DimPile . . . . . . . . . . . . Number 0100h
ENCORE . . . . . . . . . . . . . Number 0001h
EN_ATTENTE . . . . . . . . . . . Number 0004h
EOI . . . . . . . . . . . . . . Number 0020h
ETAT_INITIAL . . . . . . . . . . Number F202h
EnCours . . . . . . . . . . . . Word 0000 _DATA Public
FIN . . . . . . . . . . . . . . Number -0002h
FileVide . . . . . . . . . . . . L Near 0000 External
FinNoyau . . . . . . . . . . . . Byte 002C _DATA Public
INFINI . . . . . . . . . . . . . Number -0001h
InitVide . . . . . . . . . . . . L Near 0000 External
InsereItem . . . . . . . . . . . L Near 0000 External
LIBRE . . . . . . . . . . . . . Number 0000h
NIL . . . . . . . . . . . . . . Number FFFFh
NON_EXISTANT . . . . . . . . . . Number 0000h
NbRegs . . . . . . . . . . . . . Number 000Ch
NonPreemptif . . . . . . . . . . Byte 002B _DATA Public
NoyauFini . . . . . . . . . . . Byte 002D _DATA Public
OCCUPE . . . . . . . . . . . . . Number -0001h
PRET . . . . . . . . . . . . . . Number 0002h
PortCTRLfdc . . . . . . . . . . Number 03F2h
PortCTRLpic . . . . . . . . . . Number 0020h
PremierDeListe . . . . . . . . . L Near 0000 External
P . . . . . . . . . . . . . . . L Near 0000 External
QUEUE . . . . . . . . . . . . . Text DESCRIPTEUR
QueueExp . . . . . . . . . . . . Word 0002 _DATA Public
SP_PilePrincipal . . . . . . . . Word 0000 PilePrincipal External
SUSPENDU . . . . . . . . . . . . Number 0005h
TERMINE . . . . . . . . . . . . Number 0000h
TableCentrale . . . . . . . . . Word 0000 _DATA
TableProcessus . . . . . . . . . Word 0004 _DATA
TypeProcTPS . . . . . . . . . . Number 001Eh
TypeProcTPU . . . . . . . . . . Number 001Ch
TypeProcTRS . . . . . . . . . . Number 001Fh
TypeProcTRU . . . . . . . . . . Number 001Dh
TypeProcessus . . . . . . . . . Number 001Ch
TypeQueue . . . . . . . . . . . Number 000Ch
TypeSemaphore . . . . . . . . . Number 0003h
TypeTampon . . . . . . . . . . . Number 0004h
V . . . . . . . . . . . . . . . L Near 0000 External
dispatcher . . . . . . . . . . . L Near 0000 External
eligible . . . . . . . . . . . . L Near 0000 External
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
pNoyau . . . . . . . . . . . . . PROCESSUS 0004 _DATA
pPrincipal . . . . . . . . . . . PROCESSUS 0013 _DATA Public
qe . . . . . . . . . . . . . . . DESCRIPTEUR 0022 _DATA
recherche . . . . . . . . . . . L Near 0000 External
0 Warnings
0 Errors