Elaborazione a 31 bit - 31-bit computing

Nell'architettura del computer , i numeri interi a 31 bit , gli indirizzi di memoria o altre unità di dati sono quelli larghi 31 bit .

Nel 1983, IBM ha introdotto l'indirizzamento a 31 bit nell'architettura mainframe System/370- XA come aggiornamento dell'indirizzamento fisico e virtuale a 24 bit e fisico di transizione a 24 bit/ 26 bit , indirizzando i modelli precedenti. Questo miglioramento ha permesso agli spazi degli indirizzi di essere 128 volte più grandi, consentendo ai programmi di indirizzare la memoria sopra i 16  MB (denominati "above the line"). Sono stati inclusi il supporto per COBOL , FORTRAN e successivi su Linux/390 .

All'inizio degli anni '80 fu introdotto il Motorola 68012 ; aveva registri di dati e indirizzi a 32 bit, come faceva il Motorola 68010 , ma invece di fornire i 24 bit inferiori di un indirizzo sui pin di indirizzo, forniva tutto tranne il bit 30 sui pin di indirizzo.

Mainframe IBM a 31 bit

Architettura

Nelle architetture System/360 , oltre alle architetture 360/67 e System/370 , i registri generici erano larghi 32 bit, la macchina eseguiva operazioni aritmetiche a 32 bit e gli indirizzi erano sempre memorizzati in parole a 32 bit, quindi l'architettura è stata considerata a 32 bit , ma le macchine hanno ignorato i primi 8 bit dell'indirizzo con conseguente indirizzamento a 24 bit. Con l'estensione XA, solo il bit di ordine superiore (bit 0) nella parola è stato ignorato per l'indirizzamento. Un'eccezione è che le istruzioni di commutazione della modalità utilizzavano anche il bit 0. C'erano almeno due ragioni per cui IBM non ha implementato l'indirizzamento a 32 bit del 360/67

  1. Le istruzioni di controllo del ciclo BXH e BXLE hanno eseguito confronti con segno .
  2. Gran parte del software esistente utilizzava il bit 0 come indicatore di fine elenco.

Transizione

La transizione è stata complicata: i programmatori di linguaggio assembly, inclusi gli architetti e gli sviluppatori di sistemi operativi dell'IBM, hanno utilizzato per quasi vent'anni il byte di riserva nella parte superiore degli indirizzi per i flag. IBM ha scelto di fornire due forme di indirizzamento per ridurre al minimo il problema: se il bit più significativo (bit 0) di un indirizzo a 32 bit era attivo, i 31 bit successivi venivano interpretati come indirizzo virtuale. Se il bit più significativo era disattivato, solo i 24 bit inferiori venivano trattati come indirizzo virtuale (proprio come con i sistemi pre-XA). Pertanto, i programmi potrebbero continuare a utilizzare i sette bit di ordine inferiore del byte superiore per altri scopi, purché abbiano lasciato il bit superiore disattivato. Gli unici programmi che richiedevano modifiche erano quelli che impostavano il bit più in alto (più a sinistra) di una parola contenente un indirizzo. Ciò ha influito anche sui confronti degli indirizzi: il bit più a sinistra di una parola viene anche interpretato come bit di segno nell'aritmetica del complemento a 2, indicando un numero negativo se il bit 0 è attivo. I programmi che utilizzano istruzioni di confronto aritmetico con segno potrebbero ottenere risultati invertiti. Due indirizzi equivalenti potrebbero essere confrontati come non uguali se uno di essi avesse il bit di segno attivato anche se i bit rimanenti fossero identici. La maggior parte di questo era invisibile ai programmatori che utilizzavano linguaggi di alto livello come COBOL o FORTRAN e IBM ha aiutato la transizione con hardware dual mode per un periodo di tempo.

Alcune istruzioni macchina in questa modalità di indirizzamento a 31 bit alterano il bit della modalità di indirizzamento come possibile effetto collaterale intenzionale. Ad esempio, le istruzioni di chiamata della subroutine originale BAL, Branch and Link, e il suo equivalente registro-registro, BALR, Branch and Link Register, memorizzano alcune informazioni di stato, il codice della lunghezza dell'istruzione, il codice della condizione e la maschera del programma, nel byte superiore dell'indirizzo di ritorno. È stata aggiunta un'istruzione BAS, Branch and Save, per consentire indirizzi di ritorno a 31 bit. BAS, e il suo equivalente registro-registro, BASR, Branch and Save Register, faceva parte del set di istruzioni del System/360 Model 67 , che era l'unico modello System/360 a consentire indirizzi più lunghi di 24 bit. Queste istruzioni sono state mantenute, ma sono state modificate ed estese per l'indirizzamento a 31 bit.

