Che cos'è una chiamata di sistema in Linux e come funziona con gli esempi

What Is System Call Linux



Una chiamata di sistema è una funzione che consente a un processo di comunicare con il kernel Linux. È solo un modo programmatico per un programma per computer di ordinare una struttura dal kernel del sistema operativo. Le chiamate di sistema espongono le risorse del sistema operativo ai programmi utente tramite un'API (Application Programming Interface). Le chiamate di sistema possono accedere solo al framework del kernel. Le chiamate di sistema sono necessarie per tutti i servizi che richiedono risorse.

Il kernel Linux è un software proprietario che carica e opera sul dispositivo nella fase meno potenziale. Il suo compito è organizzare tutto ciò che accade sulla macchina, dalla tastiera, dall'unità disco e dagli eventi di rete, fino a fornire intervalli di tempo per l'esecuzione simultanea di diversi programmi. La separazione di software e hardware crea una bolla sicura che migliora la protezione e l'affidabilità. Le applicazioni non privilegiate non sono in grado di raggiungere lo spazio di archiviazione di altri programmi e, se uno fallisce, il kernel sospende il processo in modo che non danneggi l'intero sistema.







Involucro sottile di wafer:

Le chiamate di sistema Linux non vengono rese esplicitamente al kernel in alcuni programmi. Quasi tutti i programmi utilizzano la libreria C di base e offrono un wrapper leggero ma essenziale per le chiamate di sistema Linux. Il repository fornisce quindi la chiamata della macchina Linux di accompagnamento dopo essersi assicurati che i parametri della funzionalità siano tradotti nei registri del processore corretti. Ogni volta che il wrapper riceve dati dalla chiamata di sistema, li analizza e li fornisce al programma in modo chiaro. Qualsiasi operazione interattiva con la macchina in un programma viene infine convertita in una chiamata di sistema. Quindi, diamo un'occhiata ad alcuni di loro. C'è una lunga lista di chiamate di sistema Linux che possiamo usare nel nostro sistema Linux. Ecco l'elenco di alcune chiamate di sistema Linux comuni e maggiormente utilizzate.



  • Aprire
  • Chiudere
  • Esecutivo
  • Scrivi
  • Leggi
  • Lseek
  • Selezionare

Discutiamo alcune delle chiamate di sistema Linux che utilizzano il linguaggio C nel nostro articolo per metterlo in pratica.



Chiamata di sistema aperta:

Possiamo usare la chiamata di sistema Open nella nostra distribuzione Linux per aprire rapidamente il documento, che specificheremo nel nostro codice del linguaggio C. Avvia prima il terminale di comando. Puoi usare la scorciatoia Ctrl+Alt+T. Supponiamo di avere un file di testo test.txt nella directory home e contenga del contenuto al suo interno. Quindi, all'inizio, devi creare un nuovo nome file di tipo C new.c nel terminale tramite nano editor. Pertanto, prova le semplici istruzioni nano sottostanti.





$nanonew.c

Ora è stato lanciato l'editor Nano. Digita al suo interno il codice mostrato di seguito. Abbiamo due descrittori di file nel codice. Entrambi i file possono essere aperti utilizzando la chiamata di sistema aperta. Il primo descrittore contiene una chiamata di lettura e il secondo contiene la funzione di scrittura. La prima chiamata aperta è l'apertura del file di testo test.txt e il salvataggio del suo contenuto nel descrittore di file fd. La seconda chiamata di sistema aperta sta creando un file denominato target. La destinazione del documento è stata rimborsata a un descrittore di file fd1. L'istruzione di scrittura viene utilizzata per trascrivere i byte di dati nel buffer. Tocca Ctrl+S per salvare il codice e premi il tasto di scelta rapida Ctrl+X per chiudere il file.



Esegui l'istruzione di compilazione gcc per compilare questo codice C.

$gccnew.c

Eseguiamo il codice utilizzando la semplice query a.out nella shell come segue:

$./a.out

I dati di output sono stati trasmessi alla destinazione del file. Controlliamo il file di destinazione utilizzando la query cat. La schermata di output mostra i dati di 20 caratteri nel file di destinazione.

$gattoobbiettivo

Chiamata di sistema esecutivo:

La chiamata di sistema exec viene eliminata per eseguire un file che è attualmente in fase di elaborazione. Il precedente file eseguibile viene sostituito e il file corrente viene utilizzato ogni volta che viene chiamato exec. Usando una chiamata di sistema exec, possiamo presumere che così facendo si sovrascriverà il vecchio documento o applicazione nel ciclo con uno nuovo. Il nuovo software viene utilizzato per sovrascrivere il materiale dell'intero processo. Il documento il cui titolo è fornito nell'istruzione ogni volta che si invoca exec() viene sostituito dalla sezione delle informazioni utente che esegue la chiamata di sistema exec() (). Quindi apri il terminale di comando e, usando l'editor nano, crea un nuovo file di tipo C come segue:

$nanoexp.c

L'editor è stato aperto ora. Scrivi al suo interno l'intero codice del linguaggio C sottostante. Ci sono tre librerie principali incluse in esso. Successivamente, la funzione principale è stata istanziata. L'istruzione print ha mostrato i dati della stringa e l'ID di processo del file exp.c. La funzione getpid() è stata utilizzata per questo scopo. Quindi abbiamo un array di tipi di caratteri con alcuni valori al suo interno. La chiamata di sistema exec è stata utilizzata per prendere come argomento il nome del file e l'array di una riga sopra. Ora il file hello.c verrà elaborato. Dopodiché, arriva un'altra istruzione print, ma non verrà mai eseguita. Premi Ctrl+S per salvare questo file. Premi Ctrl+X per uscire.

Ora è il momento di creare un altro file c, hello.c utilizzando l'editor nano. Usa la seguente query nella shell per farlo.

$nanoCiao C

Scrivi il codice qui sotto in esso. Questo codice contiene due istruzioni print nella funzione principale. Il primo sta solo stampando una stringa data in esso, e il secondo sta stampando la stringa durante il recupero dell'ID di processo del file attualmente utilizzato, che è hello.c.

Compiliamo entrambi i file uno dopo l'altro usando gcc.

$gcc–o exp exp.c

$gcc–O ciao ciao.c

Quando eseguiamo il file exp.c, emetterà la prima istruzione print dal file exp.c ed entrambe le righe di stampa dal file hello.c.

$./esp

Conclusione:

Abbiamo elaborato l'intero concetto di chiamate di sistema Linux e come possono essere utilizzate nel tuo sistema Linux. Abbiamo usato Ubuntu 20.04 durante l'implementazione di questo concetto.