Usuari:Sergi/Temari/Tema 17 Sistemas operativos: Gestión de memoria.

De Acacha

Dreceres ràpides: navegació, cerca

Contingut

Arquitectura dels sistemes operatius

La gràfica de la dreta ens mostra un exemple d'arquitectura de Sistema Operatiu. L'exemple esta basat en un Sistema Operatiu amb nucli Linux. El nucli és l'encarregat de gestionar la comunicació entre el maquinari i el sistema operatiu i és el nucli d'aquest últim.

Tot i tractar-se d'un exemple concret de nucli i sistema operatiu, podem observar que apareixen una sèrie de nivells que podrem trobar en tots els sistemes operatius actuals:

Nivell d'espai d'usuari

Nivell d'interfície espai usuari - sistema operatiu. Crides del sistema

  • Interfície entre l'espai d'usuari i el nucli/Sistema Operatiu: Les aplicacions es comuniquen amb el SO utilitzant les crides del sistema de les llibreries del sistema.

Nivell d'espai de nucli

  • Espai de supervisor o espai de kernel: espai sense restriccions d'accés a la memòria que pot accedir a qualsevol adreça, de qualsevol procés o de qualsevol dispositiu mapejat a memòria i per tant no té cap mena de restricció d'accés. Aquest espai esta reservat per a ús del nucli o dels seus mòduls o d'alguns controladors (drivers)

Subsistemes interns

  • Subsistemes interns: en el cas de Unix, es disposa d'uns sistemes de fitxers especials que serveixen per obtenir informació sobre el kernel (/proc i /sys)

Nivell d'abstracció de maquinari. HAL

El Nivell d'abstracció de maquinari (Hardware Abstraction Layer - HAL-) és el nivell que s'encarrega d'oferir al sistema una màquina virtual, un nivell d'abstracció superior que permeti treballar de forma més senzilla amb els dispositius d'E/S.

Un altre objectiu d'aquest nivell es homogeneïtzar les operacions amb dispositius d'E/S amb independència del seu funcionament intern, diferències entre marques, models, etc. Aquest nivell és el que ens permet treballar amb un disc dur (o una targeta de xarxa o qualsevol altre dispositiu) utilitzant sempre les mateixes operacions amb independència del tipus de disc (SCSI, IDE, SATA, PATA) i dels detalls de maquinari (moure el braç del disc dur, localitzar Pista, Sector i Capçalera de la posició del disc a la que volem accedir, etc.)

HAL és el nivell que utilitzaran les API del sistema per treballar amb llenguatges d'alt nivell amb els dispositius d'E/S.

HAL també permet fer més fàcil la portabilitat dels sistemes operatius entre plataformes.

Nivell de programari especific de maquinari (drivers o controladors)


Recursos:

Maquinari

  • Maquinari (chips o lògica electrònica):
    • Memory Managment Unit: És una unitat de maquinari especialitzada en convertir adreces de memòria lògiques en adreces de memòria física.

Gestió de la memòria

La gestió de la memòria és la part del sistema operatiu que s'encarrega de gestionar la memòria principal d'un ordinador.

La gestió de la memòria implica bàsicament proveir de porcions de la memòria als processos a mesura que els vagin demanant i alliberar aquests porcions de memòria a mesura que els processos ja no la necessitin. La gestió de la memòria és un procés crític i que s'ha optimitzar en la mesura del possible per tal de no afectar el rendiment del sistema.

Memòria

Vector de bytes on cada byte (o cela de memòria) té una adreça que la identifica de forma unívoca. Els programes s'han de carregar a la memòria per tal de poder ser executats. Un cop un programa esta carregat en memòria se l'anomena procés.

Història

Als inicis de la informàtica els usuaris/programadors eren els responsables de fer la gestió manual de la memòria. Aquesta tasca era una feina feixuga que requeria d'uns alts coneixements del maquinari. Actualment és el sistema operatiu el que gestiona la memòria de forma que els programadors es poden centrar en altres problemàtiques de la programació.

