Home Page

Tips page
c
cellulari
debian
egittologia
emacs
emacs-latex
hardware
html
inglese
java
latex
linux

*Alcuni comandi utili utilizzando find
*ARP e MAC address
*Ascoltare un CD audio
*Attivare il NumLock (BlocNum)
*Attivare i tasti i tasti Magic SysRq
*AWK, use an environment variable inside a script
*Bash e Argument list too long
*BogoMIPS
*Cancellare file e non recuperare spazio
*Capacita` dell'hard disk
*Come cambiare i font delle applicazioni con librerie GTK
*Come cambiare l'hostname
*Come tentare di recuperare file, filesystem e partizioni
*Compilare in parallelo
*Condividere una partizione
*Configure proxy for shells
*Continuous disk access
*Controllare la salute di hard disk e filesystem
*Convertire ext2 in ext3 (e viceversa)
*Convertire un file di testo dalla codifica DOS a quella UNIX
*Cosa fare quando si perde la password di root
*Cosa significa l'errore ``TCP
*Creare un boot floppy
*Creare un file temporaneo
*Deframmentazione di un filesystem
*Delete last chars from a string
*Determinare lo spazio libero sul disco
*Eliminare il beep
*Emettere un beep da script
*Enable PPP connection on boot
*Exclude a directory with rsync
*Execute telnet from a script
*Gestione dei file di log
*Gestione dei file .iso
*Gestione della data/ora
*Gestione di utenti e gruppi
*Hash md5 di una stringa
*Identificare la distribuzione installata
*I file ps e pdf
*Il file /etc/fstab
*Il file /etc/issue[.net] e /etc/motd
*Il filesystem SysFs
*I link soft ed hard
*Il path delle applicazioni
*Il sistema tutto in maiuscolo
*I moduli del kernel
*Impostare piu` IP per una scheda di rete
*Introduzione a LVM
*Inviare messaggi agli altri utenti
*I permessi della directory root, /
*La gerarchia del filesystem di Linux
*La memoria Ram sotto Linux
*La memoria swap
*Limitare la possibilita` di diventare root
*Limitazioni alla dimensione del file
*Log dei login utente
*Modificare il comportamento di ctrl+alt+canc
*Modificare le variabili della parent shell
*Montare o rimontare un filesystem come read-only
*More columns in a shell output
*Negare il login durante la manutenzione del sistema
*NoHUP
*Obtain the exact process start time
*Ottenere uno snapshot dello schermo
*Partizionamento di un sistema Linux
*Perche' si usa ./ per avviare alcuni eseguibili
*Permanent PPP connection
*PID of a process
*Programmare l'esecuzione dei programmi
*Quale processo utilizza un certo file o porta
*Quali vantaggi si hanno dalla ricompilazione
*Remove from find results
*Ricreare velocemente /tmp al boot
*Ridirezione dell'output
*Rimappare la tastiera
*Ripristinare i caratteri sballati in console
*Riscrivere l'MBR
*Salvarsi da un ``rm'' di troppo...
*Save MBR
*Scrivere in modo sincrono su filesystem
*Scrivere nel log di sistema di Linux
*Separazione dei comandi nella shell
*Separazione delle parole nella shell
*Share the internet connection
*Shell configuration files
*Single quote character escape with sed
*Spostare una directory in un'altra partizione
*Stimare il carico di lavoro della macchina
*Undelete di un file
*Usare le pendrive USB sotto Linux
*Usare partizioni primarie o estese
*Use md5sum to verify saved files
*Use ssh and scp without password
*Utilizzare hdparm per controllare gli hard disk
*Verificare un file video
*What is a zombie process
*What is the file System.map?
*What is the shebang? (Shell scripts)
*What shared libraries a program uses
*Yesterday date

matlab
misc
mysql
network
octave
programming
python
security
sed
tech
webapps
windows

University Page

Programming

Debian & Linux

Some works

About me

Del.icio.us Bookmarks

BOINC Combined Statistics

Site Statistics

Contact me sending an e-mail (antispam defense activated)

debian

hacker emblem

blogger

GeoURL

View Sandro Tosi's profile on LinkedIn

This is my Google PageRank

Title: La memoria Ram sotto Linux
Author: Sandro Tosi
Last modified: 2004-10-30 (2004-10-29) (2004-10-28)

La gestione  della memoria  da parte di  Linux segue una  regola molto
semplice: memoria non usata = memoria sprecata.

Tra  i  compiti di  un  kernel c'e`  anche  quello  di gestione  della
memoria. In essa vengono  solitamente mantenute le pagine dei processi
in  esecuzione sulla  macchina. Oltre  a  questo, il  kernel Linux  la
utilizza anche per contenere delle strutture temporanee.

