aiuto con i livelli di astrazione

  • Autore discussione Autore discussione rob84
  • Data d'inizio Data d'inizio
Pubblicità

rob84

Utente Attivo
Messaggi
321
Reazioni
4
Punteggio
39
Ciao a tutti
mi sto documentando sull' interazione tra hardware e software e non riesco a capire una cosa:
il sistema operativo (o meglio il kernel del SO) offre dei servizi ai programmi applicativi ,preoccupandosi di "nascondere" l' architettura hardware sottostante. In parole povere opera come un traduttore il codice del programma e il linguaggio macchina, è cosi o no?

Cio implica che i programmi siano "scritti" con le sole funzioni che il kernel mette a disposizione?
Lo so che si utilizzano i compilatori per scivere i prog, volevo solamente capire se un prog compilato è in linguaggio macchina o solo in un linguaggio che il kernel traduce in linguaggio macchina
 
i programmi compilati sono in genere in linguaggio macchina ma possono dialogare con l'hardware e tra di loro solo tramite opportune funzioni (syscall) messe a disposizione dal sistema operativo.
 
ma allora un file eseguibile, tipo cpuz ,come fa a girare su due pc diversi per es uno con un amd e uno con un intel visto che i set di istruzioni dei due proc sono diversi?

è possibile che quando un programma viene caricato nella ram venga compilato dal SO per poi essere eseguito?
oppure viene solo interpretato(sempre dal so)?
 
Il set di istruzioni base è lo stesso e quindi tutti i programmi basati su questo sottoinsieme comune non hanno problemi.

In caso vengano usate istruzioni non presenti/supportate da una cpu verrà generato un errore, per evitare questo problema i programmi/librerie altamente ottimizzate e specifiche per una data piattaforma hanno chiaramente indicato nella documentazione su cosa vanno e cosa no.

Casi di pseudo-compilazione a priori e di interpretazione a runtime esistono, ma in genere nonè l'OS ad eseguire l'interpretazione, tale compito è a carico di una Virtual Machine (es. programmi Java eseguiti tramite traduzione a carico della JVM)
 
si, infatti mi sono accorto di aver scritto una ca***ta, perchè guardando su wikipedia ho trovato che sia intel che amd sono cosiddetti "ibm compatibili", infatti sono entrambi x86 quindi un programma compilato che risiede in ram puo essere eseguito tranquillamente da entrambi i proci grazie a questa loro compatibilità.
Ti ringrazio molto, mi sono tolto molti dubbi:ok:
 
rob84 ha detto:
Ciao a tutti
mi sto documentando sull' interazione tra hardware e software e non riesco a capire una cosa:
il sistema operativo (o meglio il kernel del SO) offre dei servizi ai programmi applicativi ,preoccupandosi di "nascondere" l' architettura hardware sottostante. In parole povere opera come un traduttore il codice del programma e il linguaggio macchina, è cosi o no?

Cio implica che i programmi siano "scritti" con le sole funzioni che il kernel mette a disposizione?
Lo so che si utilizzano i compilatori per scivere i prog, volevo solamente capire se un prog compilato è in linguaggio macchina o solo in un linguaggio che il kernel traduce in linguaggio macchina

non è esattamente il kernel che legge direttamente le istruzioni. il kernel gestisce la memoria virtuale per ogni processo, gestisce le risorse che i processi usano, e decide quale processo deve andare in esecuzione. i programmi vengono tradotti dal compilatore in linguaggio macchina. il kernel fa in modo che un registro punti alla riga contenente l'operazione successiva ed è il processore a riconoscere quell'istruzione ed eseguirla. infatti il compilatore produce un eseguibile diverso non solo in base al sistema operativo ma anche all'architettura, cioè al processore che deve eseguire il programma. pensa per es. ai programmi per windows che usano o non usano le sse versione N. vuol dire che sono stati compilati per tradurre le istruzioni per es. dal C al linguaggio macchina 'aumentato' delle istruzioni sseN. se esegui quel programma sotto windows ma la tua cpu non riconosce quelle istruzioni non funziona! spero di essermi spiegato :)

nel caso di cpuz, questo funziona sia su amd che intel perchè utilizza istruzioni che riconoscono entrambi - come hai letto anche tu e come sta dicendo airex - ma se per es. usi linux e compili un programma attivando le 3dnow! non puoi eseguirlo su intel. viceversa quando compili con delle sse che non vengono riconosciute da certe cpu amd.
 
Pubblicità
Pubblicità
Indietro
Top