You are on page 1of 33

Bienvenidos a Orga II

Gran elenco,
Patricia Borensztejn
Alejandro Furfaro
Javier Pimas
David Gonzalez M.
Javier Caccavelli
Pablo Somodi
Lautaro Petaccio
Dana Tilve Neyra
Gonzalo Fernndez
Gonzalo Ciruelos

Gorra

Organizacin
Clases

Prcticas
Tericas

Jueves de 17 a 19 hs
Labo 5 / Magna Pab 1

Martes de 17 a 22 hs
Laboratorio 5
Jueves de 19 a 22 hs
Laboratorio 5

Evaluacin
Trabajos Prcticos
TP1: Indiv. - 16/8 - 6/9
TP2: Grupal - 6/9 - 1/11
TP3: Grupal - 4/10 -6/12

Parciales
1er Parcial: 29/9
2do Parcial: 17/11
1er Recuperatorio: 29/11
2do Recuperatorio: 6/12

Rgimen de Aprobacin
Parciales
Calicaciones: I (0 a 59), A- (60 a 64) y A (65 a 100).
No pueden aprobar con A- ambos parciales.
Los recuperatorios tienen 2 notas: I (0 a 64) y A (65 a 100).

Trabajos Prcticos
Calicaciones: I, A. TP1 individual (sin informe)
TP2 y TP3 (con informe) grupos de 3 personas

Aprobar Trabajos Prcticos

Materia

Aprobar parciales
Aprobar TPs

Aprobar Final

Regmenes especiales
Trabajo Prctico Final
Eximido de rendir nal
Ms de 70 en ambos parciales (no recuperatorios)
Aprobar los trabajos prcticos en primera instancia

Extensin de Aprobacin de TPs


Aprobados los 3 TPs
Por un slo cuatrimestre
Mediante solicitud y coloquio individual de por medio

Medios de Comunicacin
Pgina de la materia
http://orga2.exp.dc.uba.ar
Lista de docentes
orga2-doc@dc.uba.ar
Consultas, sugerencias, quejas, agradecimientos, insultos, etc
Lista de alumnos
orga2-alu@dc.uba.ar
Uso casi exclusivo para envo de mensajes a los alumnos
Vale el "busco grupo" o "el sabado por la noche sale tp"

No ocial
#Orga2 @ freenode.net (IRC)
@__orga2__ (twitter)

Bienvenidos a Orga II
Contenidos/Programa
1. Introduccin
Concepto de Computador de Propsito General, y necesidad de un S.O..
Arquitectura para programacin de aplicaciones (Modo Usuario).
Arquitectura para programacin de sistemas operativos (Modo Kernel).

Memoria Cache. Principio de funcionamiento. Modelo asociativo.


Multicore.
Microarquitecturas de los procesadores IA-32: P5, P6, NetBurst,
Pentium D, Core.
7. Modelo de programacin de Sistemas Operativos - Manejo de Memoria

2. Arquitectura Intel 64
Modos de trabajo (Modo Real, Protegido, Virtual 86, y Ext. de 64 bits).
Arquitectura para programacin de aplicaciones.
Modelos de memoria, modos de direccionamiento y punteros con y sin
especicacin de segmento.
Segmentacin.
Set de Instrucciones.
Modos de Direccionamiento.
Ejemplos de uso con algoritmos simples.
3. Ensamblado, vinculacin, carga y ejecucin
Formato de archivos (.o, .exe, .lib, ELF, etc).
Estructura del .asm.
Informacin de debugging.

Unidad de Gestin de Memoria de procesadores IA-32.


Unidad de Segmentacin en Modo Protegido.
Unidad de Paginacin.
Relacin con el sistema operativo. Soporte para implementacin del
Administrador de Memoria Virtual.
Memoria compartida entre procesos y entre procesos y el sistema operativo.
8. Modelo de programacin de Sistemas Operativos - Interrupciones y Excepciones
Sistema de interrupciones de los procesadores IA-32.
Concepto y diferencias entre interrupciones y excepciones.
Descriptores asociados. Cdigos de error.
Interrupciones y Excepciones predeterminadas.
Manejo de Interrupciones desde el Sistema Operativo.
9. Modelo de programacin de Sistemas Operativos - Proteccin