Si  prenda l'esempio  di  un  file aperto  in  lettura: e`  abbastanza
probabile  che quel file  venga letto  interamente, ed  allora perche`
leggere solo il  primo blocco quando lo spazio  di memoria ci consente
di  caricarlo  interamente  in   Ram?  In  questo  modo,  gli  accessi
successivi saranno  molto piu` rapidi.  Ed anche quando il  file viene
chiuso,  rimane  comunque memorizzato  in  memoria,  cosicche` ad  una
successiva riapertura il suo contenuto sara` gia` disponibile.

Questa e` la ``cache'', chiamata anche ``page cache'' che tecnicamente
e`  una  cache  dei  file   mappati  in  memoria  (tramite  mmap()  ed
implicitamente con fork()/exec() ).

Prendiamo  ancora  ad esempio  un  file,  ma  questa volta  aperto  in
scrittura: se e`  un file modificato di frequente,  oppure che subisce
continue  modifiche  ad  una  sua  porzione,  allora  converrebbe  non
scrivere tutte  le modifiche sul  device, ma tenere un  ``buffer'' che
viene svuotato poco per volta.

Questo  e` quello  che succede  solitamente per  device lenti,  come i
floppy:  quando  scriviamo un  file  su  un  floppy questo  non  viene
realmente scritto  interamente al termine del comando,  ma viene messo
in un buffer in memoria, e scritto poco per volta.

Cio` consente  di dare l'impressione  che la scrittura sia  stata gia`
effettuata e  che quindi si puo`  continuare a lavorare,  mentre e` il
kernel che completa l'operazione senza che l'utente debba aspettare il
suo termine.

Praticamente, il  buffer o ``page buffer''  e` una sorta  di cache dei
blocchi del disco, a basso livello.

L'utilizzo  di cache e  buffer, ovviamente,  utilizza molta  memoria e
questo  le prime  volte  puo`  sembrare strano,  pensando  a come  sia
possibile che quasi tutta la memoria Ram sia piena con solo un paio di
applicazioni attive.

La  memoria  e`  effettivamente   utilizzata,  ma  puo`  anche  essere
facilmente liberata:  la cache puo`  essere tranquillamente eliminata,
ed  i   buffer  scritti  (operazione   che  comunque  e`   piu`  lenta
dell'eliminazione  della cache)  e dunque  liberare la  memoria appena
essa viene richiesta.

Il modo migliore  per spiegare la situazione della  memoria e` tramite
il  comando ``free'':  per esempio,  eseguito sulla  mia  macchina ora
restituisce

# free
            total       used       free    shared    buffers    cached
Mem:       353084     139232     213852         0       7328     76512
-/+ buffers/cache:     55392     297692
Swap:      113392          0     113392

La  prima riga  indica la  memoria  utilizzata, ma  la seconda  mostra
l'utilizzo  escludendo   i  buffer  e  la  cache:   i  valori  vengono
ridimensionati di molto.

Infatti  e` piu`  comodo e  veloce  liberare delle  pagine di  memoria
quando serve che fare accessi ai device, quindi buffer e cache sono un
modo per massimizzare le prestazioni.

Vediamo allora  alcuni comandi  utili per ottenere  informazioni sulla
memoria:

o  free
   Gia` visto in precedenza, restituisce le informazioni sull'utilizzo
   della memoria fisica, swap e la dimensione di buffer e cache

o  top (ordinato per memoria, premendo 'M')
   Consente di  mostrare un elenco dei processi  ordinati per utilizzo
   di memoria, in ordine decrescente

o  vmstat
   Riporta informazioni sulla memoria virtuale

o  cat /proc/meminfo
   Entry del  filesystem virtuale procfs  che restituisce informazioni
   molto  dettagliate  sulla  memoria  (alcune  di  esse  sono  quelle
   riportate da ``free''). Per maggior informazioni sul significato di
   tutte queste  voci, non  c'e` altro modo  che leggersi  i sorgenti:
   /usr/src/linux/fs/proc/proc_misc.c )