Torna indietro   Hardware Upgrade Forum > Software > Linux, Unix, OS alternativi

Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-09-2012, 14:04   #1
vittorio130881
 
Messaggi: n/a
Domanda su sistemi operativi linux e programmazione.....mi aiutate a capire!?

ciao a tutti
mi domandavo una cosa riguardante la programmazione e i sistemi operativi. un sistema operativo ha numerose funzioni, chiamate di sistema, che un programma può lanciare. il problema è questo. come può farlo? il s.o. è compilato quindi è codice macchina puro. come può un programma c++ interfacciarsi alle chiamate di sistema? cioè io chiamo una fork per esempio in un programma c++. esso viene compilato in codice macchina. ora come si interfaccia la mia fork col codice macchian del s.o.??
cosa sono ste chiamate di sistema? esiste nel s.o. anche una versione non compilata richiamabile da un programma c++?
sighhh confusooo
  Rispondi citando il messaggio o parte di esso
Old 19-09-2012, 15:45   #2
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Capisco, ti riferisci alle cosidette syscall.

Innanzitutto vorrei chiarire il fatto che pure una chiamata ad una funzione presente in una libreria esterna, è una chiamata ad un qualcosa di compilato e il codice sorgente non c'è anche in questo caso.

Detto questo, il fork che tu chiami è una chiamata alla libc, cioè una libreria "basilare" che tutti gli os hanno ( tranne qualche os particolare ).

E' il passo successivo, cioè come fa la libc a chiamare il sistema operativo che è "strano".

Ci sono vari metodi per eseguire questo genere di chiamate. Il più noto è l'uso di interrupt. In pratica, il sistema operativo riserva per sè stesso un vettore di interrupt ( cioè uno degli interrupt disponibili sull'architettura hardware ).

Esempio banale sotto linux:

Codice:
        mov	edx,len
	mov	ecx,msg
	mov	ebx,1
	mov	eax,4
	int	0x80
In questo caso abbiamo chiamato la funzione 4 ( la sys_write ) dell'interrupt 0x80. Quest'interrupt è quello che linux usa per "farsi chiamare".

Nei vari registri vengono stoccati i parametri da passare alla syscall. Quali registri usare e come usarli dipende dalle convenzioni stabilite da chi ha creato il sistema operativo.

Ovviamente la cpu sa dove trovare la tabella degli interrupt e nella 128-esima casella di tale tabella c'è memorizzato l'indirizzo a cui trasferire il controllo nel caso venga chiamato l'int 0x80 ( 0x80 = 128 in decimale ).

Se invece vai a guardare lo stesso codice, ma per architetture x86_64, troverai una cosa del genere:

Codice:
    mov    rax, 1
    mov    rdi, 1
    mov    rsi, msg
    mov    rdx, len
    syscall
Perchè? Semplicemente le cpu amd64 hanno introdotto l'istruzione syscall. C'è pure su x86 e si chiama sysenter, ma ci sono delle differenze.

Il punto è che il metodo qui è diverso, perchè si usano alcuni registri della cpu ( i model specific registers ) per conservare l'indirizzo a cui tasferire il controllo qualora venga fatta una syscall.

Ovviamente all'indirizzo in questione c'è una routine del sistema operativo che controlla il contenuto di eax/rax e quindi chiama le opportune subroutine per eseguire la syscall richiesta.

Ovviamente ho dato una spiegazione di massima, trascurando completamente il fatto che si passa da ring 3 a ring 0 e altre operazioni che vengono svolte durante l'invocazione delle syscall.

Esistono alcuni altri metodi per svolgere quest'operazione, ma sono decisamente poco usati o caduti in disuso. I principali metodi sono i due che ho citato sopra.

Ultima modifica di pabloski : 19-09-2012 alle 15:49.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2012, 16:16   #3
vittorio130881
 
Messaggi: n/a
c

grazie mille!
quindi in pratica uno deve sapere come è la funzione pre compilazione passargli i giusti parametri in base a questo e anche se non è codice sorgente ci pensa il compilatore a far funzionare il tutto.
ciao!
  Rispondi citando il messaggio o parte di esso
Old 19-09-2012, 16:27   #4
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da vittorio130881 Guarda i messaggi
grazie mille!
quindi in pratica uno deve sapere come è la funzione pre compilazione passargli i giusti parametri in base a questo e anche se non è codice sorgente ci pensa il compilatore a far funzionare il tutto.
ciao!
No aspè, stiamo parlando di chiamate a funzioni di libreria o a sistema operativo?

I due meccanismi sono profondamente diversi.

Il concetto di base è sempre quello di far un salto ad una locazione di memoria dove si sa che c'è l'entry point di una certa funzione.

Ma nel caso di librerie a collegamento dinamico, la cosa avviene in maniera molto diversa rispetto ad una syscall.

Gli esempi che ho riportato riguardano le chiamate a sistema operativo, cioè le syscall. In quel caso il compilatore ( assemblatore visto che gli esempi sono in assembly ) non fa assolutamente nulla per capire dove andare a pescare le funzioni da chiamare.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2012, 19:04   #5
vittorio130881
 
Messaggi: n/a
c

entrambe a questo punto
quindi nel caso di una chiamata a libreria è l'assemblatore che sa dove è la cella di memoria del codice macchina corrispondente all'entry point della funzione.
nel secondo caso syscal si fanno uso degli interrupt.
spero di aver capito a sto punto.....se no rinuncio

in entrambi i casi però mi confermi che bisogna conoscere come è fatta la funzione sia syscall che dll per sapere quali parametri passare e come è fatta (cioè bisogna capire come è il codice sorgente)

accetto pure spiegazioni in pvt se non vogliamo prolungare sta domanda che per molti immagino sia banale
  Rispondi citando il messaggio o parte di esso
Old 19-09-2012, 19:24   #6
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
A grandi linee il concetto è quello. L'unica differenza è che nel caso delle librerie, il metodo per trovare gli entry point delle funzioni sfrutta informazioni memorizzate sul file eseguibile stesso.

Nel caso delle syscall, c'è un indirizzo memorizzato o nella tabella degli interrupt o in registri chiamati MSR.

Riguardo i parametri, la funzione chiamata e il chiamante devono mettersi d'accordo sulle convenzioni da usare. Questa cosa è parte di quella che si chiama ABI. Per esempio in una classica chiamata a funzione C, si mettono nello stack i parametri da passare. La funzione va nello stack, li preleva e li usa.

Nell'architettura x86_64 invece si fa maggior uso dei registri ( perchè c'è ne sono fisicamente di più ) e lo stack si usa solo in determinati casi. Ma si tratta in entrambi i casi di convenzioni prestabilite, non c'è niente di obbligatorio e in teoria si può fare come si vuole ( ovviamente non rispettare le convenzioni standard porta a creare software incompatibile col resto del mondo ).

Comunque meglio continuare qui, magari qualcun'altro aggiungerà qualcosa o espliciterà meglio taluni concetti. Dopotutto non si tratta affatto di cose banali, soprattutto la parte che riguarda le syscall.

Ultima modifica di pabloski : 19-09-2012 alle 19:28.
pabloski è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Intel punta sul vetro: partnership con L...
L'acquisizione di ATI compie 20 anni: AM...
iPhone 18 Pro, Apple le prova tutte per ...
NVIDIA, Samsung, SK hynix e Broadcom: a ...
Sony rompe il silenzio: God of War Laufe...
iPhone Ultra, lancio ritardato per il pi...
Microsoft rafforza l'attivazione di Wind...
Galaxy S27 e S27+: Samsung starebbe test...
macOS più sicuro di Windows? Il n...
L'UE punta il dito contro TikTok: ecco c...
Qualcomm aumenterà i prezzi dei c...
TOP 12 Amazon weekend: al top una stampa...
Come sfruttare le offerte di Amazon per ...
Intelligenza artificiale: le Big Tech sa...
Xbox Game Pass, il mese di luglio 2026 s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v