> For the complete documentation index, see [llms.txt](https://hernandez-kevin.gitbook.io/pintos-vm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hernandez-kevin.gitbook.io/pintos-vm/virtual-memory/systemcalls/unmap.md).

# Munmap

## Un poco de Explicación...

Ya tenemos los archivos mapeados a la memoria del proceso, pero ahora toca el proceso inverso: ¡'unmap'pearlos!

Esto quiere decir que la tarea de System Call se resume a liberar los recursos utilizados por Mmap.

## Objetivo

Implementar Munmap para nuestro amado PintOS.

## Implementación

Munmap es muy sencillo de implementar, ya que solamente consiste en los siguientes pasos:

1. Dado el ***mapid\_t***, hay que buscar si el proceso tiene mapeado algún archivo cuyo ***mapid\_t*** coincida.
2. Buscar todas las páginas y frames que fueron utilizados para este mapeo.
3. ***SOLAMENTE*** debes escribir al File System todas aquellas páginas que fueron modificadas. Si no fueron modificadas, no hagas nada.\
   Tienes que tomar en consideración que una página puede estar cargada a RAM o puede&#x20;

   estar en el Swap File.
4. Liberar los frames y borrar los FTEs y SPTEs asociados. Esto implica invalidar las páginas en la Page Table del Proceso.

## FAQ

* ¿Solamente debo liberar los recursos utilizados por Mmap cuando se llama Munmap?

  Sí y cuando el proceso está a punto de morir.
* ¿Qué pasa si la página se encuentra en el FIle System?

  No haces nada, solo borras el SPTE asociado a esa página y la invalidas en la Page Table.

## Make Grade

Con Munmap en nuestro arsenal, logramos pasar las siguientes pruebas:

### Functionality

{% tabs %}
{% tab title="Stack Growth" %}

* [x] pt-grow-stack
* [x] pt-grow-stk-sc
* [x] pt-big-stk-obj
* [x] pt-grow-pusha
  {% endtab %}

{% tab title="Paging Behaviour" %}

* [x] page-linear
* [x] page-parallel
* [x] page-shuffle
* [x] page-merge-seq
* [x] page-merge-par
* [ ] page-merge-mm
* [x] page-merge-stk
  {% endtab %}

{% tab title="Mmap System Call" %}

* [x] mmap-read
* [x] mmap-write
* [x] mmap-shuffle
* [x] mmap-twice
* [x] mmap-unmap
* [ ] mmap-exit
* [ ] mmap-clean
* [x] mmap-close
* [x] mmap-remove
  {% endtab %}
  {% endtabs %}

### Robustness

{% tabs %}
{% tab title="Page Table Support" %}

* [x] pt-bad-addr
* [x] pt-bad-read
* [x] pt-write-code
* [x] pt-write-code
* [x] pt-grow-bad
  {% endtab %}

{% tab title="Mmap System Call" %}

* [x] mmap-bad-fd
* [x] mmap-inherit
* [x] mmap-null
* [x] mmap-zero
* [x] mmap-misalign
* [x] mmap-over-code
* [x] mmap-over-data
* [x] mmap-over-stk
* [x] mmap-overlap
  {% endtab %}
  {% endtabs %}
