ESTheR

El Stack The Revenge

Trabajo Práctico
Sistemas Operativos
1C2017

Porque las primeras partes no siempre son mejores

NADA

No asumir

como real

Un poco de historia

Hoy por hoy todas las PCs tienen un par de cosas en común:

  • CPU
  • Memoria
  • Entrada / Salida

Arquitectura de ESTheR

Consola 1

Consola 2

Consola N

Kernel

Memoria

CPU 1

CPU 2

CPU N

...

...

File System

Consola 1/1

Interfaz de Usuario

  • IniciarPrograma
  • FinalizarPrograma
  • Desconectar Consola
  • Limpiar Mensajes

Programa

Programa

Programa

Programa

Kernel 1/9 - Planificación de Procesos

EXEC

READY

NEW

BLOCK

EXIT

CPUm

Consolan

Kernel 2/9 - System Calls

Semáforos

Variables Compartidas

!varGlobal

!precio

Kernel 3/9 - System Calls - Memoria - Heap

typedef struct HeapMetadata {

uint32_t size,

Bool isFree

}

El Heap es:

Kernel 4/9 - System Calls - Memoria - Heap - Alocar

Kernel 5/9 - System Calls - Memoria - Heap

Máximo de Alloc:

Tmax = PAGE_SIZE - 10 Bytes

Kernel 6/9 - System Calls - Memoria - Heap Liberar

OJO! Pueden existir memory Leaks

File System 1/5 - Operaciones

  • Validar Archivo
  • Crear Archivo
  • Borrar
  • Obtener Datos
  • Guardar Datos

Kernel 7/9 - System Calls - File System

FD

File

Open

5

/notas.txt

1

6

/code/tp-sisop.sh

2

7

/cursos/z1234/alumnos.zip

1

Global File Table

FD

Flags

Global FD

4

“r”

3

6

“rw”

2

PID 2 - File Table

FD

Flags

Global FD

4

“r”

2

5

“r”

1

PID 1 - File Table

Los FD 0, 1 y 2 son FD reservados

Kernel 8/9 - System Calls - File System

Impresión de Pantalla: Para imprimir en la pantalla de un proceso se deberá escribir en el FD 1

Permisos de los Archivos:

  • Create “c”
  • Read “r”
  • Write “w”

Kernel 9/9 - Terminación Irregular de Procesos

Exit Code

Motivo

0

El programa finalizó correctamente.

-1

No se pudieron reservar recursos para ejecutar el programa.

-2

El programa intentó acceder a un archivo que no existe.

-3

El programa intentó leer un archivo sin permisos.

-4

El programa intentó escribir un archivo sin permisos.

-5

Excepción de memoria.

-6

Finalizado a través de desconexión de consola.

-7

Finalizado a través del comando Finalizar Programa de la consola.

-8

Se intentó reservar más memoria que el tamaño de una página

-9

No se pueden asignar más páginas al proceso

-20

Error sin definición

SADICA

Sistema de Archivos De Índole Completamente Académica

File System 3/5 - SADICA 1/3 - Metadata FS

Archivo de Metadata:

TAMANIO_BLOQUES=64

CANTIDAD_BLOQUES=5192

MAGIC_NUMBER=SADICA

Ruta: [Punto_Montaje]/Metadata/Metadata.bin

Archivo de Bitmap:

100010101101011010101001

Ruta: [Punto_Montaje]/Metadata/Bitmap.bin

File System 4/5 - SADICA 2/3 - Metadata Archivos

Archivo de Metadata:

TAMANIO=250

BLOQUES=[40,21,82,3]

Ruta: [Punto_Montaje]/Archivos/

[PathDelArchivo]

File System 5/5 - SADICA 3/3 - Bloques de Datos

Habrá un archivo de texto por cada bloque en el FS

1.bin

2.bin

3.bin

4.bin

etc

Ruta: [Punto_Montaje]/Bloques/[nroBloque].bin

Memoria 1/5 - Arquitectura - Estructura

  • Paginación inversa
  • Estructuras administrativas dentro del mismo espacio de direcciones

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

Adm

1

1

1

1

1

1

2

2

2

2

2

3

3

3

3

