# Memoria Virtual

{% hint style="danger" %}
***Es necesario que la fase 2 funcione COMPLETAMENTE. No empieces esta fase si aún te falta pruebas por pasar porque todas las pruebas hacen un uso extensivo de los Syscalls de la fase 2.***
{% endhint %}

## Introducción

En esta fase es necesario que domines los siguientes conceptos:

* Modelo de Memoria: Páginas
  * Tabla de Páginas
  * Reemplazo de páginas
    * Políticas de reemplazo (algoritmos)
* Archivo Swap
  * Swap In
  * Swap Out

{% hint style="warning" %}
*Si aún no comprendes algún tema, no es recomendable que empieces esta fase todavía.*

***Se hace un uso extenso de todos estos conceptos a lo largo de esta fase***
{% endhint %}

La dificultad de esta fase es ***elevada***. Debes prepararte para muchos desvelos y muchas frustraciones (es decir, pasarás más tiempo reparando los errores que en la implementación).

Esta guía asume que ya terminaste de leer la documentación y tienes una ligera idea de qué debes de hacer.

## Tiempo Estimado

* Tiempo de Implementación: Un fin de semana dedicado completamente.
* Tiempo de 'Fix the bugs': 3 a 14 días (dependiendo si decides trabajar paulatinamente o dedicarle fines de semanas enteros).

![](https://media.giphy.com/media/lJNoBCvQYp7nq/giphy.gif)

## Orden de Implementación

1. Frame Table
2. Supplementary Page Table
3. Stack Growth
4. Loader
5. Free Resources Parte 1
6. Swap File
7. Paging
   1. Page Eviction
   2. Page Replacement
8. Syscalls
   1. Read & Write
   2. Mmap
   3. Munmap
9. Free Resources Parte 2

{% hint style="danger" %}
***No puedes implementar los Syscalls si no tienes los puntos 1 a 7 funcionando CORRECTAMENTE***
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hernandez-kevin.gitbook.io/pintos-vm/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
