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

Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
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


Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
La HP DeskJet 4220e a soli 39€: un po' c...
Muore il traffico dei siti web per colpa...
Auto giapponesi, aria di festa a Tokyo: ...
In arrivo un nuovo mega parco fotovoltai...
LEFANT M2 o M2 Pro? I due robot aspirapo...
Brave Browser blocca Recall: niente pi&u...
Lumma Stealer riparte dopo il maxi-blitz...
Il CEO di OpenAI avverte le banche di un...
Un computer quantistico da 133 qubit ha ...
SMAU Milano 2025: a novembre 180 startup...
Dreame domina il mercato italiano dei ro...
Microsoft aggiorna Windows 10 con KB5062...
Razer Cobra Hyperspeed: la soluzione pi&...
Synology annuncia il nuovo DS225+ con la...
L'UE orientata a ritirare la maxi multa ...
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: 14:38.


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