X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=8aba3c23ddacf3fd17e31c6ccb6049f873537ae1;hp=43642887bab32ae35d35f858c0504c339aa680c8;hb=7e19b798d0cc09960daad695d8f3b242170bb3b4;hpb=99fa5a06cd27160cf673e3483ad552d32efa2c05 diff --git a/process.tex b/process.tex index 4364288..8aba3c2 100644 --- a/process.tex +++ b/process.tex @@ -1,6 +1,6 @@ %% process.tex %% -%% Copyright (C) 2000-2015 by Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2018 by Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -1224,12 +1224,12 @@ segmento dati\footnote{in questo caso si tratta soltanto di una funzione di caso \var{errno} assumerà il valore \errcode{ENOMEM}.} \end{funcproto} -La funzione incrementa la dimensione dello \textit{heap} di un -programma del valore indicato dall'argomento \param{increment}, restituendo il -nuovo indirizzo finale dello stesso. L'argomento è definito come di tipo -\type{intptr\_t}, ma a seconda della versione delle librerie e del sistema può -essere indicato con una serie di tipi equivalenti come \ctyp{ptrdiff\_t}, -\ctyp{ssize\_t}, \ctyp{int}. Se invocata con un valore nullo la funzione +La funzione incrementa la dimensione dello \textit{heap} di un programma del +valore indicato dall'argomento \param{increment}, restituendo il nuovo +indirizzo finale dello stesso. L'argomento è definito come di tipo +\typed{intptr\_t}, ma a seconda della versione delle librerie e del sistema +può essere indicato con una serie di tipi equivalenti come \type{ptrdiff\_t}, +\type{ssize\_t}, \ctyp{int}. Se invocata con un valore nullo la funzione permette di ottenere l'attuale posizione della fine del segmento dati. Queste due funzioni sono state deliberatamente escluse dallo standard POSIX.1 @@ -1423,6 +1423,9 @@ blocco. Con kernel diversi da Linux si può ottenere un errore di pagine di memoria, pertanto se si ha a cuore la portabilità si deve avere cura di allinearne correttamente il valore. +% TODO trattare mlock2, introdotta con il kernel 4.4 (vedi +% http://lwn.net/Articles/650538/) + Altre due funzioni di sistema, \funcd{mlockall} e \funcd{munlockall}, consentono di bloccare genericamente la paginazione per l'intero spazio di indirizzi di un processo. I prototipi di queste funzioni sono: @@ -2390,10 +2393,10 @@ una lista degli argomenti, la sua definizione è: } \end{funcbox}} -La macro inizializza il puntatore alla lista di argomenti \param{ap} che -deve essere una apposita variabile di tipo \type{va\_list}; il +La macro inizializza il puntatore alla lista di argomenti \param{ap} che deve +essere una apposita variabile di tipo \type{va\_list}; il parametro \param{last} deve indicare il nome dell'ultimo degli argomenti fissi -dichiarati nel prototipo della funzione \textit{variadic}. +dichiarati nel prototipo della funzione \textit{variadic}. \macrobeg{va\_arg} @@ -2485,15 +2488,15 @@ assolutamente normale pensare di poter effettuare questa operazione. \index{tipo!opaco|(} In generale però possono esistere anche realizzazioni diverse, ed è per questo -motivo che invece che di un semplice puntatore viene \type{va\_list} è quello -che viene chiamato un \textsl{tipo opaco}. Si chiamano così quei tipi di dati, -in genere usati da una libreria, la cui struttura interna non deve essere -vista dal programma chiamante (da cui deriva il nome opaco) che li devono -utilizzare solo attraverso dalle opportune funzioni di gestione. +motivo che invece che un semplice puntatore, \typed{va\_list} è quello che +viene chiamato un \textsl{tipo opaco}. Si chiamano così quei tipi di dati, in +genere usati da una libreria, la cui struttura interna non deve essere vista +dal programma chiamante (da cui deriva il nome opaco) che li devono utilizzare +solo attraverso dalle opportune funzioni di gestione. \index{tipo!opaco|)} -Per questo motivo una variabile di tipo \type{va\_list} non può essere +Per questo motivo una variabile di tipo \typed{va\_list} non può essere assegnata direttamente ad un'altra variabile dello stesso tipo, ma lo standard ISO C99\footnote{alcuni sistemi che non hanno questa macro provvedono al suo posto \macrod{\_\_va\_copy} che era il nome proposto in una bozza dello @@ -2598,7 +2601,7 @@ di salvare il contesto dello \textit{stack} è \funcd{setjmp}, il cui prototipo Quando si esegue la funzione il contesto corrente dello \textit{stack} viene salvato nell'argomento \param{env}, una variabile di tipo -\type{jmp\_buf}\footnote{anche questo è un classico esempio di variabile di +\typed{jmp\_buf}\footnote{anche questo è un classico esempio di variabile di \textsl{tipo opaco}.} che deve essere stata definita in precedenza. In genere le variabili di tipo \type{jmp\_buf} vengono definite come variabili globali in modo da poter essere viste in tutte le funzioni del programma. @@ -2687,6 +2690,10 @@ dichiarandole tutte come \direct{volatile}.\footnote{la direttiva \index{salto~non-locale|)} +% TODO trattare qui le restartable sequences (vedi +% https://lwn.net/Articles/664645/ e https://lwn.net/Articles/650333/) se e +% quando saranno introdotte + \subsection{La \textit{endianness}} \label{sec:endianness}