Curs 3 - Gestionarea Memoriei și Paging în Sistemele de Operare

În acest curs vom explora modul în care sistemele de operare gestionează memoria, conceptele de paging, swapping și segmentare, precum și mecanismele moderne de optimizare a utilizării memoriei.

1. Tipuri de Memorie și Ierarhia Memoriei

Memoria unui sistem de calcul este organizată ierarhic, fiecare nivel având viteze și costuri diferite.

- Memorie cache: Cel mai rapid tip de memorie, utilizat de procesor pentru acces instantaneu.

- RAM (Random Access Memory): Memorie volatilă utilizată pentru stocarea temporară a proceselor active.

- Memorie virtuală: Utilizează o combinație de RAM și spațiu pe disc pentru a extinde memoria disponibilă.

- Memory Management Unit (MMU): Componenta hardware care transformă adresele virtuale în adrese fizice.

2. Alocarea Memoriei și Strategiile de Gestionare

- Alocare contiguă vs. non-contiguă:

- Contiguă: Fiecare proces primește un bloc de memorie continuu.

- Non-contiguă: Procesul poate fi împărțit în mai multe blocuri separate (ex: paging).

- Fragmentare internă și externă:

- Fragmentare internă: Memorie irosită în interiorul blocurilor alocate.

- Fragmentare externă: Memorie liberă fragmentată în bucăți prea mici pentru a fi utilizate eficient.

- Buddy System și Slab Allocator: Algoritmi de alocare eficientă a memoriei în Linux.

3. Paging și Memoria Virtuală

- Paging-ul permite unui proces să fie împărțit în pagini mici de dimensiune fixă.

- Page Table: Tabel care mapează adresele virtuale la adresele fizice.

- Translation Lookaside Buffer (TLB): Cache utilizat pentru accelerarea traducerii adreselor.

- Demand Paging și Page Faults: Paginile sunt încărcate în memorie doar când sunt necesare.

4. Segmentare și Diferențele față de Paging

- Segmentarea permite împărțirea memoriei în segmente logice de dimensiuni variabile.

- Protecția memoriei și accesul la segmente: Fiecare segment poate avea permisiuni diferite.

- Comparare Paging vs. Segmentation:

- Paging: Alocare fixă, reduce fragmentarea externă.

- Segmentation: Alocare flexibilă, dar poate cauza fragmentare externă.

5. Swapping și Managementul Memoriei în Linux

- Swapping: Procesul prin care paginile de memorie neutilizate sunt mutate pe disc.

- Swap Partition vs. Swap File: Spațiul swap poate fi o partiție separată sau un fișier dedicat.

- Comenzi pentru monitorizarea utilizării memoriei:

free -m  # Afișează utilizarea memoriei RAM și swap
vmstat 1 10  # Monitorizează activitatea memoriei și swap-ului în timp real
top  # Afișează procesele care consumă memorie

6. Exemplu Practic - Gestionarea Memoriei în Linux

a) Vizualizarea utilizării memoriei

cat /proc/meminfo

b) Activarea și dezactivarea swap-ului

sudo swapon -s  # Verifică spațiul swap activ
sudo swapoff -a  # Dezactivează swap-ul
sudo swapon -a  # Reactivează swap-ul

c) Implementarea unui mecanism simplu de paging în C

#include <stdio.h>
#include <stdlib.h>
int main() {
    int *arr = (int *)malloc(1024 * 1024 * sizeof(int));
    for (int i = 0; i < 1024 * 1024; i++) arr[i] = i;
    printf("Memorie utilizată cu succes!\n");
    free(arr);
    return 0;
}

Resurse suplimentare: