Newsgroup: it.comp.os.dibattiti
Titolo: Paginazione su Intel: domanda.

Nei processori Intel il meccanismo della paginazione ha il compito di
nascondere la suddivisione in pagine della memoria ai programmatori i
quali vedono i vari segmenti (utilizzando la segmentazione) come
blocchi compatti.
Domanda :
Per allocare novi segmenti di memoria il sistema operativo deve anche
preoccuparsi di cercare le pagine libere e di inserire nuove entry nel
direttorio delle pagine e nelle tabelle delle pagine, oppure tale
meccanismo viene gestito completamente dal processore rendendo così
invisibile (e molto comoda) la paginazione anche agli occhi dei
programmatori di OS ?
Nel caso in cui sia vera la prima affermazione (l' OS deve gestire il
direttorio delle pagine e le tabelle delle pagine, nonchè andarsi a
cercare le pagine vuote) come faccio ad andare a scrivere sul
direttorio delle pagine e sulle tabelle delle pagine se queste non
possono essere mai gli indirizi di destinazione di un operando ?
Devo forse operare in Real_Address_Mode (indirizzamento diretto) o
esiste un metodo migliore (io non conosco l'esistenza di i istruzioni
particolari dedicate allo scopo)?

particolari dedicate allo scopo)?
Il codice del SO opera a ring 0 con la paginazione disabilitata, per
cui indirizza la memoria in real address mode, come hai detto tu.
Del resto non avrebbe molto senso per il kernel accedere alle sue
stesse strutture con la traduzione degli indirizzi attivata.
-- 
Lorenzo
"Given enough eyeballs, all bugs are shallow", Linus'Law
(per rispondere via email fai un rot13 dell'indirizzo)
(apply a rot13 to reply)


Questo lo sapevo benissimo ma forse ho fatto un' introduzione poco
chiara (e poi voleva solo essere una introduzione).

Grazie per la risposta.

preoccuparsi di cercare le pagine libere [..]
Normalmente non esistono pagine libere, ma solo pagine occupate che
devono finire nello swap file. L'hardware manda un'eccezione se non
trova pagina per un determinato processo, ma e' poi compito del S.O.
poi decidere che pagina deve andare nello swap file, o se bisogna
semplicemente terminare il processo. Nel caso di dovere far spazio e'
sempre il S.O. che decide che pagina deve diventare libera.
Per la cronaca anche un processo in user space (almeno sotto NT) puo'
decidere di mappare le eccezioni di bad address, ma non credo ti
interessi.
Esattamente come funziona non lo so. Non ti so dire le istruzioni, e
non so fare esempi reali di scrittura di un gestore della memoria.
Ci sara' a creve un articolo sul tema su CP.
-------------------------------------------------------
Tieni per te il Papero se vuoi la mia email
Sito Papero -> 
http://utenti.tripod.it/papero

Stai progettando un sistema operativo, o stai trattando di questo
perlomeno l'aspetto della gestione della memoria virtuale?
Se rispondi no: della paginazione se ne occupa interamente il sistema
operativo ed il processore, un processo in modalita' problema non puo' e
non deve avere la possibilita' di intervenire, e d'altronde non ve ne
sarebbe ne' il motivo ne' la necessita', visto che il sistema operativo ha
il compito di sollevare da questo e da altri problemi. Questo della
memoria e' un discorso che fa parte della politica della gestione risorse
di un SO e della sicurezza ed efficienza che esso deve garantire
nell'offrire l'accesso cooperativo e concorrenziale delle risorse. In
linea generale l'unico modo di intervenire sull'allocazione delle pagine e
le corrispondenze fra indirizzi virtuali e fisici e' lavorare in modalita'
kernel o supervisore, modalita' di solito riservata appunto al kernel.
D'altronde, il problema si complicherebbe ulteriolmente considerando lo
scambio delle pagine fra memoria centrale e swap e viceversa nei sistemi a
memoria virtuale: basti pensare che la situazione di "page fault", ovvero
mancanza di pagina, causa un interrupt, lo vogliamo davvero gestire in
modalita' problema? Nei sistemi tradizionali vengono sfruttate due
modalita' di funzionamento del processore: in una si puo' fare tutto,
nell'altra no (ed il limite e' l'impossibilita' di "buttare" giu' tutto),
e l'unico modo di "uscire" e tornare in modalita' kernel e' invocare un
interrupt software, detto anche "system call". Nei sistemi piu'
sofisticati, sempre in termini di processore e SO, abbiamo anche dei
livelli intermedi con diversi livelli di privilegio, in merito alle
istruzioni eseguibili e alle possibilita' di accesso alla memoria e/o ai
registri di I/O. Per l'intel questi sono detti livelli di "ring", e mi
sembra ne abbia 4, da 0 a 3.
bye G.L.
--
  Antispamming: metti "sole" in luogo di "maps"
  Antispamming: replace "maps" with "sole"
--