Ulteriori istruzioni a supporto dell'indirizzamento a 24/31 bit includono due nuove istruzioni di chiamata/ritorno registro-registro che effettuano anche un cambio di modalità di indirizzamento (es. Branch and Save and Set Mode, BASSM, la versione a 24/31 bit di una chiamata in cui il viene salvato l'indirizzo di collegamento che include la modalità e viene portato un ramo a un indirizzo in una modalità eventualmente diversa, e BSM, Branch and Set Mode, la versione a 24/31 bit di un ritorno, dove il ritorno è direttamente all'indirizzo di collegamento salvato in precedenza e nella sua modalità precedente). Presi insieme, BASSM e BSM consentono chiamate a 24 bit a 31 bit (e ritorno a 24 bit), chiamate a 31 bit a 24 bit (e ritorno a 31 bit), chiamate a 24 bit a 24 bit ( e tornare a 24 bit) e chiamate a 31 bit a 31 bit (e tornare a 31 bit).

Come BALR 14,15 (la forma di chiamata a soli 24 bit), BASSM viene utilizzato come BASSM 14,15, in cui l'indirizzo e la modalità di collegamento vengono salvati nel registro 14 e viene preso un ramo all'indirizzo e alla modalità della subroutine specificato nel registro 15. In modo simile a BCR 15,14 (la forma a soli 24 bit di un ritorno incondizionato), BSM viene utilizzato come BSM 0,14, dove 0 indica che la modalità corrente non è stata salvata (il programma sta uscendo il sottoprogramma, comunque), e si deve dare un ritorno al chiamante all'indirizzo e modalità specificati nel registro 14. Fare riferimento alla pubblicazione IBM MVS/Extended Architecture System Programming Library: 31-Bit Addressing, GC28-1158-1, per esempi completi sull'uso di BAS, BASR, BASSM e BSM, in particolare, pp. 29–30.

370/architettura ESA

Negli anni '90 IBM ha introdotto l'architettura 370/ESA (in seguito denominata 390/ESA e infine ESA/390 o System/390, in breve S/390), completando l'evoluzione all'indirizzamento virtuale completo a 31 bit e mantenendo questo flag di modalità di indirizzamento. Queste architetture successive consentono più di 2 GB di memoria fisica e consentono più spazi di indirizzi simultanei fino a 2 GB di dimensione ciascuno. Alla metà del 2006 c'erano troppi programmi indebitamente vincolati da questa modalità di indirizzamento multiplo a 31 bit.

z/Architettura

IBM ha rotto la barriera di indirizzamento lineare di 2 GB ("la barra") nel 2000 con l'introduzione del primo sistema z/Architecture a 64 bit , l'IBM zSeries Model 900. A differenza della transizione XA, z/Architecture non riserva un bit superiore per identificare il codice precedente. z/Architecture mantiene la compatibilità con il codice a 24 e 31 bit, anche il codice più vecchio in esecuzione contemporaneamente al codice a 64 bit più recente.

Linux/390

Dal momento che Linux/390 è stato rilasciato per la prima volta per l'hardware di indirizzamento dati a 32 bit/31 bit esistente nel 1999, anche le applicazioni Linux mainframe iniziali compilate in modalità pre-z/Architecture sono limitate all'indirizzamento a 31 bit. Questa limitazione è scomparsa con l'hardware a 64 bit, Linux a 64 bit su IBM Z e le applicazioni Linux a 64 bit. Le distribuzioni Linux a 64 bit eseguono ancora programmi di indirizzamento dati a 32 bit/31 bit. L'indirizzamento a 31 bit di IBM consente al codice a 31 bit di utilizzare memoria aggiuntiva. Tuttavia, in ogni istante, in ogni spazio di indirizzi funzionante è presente un massimo di 2 GB. Per Linux non a 64 bit su processori con indirizzamento a 31 bit, è possibile assegnare la memoria sopra la barra di 2 GB come disco RAM. Il supporto per il kernel Linux a 31 bit (non per lo spazio utente) è stato rimosso nella versione 4.1.

Rubino & Smalltalk

Gli interpreti per i linguaggi Ruby e Smalltalk usano il bit più basso per dire se un valore è un numero intero unboxed o meno. Ciò significa che su macchine a 32 bit (o macchine a 16 bit con puntatori a 32 bit), gli interi a 31 bit sono unboxed. In caso di overflow, il risultato viene inserito in un oggetto in scatola, il che significa che deve essere allocato e raccolto. Pertanto, se hai valori a 32 bit che non rientrano nel formato con segno a 31 bit, saranno molto inefficienti in quegli interpreti. Lo stesso vale per gli interi unboxed a 63 bit su computer a 64 bit. Disegni simili possono essere trovati in LISP e in alcuni degli altri linguaggi le cui variabili possono assumere valori di qualsiasi tipo. In alcuni casi, c'era il supporto hardware per questo tipo di design: vedi Architettura con tag e macchina Lisp .

Riferimenti