3

3

3

3

3

3

3

3

3

2

2

2

1

1

1

5

5

5

5

5

5

5

5

5

3

4

4

4

4

4

3

3

1

1

2

2

2

Memoria 2/5 - Frame Lookup - Función de Hash

Para poder ubicar un frame dentro del espacio de direcciones se utiliza una función f que recibiendo el PID y el Número de página devuelve el índice en la tabla

f( PID, N_PAGINA ) = INDICE_EN_LA_TABLA

f( 0, 10 ) = 100

f( 1, 15 ) = 150

f( 0, 15 ) = 100

Colisión

Memoria 3/5 - Operaciones

  • Iniciar Programa
  • Solicitar Bytes de una página
  • Almacenar Bytes en una página
  • Asignar Páginas a Proceso
  • Finalizar Programa
  • Handshake

Memoria 4/5 - Consola - Operaciones

  • retardo
  • dump
    • Caché
    • Estructuras de la Memoria
    • Contenido de Memoria
  • flush
    • Caché
  • size
    • Memory
    • PID

Memoria 5/5 - Caché 1/1

  • Reemplazo Global
  • Algoritmo LRU

PID

# Página

Data

1

7

0x457374686572204C612076656E67616E7A61

2

4

0x4C612076616E2061207061736172206D616C

3

1

0x50726F62616E646F20506167696E612061736

3

2

0x4C612076616E20A7B5BB61736172206D616C

3

3

0xB0C4C4C4616E27357220436171E20AD6E206

CPU 1/1

Fácil.ansisop

variables a, b

Program Counter ++

AnSISOP_definirVariable (“a”);

AnSISOP_definirVariable (“b”);

Stack 1/8

#!/usr/bin/ansisop

begin

variables a, g

a = 1

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Stack 2/8

#!/usr/bin/ansisop

begin

variables a, g

a = 1

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Pos

args

vars

retPos

retVar

0

Stack 3/8

#!/usr/bin/ansisop

begin

variables a, g

a = 1

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Pos

args

vars

retPos

retVar

0

a

g

1

a

3

g

a

00

00

00

01

g

e4

01

72

82

1c

93

30

aa

4d

0b

b6

50

51

49

57

bf

a6

26

f3

5f

c0

7f

61

08

db

2a

0e

10

58

Stack 4/8

#!/usr/bin/ansisop

begin

variables a, g

a = 1

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Pos

args

vars

retPos

retVar

0

a

g

1

a

$0

3

g

a

00

00

00

01

g

e4

01

72

82

1c

93

30

aa

4d

0b

b6

50

51

49

00

00

0

00

00

00

01

f

61

08

db

2a

0e

10

58

Stack 5/8

#!/usr/bin/ansisop

begin

variables a, g

a = 1

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Pos

args

vars

retPos

retVar

0

a

g

1

a

$0, f

3

g

a

00

00

00

01

g

e4

01

72

82

1c

93

30

aa

4d

0b

b6

50

51

49

00

00

0

00

00

00

01

f

00

00

00

02

0e

10

58

Stack 6/8

#!/usr/bin/ansisop

begin

variables a, g

a = 1

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Pos

args

vars

retPos

retVar

0

a

g

a

00

00

00

01

g

00

00

00

02

1c

93

30

aa

4d

0b

b6

50

51

49

00

00

0

00

00

00

01

f

00

00

00

02

0e

10

58

Stack 7/8

#!/usr/bin/ansisop

begin

variables a, g

a = 1

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Pos

args

vars

retPos

retVar

0

a

g

a

00

00

00

01

g

00

00

00

02

1c

93

30

aa

4d

0b

b6

50

51

49

00

00

0

00

00

00

01

f

00

00

00

02

0e

10

58

Stack 8/8

#!/usr/bin/ansisop

begin

variables f, a, g

a = 1

f = 8

g <- doble a

print g

end

function doble

variables f

f = $0 + $0

return f

end

Cuando finaliza el programa en la instrucción end se limpian las estructuras en la memoria y se devuelve el PCB sin datos en el stack

¿Preguntas?

FIN

1c2017 - ESTheR - El Stack The Revenge - Presentación - Google Slides