4. Interfase ensamblador-lenguajes de alto nivel


Pasaje de parmetros.
Estructuras de datos y de control.
Interfase con el Sistema Operativo.
Libreras estticas, dinmicas y run-times.
Programacin orientada a objetos y otros paradigmas.

Sistema de proteccin en procesadores IA-32.


Niveles de privilegio (Anillos de proteccin).
Reglas de proteccin, para instrucciones, segmentos, pginas, tareas.
Relacin con el Sistema Operativo: Ejecucin en Modo User y en Modo Kernel.
Mecanismos para elevar el nivel de privilegio de una tarea (o proceso).
10. Modelo de programacin de Sistemas Operativos - Manejo de Tareas

5. Instrucciones Multimedia
Modelo de procesamiento SIMD.
Implementaciones SIMD en procesadores IA-32.
MMX.
SSE, SSE2, SSE3, SSE4.
Aplicaciones en procesamiento de seales e imgenes.

Concepto de Multitasking.
Contexto de ejecucin.
Conmutacin de tareas en procesadores IA-32.
Estructuras y descriptores asociados en procesadores IA-32.
Relacin de estos recursos con el Sistema Operativo.
Scheduling de tareas. Diferentes alternativas.

6. Microarquitectura

11. Optimizacin

Pipeline, superpipeling, arquitectura Superescalar, Paralelismo a


Nivel de Instrucciones.
Modelo de Ejecucin fuera de orden.
Modelo VLIW.
Modelo EPIC.
Ejemplos del mundo real, y comparacin entre las diferentes
alternativas.

Tcnicas de codicacin para optimizar el uso del controlador cache.


Tcnicas de codicacin para optimizar el uso de memoria.
Tcnicas de codicacin para optimizar el aprovechamiento de los
recursos de microarquitectura.
Tcnicas de prefetch en cache.
Threading.
Optimizacin en procesadores multicore.

Bibliografa
Arquitectura
Manuales de Intel
(se los pueden bajar de la pgina de la materia)
The Unabridged Pentium 4: IA32 Processor Genealogy
MindShare, Tom Shamley, INC. Addison-Wesley
Computer Architecture: A Quantitative Approach, 4th Edition
John L. Hennessy , David A. Patterson

Interaccin con lenguajes de alto nivel


Thinking in C, Volumen 1; Bruce Eckel; Mindview, Inc.
Programming Languages: Design and Implementation,
4/E; Terrence W. Pratt, Marvin V. Zelkowitz

Preguntas?

Me puedo sacar la gorra?

Prctica 0
Ejercicio 1
Describa en sus palabras las funciones de las siguientes aplicaciones:
- Ensamblador
- Linker
Ensamblador: Programa que toma cdigo en lenguaje ensamblador y lo
transforma a cdigo de mquina, generando un archivo objeto.
Para esto traduce los mnemnicos y resuelve los nombres simblicos.

Linker: Programa que toma varios archivos objeto y los transforma en un


ejecutable.

Prctica 0
Ejercicio 2
Muestre cmo se almacenan en memoria los siguientes datos en
procesadores Big-Endian y Little-Endian:
DB 12h
DB 12h,34h
DW 1234h
DW 1234h, 5678h

DD 12345678h
DD 12345678h, 9ABCDEF1h
DQ 123456789ABCDEF1h
DB 1234

DB, DW, DD, DQ: Pseudo-instrucciones para el ensamblador que indica cmo denir
datos en el archivo objeto. NO se ejecutan por la CPU, las interpreta el ensamblador.
Ej. para almacenar 0x0048E5FA en memoria
0
1
2
3

0x00 0x48 0xE5 0xFA

0
1
2
3
0xFA 0xE5 0x48 0x00

big endian

little endian

Big Endian: el byte ms signicativo en la posicin de memoria menos signicativa.


Little Endian: el byte ms signicativo en la posicin de memoria mas signicativa.

Prctica 0
Ejercicio 3
Cul es el rango de representacin de los nmeros enteros sin signo
con 8, 16 y 32 bits de precisin?
Cul es el rango de representacin de los nmeros enteros en
complemento a dos con 8, 16 y 32 bits de precisin?
Sin signo
Con signo

