X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=prochand.tex;h=e78ebb8810c4fa37ec7302571eb406023c7efe1a;hb=15b31cba44b7cfc22edbefcba5597039893ed8dd;hp=099b1ffac1c7fa077f58696a7e8edf27a674d912;hpb=bf41def586b4bf552660e34913f3c39b7d26b7bc;p=gapil.git diff --git a/prochand.tex b/prochand.tex index 099b1ff..e78ebb8 100644 --- a/prochand.tex +++ b/prochand.tex @@ -1,6 +1,6 @@ %% prochand.tex %% -%% Copyright (C) 2000-2005 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2006 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", @@ -143,10 +143,10 @@ fig.~\ref{fig:proc_task_struct}. \label{fig:proc_task_struct} \end{figure} -Come accennato in sez.~\ref{sec:intro_unix_struct} è lo -\textit{scheduler}\itindex{scheduler} che decide quale processo mettere in -esecuzione; esso viene eseguito ad ogni system call ed ad ogni -interrupt,\footnote{più in una serie di altre occasioni.} +Come accennato in sez.~\ref{sec:intro_unix_struct} è lo \textit{scheduler} +\itindex{scheduler} che decide quale processo mettere in esecuzione; esso +viene eseguito ad ogni system call ed ad ogni interrupt,\footnote{più in una + serie di altre occasioni.} % TODO completare questa parte. (ma può essere anche attivato esplicitamente). Il timer di sistema provvede comunque a che esso sia invocato periodicamente, generando un interrupt @@ -159,7 +159,7 @@ in \file{asm/param.h}, ed il cui valore % TODO verificare gli ultimi cambiamenti del 2.6 % Si ha cioè un interrupt dal timer ogni centesimo di secondo. -Ogni volta che viene eseguito, lo \textit{scheduler}\itindex{scheduler} +Ogni volta che viene eseguito, lo \textit{scheduler} \itindex{scheduler} effettua il calcolo delle priorità dei vari processi attivi (torneremo su questo in sez.~\ref{sec:proc_priority}) e stabilisce quale di essi debba essere posto in esecuzione fino alla successiva invocazione. @@ -543,17 +543,17 @@ lo stesso avviene anche per tutti i figli; la funzione \func{fork} infatti ha la caratteristica di duplicare nei figli tutti i file descriptor aperti nel padre (allo stesso modo in cui lo fa la funzione \func{dup}, trattata in sez.~\ref{sec:file_dup}), il che comporta che padre e figli condividono le -stesse voci della \textit{file table} (per la spiegazione di questi termini si -veda sez.~\ref{sec:file_sharing}) fra cui c'è anche la posizione corrente nel -file. +stesse voci della \itindex{file~table} \textit{file table} (per la spiegazione +di questi termini si veda sez.~\ref{sec:file_sharing}) fra cui c'è anche la +posizione corrente nel file. In questo modo se un processo scrive sul file aggiornerà la posizione corrente -sulla \textit{file table}, e tutti gli altri processi, che vedono la stessa -\textit{file table}, vedranno il nuovo valore. In questo modo si evita, in -casi come quello appena mostrato in cui diversi processi scrivono sullo stesso -file, che l'output successivo di un processo vada a sovrapporsi a quello dei -precedenti: l'output potrà risultare mescolato, ma non ci saranno parti -perdute per via di una sovrascrittura. +sulla \itindex{file~table} \textit{file table}, e tutti gli altri processi, +che vedono la stessa \itindex{file~table} \textit{file table}, vedranno il +nuovo valore. In questo modo si evita, in casi come quello appena mostrato in +cui diversi processi scrivono sullo stesso file, che l'output successivo di un +processo vada a sovrapporsi a quello dei precedenti: l'output potrà risultare +mescolato, ma non ci saranno parti perdute per via di una sovrascrittura. Questo tipo di comportamento è essenziale in tutti quei casi in cui il padre crea un figlio e attende la sua conclusione per proseguire, ed entrambi @@ -597,7 +597,8 @@ comune dopo l'esecuzione di una \func{fork} sez.~\ref{sec:sess_proc_group}); \item la directory di lavoro e la directory radice (vedi sez.~\ref{sec:file_work_dir} e sez.~\ref{sec:file_chroot}); -\item la maschera dei permessi di creazione (vedi sez.~\ref{sec:file_umask}); +\item la maschera dei permessi di creazione (vedi + sez.~\ref{sec:file_perm_managemen}); \item la maschera dei segnali bloccati (vedi sez.~\ref{sec:sig_sigmask}) e le azioni installate (vedi sez.~\ref{sec:sig_gen_beha}); \item i segmenti di memoria condivisa agganciati al processo (vedi @@ -1224,7 +1225,7 @@ la lista completa \item la directory radice e la directory di lavoro corrente (vedi sez.~\ref{sec:file_work_dir}); \item la maschera di creazione dei file (\var{umask}, vedi - sez.~\ref{sec:file_umask}) ed i \textit{lock} sui file (vedi + sez.~\ref{sec:file_perm_management}) ed i \textit{lock} sui file (vedi sez.~\ref{sec:file_locking}); \item i segnali sospesi (\textit{pending}) e la maschera dei segnali (si veda sez.~\ref{sec:sig_sigmask}); @@ -1269,8 +1270,8 @@ condivise, viene lanciato il \textit{linker} dinamico \cmd{/lib/ld.so} prima del programma per caricare le librerie necessarie ed effettuare il link dell'eseguibile. Se il programma è in formato ELF per caricare le librerie dinamiche viene usato l'interprete indicato nel segmento \const{PT\_INTERP}, -in genere questo è \file{/lib/ld-linux.so.1} per programmi linkati con le -\acr{libc5}, e \file{/lib/ld-linux.so.2} per programmi linkati con le +in genere questo è \file{/lib/ld-linux.so.1} per programmi collegati con le +\acr{libc5}, e \file{/lib/ld-linux.so.2} per programmi collegati con le \acr{glibc}. Infine nel caso il file sia uno script esso deve iniziare con una linea nella @@ -1411,7 +1412,7 @@ Questi identificatori normalmente sono identici ai corrispondenti del gruppo sez.~\ref{sec:proc_exec}, il programma che si è posto in esecuzione abbia i bit \itindex{suid~bit} \acr{suid} o \itindex{sgid~bit} \acr{sgid} impostati (il significato di questi bit è affrontato in dettaglio in -sez.~\ref{sec:file_suid_sgid}). In questo caso essi saranno impostati +sez.~\ref{sec:file_special_perm}). In questo caso essi saranno impostati all'utente e al gruppo proprietari del file. Questo consente, per programmi in cui ci sia necessità, di dare a qualunque utente normale privilegi o permessi di un altro (o dell'amministratore). @@ -1513,7 +1514,7 @@ all'\textsl{user-ID salvato}. Negli altri casi viene segnalato un errore (con Come accennato l'uso principale di queste funzioni è quello di poter consentire ad un programma con i bit \itindex{suid~bit} \acr{suid} o -\itindex{sgid~bit} \acr{sgid} impostati (vedi sez.~\ref{sec:file_suid_sgid}) +\itindex{sgid~bit} \acr{sgid} impostati (vedi sez.~\ref{sec:file_special_perm}) di riportare l'\textsl{user-ID effettivo} a quello dell'utente che ha lanciato il programma, effettuare il lavoro che non necessita di privilegi aggiuntivi, ed eventualmente tornare indietro. @@ -1928,7 +1929,7 @@ implementata.\footnote{per attualmente si intende fino al kernel 2.6.13, e % \const{CAP\_CHOWN} & la capacità di cambiare proprietario e gruppo proprietario di un file (vedi - sez.~\ref{sec:file_chown}).\\ + sez.~\ref{sec:file_ownership_management}).\\ \const{CAP\_DAC\_OVERRIDE}& la capacità di evitare il controllo dei permessi di lettura, scrittura ed esecuzione dei file, (vedi sez.~\ref{sec:file_access_control}) @@ -1950,14 +1951,15 @@ implementata.\footnote{per attualmente si intende fino al kernel 2.6.13, e precedenti \const{CAP\_DAC\_OVERRIDE} e \const{CAP\_DAC\_READ\_SEARCH}. Queste comprendono i cambiamenti dei permessi e dei - tempi del file (vedi sez.~\ref{sec:file_chmod} e - sez.~\ref{sec:file_utime}), le impostazioni degli - attributi estesi (con il comando \cmd{chattr}) e - delle ACL, poter ignorare lo + tempi del file (vedi + sez.~\ref{sec:file_perm_management} e + sez.~\ref{sec:file_file_times}), le impostazioni + degli attributi estesi (con il comando + \cmd{chattr}) e delle ACL, poter ignorare lo \itindex{sticky~bit} \textit{sticky bit} nella cancellazione dei file (vedi - sez.~\ref{sec:file_sticky}), la possibilità di - impostare il flag di \const{O\_NOATIME} con + sez.~\ref{sec:file_special_perm}), la possibilità + di impostare il flag di \const{O\_NOATIME} con \func{open} e \func{fcntl} (vedi sez.~\ref{sec:file_open} e sez.~\ref{sec:file_fcntl}).\\ @@ -1968,22 +1970,22 @@ implementata.\footnote{per attualmente si intende fino al kernel 2.6.13, e un processo senza questa capacità e la capacità di impostare il bit \acr{sgid} su un file anche quando questo è relativo ad un gruppo cui non si - appartiene (vedi sez.~\ref{sec:file_chmod}).\\ + appartiene (vedi + sez.~\ref{sec:file_perm_management}).\\ \const{CAP\_KILL} & la capacità di mandare segnali a qualunque processo (vedi sez.~\ref{sec:sig_kill_raise}).\\ \const{CAP\_SETGID} & la capacità di manipolare i group ID dei processi, sia il principale che i supplementari, (vedi sez.~\ref{sec:proc_setgroups} che quelli - trasmessi tramite i \index{socket} socket - \textit{unix domain} (vedi - sez.~\ref{sec:unix_socket}).\\ + trasmessi tramite i socket \textit{unix domain} + (vedi sez.~\ref{sec:unix_socket}).\\ \const{CAP\_SETUID} & la capacità di manipolare gli user ID del processo (con \func{setuid}, \func{setreuid}, \func{setresuid}, \func{setfsuid}) e di trasmettere un valore arbitrario dell'\textsl{uid} nel passaggio delle - credenziali coi socket unix domain (vedi - sez.~\ref{sec:unix_socket_xxx}).\\ + credenziali coi socket \textit{unix domain} (vedi + sez.~\ref{sec:unix_socket}).\\ % % Linux specific capabilities % @@ -1993,18 +1995,21 @@ implementata.\footnote{per attualmente si intende fino al kernel 2.6.13, e chiamante ha nel suo insieme di capacità permesse) da qualunque processo.\\ \const{CAP\_LINUX\_IMMUTABLE}& la capacità di impostare gli attributi - \textit{immutable} e \textit{append only} per i - file su un filesystem che supporta questi + \textit{immutable} e \itindex{append~mode} + \textit{append only} per i file su un + filesystem che supporta questi attributi estesi.\\ \const{CAP\_NET\_BIND\_SERVICE}& la capacità di porre in ascolto server su porte riservate (vedi sez.~\ref{sec:TCP_func_bind}).\\ \const{CAP\_NET\_BROADCAST}& la capacità di consentire l'uso di socket in - broadcast e multicast.\\ + \itindex{broadcast} \textit{broadcast} e + \itindex{multicast} \textit{multicast}.\\ \const{CAP\_NET\_ADMIN} & la capacità di eseguire alcune operazioni privilegiate sulla rete (impostare le opzioni privilegiate dei socket, abilitare il - multicasting, impostare interfacce di rete e + \itindex{multicast} \textit{multicasting}, + impostare interfacce di rete e tabella di instradamento).\\ \const{CAP\_NET\_RAW} & la capacità di usare socket \texttt{RAW} e \texttt{PACKET} (quelli che permettono di creare @@ -2557,8 +2562,10 @@ funzione. \itindend{capabilities} - - +% TODO vedi http://lwn.net/Articles/198557/ e +% http://www.madore.org/~david/linux/newcaps/ +% TODO documentare prctl ... + \section{La gestione della priorità di esecuzione} \label{sec:proc_priority} @@ -3415,7 +3422,7 @@ multi-thread, ma si hanno gli stessi problemi quando si vogliono chiamare delle funzioni all'interno dei gestori dei segnali. Fintanto che una funzione opera soltanto con le variabili locali è rientrante; -queste infatti vengono allocate nello \itindex{stack} stack, e un'altra +queste infatti vengono allocate nello \itindex{stack} stack, ed un'altra invocazione non fa altro che allocarne un'altra copia. Una funzione può non essere rientrante quando opera su memoria che non è nello \itindex{stack} stack. Ad esempio una funzione non è mai rientrante se usa una variabile @@ -3438,18 +3445,11 @@ disposizione due macro di compilatore, \macro{\_REENTRANT} e varie funzioni di libreria, che sono identificate aggiungendo il suffisso \code{\_r} al nome della versione normale. - - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "gapil" -%%% End: - % LocalWords: multitasking like VMS child process identifier pid sez shell fig % LocalWords: parent kernel init pstree keventd kswapd table struct linux call % LocalWords: nell'header scheduler system interrupt timer HZ asm Hertz clock % LocalWords: l'alpha tick fork wait waitpid exit exec image glibc int pgid ps -% LocalWords: sid threads thread Ingo Molnar ppid getpid getppid sys unistd +% LocalWords: sid threads thread Ingo Molnar ppid getpid getppid sys unistd LD % LocalWords: void ForkTest tempnam pathname sibling cap errno EAGAIN ENOMEM % LocalWords: stack read only copy write tab client spawn forktest sleep PATH % LocalWords: source LIBRARY scheduling race condition printf descriptor dup @@ -3468,16 +3468,28 @@ varie funzioni di libreria, che sono identificate aggiungendo il suffisso % LocalWords: setreuid setregid FIXME ruid rgid seteuid setegid setresuid size % LocalWords: setresgid getresuid getresgid value result argument setfsuid DAC % LocalWords: setfsgid NGROUPS sysconf getgroups getgrouplist groups ngroups -% LocalWords: setgroups initgroups patch LIDS CHOWN OVERRIDE Discrectionary +% LocalWords: setgroups initgroups patch LIDS CHOWN OVERRIDE Discrectionary PF % LocalWords: SEARCH chattr sticky NOATIME socket domain immutable append mmap % LocalWords: broadcast multicast multicasting memory locking mlock mlockall % LocalWords: shmctl ioperm iopl chroot ptrace accounting swap reboot hangup % LocalWords: vhangup mknod lease permitted inherited inheritable bounding AND -% LocalWords: capability capget capset header ESRCH undef version obj clear +% LocalWords: capability capget capset header ESRCH undef version obj clear PT % LocalWords: pag ssize length proc capgetp prehemptive cache runnable Stopped -% LocalWords: Uninterrutible SIGSTOP soft slice nice niceness counter which +% LocalWords: Uninterrutible SIGSTOP soft slice nice niceness counter which SC % LocalWords: getpriority who setpriority RTLinux RTAI Adeos fault FIFO First -% LocalWords: yield Robin setscheduler policy param OTHER priority setparam +% LocalWords: yield Robin setscheduler policy param OTHER priority setparam to % LocalWords: min getparam getscheduler interval robin ENOSYS fifo ping long -% LocalWords: affinity setaffinity unsigned mask cpu NUMA CLR ISSET SETSIZE -% LocalWords: getaffinity assembler deadlock REENTRANT SAFE +% LocalWords: affinity setaffinity unsigned mask cpu NUMA CLR ISSET SETSIZE RR +% LocalWords: getaffinity assembler deadlock REENTRANT SAFE tgz MYPGRP l'OR rr +% LocalWords: WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG WCOREDUMP WIFSTOPPED +% LocalWords: WSTOPSIG opt char INTERP arg SIG IGN DFL mascheck grp FOWNER RAW +% LocalWords: FSETID SETPCAP BIND SERVICE ADMIN PACKET IPC OWNER MODULE RAWIO +% LocalWords: PACCT RESOURCE TTY CONFIG SETFCAP hdrp datap libcap lcap text tp +% LocalWords: get ncap caps CapInh CapPrm fffffeff CapEff getcap STAT dall'I +% LocalWords: inc PRIO SUSv PRGR prio SysV SunOS Ultrix sched timespec len sig +% LocalWords: cpusetsize cpuset atomic + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "gapil" +%%% End: