2015-12-10 18 views
6

Esistono pagine man (2) per le chiamate di sistema, ma queste descrivono il comportamento della libreria C (glibc) che si trova in cima alle chiamate di sistema. La API di sistema RAI/ABI è documentata da qualche parte (oltre a UseTheSourceLuke)? Ho visto qualche menzione delle differenze tra kernel/libc nelle pagine man, ma non ho avuto la sensazione che sia una priorità assoluta documentare queste differenze.Esiste una documentazione di API di sistema Linux/documentazione ABI

Ciò che intendo dire è: la libreria C è considerata come API Linux stabile/documentata da POLICY e la chiamata di sistema API/ABI del kernel è considerata instabile (potrebbe cambiare) e quindi non documentata di proposito o bassa priorità?

Quindi gli sviluppatori del kernel che modificano una chiamata di sistema creano soluzioni alternative in glibc? E allora l'altra libc?

Posso trovare discussioni storiche su questo argomento?

Edit: Quindi l'ABI è stabile, e anche il comportamento dei syscalls, ma non sono documentati dagli sviluppatori del kernel. Glibc li sta invece documentando (con le sue aggiunte/modifiche). Corretta?

+1

re: _historical discussion_. Potresti trovare qualcosa *** [qui] (https://www.safaribooksonline.com/library/view/linux-system-programming/9781449341527/ch01.html) ***. Nessuna profondità, ma più una panoramica di argomenti, tra cui API/ABI. – ryyker

+0

@ryyker good find –

+0

Se si sta chiedendo come vengono passati gli argomenti di chiamata di sistema al kernel, l'ABI è stabile all'interno di una determinata architettura del processore. Attraverso le architetture dei processori è possibile vedere la varianza nell'ABI. – JJF

risposta

3

Non penso che gli sviluppatori del kernel pubblichino effettivamente l'API di interrupt, ma è possibile trovare grafici di terze parti come this one.

+0

Il grafico è buono. – ryyker

+2

Ovviamente, se si sceglie un grafico di questo tipo, è necessario sceglierne uno che corrisponda alla versione del proprio kernel. Quello collegato a è per Linux 2.2. Era quindi un po 'datato nel 2004 quando è stato pubblicato, e ora è piuttosto obsoleto. –

+2

@JohnBollinger - È vero che era per una vecchia versione del kernel, ma l'autore della pagina ti dà anche le risorse per creare il tuo grafico per un nuovo kernel. Inoltre, sebbene tu dica che è "abbastanza obsoleto", molte delle chiamate non sono cambiate fino al kernel più recente. (Ne ho provati diversi quando implementavo il mio compilatore.) – owacoder

2

La risposta alla tua domanda è nello syscall man page. Prestare particolare attenzione al titolo della sezione "Convenzioni di chiamata dell'architettura" e nota come menzionato sopra da John Bollinger che questa informazione potrebbe variare tra le versioni del kernel.

0

Quello che ho davvero intendo dire è: è la libreria C considerata la stalla/documentata API Linux dalla politica, e l'API chiamata di sistema/ABI del kernel è considerato instabile (può cambiare) e, pertanto, non documentato di proposito o di bassa priorità?

E 'impossibile parlare di politica senza specificare cui politica, per quello.

Le persone che programmano per "Linux" in genere sono in realtà programmi per uno o più versioni di GNU/Linux, a differenza del kernel nuda. Sono quindi incline a dire che probabilmente non stiamo considerando la politica degli sviluppatori del kernel. In effetti, se l'interfaccia della libreria C è disponibile, allora non stiamo parlando di un kernel nullo. Inoltre, in base al tagging, suppongo che tu stia chiedendo della programmazione in C. Se stavi programmando in assembly, l'interfaccia raw di syscall sarebbe naturale e appropriata, e la maggior parte dei miei commenti non sarebbe applicabile.

Se si sta effettivamente indirizzando GNU/Linux all'esclusione di qualsiasi altra cosa, la domanda è in qualche modo ragionevole. D'altra parte, spesso si preferisce programmare per una maggiore compatibilità. In tal caso, non esiste alcuna alternativa all'utilizzo delle interfacce syscall della C-library, poiché le syscall di ogni sistema sono diverse. Le interfacce syscall di Glibc fanno un ottimo lavoro di conformità con POSIX e SUS, quindi usarle (correttamente) è un enorme vantaggio per la portabilità. Anche se altri sistemi Unix e Unix, come OS X, BSD, Solaris, ecc. Non sono obiettivi immediati, raramente è una perdita tenere aperta la possibilità di utilizzare il software su tali sistemi.

In ogni caso, se si fosse certi che il proprio software eseguisse direttamente le syscalls di Linux, si inserirà effettivamente l'assembly inline per farlo ovunque lo si desideri? Sicuramente no - scriveresti le funzioni wrapper.Perché, quindi, dovresti opporsi all'uso delle funzioni wrapper testate e ben documentate già fornite dalla libreria C?

Certamente l'interfaccia syscall di Linux cambia in una certa misura tra le versioni del kernel. Questo può essere considerato la cosa che rende versioni diverse (intendo x.2y ->x.2z o x.y ->z.w). Non sono ben sintonizzato su quanto siano in genere tali modifiche di grandi dimensioni, ma in passato sono state apportate modifiche incompatibili e l'utilizzo delle interfacce della libreria C consente di isolare da tali modifiche in una certa misura. Come descritto sopra, tuttavia, penso che ci siano altri motivi più ampi per preferire l'interfaccia della libreria C.

+0

Con la politica intendevo davvero quella degli sviluppatori del kernel. E se volessi scrivere una piattaforma embedded con solo il nocciolo del kernel di Linux, dove posso ottenere la documentazione in quel caso? Non è documentato in questo scenario? –

+0

(eccetto la terza parte) –

+1

@ ctrl-d, quindi, per carità, perché non l'hai detto? L'interfaccia della libreria C è discutibile se non si ha la libreria C su cui disegnare. Per favore, rivedi la tua domanda per chiedere cosa vuoi veramente sapere. –

Problemi correlati