1 ; Para las llamadas al sistema en el registro EAX se colocara, el codigo del grupo de llamadas en los dos bytes
2 ; mas altos, y la funcion (dentro del grupo correspondiente) en los dos bytes mas bajos.
5 ; __asm__ __volatile__ ("movl %0, %%eax ; movl %1, %%ebx" : : "g" (SYS_PROCESS | SYS_EXEC) , "g" (tarea) : "eax" , "ebx");
6 ; __asm__ __volatile__ ("int $0x50");
8 ; donde SYS_PROCESS es el grupo de llamadas al sistema relaciondas con el manejo de procesos
9 ; y SYS_EXEC es la funcion dentro de SYS_PROCESS que ejecuta una tarea.
25 [extern _syscall_group_vector
] ;array de punteros a grupos de funciones
26 [extern _syscall_group_max
] ;array con cantidad maxima de llamadas al sistema por gupo
27 [extern _sys_no_existe
]
29 [extern _KERNEL_PDT
] ; Valor del CR3 del Kernel
33 MAX_SYSCALLS_GROUPS
EQU 5
36 ;Aca me trae la interrupcion 0x50
42 shr eax, 16 ;Verificar si el numero de grupo existe
44 cmp eax, MAX_SYSCALLS_GROUPS
47 mov ebx, [_syscall_group_max
+ eax * 4] ;Recuperar la cantidad maxima de llamadas que posee ese grupo
51 ;En ax tengo el numero de indice dentro del grupo. En bx el numero total de llamadas para ese grupo
54 ;Si intento llamar a una mayor que la "mayor", ERROR
57 ;Pusheo los registros donde recibo los parametros
65 ;Usar como directorio de paginas el CR3 del Kernel
66 mov ebx, [ _KERNEL_PDT
]
70 shr ebx, 16 ;Pongo en ebx el numero de grupo de llamadas
72 jmp [_syscall_group_vector
+ ebx * 4] ;El vector de grupos de llamadas a funciones se encuentra definido
76 ;Llamada al sistema no existe
86 ;Entrada al grupo de manejo de procesos
87 [extern _syscall_process
]
91 call [_syscall_process
+ eax * 4]
96 ;Entrada a manejo de teclado y video
97 [extern _syscall_console
]
101 call [_syscall_console
+ eax * 4]
104 ;Punto de entrada al grupo de seƱales
105 [extern _syscall_signals
]
109 call [_syscall_signals
+ eax * 4]
113 ;Entrada a manejo de llamadas a sistema de timers
114 [extern _syscall_timer
]
118 call [_syscall_timer
+ eax * 4 ]
121 ;Entrada a manejo de llamadas a sistema de memoria
122 [extern _syscall_mem
]
126 call [_syscall_mem
+ eax * 4 ]
129 ;Entrada a manejo de llamadas miscelaneas (provisorias o temporales)
130 [extern _syscall_misc
]
134 call [_syscall_misc
+ eax * 4 ]
138 ; Balanceo el stack, reacomodo el CR3 y actual->cr3 con el valor de actual->cr3_backup
143 mov ebx, dword [ _actual
]
145 mov ecx, dword [ ebx ]
148 mov ebx, dword [ _actual
]
150 mov dword [ ebx ], ecx