8
16
32

0 a 2n 1
2n-1 a 2n-11

Sin signo

Con signo

0 a 255
0 a 65535
0 a 4294967295

-128 a 127
-32768 a 32767
-2147483648 a 2147483647

Prctica 0
Ejercicio 6
Exprese los nmeros 133 y 123 en notacin binaria con 8 bits de precisin
(notacin sin signo), y realice la suma de estos dos nmeros bit a bit.
Luego, exprese los nmeros -123 y 123 en notacin complemento a dos
con 8 bits de precisin y realice la suma de estos dos nmeros bit a bit.
Qu conclusin puede sacar al observar el resultados de ambas operaciones?

Esa es la razn por la cual no hay dos ADD/SUB,


sino uno solo tanto para nmeros con signo como sin signo.
Es responsabilidad del programador saber con qu tipo de nmeros
est operando, para prestar atencin a los ags correctos.

Prctica 0
Ejercicio 7-8
Explique qu indican y cundo se setean los ags de paridad (PF), de cero
(ZF) y de signo (SF).
Explique las diferencias entre el ag de carry (CF) y el ag de overow (OF).
Importante:
hay operaciones que setean determinados ags, algunas no setean ningn
ag. La interpretacin correcta de los ags depende del programador.
CF = 1 Si hay carry en el bit ms signicativo en la suma,
Si hay borrow en el bit ms signicativo en la resta
CF = 0 cualquier otro caso

OF = 1 Si hay overow (el resultado


esta fuera de la representacin)
OF = 0 cualquier otro caso

PF = 1 Si el byte menos signicativo tiene un nmero par de 1s


PF = 0 cualquier otro caso

SF = 1 Si el bit ms signicativo es 1
SF = 0 cualquer otro caso

ZF = 1 Si el resultado es cero
ZF = 0 cualquier otro caso

Prctica 0
Ejercicio 9
Indique cules son las condiciones para que se activen las siguientes
instrucciones de salto:
JA, JAE, JE, JZ, JGE, JG, JO, JECXZ.

JA
JAE
JE
JZ
JGE
JG
JO
JECXZ

=
=
=
=
=
=
=
=

(CF or ZF) = 0 | Above/not below or equal


CF = 0 | Above or equal/not below
ZF = 1 | Equal/zero
ZF = 1 | Equal/zero
(SF xor OF) = 0 | Greater or equal/not less
((SF xor OF) or ZF) = 0 | Greater/not less or equal
OF = 1 | Overow
ECX = 0 | Register ECX is zero

Instrucciones y Registros
Operaciones
ADD, SUB, MOV, SHL, JMP ... (ver manual)

Registros para datos


8 bits: AL, BL, CL, DL, DIL, SIL, BPL, SPL, R8L, R9L, R10L,
R11L, R12L, R13L, R14L, R15L
16 bits: AX, BX, CX, DX, DI, SI, BP, SP, R8W, R9W, R10W,
R11W, R12W, R13W, R14W, R15W
32 bits: EAX, EBX, ECX, EDX, EDI, ESI, EBP, ESP, R8D,
R9D, R10D, R11D, R12D, R13D, R14D, R15D
64 bits: RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9,
R10, R11, R12, R13, R14, R15
128 bits: XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15

Hola Mundo ...


Ejercicio
Escriba un programa en lenguaje ensamblador que
imprima por pantalla

Hola Mundo

Cmo?

Secciones, etiquetas y smbolos


Un programa assembler se separa en secciones
.data: se usa para declarar variables globales inicializadas
Usamos las pseudo-instrucciones DB, DW, DD, DQ.
.rodata: se usa para declarar constantes globales inicializadas
Tambin usamos las pseudo-instrucciones DB, DW, DD, DQ.
.bss: para declarar variables globales no inicializadas. Usamos
las pseudo-instrucciones RESB, RESW, RESD, RESQ.
.text: es donde se escribe el cdigo

Etiquetas y smbolos
global: Dene un smbolo que va a ser visto externamente
_start: Punto de entrada de un programa en linux

