X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=cb1fa55c6d08085c353b156bc01fab9ba1de09c9;hp=a1bee2b766e39c7ea79a32417f4cd1d0a4aa4c89;hb=2535dbace6167c4bcff7dd9c98f4d397bb699afd;hpb=ae7bf994013ffbf4f5ef1d5a38a18033593e3e9f diff --git a/process.tex b/process.tex index a1bee2b..cb1fa55 100644 --- a/process.tex +++ b/process.tex @@ -1,6 +1,6 @@ %% process.tex %% -%% Copyright (C) 2000-2018 by Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2019 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", @@ -744,11 +744,11 @@ riposte nella \textit{swap}. \itindend{page~fault} -Normalmente questo è il prezzo da pagare per avere un multitasking reale, ed -in genere il sistema è molto efficiente in questo lavoro; quando però ci siano -esigenze specifiche di prestazioni è possibile usare delle funzioni che -permettono di bloccare il meccanismo della paginazione e mantenere fisse delle -pagine in memoria (vedi sez.~\ref{sec:proc_mem_lock}). +Normalmente questo è il prezzo da pagare per avere un \textit{multitasking} +reale, ed in genere il sistema è molto efficiente in questo lavoro; quando +però ci siano esigenze specifiche di prestazioni è possibile usare delle +funzioni che permettono di bloccare il meccanismo della paginazione e +mantenere fisse delle pagine in memoria (vedi sez.~\ref{sec:proc_mem_lock}). \index{paginazione|)} \index{memoria~virtuale|)} @@ -1344,6 +1344,11 @@ processo,\footnote{in caso contrario si avrà un errore di \errcode{ENOMEM}; positivo di grandi dimensioni.} ma il risultato verrà comunque fornito per l'intervallo compreso fino al multiplo successivo. +% TODO: verificare i cambiamenti di sematica con il kernel 5.0 (restrizione +% solo alle pagine relative al processo stesso) vedi: +% https://lwn.net/Articles/776034/, +% https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=574823bfab82d9d8fa47f422778043fbb4b4f50e + I risultati della funzione vengono forniti nel vettore puntato da \param{vec}, che deve essere allocato preventivamente e deve essere di dimensione sufficiente a contenere tanti byte quante sono le pagine contenute @@ -1494,13 +1499,14 @@ espressi dalle costanti riportate in tab.~\ref{tab:mlockall_flags}. Con \func{mlockall} si possono bloccare tutte le pagine mappate nello spazio di indirizzi del processo, sia che comprendano il segmento di testo, di dati, lo \textit{stack}, lo \textit{heap} e pure le funzioni di libreria chiamate, i -file mappati in memoria, i dati del kernel mappati in user space, la memoria -condivisa. L'uso dell'argomento \param{flags} permette di selezionare con -maggior finezza le pagine da bloccare, ad esempio usando \const{MCL\_FUTURE} -ci si può limitare a tutte le pagine allocate a partire dalla chiamata della -funzione, mentre \const{MCL\_CURRENT} blocca tutte quelle correntemente -mappate. L'uso di \func{munlockall} invece sblocca sempre tutte le pagine di -memoria correntemente mappate nello spazio di indirizzi del programma. +file mappati in memoria, i dati del kernel mappati in \textit{user space}, la +memoria condivisa. L'uso dell'argomento \param{flags} permette di selezionare +con maggior finezza le pagine da bloccare, ad esempio usando +\const{MCL\_FUTURE} ci si può limitare a tutte le pagine allocate a partire +dalla chiamata della funzione, mentre \const{MCL\_CURRENT} blocca tutte quelle +correntemente mappate. L'uso di \func{munlockall} invece sblocca sempre tutte +le pagine di memoria correntemente mappate nello spazio di indirizzi del +programma. A partire dal kernel 4.4 alla funzione \func{mlockall} è stato aggiunto un altro flag, \const{MCL\_ONFAULT}, che può essere abbinato a entrambi gli altri @@ -2330,8 +2336,8 @@ Benché questo non sia un libro sul linguaggio C, è opportuno affrontare alcune delle problematiche generali che possono emergere nella programmazione con questo linguaggio e di quali precauzioni o accorgimenti occorre prendere per risolverle. Queste problematiche non sono specifiche di sistemi unix-like o -multitasking, ma avendo trattato in questo capitolo il comportamento dei -processi visti come entità a sé stanti, le riportiamo qui. +\textit{multitasking}, ma avendo trattato in questo capitolo il comportamento +dei processi visti come entità a sé stanti, le riportiamo qui. \subsection{Il passaggio di variabili e valori di ritorno nelle funzioni} @@ -2539,8 +2545,7 @@ Dopo l'uso di \macro{va\_end} la variabile \param{ap} diventa indefinita e successive chiamate a \macro{va\_arg} non funzioneranno. Nel caso del \cmd{gcc} l'uso di \macro{va\_end} può risultare inutile, ma è comunque necessario usarla per chiarezza del codice, per compatibilità con diverse -implementazioni e per eventuali eventuali modifiche future a questo -comportamento. +implementazioni e per eventuali modifiche future a questo comportamento. Riassumendo la procedura da seguire per effettuare l'estrazione degli argomenti di una funzione \textit{variadic} è la seguente: @@ -2947,9 +2952,9 @@ basterà scegliere una volta per tutte quale usare e attenersi alla scelta. % LocalWords: times library utmp syscall number Filesystem Hierarchy pathname % LocalWords: context assembler sysconf fork Dinamic huge segmentation program % LocalWords: break store using intptr ssize overflow ONFAULT faulting alloc +% LocalWords: scheduler pvalloc aligned ISOC ABCDEF %%% Local Variables: %%% mode: latex %%% TeX-master: "gapil" %%% End: -% LocalWords: scheduler pvalloc aligned ISOC ABCDEF