Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Unidad 2 Clase 2
Unidad 2 Clase 2
Sistemas Operativos
1
Lenguajes de programación
● Los lenguajes de programación especifican reglas (como la
sintaxis y semántica) para escribir programas.
● Hay principalmente dos tipos de lenguajes de programación:
Lenguajes de Programación
Lenguajes de alto nivel Lenguajes de bajo nivel
2
Lenguajes de bajo nivel
● Son aquellos lenguajes cuyas instrucciones ejercen un
control directo sobre el hardware, estando condicionados
por la estructura física de las computadoras que lo soportan.
● Se denominan de “bajo nivel” por la reducida abstracción
existente entre el lenguaje y el hardware.
● Clasificación:
Lenguajes de bajo nivel
Lenguaje de máquina Lenguaje ensamblador
3
Lenguaje de Máquina
● Datos e instrucciones se expresan en binario.
● Comprende instrucciones directamente ejecutables por la
CPU. Es decir, el ISA.
● Las instrucciones de un programa se ejecutan en
secuencia, con eventuales cambios de flujo causados por el
propio programa o eventos externos.
● Escribir un programa en este lenguaje y depurarlo, son
tareas muy difíciles: los códigos de operación, las
direcciones y los datos, fácilmente terminan
confundiéndonos.
4
Lenguaje Ensamblador
● Es una representación simbólica del lenguaje de máquina.
● Normalmente, una instrucción de lenguaje ensamblador es
implementada por una única instrucción en lenguaje de
máquina.
● El lenguaje ensamblador utiliza:
Se utilizan mnemónicos en lugar de códigos binarios.
Ejemplo: ADD R1, R2, R3
Rótulos o etiquetas como referencia de las direcciones.
Ejemplo: SUB R1, R2, resultado
Los datos numéricos se pueden escribir en decimal u
otras bases. El texto se puede escribir utilizando
caracteres. 5
Lenguaje Ensamblador
Lenguaje de máquina Lenguaje ensamblador
Rótulo Mnemónico Argumento
01000111 LD CANT
11100100 SIGUE: JZ FIN
01111111 ST OUT
10100110 SUB UNO
11011101 JMP SIGUE
00100000 FIN: HLT
00000001 UNO: 1
00000011 CANT: 3
6
Traductores
● Un programa:
– Recibe datos de entrada, opera con ellos y
genera un resultado o salida.
● Un programa traductor:
– El dato de entrada es un programa, escrito en
algún lenguaje de programación.
– Su resultado o salida es un programa escrito en
otro lenguaje de programación.
7
Ensamblador
● El ensamblador es un traductor que convierte
un programa escrito en lenguaje ensamblador a
un programa escrito en lenguaje de máquina.
8
Lenguaje Ensamblador
Ensamblador x86
.globl _start
.text # seccion de codigo
_start:
movl $len, %edx # carga parametros longitud
movl $msg, %ecx # y direccion del mensaje
movl $1, %ebx # parametro 1: stdout
movl $4, %eax # servicio 4: write
int $0x80 # syscall
movl $0, %ebx # retorna 0
movl $1, %eax # servicio 1: retorno de llamada
int $0x80 # syscall
.data # seccion de datos
msg:
.ascii "Hola, mundo!\n"
len = . msg # longitud del mensaje
9
Lenguaje Ensamblador
Ensamblador ARM
.global main
main:
@ Guarda la direccion de retorno lr
@ mas 8 bytes para alineacion
push {ip, lr}
@ Carga la direccion de la cadena y llama syscall
ldr r0, =hola
bl printf
@ Retorna 0
mov r0, #0
@ Desapila el registro ip y guarda
@ el siguiente valor desapilado en el pc
pop {ip, pc}
hola:
.asciz "Hola, mundo!\n"
10
Lenguaje Ensamblador
Ensamblador PowerPC
.data # seccion de variables
msg:
.string "Hola, mundo!\n"
len = . msg # longitud de cadena
.text # seccion de codigo
.global _start
_start:
li 0,4 # syscall sys_write
li 3,1 # 1er arg: desc archivo (stdout)
# 2do arg: puntero a mensaje
lis 4,msg@ha # carga 16b mas altos de &msg
addi 4,4, msg@l # carga 16b mas bajos de &msg
li 5,len # 3er arg: longitud de mensaje
sc # llamada al kernel
#
li 0,1 # syscall sys_exit
li 3,1 # 1er arg: exit code
sc # llamada al kernel 11
Uso de lenguajes de bajo nivel
● Como vemos, tanto el lenguaje de máquina como el ensamblador o
Assembler son lenguajes orientados a la máquina. Ofrecen control
total sobre lo que puede hacerse con un procesador o con el sistema
construido alrededor de ese procesador. Por este motivo son
elegidos para el desarrollo de software que necesita dialogar
estrechamente con el hardware, como ocurre por ejemplo con los
sistemas operativos, algunas aplicaciones en sistemas embebidos, o
de computación de alto rendimiento.
● Sin embargo, como están ligados a un procesador determinado,
requieren conocimiento profundo de dicho procesador y resultan
poco portables. Escribir un programa para resolver un problema
complejo en un lenguaje de bajo nivel suele ser muy costoso en
tiempo y esfuerzo.
12
Lenguajes de alto nivel
● Ocultan al usuario los detalles de la arquitectura de
las computadoras y facilitan la programación de
problemas de software complejos. Están orientados
al problema, aislando al programador de cómo
funcionan los procesadores o de cómo se escriben las
instrucciones de máquina, y permitiendo especificar
operaciones para resolver problemas en forma más
parecida al lenguaje natural, matemático, o humano.
● Son más portables, y su depuración (el proceso de
corregir errores de programación) es normalmente
más fácil.
13
Lenguajes de alto nivel
● Código de alto nivel
DEUDA = DEUDA PAGO
● Código ensamblador
LD DEUDA
SUB PAGO
ST DEUDA
● Código de máquina
01001010
01101011
14
10101010
Lenguajes de alto nivel
Alto Nivel
De más bajo nivel
dentro de los de
alto nivel
Bajo nivel
15
Traductores de lenguajes de alto nivel
Traductores de lenguajes
de alto nivel
Compiladores Intérpretes
● Los compiladores e Intérpretes convierten
código escrito en lenguaje de alto nivel a
lenguaje de máquina.
● Posiblemente, un compilador/intérprete utilice
un ensamblador para hacer parte de su trabajo.
16
Traductores de lenguajes de alto nivel
● Compilador:
– Traduce un programa fuente en un archivo
ejecutable que contiene el código de máquina.
– La ejecución queda diferida para un momento
posterior.
● Intérprete:
– La traducción se produce cada vez que el usuario
envía a ejecutar la aplicación. Es decir, la
traducción y ejecución ocurren de forma
concurrente.
– La traducción es normalmente progresiva de
acuerdo a la parte del programa que se va 17
ejecutando.
Traductores de lenguajes de alto nivel
● Intérprete:
– Es portable: el programa puede ser ejecutado
directamente en cualquier computadora que tenga el
intérprete correspondiente (posiblemente con diferente
hardware y sistema operativo).
– Bajo rendimiento: La ejecución del programa comparte
la CPU con la traducción del fuente.
● Compilador:
– No es portable: el programa solo puede ser ejecutado en
computadoras con el mismo ISA y Sistema Operativo.
– Alto rendimiento: La ejecución del programa es rápida
porque la traducción ya estaba hecha antes de
ejecutarse el programa. 18
19
Proceso de Compilación
20
Terminología del proceso de Compilación
● Cuando utilizamos un compilador para obtener un programa ejecutable, el
programa que nosotros escribimos, en algún lenguaje, se llama programa
fuente, y estará generalmente contenido en algún archivo fuente.
● El resultado de la traducción será un archivo objeto conteniendo las
instrucciones de código máquina equivalentes.
● Este archivo objeto puede no estar completo, ya que el programador puede
hacer uso de rutinas o funciones que vienen provistas con el sistema, y no
necesita especificar cómo se realizan esas funciones. Al no aparecer en el
programa fuente, esas funciones no aparecerán en el archivo objeto. Ese
otro lugar donde están definidas funciones disponibles para el programador
son las bibliotecas. Las bibliotecas son archivos conteniendo grupos o
familias de funciones.
● El proceso de vinculación, que es posterior a la traducción, debe buscar en
esas bibliotecas la definición de las funciones faltantes en el archivo objeto.
Si la vinculación resulta exitosa, el resultado final es un programa
ejecutable.
21
¿Preguntas?
22