Els canvis i avenços en la gestió de la memòria sempre han estat molt lligats a l'evolució dels sistemes operatius i la forma en que suporten/gestionen els processos:

  • Sistemes sense sistema operatiu: Els processos es carregaven directament i de forma seqüencial i es programava en llenguatge màquina o assemblador. Els processos disposaven de tota la memòria per a ells (no hi ha gestió de memòria).
  • Sistemes operatius mono procés: aquests primers sistemes només permetien executar un sol procés al mateix temps. L'espai de memòria es dividia en 2 parts: espai del sistema operatiu i espai del procés. En alguns cassos, el sistema operatiu es podia trobar en memòries ROM separades de la memòria principal, disposant així els processos de tota la memòria principal.
  • Processament per lots: També conegut com mode batch. Els primers computadors tipus MainFrames (anys 50-60) utilitzaven aquest sistema per executar tasques. Hi ha un programa gestor dels processos encarregat d'executar els processos sense necessitat d'interacció amb l'usuari. Els processos utilitzaven tota la memòria del sistema i s'executen seqüencialment havent-hi una cua de processos en espera d'execució. La planificació de l'ordre i moment d'execució del procés es responsabilitat del programador del programa de batch
  • Sistemes operatius multiprogramats: aquests sistemes no són purament multiprocés ja que un instant concret de temps la CPU només esta executant un procés (de fet l'única forma de tenir multiprocés real és tenir més d'un processador). La novetat d'aquests sistemes és que permeten multiplexar en temps l'ús de la CPU assignant un temps d'ús de CPU a cada procés d'una cua de processos en espera d'execució. Aquest mecanisme es coneix com a Round Robin (cua FIFO amb quantum de temps). Aquest tipus de sistemes introdueixen dos nous conceptes respecte a la gestió de la memòria
    • Multiples processos carregats en memòria: cal implementar sistemes que permetin repartir de forma òptima la memòria principal entre els processos en espera d'execució
    • Protecció de processos: el processos per qüestions de robustesa i seguretat del sistema els processos no han de poder accedir a les porcions de memòria reservades a altres processos.
    • Memòria virtual: El mecanisme de memòria virtual permet treballar amb més memòria principal de la que existeix realment al sistema i introdueix el concepte de intercanvi (swapping) i recol·locació dels processos.


Objectius

Els objectius principals de la gestió de memòria són:

  • proveir d'espai suficient de memòria per tal d'executar múltiples processos alhora (programació multitasca)
  • proveir d'un nivell satisfactori de rendiment de cara als usuaris del sistema
  • protegir els recursos dels programes
  • compartir, si es desitja, informació entre els processos del sistema utilitzant memòria compartida
  • fer que la gestió de la memòria sigui el més transparent possible per als programadors.

Funcions

Les funcions principals de la gestió de memòria en sistemes operatius multitasca són:

Recolocació

En sistemes on s'utilitza memòria virtual, els programes que es troben a la memòria principal han de ser capaços de ser resituats en diferents parts de la memòria en diferents moment de la seva execució. La recol·locació esta molt relacionada amb les operacions d' intercanvi.

Això passa per què un procés que mitjançant una operació d'intercanvi (swapping) ha estat mogut de la memòria principal a la memòria secundaria temporalment al tornar a la memòria principal molt possiblement no podrà tornar a a col·locar-se al mateix lloc. Els sistemes operatius han de ser capaços de fer aquestes operacions de forma que les referències de memòria del codi del programa sempre apuntin al lloc correcte.

Protecció

Els processos no han de ser capaços d'utilitzar la memòria d'altres processos sense permís. Això és el que s'anomena protecció de la memòria i preveu que tant el codi maliciós com el codi erroni d'un programa pugui interferir amb el correcte funcionament d'altres processos del sistema.

Espai de memòria indicats per un registre base i un registre límit que indica la zona en que un procés pot utilitzar la memòria.

SEGMENTATION FAULT: Intent d'accés a un espai de memòria no permès o no existent...

Memòria compartida

Tot i l'existència de la protecció de memòria en força casos els processos han de ser capaços d'intercanviar informació accedint a parts compartides de memòria.

La memòria compartida és un mecanisme típic per a la comunicació entre processos ( Interprocess Communication - IPC-)

Organització lògica de la memòria

El sistema de gestió de la memòria és l'encarregat d'organitzar la memòria en parts lògiques (memòria virtual). Hi ha diferents formes d'organitzar la memòria lògicament però les més conegudes són la segmentació i la paginació.

Organització física de la memòria

La memòria esta organitzada en nivells jeràrquics (memòria principal, memòria secundària) . Els sistemes operatius s'han d'encarregar dels fluxes d'informació entre els diferents nivell de memòria del sistema.

Memòria virtual

