Guida [miniGUIDA]Syscall a prova di n00b + storiella

Stato
Discussione chiusa ad ulteriori risposte.

syscall

Utente Emerald
21 Settembre 2013
683
43
581
475
Ultima modifica da un moderatore:
Ciao ragazzi (basta co sto "salve popolo di inforge," cambiamo ogni tanto!),

voglio introdurvi un argomento nello specifico "al volo", poiche' mi e' venuto in mente vivendo una determininata situazione che adesso vi raccontero' nell'introduzione, lo abbiamo visto gia' durante una guida di sistemi operativi comunque non ricordo quanto l'avessimo approfondito, ma ancor meno di ora sicuro, quindi diciamo qualcosa in merito quanto basta almeno per capire qualcosa all'inizio!

Comunque.. vi racconto:
Giorni fa in azienda e' arrivata una bella signora sulla quarantina per un colloquio di lavoro, io non centravo nulla, ero li vicino la macchinetta del caffe', in pausa, ma c'era la porta della sala colloqui semi aperta... incuriosito e leggermente assuefatto dai sui ricci e lunghi capelli rossi che si intravedevano dalla fessura (chissa' che c'era in quel cacchio di caffe' ma vabeh), decido di bussare e di entrare del tutto in stanza per assistere al colloquio.. In faccia era orrenda, ma non potevo piu' andarmene, LOL!

Bene, mi metto dietro la scrivania con altri colleghi e questa parlava, parlava, parlava, ad un certo punto incomincia ad uscire dalla borsetta una carpettina di quelle di cartone bruttissime, avete presente penso, la apre ed incomincia a tirar fuori certificazioni di ogni tipo, lettere di referenze, attestati di corsi di programmazione e tanti altri documenti e "carte" di vario tipo.

In genere (da noi) questo si fa durante un secondo colloquio, quello tecnico, in cui si "mostrano" appunto e si attestano formalmente le conoscenze specifiche di cui si parlera' o si e' gia' discusso, anche se noi le avevamo gia' in quanto in genere si allegano al curriculum, ma viste le innumerevoli certificazioni della signora in merito a corsi di programmazione che avrebbero dovuto essere "seri", il mio collega, un po' bastardo, ma ha fatto bene in quel caso, ha iniziato a mettere in difficolta' la signora prendendo un foglio e scrivendo del codice..
..che non vi riporto tutto paro paro ovviamente, anche perche' era un po' lunghetto, ma solo un pezzettino che e' il "cuore" di quello che diremo a breve e non mi interessa concentrarmi su altro, anche se ci sarebbe da parlare, ma magari lo faremo piu' avanti! Prima dobbiamo assimilare tutti i concetti visti sulle guide di sistemi operativi!

Anyway.. il pezzettino di codice che volevo mostrarvi era questo:

Codice:
    (... qualcosa prima)
   movl $4, %eax
   movl $1, %ebx
   movl $t, %ecx   
   movl $6, %edx  
    (qualcosa dopo...)

E' assembly (in sintassi at&t a voler essere precisi, non intel eh, ma non ci interessa piu' di tanto comunque), ed in questo caso si stanno compiendo delle operazioni specifiche, ovvero si sta scrivendo all'interno di alcuni registri della nostra amata CPU, ma perche? cosa vuole? perche' ste robe? che e'?

Una cosa alla volta, tranquilli, vediamo un attimo che e' sta roba e di capirci di piu':

- il secondo registro, ebx contiene l'stdin (Canali standard - Wikipedia)
- il terzo, un dato indirizzo di partenza di una data stringa (che stava sopra al codice, insieme ad altro ma non ce ne frega niente);
- il quarto conterra' invece il numero dei caratteri contenuti in quella data stringa (che per la cronaca era 'prova\n' comunque), sono sei in quanto il carattere invio (\n) si conta pure eh!

Bene:

- il primo invece contiene 4, che e' un valore specifico.. ma specifico di che cosa? Il valore specifico di una syscall! (sarebbe la sys_write in questo caso, che per intenderci, per gli amanti di C, corrisponde alla semplice funzione printf, ma che comunque fa uso della syscall write() per portare a termine il proprio compito, appunto di stamparci qualcosa (a video ovviamente)).

Ma cosa sono quindi ste syscall? Perche' bisogna usarle quando si usano linguaggi che supportano appunto la programmazione di sistema?

Ecco.. fu questa la domanda che feci alla signora, ed e' tutta colpa di inforge, mauhauah, perche' non appena lessi la syscall in codice su quel fogliettino pensai al mio nick sul forum, *gh*, e quindi mi venne spontaneo romperle un po' le scatole e chiederle cosa indicasse nello specifico quella serie di istruzioni e sopratutto il perche' si usano.

Oh, questa mi guarda un pochino imbarazzata, anche perche' non aveva ancora sentito la mia voce secsi, e mi fa:

<< Beh, vengono usate per gestire il file, il controllo dei processi e tanto altro>>

E io: <<si ok, perche' c'e' bisogno di usarle? perche' hanno ragione di esistere all'interno di un sistema operativo le syscall? Mi dica qualcosa in merito, me le spieghi a parole sue, non le singole syscall che conosce e sa "applicare", ma proprio in generale, come se dovesse spiegarlo ad un gruppo di aspiranti programmatori e dire: bene oggi parleremo di syscall!..>>

