---
# System prepended metadata

title: Respuestas

---

# Respuestas

## Checkpoint 1

### 1

#### Modo Real

El modo real provee un entorno de programación del Intel 8086, con algunas extensiones.

#### Modo Protegido

El modo protegido es el nativo del procesador. Este provee el set de instrucciones del procesador, y compatibilidad con el software base.

#### Particularides

* **Protegido**: 4Gb de memoria, posee 4 niveles de protección, rutinas de atencipon con privilegios, y el uso de una instruccion particular depende del nivel de privilegio.

* **Real**: 1Mb disponible de memoria, no tiene privilegios, tiene rutinas de atención a interrupciones, y se pueden acceder a todas las instrucciones (del 8086).
Y ademas es el modo en el que se inicia la PC.

### 2

#### Porque usar modo protegido?

Por cuestiones de seguridad y para aprovechar el set de instrucciones completo del procesador y no solo limitarlo a las instruccciones del 8086.
Ademas al estar corriendo en compatibilidad con un 8086 la memoria se ve limitada a solo 1Mb. Siendo que las computadoras actuales poseen mas de dicha capacidad, pasar a modo protegido nos permite utilizar un mayor rango de memoria (4Gb).

Si quisieramos implementar un SO en modo real, suponiendo que es posible meterlo en 1Mb, un usuario de este SO, tendria el mismo privilegio que el mismo...

Una de las razones por las cuales nos interesaria quedarnos en modo real, es la libertad de no tener restricciones a la hora de ejecutar instrucciones, esto se pierde al pasar al modo protegido.

### 3

#### Que es la GDT?

Es una tabla con información sobre segmentos, como el tamaño, la ubicación, el estado,y access control.

#### Como es el formato de un descriptor de segmento, bit a bit?

Primera posicion de memoria:

* (31 a 24):  Base adress 31 a 24
* (23): G
* (22 a 22): D/B
* (21): L
* (20): AVL
* (19 a 16): Limite de Segmento
* (15): P
* (14 a 13): DPL
* (12): S
* (11 a 8): tipo
* (7 a 0): Base de 23 a 16

Segunda pos de memoria:

* (31 a 16) Base address
* (15 a 0) Limite de segmento

#### Bits detalles

* **Limit**: Numero de 20bits que indica cuanta memoria ocupa el segmento a partird de la base.
* **Base**: Inicio del segmento en la memoria de 32bits.
* **G**: Si esta prendido el limite del segmento se calcula como el (num de 20bits) << 4, en otras palabras interpretado a 4Kb. Esto permite crear un segmento de hasta 4Gb.
* **P**: Indica si el segmento esta en la RAM o no. Este bit se usa en un algoritmo interno del procesador para saber cuando un segmento se esta usando y cuando no para liberarlo de la RAM.
* **DPL**: Especifica el nivel de privilegio del segmento. Los privilegios van de 0 a 3, donde 0 es el mas privilegiado.
* **S**: Si esta en 0 indica que el segmento es de sistema, y si no, indica que el segmento o es codigo o es dato. Type depende de este flag.

### 4

#### Segmento de codigo execute/read

Para que sea extrictamente execute/read (y que no sea a su vez access).
       (11,10,9,8)= (1,0,1,0)

### 6

#### extern gdt_entry_t gdt[]

Contiene un arreglo de segmentos

#### extern gdt_descriptor_t GDT_DESC

Contiene informacion sobre la variable gdt[], (base y limite).

### 8

**LGDT Descripcion**: Carga los valores de source operand, en la GDTR o en el IDTR.
El source operand tiene un lugar de mem q contiene una dir base, y el lim del gdt.
En terminos del codigo del bootloader es la struct gdt_descriptor_t.

En el archivo gdt.h la struct que almacena la información sobre la gdt es gdt_descriptor_t GDT_DESC, esta se inicializa en gdt.c luego de inicializar a la gdt.

### 13

CR0 es un registro de 32bits, que tiene 11 flags de 1bit, que hablan del sistema y los demas estan reservados.

###### Para ver el orden referir a la section 2.5 del manual, figura 2-7.

CR0 PE Protection Enable (bit 0 of CR0) — Enables protected mode when set; enables real-address mode when
clear. This flag does not enable paging directly. It only enables segment-level protection. To enable paging,
both the PE and PG flags must be set.

### 17

$50*80*2=8000$, le restamos 1 y lo pasamos a hexa,
$8000-1=7999=0x1F3F$, y este seria el limite.

### 18

**¿Qué creen que hace el método screen_draw_box?**

dibuja un rectangulo de x fila por y columnas con un mismo caracter.

**¿Cómo hace para acceder a la pantalla?** 

No tengo idea. Usa una matriz de ca, inicializada en VIDEO.

**¿Qué estructura usa para representar cada carácter de la pantalla y cuanto ocupa en memoria?**

ca, es una tupla(struct) de caracter x atributo donde los dos ocupan 8bits, ocupa en memoria 16bits.

