Newsgroup: it.comp.hardware.palmari
Titolo: Una volta per tutte: Occupazione Memoria

Tecnicamente quello che dice Paquito è esatto. Ma "fisicamente" c'è qualche
imprecisione.
Non ho grande dimestichezza con l'assembler Palm o PPC, ma trattandosi di
microprocessori abbastanza standard (ARM, Motorola, Xscale ecc ecc),
suppongo che le seguenti considerazioni generali possano essere
fatte.(quello che voglio dire che i circuiti digitali, siano essi MP, DSP o
semplici codec si prgettano sempre secondo questi schemi).
Astraendo:
In un sistema digitale la descrizione di un evento può esser fatta a vari
livelli (layer). Si va da quello più generale (Behavior Layer) a quello più
strettamente caratteristico (Physical Layer). Esistono ben 5 livelli
intermedi tra questi due tra cui i più importanti sono il System Layer, Il
Logical o Logic Layer, il Geometric Layer, i due rimanenti sono semi ibridi
ed hanno un nome differente a seconda della tecnologia.
Brevemente:
Il Behavior Layer (o livello comportamentale) descrive cosa ci si aspetta
dal dispositivo/circuito.
Il System Layer (o livello di sistema) descrive le operazioni fondamentali
che le varie parti del circuito devono compiere per svolgere quanto
richiesto.
Il Logical Layer (o livello logico) descrive come vanno interconnessi i vari
"blocchetti" di cui è composto il disp per portar a termine l'operazione
prescelta.
Il Geometric Layer e il Physical Layer invece descrivono i vari transistor
ed il loro comportamento fisico (differenza tra i due? GL descrive il
funzionamento del singolo transistor, PHL quello della zona di silicio che
costituisce il transistor).
Questo per ogni operazione che va effettuata dal singolo processo/programma.
Nella tecnologia moderna più che di singoli programmi si parla di thread.
Ogni thread viene eseguito in maniera esclusiva o concorrenziale, ma quello
che ci importa è un'altra cosa. Il meccanismo è sempre lo stesso, in più al
massimo c'è un multiplexer che commuta tra i vari thread permettendo
l'ottimizzazione della catena delle pipeline (spero di non essere troppo
criptico)
Il funzionamento è più o meno questo.
- il processore consulta le Flag di sistema (e quindi indirettamente IRQ,
Flag d'esecuzione ecc ecc).
- il thread viene caricato in memoria in un segmento (di dimensione
fissa!!!!) secondo una procedura che vedremo in seguito.
- vengono settati le flag/i bit di esecuzione secondo opportuni parametri
che dipendono da vari fattori.
- si iniziano a riempire i registri d'esecuzioni con le istruzioni prese dal
segmento e i registri dati con i dati presi dall'HEAP o dallo STACK (in
pratica sono due strutture dati ad accesso sequenziale, la cui unica
differenza è che nello stack o pila l'ultimo elemento inserito è quello
prelevato per primo, mentre nell'heap o coda, è il primo elemento inserito
ad essere prelevato).
- finito il thread si passa (eventualmente al thread successivo)
Per quanto riguarda la memoria:
- ogni singolo thread occupa almeno un segmento (che nel caso di registri a
16bit equivale a 64k)... thread molto grossi possono essere "spezzati" su
più segmenti e virtualmente gestiti come thread sequenziali. Questo segmento
è la memoria di esecuzione.
- ai thread eseguiti in modalità protetta viene normalmente assegnato un
altro segmento (o più segmenti) detto segmento dati a cui attingere per
riempire/svuotare l'heap o lo stack.
- nel caso il thread non venga eseguito in modalità protetta... viene
assegnato un singolo segmento di 64k in cui dati e codice devono convivere.
Questo schema è stato ideato per permettere  la sincronizzazione delle varie
componenti. Se infatti il processore (che ha tempi d'esecuzione ormai
dell'ordine dei millesimi o di nano secondo) dovesse attingere informazioni
da dispositivi molto più lenti (le MASS STORAGE hanno tempi di accesso
dell'ordine dei millesimi di secondo cioè circa 1.000.000-10.000.000 volte
più grandi), l'effettiva velocità di un processo sarebbe plafonata
fortemente dall'effic. delle unità a dischi. Caricando il tutto in memoria
(tempi d'esecuzione dell'ordine dei decimi di nano secondi (cioè almeno
10.000-100.000 volet più veloci di un HD) si ha una singopla attesa
all'inizio, ma poi l'esecuzione è "fluida".
Nei device come i PDA in cui MASS STORAGE e memoria RAM sono un unica cosa,
questo schema non è stato modificato a livello di sistema (System Layer)
perchè questo permette ai programmatori di utilizzare linguaggi di
programmazione standard (occorre fornire solo il compilatore adatto a
generare i binari per la piattaforma specifica) senza dover creare un
linguaggio ad hoc che limiterebbe ad una cerchia ristretta lo sviluppo del
software (come è avvenuto finora per i telefonini!).
Per cui, sebbene già presenti in memoria (nalla memoria STORAGE), i singoli
thread vanno caricati anche in quella di esecuzione, altrettanto dicasi per
i dati!
Questo, almeno a livello di sistema...
In realtà, suppongo, che ad un livello di astrazione più caratteristico (a
metà tra il System Layer ed il Logical Layer), sia stata effettuata qualche
genere di ottimizzazione che permetta di evitare la copia fisica del
thread... in pratica si realizzerebbe una sorta di link simbolico alla
posizione del thread nella STORAGE. Questo limiterebbe la richiesta di
memoria libera ad una piccola porzione che fungerebbe da cache in cui
precaricare il thread e che il processore vederebbe come un segmento
virtuale.
Quest'ultima, ovviamente, è una mia ipotesi  ma nasce da  alcune
considerazioni sui crash di sistema che necessitano del soft reset. Infatti
i processori utilizzati  ormai sfruttano la cosiddetta modalità protetta,
che permette tra le altre cose di separare lo user space dal kernel space,
cioè di impedire che un'applicazione crashando impalli il sistema. Il fatto
che le applicazioni piantandosi richiedano un soft reset (parlo di sistemi
palm, non conosco i PocketPC), a mio parere, implica che la loro esecuzione
coinvolga nello stesso thread una porzione di codice kernel (quella addetta
alla gestione del segmento virtuale), così come avviene per i sistemi
Windows di classe non NT in cui alcune routine (ad esempio quelle grafiche)
girano in kernel space e...
Beh... naturalmente la cosa è ben più complessa di come l'ho descritta io...
ma credo che in buona approssimazione si possa considerare attendibile.
Ovviamente, come spiegavo... esistono vari livelli di astrazione, e per
ciascun livello vari modi di dare la descrizione di una certa operazione (si
consideri che qualsiasio porta logica viene realizzata come combinazione di
porte NOT e NAND o, in alternativa, di porte NOT e NOR o ancora come una
combinazione lineare delle due cose!)... per cui...
Credo pertanto che nessun sistema a nessun livello usi due copie di codice
in memoria (neanche i moderni sistemi di CLUSTERING che ormai accedono ad
un'unica memoria in modo concorrenziale!) per cui mi trovo d'accordo con
Paquito nella sostanza. Tuttavia occorre sapere che chi lavora allo sviluppo
di codice del SO deve tener ben presente lo schema di cui sopra quando crea
l'interfaccia per il lancio delle applicazioni.
Ciao
Root

 quote a caso tanto manco l'ho ancora letto tutto il post
avevi detto "Una volta per tutte" ed č gia il secondo post identico...
che dobbiamo pensare??? :)
-- 
VADER: I tuoi poteri sono deboli, vecchio.
OBI-WAN: Non puoi vincere Darth, se tu mi abbatti io
diventerň piů potente di quanto tu possa immaginare.

 che dobbiamo pensare??? :)

 Ps: scusate... colpa di Oe-quotefix!
ahecco perchč quoti come un buzzurro (non chiedermi cosa sia perchč č la
prima parola strana che m'č venuta in mente, se č troppo offensiva non č
colpa mia)


 non è colpa mia)

 Ma ce l'hai con me o con Quotefix? :-(
con OE in generale (e con quotefix)
Outlook Express l'unico newsreader che insegna a quotare al contrario


 Outlook Express l'unico newsreader che insegna a quotare al contrario
Non e' l'unico. Molti webmail/webnews fanno lo stesso.
Comunque con OE-quotefix si puo' correggere :-)
Alessandro.

 Comunque con OE-quotefix si puo' correggere :-)
eliminandolo completamente dal computer
-- 
VADER: I tuoi poteri sono deboli, vecchio.
OBI-WAN: Non puoi vincere Darth, se tu mi abbatti io
diventerò più potente di quanto tu possa immaginare.

 Ps: scusate... colpa di Oe-quotefix!
Beh, visto che quotefix fa cilecca potresti quotare a mano, non credi?
--
Alan

 eliminandolo completamente dal computer
Oppure, deselezionando il checkbox "Move cursor at top" :-)
Alessandro.