Segons el concepte de màquina virtual d'un sistema operatiu (la màquina virtual és una abstracció del maquinari real que s'ofereix als usuaris del sistema operatiu i que permet utilitzar aquest maquinari de forma més senzilla) anomenem Memòria Virtual a un nivell d'abstracció que permet treballar amb un espai d'adreçes de memòria lògica. El gestor de memòria del sistema operatiu (sovint amb l'ajuda de maquinari específic) és l'encarregat de traduir adreces lògiques en adreces físiques reals.

Utilitza els mateixos sistemes d'adreçament de la segmentació i paginació (taules que tradueixen adreces lògiques en adreces físiques) però a més cal indicar si el segment o pàgina esta en memòria principal o en memòria secundaria.

Espai d'adreces lògiques

Espai lògic d'adreces de l'espai d'adreces real, que permet que mitjançant tècniques com l'intercanvi (swapping) és pugui fer un millor ús de la memòria RAM.

Espai d'adreces físiques

Depèn de cada dispositiu de memòria. En sistemes moderns bàsicament ens trobem o que la memòria es troba en memòria principal (memòria semiconductora SDRAM) o en disc dur (swap)

Jerarquia de memòries

Intercanvi. Swapping

Recursos:

Sistemes d'assignació contigua de memòria

Partició estàtica (fixes)

Va ser el primer esquema utilitzat per a particionar la memòria.

Taula de particions fixes

Avantatges:

  • Sistema més simple. Òptim per a sistemes poc variables on és coneix a priori la càrrega del sistema.

Partició dinàmica

Avantatges:

  • S'elimina la fragmentació interna (sempre i quan el sistema no tingui una unitat mínima de memòria, fet per un altre banda habitual)
  • Es pot assignar tant memòria com calgui a un procés (si cal tota la memòria)
  • Suporta el creixement dinàmic d'un procés.

Inconvenients:

  • Sistema més complex (requereix de més temps de procés del sistema operatiu)
  • Fragmentació externa. La compactació és un procés molt costos

Sistemes d'assignació no contigua de memòria

Segmentació

Taula de segments per procés on s'indiquen quins són els segments i quines són les seves adreces.

  • Particions de mida variables
  • La divisió és lògica (p.ex. codi, dades estàtiques, pila, piló, etc)
  • Permet compartir dades (p.ex. els processos d'una mateixa aplicació (codi) poden compartir el segment de codi)
  • Protecció: es poden assignar diferents nivells d'accés a diferents segments:
  • Segment de codi: Permisos d'execució i lectura (no té sentit modificar el codi en memòria)
  • Segment de dades estàtiques: Dades només lectura
  • Segment piló: Dades dinàmiques. Permisos de lectura/escriptura.

Paginació

La memòria es particiona en segments de mida fixa, però cada procés pot utilitzar més d'una partició. Les particions a nivell lògic s'anomenen pàgines i a nivell físic s'anomenen frames (marcs)

Taula de pàgines': Correspondències entre pàgines i frames. Cada procés té una taula de pàgines pròpia

Avantatges

  • Evita la fragmentació externa. Força eficient en l'ús de la memòria


Inconvenients

  • Certa fragmentació interna dins d'una pàgina (marc)
  • Complexitat. Cal mantenir estructures de dades com Taula de pàgines i taula de frames.

Polítiques d'assignació de memòria

Objectiu: Evitar la fragmentació

Primera partició lliure on cap el procés

La partició més petita de les lliures on cap el procés

La partició més gran de les lliures on cap el procés

No hi ha espai lliure. Espera o Swapping

Fragmentació

Fragmentació interna

  • Sistemes de partició de mida fixa(contigua o no contigua - paginació -). Si les particions tenen una mida fixa (p. ex. 15k) si s'ha d'allotjar un procés de 10K aleshores es malgasten 5K.

Fragmentació externa

  • Sistemes de partició de mida variable i en definitiva tot sistema multiprogramat amb mides variables. Durant el procés de carrega i descarrega de processos de la memòria, es deixen llocs lliure de diferent mida. Al final pot passar que hi ha molta memòria lliure però cap espai contigu prou gran per allotjar un nou procés.

Compactació de la memòria

  • Procés costos en temps d'execució
  • Similar al que passa als discs durs en alguns sistemes operatius.
  • El sistema ha de permetre reubicar programes en temps d'execució
Eines de l'usuari