oh..
Non riesco ancora a spiegarmi, dopo giorni come abbia fatto sta qua a non saper rispondere in maniera precisa e con due parole ad una roba simile.. ha detto di tutto e di piu' pur di girare attorno al discorso senza mai toccare il punto della questione, ovvero cosa sono ste benedette syscall e perche' esistono!

Bon alla fine la mia pausa era conclusa e me ne son tornato in laboratorio, di questa poi non ho saputo piu' nulla, ma vabeh.

Quello che voglio farvi capire e' che non importa quante lauree abbiate, quanti corsi abbiate seguito e quante cose tecniche sapete, importa soprattutto anche che conosciate bene la teoria e il funzionamento di quello che sta sotto ogni singola cosa che fate (e se la fate tanto per fare e non ci mettete passione le cose scappano via dalla mente), non basta farla e basta, soprattutto per chi ragiona in chiave "security" deve conoscere quello che usa e che ha davanti, altrimenti come fa.. pertanto adesso vediamo noi qui su inforge, in parole povere ed a modo nostro, cosa sono ste syscall, in modo da linkare poi questo post anche a quello sulla guida di sistemi operativi in cui si accennava ad esse.

Ok..
Diciamo che la CPU compie molte operazioni, e questo e' risaputo, ma lavora principalmente in due modalita':

- Una e' la kernel mode;
- e l'altra e' la user mode;

C'e' un registro di stato della CPU, chiamato PSW (Registro di stato - Wikipedia), che ha il compito di controllare le modalita' e, quando e' in esecuzione la kernel mode, puo' praticamente fare quello che vuole... puo' eseguire qualsiasi istruzione presente nel proprio set ed usare ogni genere di caratteristica dell'hardware!

Ovviamente il sistema operativo viene eseguito con questa modalita' altrimenti non avrebbe pieno accesso all'hardware. Invece, i programmi utenti vengono eseguiti nell'altra modalita', la user mode, ed e' proprio per questo motivo che si usano le chiamate di sistema quando si usano alcuni linguaggi, poiche' in user mode si ha accesso solo ad una parte del sistema di istruzioni e si puo' accedere solo ad una parte delle risorse messe a disposizione dall'hardware.

Al fine quindi di ottenere dei "servizi" dal sistema operativo, un programma fa una syscall, che non fa altro che eseguire un'istruzione chiamata TRAP che ha il compito di switchare da modalita' utente alla modalita' kernel e passa al sistema operativo!

A questo punto il sistema comprende la richiesta del dato processo (dando un'occhiata ai parametri che gli si son passati tramite la syscall ovviamente) e successivamente esegue la chiamata di sistema per poi restituire il controllo all'istruzione successiva alla chiamata.
Per i coderz: si fa una chiamata di procedura "speciale" con la differenza che le syscall fanno parte del kernel, mentre le chiamate a procedura no!

Ogni chiamata di sistema e' definita da un nome e da dei parametri e ritorna un codice di stato.
Ovviamente abbiamo syscall praticamente per fare di tutto, vi lascio qualche nota e qualche link da leggere e capire, magari in futuro vedremo le piu' usate nel dettaglio, soprattutto quelle legate ai processi che son molto importanti, per ora basta solo sapere cosa sono e perche' si usano!

Ricordo che e' utile andare a rileggersi le guide sul sistema operativo in modo da dare un'utilita' maggiore a questo post! :D

- http://lia.deis.unibo.it/Courses/RetiLA/materiale/extra/Unix_file.pdf
- Esercitazione: System call per la gestione dei processi, Antonino Mazzeo « Sistemi Operativi « Facoltà di Ingegneria « Federica e-Learning (processi - audio+slide *,*)
- SOCKETS - CHIAMATE DI SISTEMA (socket)
- http://sole.dimi.uniud.it/~ivan.scagnetto/LABSO3/lezione16.pdf (lettura carina)
- Ubuntu Manpage: intro - Introduzione alle chiamate di sistema
- Registri della CPU

Ciao, ciao o/
 
  • Mi piace
Reazioni: Asahi e xXIntelXx
Ultima modifica:
È stato un piacere fare il discorso delle certificazioni a voce con te l altro giorno su ts.
Si parlava per l appunto di questo e sono molto contento che tu l abbia esposto alla community!
In ogni caso bella guida, come sempre anche se potrebbe essere approfondita per i più nerd brufolosi (per me insomma :asd:) perché così è molto restrittiva..
Questo argomento lo affrontai qualche anno fa e Wikipedia riuscì a chiarire del tutto le mie idee, o quasi, con una semplice immagine che spiegava come le applicazioni utente per 'comunicare' con l hardware vero e proprio debbano chiamare determinate funzioni di sistema (le sys call per l appunto) in modo che il programmatore abbia un livello di astrazione più alto e che non possa 'fare ciò che gli pare', rischiando di danneggiare il sistema o peggio ancora l hardware!
Sarebbe molto interessante una guida approfondita su questo argomento visto che sono molto curioso. :)
Inoltre, per chiudere, vorrei precisare che questo metodo di 'proteggere' il programmatore da fare eventuali sbagli con cose che non dovrebbe toccare si trova anche a livelli molto più alti, nella programmazione ad oggetti addirittura esiste un vero e proprio criterio detto incapsulamento che per certi versi assomiglia alla CPU mode che l OS gestisce, anche se è tutto un altro mondo :p
Grazie mille!

Inviato dal mio OptimusX4HD con Tapatalk 4
 
  • Mi piace
Reazioni: syscall
Stato
Discussione chiusa ad ulteriori risposte.