aiuto con i livelli di astrazione

rob84

Utente Attivo
321
4
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
 

airex

Utente Èlite
2,394
14
CPU
Intel Core2Duo E6750
Scheda Madre
Gigabyte GA-G33M-DS2R
HDD
1x80GB Sata2 + 1x320GB Sata2
RAM
2 x 2048MB DDR2 800MHz
GPU
NVidia 8800GT 1GB
Audio
Intel HDA
Monitor
LCD Samsung 19"
PSU
LC Power Green Power V2.0 - 550 Watt
OS
Linux Slackware64
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.
 

rob84

Utente Attivo
321
4
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)?
 

airex

Utente Èlite
2,394
14
CPU
Intel Core2Duo E6750
Scheda Madre
Gigabyte GA-G33M-DS2R
HDD
1x80GB Sata2 + 1x320GB Sata2
RAM
2 x 2048MB DDR2 800MHz
GPU
NVidia 8800GT 1GB
Audio
Intel HDA
Monitor
LCD Samsung 19"
PSU
LC Power Green Power V2.0 - 550 Watt
OS
Linux Slackware64
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)
 

rob84

Utente Attivo
321
4
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:
 

Black Imp

Utente Attivo
1,259
36
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.
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili