PDA

View Full Version : [Sistemi Operativi] Dubbio sullo swap


malocchio
04-03-2009, 08:41
Salve a tutti, spero di non essere troppo off-topic, ma non sapevo in che sezione postare, visto che non ce n'e` una dedicata ai sistemi operativi.

Ho avuto una discussione con la mia prof di Sistemi (tal @@@:ncomment: @@@@@). Si parlava dell'area di swap, e lei sostiene che al suo interno risiede SEMPRE una copia INTERA del programma che viene eseguito. Quindi, preso per buono questo, ho intuito che, ogni volta che avvio un programma, esso viene copiato interamente nell'area di swap, quindi da una parte ad un altra di un disco rigido (cosa che secondo me non avviene assolutamente).

Pensavo personalmente che l'area di swap viene usata per scaricare le pagine nel momento in cui la memoria centrale e` prossima al riempimento, senza riempirla di copie ridondanti.

Cosa mi potete dire al riguardo?



ps. la mia profe si affida a obrobriosi libri scolastici per ITIS, che raccontano un sacco di frottole (IMHO). Probabilmente non sa neanche chi e` Tanenbaum.

cdimauro
04-03-2009, 08:56
Dille di cambiare mestiere, perché non ha la minima idea di come funzionano questi meccanismi.

Nel file di swap, o per essere più precisi nel file o partizione (visto che è possibile utilizzare anche un'intera partizione allo scopo, se il sistema lo permette) dedicato alla paginazione, vanno a finirci le PAGINE dei dati che sono state "rimosse" temporaneamente dal sistema operativo per riutilizzare la memoria fisica a esse assegnate.

Un'applicazione è costituita da tre tipologie di informazioni che occupano spazio: codice, dati e stack. Per ognuna di essere il s.o. alloca un numero variabile di pagine, che dipende dalla dimensione delle stesse e ovviamente dalla dimensione di codice, dati e stack (dimensioni che generalmente sono variabili).

Inutile dire che è il s.o. a decidere, tramite opportune politiche (ad esempio LRU: Last Recently Used), quali pagine vanno a finire nel "file" di paginazione. Quindi è possibilissimo (anzi, è perfettamnete normale) che in un preciso momento si abbia che un certo numero di pagine di codice, dati e stack stiano in memoria centrale, e la rimanente invece nel "file" di paginazione.

Il caso in cui TUTTE le pagine di un'applicazione vengano buttate nel "file" di paginazione non è la norma, ma può succedere sicuramente. Ad esempio se lanci un gioco in genere questo "assorbe" quasi tutte le risorse (sia la CPU che la memoria), per cui se non hai abbastanza memoria libera è molto facile che tutte le pagine delle altre applicazioni finiscano nel "file" di paginazione.

Una curiosità: scommetto che questa tua prof. di informatica in realtà non abbia una laurea in informatica, ma magari in matematica, fisica, o comunque altre facoltà, e che abbia fatto il classico "corso di aggiornamento" in cui s'è "scoperta" improvvisamente un'esperta in informatica. :rolleyes:

malocchio
04-03-2009, 09:05
Dille di cambiare mestiere, perché non ha la minima idea di come funzionano questi meccanismi.

Nel file di swap, o per essere più precisi nel file o partizione (visto che è possibile utilizzare anche un'intera partizione allo scopo, se il sistema lo permette) dedicato alla paginazione, vanno a finirci le PAGINE dei dati che sono state "rimosse" temporaneamente dal sistema operativo per riutilizzare la memoria fisica a esse assegnate.

Un'applicazione è costituita da tre tipologie di informazioni che occupano spazio: codice, dati e stack. Per ognuna di essere il s.o. alloca un numero variabile di pagine, che dipende dalla dimensione delle stesse e ovviamente dalla dimensione di codice, dati e stack (dimensioni che generalmente sono variabili).

Inutile dire che è il s.o. a decidere, tramite opportune politiche (ad esempio LRU: Last Recently Used), quali pagine vanno a finire nel "file" di paginazione. Quindi è possibilissimo (anzi, è perfettamnete normale) che in un preciso momento si abbia che un certo numero di pagine di codice, dati e stack stiano in memoria centrale, e la rimanente invece nel "file" di paginazione.

Il caso in cui TUTTE le pagine di un'applicazione vengano buttate nel "file" di paginazione non è la norma, ma può succedere sicuramente. Ad esempio se lanci un gioco in genere questo "assorbe" quasi tutte le risorse (sia la CPU che la memoria), per cui se non hai abbastanza memoria libera è molto facile che tutte le pagine delle altre applicazioni finiscano nel "file" di paginazione.

Una curiosità: scommetto che questa tua prof. di informatica in realtà non abbia una laurea in informatica, ma magari in matematica, fisica, o comunque altre facoltà, e che abbia fatto il classico "corso di aggiornamento" in cui s'è "scoperta" improvvisamente un'esperta in informatica. :rolleyes:

Hai PM...

Grazie della risposta! Avrei un altro dubbio: quando io carico un programma, ne viene caricata una parte in memoria centrale e un parte (delle pagine) in swap, oppure, al page fault, le pagine vengono caricate direttamente dall'eseguibile invece che da swap? Spero di essermi spiegato decentemente.. :rolleyes:

cdimauro
04-03-2009, 09:19
Ti sei spiegato benissimo. Dipende tutto dalla disponibilità di memoria libera presente in quel momento e dalle politiche di allocazione delle risorse del s.o.. ;)

P.S. Risposto al PM.