Pseudoinstrucciones
Son instrucciones para el ensamblador
Van en el campo de la instruccin
- DB, DW, DD, DQ, DT, RESB, RESW, RESD, RESQ y REST
- expresin $, evala la posicin en memoria al principio de la
lnea que contiene la expresin
- comando EQU, para denir constantes que despus no quedan
en el archivo objeto
- comando INCBIN, incluye un binario en un archivo assembler
- prefijo TIMES, para repetir una cantidad de veces la instruccin
que sigue

Llamadas al sistema operativo (syscalls)


La famosa int 0x80 (en Linux)
Le pedimos al Sistema Operativo que haga algo por nosotros
1- El nmero de funcin que queremos en rax
2- Los parmetros en rbx, rcx, rdx, rsi, rdi y rbp; en ese orden
3- Llamamos a la interrupcin del sistema operativo (int 0x80)
4- En general, la respuesta est en rax
Mostrar por pantalla (sys write):
Funcin 4
Parmetro 1: donde? (1 = stdout)
Parmetro 2: Direccin de memoria del mensaje.
Parmetro 3: Longitud del mensaje.
Terminar programa (exit):
Funcin 1
Parmetro 1: cdigo de retorno (0 = sin error)

Hola Mundo... solucin


section .data
msg: DB 'Hola Mundo', 10
largo EQU $ - msg
global _start
section .text
_start:
mov rax, 4
; funcion 4
mov rbx, 1
; stdout
mov rcx, msg
; mensaje
mov rdx, largo ; longitud
int 0x80
mov rax, 1
mov rbx, 0
int 0x80

Ensamblando y linkeando
Ensamblamos:
nasm -ggdb -f elf64 holamundo.asm
Linkeamos:
ld -o holamundo holamundo.o
Ejecutamos:
./holamundo

GDB + DDD

Comandos Basicos

r | run= Ejecuta el programa hasta el primer break


b | break ARCHIVO:LINEA = Breakpoint en la lnea
b | break FUNCION =Breakpoint en la funcin
info breakpoints = Muestra informacin sobre los breakpoints
c | continue = Contina con la ejecucin
s | step = Siguiente lnea (Into)
n | next = Siguiente lnea (Over)
si | stepi = Siguiente instruccin asm (Into)
ni | nexti = Siguiente instruccin asm (Over)
x /Nuf ADDR = Muestra los datos en memoria. i.e. x/4gx $rsp
N = Cantidad | u = unidad b|h|w|g | f = formato
x:hex, d:decimal, u:decimal sin signo, o:octal, f:oat, a:direcciones
b:byte, h:word, w:dword, g:qword

GDB

conguracin

~/.gdbinit es un archivo de texto que guarda


la conguracin de GDB. Para usar sintaxis
intel y guardar historial de comandos:
set disassembly-flavor intel
set history save

En una consola ejecutar:


$ ddd holamundo

Ejecutar en el gdb:
<gdb> b _start
...
<gdb> r
...

Ejecutar en el gdb:
<gdb> si
<gdb> si
<gdb> si
...

Ejecutar en el gdb:
<gdb> info registers
...

Ejecutar en el gdb:
<gdb> x/10c 0x6000d8
...
<gdb> c
...

GDB

trucos tiles

correr con argumentos:


gdb --args ejecutable arg1 arg2 ...
extensiones:
source gdbinit.txt

me quiero ir!
Ejercicio
Escriba un programa en lenguaje ensamblador que
imprima por pantalla

en 10 me
en 10 me
en 10 me
...
en 10 me
CHAU!!!

voy ... 9
voy ... 8
voy ... 7
voy ... 0
(OJO! haciendo un ciclo...)

Solucin...
(incompleta)

section .data
msg: DB 'en 10 me voy ... 9',10
largo EQU $ - msg
global _start
section .text
_start:
mov esi, 10
ciclo:
mov rax, 4
; funcion 4
mov rbx, 1
; stdout
mov rcx, msg
; mensaje
mov rdx, largo ; longitud
int 0x80
dec byte [msg+largo-2]
dec esi
cmp esi, 0
jnz ciclo
mov rax, 1
mov rbx, 0
int 0x80

Preguntas?

Gracias!

You might also like