Esiste un'interfaccia di codice byte standard per processori x86 / x64?

1

Credo che la domanda riguardi l'architettura del processore basata su PC (Windows, non Macintosh) e l'uso aperto. Esiste una "Interfaccia standard" (codice byte) per macchine PC, oltre alle ottimizzazioni specifiche del processore, disponibile per il pubblico e può essere utilizzata per disegni e operazioni (generali) del kernel personalizzato e per lo sviluppo del sistema operativo. Mi piacerebbe anche andare fino a chiedere se le macchine basate su PC abbiano anche interfacce standard per i driver. Il driver design è specifico per il sistema operativo o basato esclusivamente su una macchina compatibile (che suppongo possa essere x8086 o x64, heap, stack e consumo di memoria). Spero che questo sia il posto giusto per porre questa domanda. Non mi preoccupo tanto di .asm o .o a questo punto, quanto di grafica, suono, porte e SO sottostanti. A meno che Windows non rilasci un'interfaccia Universal Assembler and Compiler (byte specifico per codice), ma da quello che ho letto, penso che sia diverso su macchine diverse e si basa in gran parte sul kernel utilizzato. Per favore correggilo se è sbagliato.

    
posta jason moore 04.09.2016 - 13:05
fonte

4 risposte

2

C'è ma potrebbe non essere quello che tu immagini che sia. C'è un punto in cui terminano le astrazioni del software. L '"interfaccia standard" è descritta dai fogli dati di Intel per il processore. Indica il comportamento del chip ed è in effetti un codice byte. La cosa è programmata impostando un pezzo di memoria con le istruzioni. Un'istruzione può essere un byte che indica cosa fare seguito da un numero di operandi.

Questo è ciò con cui uno sviluppatore del kernel del sistema operativo deve lavorare. Posso pensare a una serie di motivi per cui non esiste un generico "SDK del sistema operativo".

  • Il mercato per un prodotto di questo tipo sarebbe molto piccolo;
  • l'astrazione e la generalizzazione sono costose e stiamo parlando di un livello al quale ogni tick tick conta;
  • un SDK del sistema operativo sarebbe fondamentalmente un kernel del sistema operativo.

È stato fatto attenzione a te (anche se non per il pubblico in generale), quando Microsoft ha iniziato a sviluppare Windows NT iniziando con "facendo bene" e avevano questa cosa che chiamavano HAL, il livello di astrazione dell'hardware. Hanno anche isolato completamente l'hardware video dal sistema operativo. Era perfetto, a parte un piccolo problema, si comportava miseramente. Così hanno presto iniziato a tagliare alcuni angoli e si sono allontanati dal design pulito per renderlo utilizzabile.

Per quanto riguarda i driver, quelli sono specifici per OS da un lato e l'altro è troppo vario e specifico per un layer comune che sia di qualche utilità.

    
risposta data 04.09.2016 - 17:10
fonte
2

Is there a standard byte code interface for x86/x64 processors?

Sì, il termine che stai cercando per quanto riguarda il codice byte dei processori (hardware) è chiamato:

  • Architecture Set Architecture , comunemente abbreviato in ISA, che definisce come il processore funziona su tutti i chip della linea di produzione, da vecchio a nuovo , lento a veloce (anche se ci sono sempre le estensioni del set di istruzioni da occuparsi di ogni nuova generazione di chip).

I would also like to go as far to ask if PC based machines have standard interfaces for drivers as well.

Sì, Windows OS ha un ampio set di interfacce standard per i driver a vari livelli di astrazione. Windows e amp; linux differisce nelle interfacce dei driver, quindi un driver per uno non cadrà nell'altro.

Is driver design OS specific or based solely on a compatible machine (which I would guess 'could' be x8086 or x64, heap, stack, and memory consumption)

Sì, ogni sistema operativo definisce un altro livello di interfaccia chiamato:

L'ABI è piuttosto ampio e copre cose come chiamate alle convenzioni , chiamate al sistema operativo e una miriade di altre cose.

Ad esempio, Windows e Linux definiscono ABI diversi, in particolare, ad esempio, la convenzione di chiamata è diversa anche per la stessa generazione di processore (ad esempio x64). La convenzione di chiamata impone come vengono passati i parametri; come vengono restituiti i valori; come vengono creati i frame di stack, liquidati su eccezioni, ecc ... Altre parti dell'ABI definiscono come si trovano le funzioni di libreria (ad esempio nelle DLL); come sono formattate le immagini eseguibili binari, ecc.

Oltre all'ABI, i sistemi operativi definiscono i framework, in genere, delle chiamate di sistema e di una libreria (come Dinamicamente collegato Librerie in ciò che viene chiamato:

risposta data 06.09.2016 - 01:18
fonte
0

Is there a "Standard Interface" (byte-code) for PC machines.

No, non c'è.

Ovviamente, ci sono degli standard bytecode come i bytecode CLR e Java, ma questi non sono adatti all'implementazione del kernel del dispositivo o del driver di periferica. (So che le persone hanno provato ...)

    
risposta data 04.09.2016 - 16:19
fonte
0

Firmware e hardware (pensa BIOS e IBM-PC )

I codici di istruzione in un programma compilato devono, ovviamente, corrispondere ai codici di istruzione del processore. Ma non è abbastanza. Il programma potrebbe voler interagire con hardware, come display, altoparlanti, rete, tastiera, ecc. Hanno specifici indirizzi I / O nell'hardware. Il programma deve inviare gli schemi di bit giusti agli indirizzi corretti. Se c'è un sistema operativo o un BIOS, il programma può semplicemente chiamare l'API appropriata. Quindi il sistema operativo, il BIOS oi driver interagiranno con l'hardware.

Un programma compilato presuppone quindi non solo un processore, ma anche l'hardware, il firmware o il sistema operativo su cui verrà eseguito.

Esistono standard per l'API del sistema operativo (ad esempio Posix, Win32, Elf), per l'API del firmware (ad es. BIOS, UEFI) e per l'hardware (ad esempio <? >).

    
risposta data 06.09.2016 - 04:45
fonte

Leggi altre domande sui tag