Passa al contenuto principale

È possibile eseguire molti compiti di programmazione in VOS e OpenVOS senza conoscere i dettagli di come il sistema operativo gestisce lo spazio degli indirizzi utente. Ma è divertente conoscere i dettagli, e a volte per realizzare un compito è necessario regolare la configurazione predefinita. Questo post è un'introduzione allo spazio degli indirizzi utente VOS.

Lo spazio degli indirizzi utente VOS è suddiviso in 5 aree, ognuna delle quali viene utilizzata per uno scopo specifico. In ordine, dall'indirizzo più basso (@0x) all'indirizzo più alto (@7FFFFFFFFFx) sono l'area del modulo del programma, l'area di memoria virtuale condivisa dinamicamente allocata, il mucchio di utenti, lo stack di utenti e una piccola area riservata all'uso da parte del sistema operativo stesso. Il seguente diagramma mostra l'ordine di queste aree. Non è in scala. Questo diagramma è specifico dell'implementazione della serie V (VOS Release 15.0 e successive).

Spazio indirizzi utente OpenVOS
Modulo di programma
Memoria virtuale condivisa
Mucchio di utenti
(zona morta)
Pila dell'utente
Dati di sistema

La dimensione dell'area del modulo di programma è fissata a 128 MB. La dimensione dell'area dati del sistema è fissata a poco meno di 2 MB. Le dimensioni delle altre 3 aree possono essere adattate per soddisfare le esigenze del programma in esecuzione. La dimensione predefinita dell'area di memoria virtuale condivisa è di 896 MB. Così, le prime due aree occupano 1 gigabyte o la metà dello spazio di indirizzo. La dimensione predefinita dell'heap utente varia un po' a seconda della versione di VOS o OpenVOS. Nella release 17.0, la dimensione predefinita è di 64 MB. La dimensione predefinita dello stack utente è di 8MB. Lo spazio inutilizzato tra l'heap e lo stack è chiamato zona morta. Poiché l'heap cresce verso l'alto (da indirizzi bassi ad indirizzi alti) e lo stack cresce verso il basso (da alto a basso), la zona morta può essere rivendicata dall'heap o dallo stack per l'espansione. La quantità totale di memoria virtuale disponibile per l'heap, lo stack e i dati di sistema è un altro 1 gigabyte. In totale, un processo utente ha accesso a 2 gigabyte di memoria virtuale.

La quantità totale di spazio cumulativo utilizzabile è soggetta a un limite amministrativo. Lo stesso vale per lo spazio in pila e per la quantità totale di spazio (che è la somma dello spazio del modulo di programma, dello spazio di memoria virtuale condivisa, dello spazio di memoria virtuale condivisa, dello spazio in pila e dello spazio in pila). I limiti a livello di modulo sono visualizzati utilizzando il comando list_default_cmd_limits, e modificati utilizzando il comando update_default_cmd_limits. I nuovi processi ereditano questi valori a livello di modulo. Dopo che il processo è stato avviato, i loro limiti possono essere visualizzati usando il comando list_process_cmd_limits e modificati usando il comando update_process_cmd_limits.

I valori limite a livello di processo vengono poi utilizzati per inizializzare i limiti utilizzati ogni volta che un programma viene eseguito. Una volta che un programma è in funzione, può richiamare i limiti s$get_current_cmd_limits e s$set_current_cmd_limits subroutines per recuperare o modificare i limiti per la durata della sua esecuzione. In questo modo, un programma può riservare più spazio per il suo stack rispetto al valore di default iniziale del sistema, o può aumentare la quantità di spazio di heap che è permesso utilizzare. Al contrario, se è preoccupato di utilizzare troppo spazio, forse a causa di un errore di codifica, può anche diminuire la quantità di spazio che può utilizzare.

Per ulteriori informazioni, leggere la descrizione dei comandi update_default_cmd_limits e bind.

 

© 2024 Stratus Technologies.