Академический Документы
Профессиональный Документы
Культура Документы
Capítulo 2 El Kernel
Prof. Javier Cañas R.
Estos apuntes están tomados en parte del texto:
“Operating System: Principles and Practice” de T.
Anderson y M. Dahin
Puntos Principales
•Concepto de Proceso
‣ Un proceso es una abstracción del SO para ejecutar un
programa con privilegios limitados.
‣ Privacidad: Los datos sólo son accesibles a usuarios
autorizados.
4. Interrupciones
5. Llamadas al Sistema
6. Booteo del SO
7. Máquinas Virtuales
Desafío: Protección
• Ejemplos
‣ Un script corriendo en un web browser.
‣ Un programa recién descargado de Internet.
‣ Un programa recién escrito pero no probado aún.
1 El Concepto de Proceso Physical
Memory
Machine
Instructions
Data
Process
Operating Heap
Executable
Edits Compiler System Copy
Source Image: Stack
Code Instructions
and Data
Machine
Instructions
Operating
Data System
Heap Kernel
Stack
Concepto de Proceso
• Proceso: instancia de un programa, corriendo con
derechos limitados
• Modo usuario
‣ Privilegios restringidos.
‣ Sólo aquellos concedidos por el kernel del SO
CPU
New PC Program Instructions
Select PC
Counter Fetch and
Execute
opcode
Modelo de CPU con Modo
Dual
Branch Address
CPU
New PC Program Instructions
Select PC
Handler PC Counter Fetch and
Execute
Select
New Mode
Mode
Mode
opcode
Soporte de HW para
Proteger Aplicaciones
• Instrucciones privilegiadas (Modo Dual)
‣ Disponibles para el kernel.
‣ No disponibles en el código de usuario.
• Timer
‣ Prevenir que código usuario impida el acceso de otras
aplicaciones al procesador.
Virtual Base
Memory Base
Virtual Virtual Physical
Address Address Address
Processor Processor
Base+
Bound
Bound
Raise
Exception
Protección de memoria
Hacia las Direcciones
Virtuales
Translation Box
no Physical
Processor Memory
raise exception
Code
• La conversión de direcciones se hace
Code
por hardware usando una tabla Data
• El kernel activa esta tabla Data
Heap
Heap
Stack
Stack
Ejemplo
staticVar += 1; localVar += 1;
interrupción
and to decide on the appropriate action. Nevertheless, because of the relatively large
amount of time that would be wasted by simply waiting on an I/O operation, the
processor can be employed much more efficiently with the use of interrupts.
Interrupts
disabled
Check for
Fetch next Execute interrupt;
START
instruction instruction Interrupts initiate interrupt
enabled handler
HALT
handleTimerInterrupt() {
...
}
handleDivideByZero() {
...
}
handleSystemCall() {
...
}
Undefined 11011
Interrupciones ARM
Table 6.14 Exception vector table
Interrupt vector
i+1
Interrupción
i
1
0
Ejemplo: trap de I/O
read(int fileDescriptor, void *buffer, int numBytes)
ERET instrucción
El Timer
• Dispositivo de hardware que periódicamente
interrumpe al procesador
‣ Al interrumpir, el control lo toma la rutina de interrupción de
tiempo.
‣ La frecuencia de interrupción es fijada por el kernel. Nunca por
el código usuario.
‣ Las Interrupciones pueden ser temporalmente diferidas
- Nunca por el código usuario!
- Aspecto crucial para implementar mecanismos de exclusión
mutua
Conmutación de modos:
Modo usuario a modo kernel
• Interrupciones
‣ Son gatilladas por el timer y dispositivos de E/S.
• Excepciones
‣ Son gatilladas por comportamientos no esperados de un
programa o también por sw malicioso.
Stack Stack
Código Código
Heap Heap
Proceso 1 Proceso 2
Kernel
PCB 1 PCB 2
Stack Stack
Estados de un Proceso
Terminado
Creado
interrumpido
admitido exit
Ready Running
scheduler
Syscall
User Stack Proc2 Proc2 Proc2
Proc1 Proc1 Proc1
Main Main Main
I/O Driver
Top Half
foo () { handler() {
SS: ESP
while(...) { pusha
x = x+1; ...
CS: EIP
y = y-2; }
}
EFLAGS
}
Exception
User Stack Other Registers: Stack
EAX, EBX,
foo () { handler() {
SS: ESP
while(...) { pusha
x = x+1; ...
CS: EIP
y = y-2; }
}
EFLAGS
}
Exception
User Stack other registers: Stack
EAX, EBX,
Error
EIP
CS
Indica evento EFLAGS
ESP
SS
x86 después de la
interrupción
El handler a comenzado la ejecución
foo () { handler() {
SS: ESP
while(...) { pusha
x = x+1; ...
CS: EIP
y = y-2; }
}
EFLAGS
}
Exception
Stack other registers: Stack
EAX, EBX,
All
EBX Registers
EAX
EIP
CS
ESP
SS
Error
EIP
CS
EFLAGS
ESP
SS
Al final de la la interrupción
• El Handler restaura los registros que estaban
guardados en el stack.
User User
Interrupción Upcall
Kernel Kernel
Kernel Kernel
Signals: Upcall
• Las señales permiten que una aplicación se
comporte de una forma similar a un kernel, es decir
responda a interrupciones.
int main()
{
signal(SIGINT, manejador_sigint);
while(1) {
printf("Hola Mundo\n");
sleep(1);
}
return 0;
}
Upcall: Antes
... signal_handler() {
x = y + z; ...
... }
Program Counter
Signal
Stack Pointer
Stack Stack
Upcall: Después
... signal_handler() {
x = y + z; ...
... }
Program Counter
Signal
Stack Pointer
Stack Stack
Saved
Registers
SP
PC
5 Llamadas al Sistema
system_call:
sys_OPEN() {
... open() { ......
(syscall_table[SYS_OPEN])() .....
open()
... SYSCALL ........... }
} SYS_EXIT
código de
Invocación manejador de
“envoltorio (stub)” llamada al
a la llamada llamada al
de la llamada al sistema sistema
al sistema sistema
Generalización
User Program Kernel
๏ Valida argumentos
- Protege al kernel de errores en código usuario
Server
request 4. parse request reply
9. format reply
buffer buffer
Kernel
Hardware
Host KernelMode
Host Kernel Timer
Host PC Host Host Handler
Host SP Exception Virtual Interrupt
Host Flags Stack Disk Table Syscall
Handler
Hardware Physical
Disk
Activación del Kernel
Huésped
• El SO host proporciona la ilusión que el kernel guest está
corriendo en un HW real.