Sistemi Operativi Parte Generale ..:: MODULO 1 e 2 ::.. --> Sezione 1 e 2. -Sistema operativo in generale. Un so controlla l'esecuzione dei programmi applicativi e fa da interfaccia tra le applicazioni hw. User ---> Interfaccia ---> Processi ---> SO ---> Componenti HW L'so lascia i controlli alle applicazioni e si affida al processore per riottenere il controllo. >L'SO può essere inteso sia come gestore di risorse che come macchina estesa. >L'SO nasconde ai programmatori i dettagli hw e fornisce un'api facile da usare facendo da intermediario tra programmatore e hw. Piu in generale il processore garantisce l'esecuzione di programmi, accesso semplificato ai dispositivi di input output e un accesso controllato a questi, ma anche al file system ecc, rileva eventuali errori e avvisa quando se ne verificano,in piu gestisce l'accounting. Il Time sharing consiste ne suddividere l'esecuzione della cpu in determinati quanti temporali, ed ogni quanto temporale viene assegnato ad una determinata applicazione o user, infatti se un processo è in esecuzione ma termina il quanto temporale, questa viene stoppata per passare alla successiva applicazione o utente, solo quando saranno passati altri quanti temporali per garantire il ritorno del proprio "turno" l'applicazione continuerà ad essere eseguita. Un Sistema Parallelo invece è un singolo elaboratore che possiede piu unità di elaborazione, facendo cosi incrementano le prestazioni e l'affidabilità. Un sistema distribuito è un sistema composto da piu elaboratori indipendenti con ognuno proprie risorse e proprio sistema operativo. si dicono anche loosely coupled. Poi esistono i sistemi operativi di rete che forniscono condivisione di file, possibilità di comunicare e ogni computer opera indipendentemente dagli altri. I sistemi real time invece possono essere, Hard real time o soft real time, hard real time è quando se vengono violati vincoli temporali si possono avere effetti catastrofici. soft real time invece non si punisce molto questa cosa. --> Sezione 3. - Concetti base di architetture degli elaboratori. Un interrupt (o trap) è un meccanismo che permette l'interruzione del normale ciclo di esecuzione della CPU.Grazie a questi viene aumentata l'efficienza di un sistema di calcolo, e danno libertà ad un SO di intervenire durante l'esecuzione di un processo utente allo scopo di gestire efficacemente le risorse del calcolatore, questi interrupt possono essere sia hardware che software e possono essere mascherati in qualche modo se la cpu sta svolgendo compiti non interrompibili. - gli interrupt hardware possono essere quelli dei dispositivi di io o di clock. - quelli software cono causati dal programma o da eventi eccezionali come divisioni per zero, problemi di indirizzamento e system call. Un segnale interrupt viene spedito dalla cpu, la cpu stoppa l'esecuzione dell'istruzione corrente e verifica la presenza di un segnale di interrupt, in caso affermativo spedisce un segnale di conferma al device che ha generato l'interrupt e esegue quello che deve fare al posto di quel programma. L'interrupt handler è il gestore degli interrupt, quando arriva un interrupt lui o salva tutti i registri critici (come informazioni minime) o fa uno scambio di stato facendo una fotografia dello stato del processore. Queste due duddivisioni vengono scelte in base all'architettura, o può essere usato un singolo metodo, o uno per ogni tipo di interrupt. o anche uno a dispositivo. Questi 2 metodi vengono selezionati tramite l'interrupt vector. I dati salvati quando vengono lanciati interrupt vengono salvati da meccanismo hardware. Gli so moderni sono detti Interrupt Driven, infatti gran parte del nucleo di un so viene eseguito come interrupt handler. Se ci sono piu interrupt che arrivano assieme questi possono essere gestiti tramite la disabilitazione degli interrupt o tramite gli interrupt annidati. - Tramite la disabilitazione degli interrupt gli altri segnali di interrupt vengono ignorati o restano pendenti, e vengono poi riabilitati prima di riattivare il processo interrotto,e poi il processore in caso vede se ci sono interrupt da fare e li fa nella sequenza in cui sono nell'interrupt handler. Come difetto però si ha che non si tiene conto di gestioni "time-Critical". - Tramite gli interrupt annidati invece si possono definire diverse priorità per gli interrupt e quindi uno di priorità inferiore può essere interrotto di uno di priorità maggiore, è quindi anche necessario prevedere un meccanismo di salvataggio e ripristino dell'esecuzione adeguato. Cosi i dispositivi veloci possono essere serviti prima ma l'approccio è piu complesso. La comunicazione tra processore e dispositivi di I/O avviene tramite il controllore che governa il dialogo con il dispositivo fisico, il controllo della politiva di accesso al dispositivo è a carico del dispositivo stesso. Esistono tre modalità possibili di comunicazione tra processore e dispositivi di input output: 1) programmed I/O, Interrupt-Driven I/O e Direct Memory Access (DMA). -Programmed I/O -Cpu carica tramite Bus i parametri della richiesta di input -il dispositivo esegue la richiesta, il risultato dell'operazione viene memorizzato in un apposito buffer locale sul controller e il completamento dell'operazione viene segnalato attraverso appositi registri di status. -l'SO attende (busy waiting) che il comando sia completato verificando periodicamente il registro di status. - infine la cpu copia i dati dal buffer locale del controller alla memoria. - Interrupt- Driven I/O -Cpu carica tramite Bus i parametri della richiesta di input -Il SO sospende il processo che ha richiesto di fare l'operazione di input output ed esegue un'altro processo. -il dispositivo esegue la richiesta, il risultato viene memorizzato in un buffer locale sul controller e il completamento dell'operazione viene segnalato attraverso un'interrupt -come la cpu riceve l'interrupt copia i dati dal buff locale del controller alla memoria. In tutti e due nel caso di operazioni di output il procedimento è simile, i dati vengono copiati dalla memoria ai buffer locali e questa operazione viene eseguita prima di caricare i parametri della richiesta nei registri di comando dei dispositivi. - Direct Memory Access (DMA) -il sistema operativo attiva l'operazione di input output specificando l'infirizzo di memoria di destinazione o di provenienza dei dati -l'interrupt specifica solamente la conclusione dell'operazione di I/O -Memoria. Di memorie ne esistono molti tipi, la memoria centrale o RAM assieme ai registri, è l'unico spazio di memorizzazione che può essere acceduto direttamente dal processore, il suo accesso avviene tramite istruzione load e store ed è una memoria fondamentalmente volatile, poi esiste la memoria ROM. Memory Mapped I/O, un dispositivo è completamente indirizzabile tramite bus, i registri di dispositivo vengono mappati su un'insieme di indirizzi di memoria e una scrittura su questi indirizzi causa il trasferimento di dati verso il dispositivo come per esempio il video grafico nei pc, come vantaggio ha una gestione molto semplice, mentre lo svantaggio è che necessita tecniche di polling ovvero busy waiting. I nastri sono dispositivi per la memorizzazione non volatile dei dati, ovvero a cui si può riaccedere anche dopo moltissimo tempo e rimangono archiviati, l'accesso è sequenziale e non diretto, i file al suo interno possono anche essere separati da gap, ma la ricerca al suo interno avviene in modo sequenziale, inoltre vengono usate gerarchie di memoria. I Dischi sono dispositivi per immagazzinare informazioni non in modo volatile, hanno un accesso diretto e per individuare un dato sul disco occorre indirizzarlo in termini di cilindro testina e settore. Le operazioni che vengono utilizzate sul disco cono read (usa head e sector), write (anche) e seek (cylinder) l'operazione di seek corrisponde allo spostamento fisico del pettine di testine da un cilindro ad un'altro ed è normalmente la piu costosa, mentre il read e write prevedono l'attesa che il disco ruoti fino a quando il settore richiesto raggiunge la testina. e servono sia per storare che prendere dati sul disco. La Cache consente di memorizzare parzialmente i dati di una memoria in una seconda piu costosa ma piu efficiente, se il numero di occorrenze in cui il dato viene trovato nella cache è rilevante, ovvero se il dato è richiesto spesso la cache fornisce un notevole aumento di prestazioni dato che lo sposta in una memoria si piu piccola ma piu veloce. Di cache ce ne sono diversi tipio e livelli, esiste la cache della memoria principale cioè la DRAM tramite memoria bipolare, la cache di disco in memoria e la cache di file system remoti tramite file system locali. Le politiche della cache possono essere sia modificabili che non dal sistema operativo, la cache hardware come quella della cpu non è modificabile, mentre la cache software come quella del disco è sotto controllo dell'so. I prolemi che in cui si può incorrere sono quelli della coerenza, per esempio se gli stessi dati possono apparire a diversi livelli della struttura di memoria, mentre un'altro problema è quello dell'algoritmo di replacement, ovvero la cache ha dimensione limitata e bisogna scegliere un algoritmo che garantisca il maggior numero di accessi in cache. -Protezione Hardware Occorrono molte volte protezioni hardware che controllino il buon andamento di molte cose nel pc, come per esempio la modalità utente e quella kernel, la modalità kernel o supervisore o privilegiata è quella che si ha quando si vuole che i processi in questa modalità abbiano accesso a tutte le istruzioni incluse quelle privilegiate, che permettono di gestire totalmente il sistema, la modalità utente al contrario è quando si vuole che i processi non abbiano accesso alle istruzioni privilegiate. Per distinguere tra questi due stati c'è il Mode Bit, ovvero il bit che identifica se si è in modalità kernel o user. Funzionamento: alla partenza il processore è in modalità kernel, viene caricato il sistema operativo (bootstrap) e si inizia ad eseguirlo, quando passa ill controllo ad un processo utente il so cambia il valore del mode bit e il processore passa alla modalità utente, poi tutte le volte che avviene un'interrupt l'hardware passa da modalità utente a modalità kernel. Esiste anche la protezione I/O, infatti dato che le operazioni di I/O sono considerate privilegiate l'so dovrò fornire agli utenti primitive e servizi per accedervi. La protezione memoria serve per evitare che i processi utente modifichino il codice o i dati di altri processi, il codice del sistema operativo o di modificare l'interrupt vector inserendo i propri gestori degli interrupt, questa protezione avviene attraverso la MMU (Memory Management Unit). La protezione tramite MMU avviene tramite una tecnica Registro base + Registro limite, ovvero ogni indirizzo generato dal processore va confrontato con due registri chiamati base e limite. Se non incluso in questo range l'indirizzo non è valido e genera un'eccezione. Poi devono essere tradotti gli indirizzi logici in fisici dato che ogni indirizzo generato dal processore corrisponde ad un indirizzo logico, poi deve essere trasformato in uno fisico a tempo di esecuzione dal meccanismo di MMU, un indirizzo viene protetto se non può mai essere generato dal meccanismo di traduzione, quindi proteggere un indirizzo significa non farlo mai generare dalla MMU, rendendolo quindi non accessibile per sovrascrivere o cancellare. Dato che le operazioni di input output sono considerate privilegiate, quindi teoricamente le possono fare solamente i sistemi operativi, esiste un modo con il quale i processi utenti possano eseguirle, ovvero con le System Call, grazie a queste "trap" generate da istruzioni specifiche i processi utenti posso fare richieste esplicite di I/O all'SO. --> Sezione 4. L'Architettura dei sistemi operativi descrive quali sono i componenti dell'so e come queste cono collegate tra di loro.Questa architettura può essere vista da diversi aspetti, quello dei servizi forniti, utile per l'utente, quella dell'interfaccia di sistema, utile per il programmatore, e quella dei componenti del sistema, utile per il progettista di SO. -Uno dei componenti di un sistema operativo è la gestione dei processi, un processo non è altro che un programma in esecuzione che utilizza le risorse del computer per svolgere i propri compiti, nella gestione dei processi il sistema operativo si occupa di creare e terminare processi, sospendere e riattivarli, gestisce i deadlock (in caso i programmi comunichino tra di loro si devono aspettare a vicenda), la comunicazione tra processi e la loro sincronizzazione. .Un altro componente è la gestione della memoria principale, la memoria principale è un array di byte indirizzabili singolarmente, è un deposito di dati facilmente accessibili e condiviso tra la CPU e i dispositivi di I/O, ed in questo caso il sistema operativo è responsabile delle attività riguardanti la memoria come tenere traccia di quali parti della memoria sono usate e da chi, decidere quali processi caricare quando diventa disponibile uno spazio in memoria e allocare o deallocare lo spazio di memoria quando necessario. La gestione della memoria secondaria invece avviene in diverso modo, infatti la memoria secondaria serve ad un computer per poter immagazzinare tutti i dati in modo non volatile come quelli della memoria primaria ma in modo permanente, quest'ultima infatti è anche molto piu grande, questa memoria in genere si ha su hard disk, dischi ottici, nastri o altro. Il sistema operativo si occupa di gestire l'allocazione dello spazio inutilizzato in questa memoria, gestisce lo spazio di memorizzazione, l'ordinamento efficiente delle richieste (disk scheduling). Poi esiste la gestione del file system, un file è l'astrazione informatica di un archivio di dati e un file system è composto da un insieme di file, in ambito di file system il sistema operativo è responsabile di attività come la creazione o la cancellazione, la creazione e cancellazione di directory, la manipolazione di file e directory e la codifica del file system sulla memoria secondaria. Per quanto riguarda la gestione dell'I/O viene richiesta un interfaccia comune per la gestione dei device driver, un insieme di driver per dispositivi hardware specifici e un sistema di gestione di buffer per il caching delle informazioni. Con il termine protezione ci riferiamo al meccanismo per controllare gli eccessi di programmi, processi o utenti alle risorse del sistema e degli utenti, il meccanismo di protezione software deve distinguere tra uso autorizzato o non autorizzato,specificare i controlli che devono essere imposti e fornire un meccanismo di attuazione della protezione. Il networking consente di far comunicare due o piu elaboratori e di condividere risorse e come servizi offre quelli di protocolli di comunicazione a basso livello (TCP/IP e UDP) o quelli di comunicazione ad alto livello (file system distribuiti NFS, SMB o print spooler). L'interprete dei comandi è l'interfaccia utente dell'so, serve per attivare un programma o terminarlo, ma anche per interagire con le componenti del sistema operativo (file system), ogni volta che un processo ha quindi bisogno di un servizio del so richiama una system call, in genere sono disponibili come istruzioni a livello assembler, esistono inoltre librerie che permettono di invocare le system call da diversi linguaggi come il c e vengono normalmente realizzate tramite interrupt software. ..:: MODULO 3 ::.. Concorrenza – Fatta sul quaderno. ..:: MODULO 4 ::.. Architettura dei sistemi operativi. La struttura o l'architettura di un sistema operativo descrive quali sono le varie componenti del so e come queste sono collegate fra loro, i vari sistemi operativi sono molto diversi tra loro.La progettazione di un sistema operativo deve tener conto di diverse caratteristiche come l'efficienza, la manutenibilità, l'espandibilità e la modularità, e spesso queste caratteristiche presentano un trade-off dato che sistemi molto efficienti sono poco modulari e sistemi molto modulari sono meno efficienti. È poissibile dividere i sistemi operativi in due grandi famiglie a seconda della loro struttura, ci sono sistemi con struttura semplice ed altri con struttura a strati. I sistemi con struttura semplice in alcuni casi sono so che non hanno una struttura progettata a priori, essi possono essere descritti come una collezione di procedure ognuna delle quali può richiamare altre procedure, tipicamente sono so semplici e limitati che hanno subito un'evoluzione al di la dello scopo originario. Nell'Ms-Dos le interfacce e i livelli di funzionalità non sono ben separati, ovvero le applicazioni possono accedere direttamente alle routine di base per fare I/O, come conseguenza di questo fatto un programma sbagliato o magligno può mandare in crash l'intero sistema, tutto cuò perchè i progettisti di msdos erano legati all'HW dell'epoca non avendo modalità protetta kernel.Anche Unix è poco strutturato, si divide fondamentalmente in due parti distinte, il kernel e i programmi di sistema, il kernel è delimitato in basso dall'hardware, e dall'alto dai livelli delle system call, tutto ciò perchè anche unix inizialmente fu limitato dalle limitazioni hardware come msdos, rimane comunque il fatto che ha un approccio piu strutturato.I sistemi con struttura a strati si dicono (layer), l'so si può definire strutturato a strati e ogni strato è basato sugli strati inferiori e offre servizi agli strati superiori, la motivazione di questa cosa è avere come vantaggio principale la modularità, come encapsulation e data hiding o abstract data types, ma anche perchè vengono semplificate le fasi di implementazione, debugging e ristrutturazione del sistema. I problemi invece dei sistemi con struttura a strati sono dovuti dal fatto che tendono ad essere meno efficenti, ogni strato tende ad aggiungere overhead, come seconda cosa occorre studiare acccuratamente la struttura dei layer, le funzionalità previste al layer N devono essere implementate utilizzando esclusivamente i servizi dei livelli inferiori, in alcuni casi questa limitazione può essere difficile da superare, se ne ha il risultato che tutti i moderni sistemi con struttura a strati tendono ad avere meno strati. Un Kernel si può suddividere in 4 categorie,Kernel Monolitici, un aggregato unico e ricco di procedure di gestione mutuamente coordinate e astrazioni dell'HW, Micro Kernel, semplici astrazioni dell'HW gestite e coordinate da un kernel minimale, basate su un paradigma client/server, e primitive di message passing, Kernel Ibridi, simili a microkernel, ma hanno componenti eseguite in kernel space per questioni di maggiore efficenza, ExoKernel, non forniscono livelli di astrazione dell'HW, ma forniscono librerie che mettono a contatto diretto le applicazioni con l'hardware. I Kernel Monolitici sono un'insieme completo e unico di procedure mutuamente correlate e coordinate, le system call in questo caso implementano servizi forniti dal kernel, tipicamente realizzati in moduli eseguiti in kernel mode, esiste modularità, anche se l'integrazione del codice, e il fatto che tutti i moduli sono eseguiti nello stesso spazio, è tale da rendere tutto l'insieme un corpo unico in esecuzione. In queso caso se un processo all'interno del corpo del kernel va in crash, crasha tutto il kernel.Tuttavia sono molto efficienti, visto l'alto grado di coordinamento e integrazione delle routine permette di raggiungere ottimi livelli di efficienza, e hanno modularità, come i piu recenti kernel monolitici (linux) che permettono di effettuare il caricamento di moduli eseguibili a runtime. Nei microkernel i problemi sono derivati dal fatto che nonostante la struttura sia a strati, i kernel continuano a crescere in complessità, per risolvere questa cosa si potrebbe rimuovere dal kernel tutte le parti non essenziali e implementarle come processi a livello utente.Un microkernel deve offrire le funzionalità minime di gestione dei processi e della memoria, e meccanismi di comunicazione per permettere ai processi clienti di chiedere servizi ai processi serventi. La comunicazione è basata sul message passing, infatti il microkernel si occupa di smistare i messaggi fra i vari processi, le uniche system call di un so basato su microkernel sono quindi send e receive, tramite queste due system call è possibile implementare l'API standard di gran parte dei sistemi operativi.Un microkernerl ha molti vantaggi tra i quali il risultare molto semplice e facile da realizzare, è piu espandibile e modificabile, quindi per aggiungere un servizio, si aggiunge un processo a livello utente senza ricompilare il kernel o per modificare un servizio si riscrive solo il docice del servizio stesso, inoltre è piu facilmente portabile ad altre architetture, una volta portato il kernel, molti dei servizi come il file system possono essere semplicemente ricompilati, risulta anche piu robusto, se per esempio il processo che si occupa di un servizio cade il resto del sistema può continuare ad eseguire, è anche piu sicuro visto che è possibile assegnare al microkernel e ai processi di sistema livelli di sicurezza diversi, per ultimo si può notare la grande adattabilità del modello ai sistemi distribuiti, la comunicazione può avvenire tra processi nello stesso sistema o tra macchine differenti. Come svantaggio si ha una maggiore inefficienza dovuta all'overhead determinato dalla comunicazione mediata tramite kernel del sistema operativo, anche se parzialmente superata con i sistemi operativi piu recenti.Minix ha il kernel che è dato dal gestore dei processi e dai task, i task sono thread del kernel. I Kernel Ibridi si possono considerare come micro kernel modificati, ovvero si tratta di micro kernel che mantengono parte di codice in “kernel space” per ragioni di maggiore efficienza di esecuzione e adottano message passing tra i moduli in user space (es windows NT kernel o mac os x kernel, e in questi tipi di kernel le API sono implementate tarmite processi server. Gli ExoKernel (o kernel di sistemi operativi a struttura verticale) hanno un approccio radicalmente modificato per implementare OS, tutto questo perchè il progettista dellìapplicazione ha tutti gli elementi di controllo per decisioni riguardo alle prestazioni dell'HW, dispone di librerie di interfacce connesse all'exokernel come per es se l'user vuole allocare area di memoria X o settore disco Y.I limiti tipicamente non vanno oltre l'implementazione dei servizi di protezione e multiplazione delle risorse, in piu questi kernel non forniscono astrazione concreta del sistema HW (l'exokernel viene utilizzato dalle virtual machine). Le Macchine Virtuali sono un approccio diverso al multitasking, invece di creare l'illusione di molteplici processi che posseggono la propria CPU e la propria memoria, si crea l'astrazione di una macchina virtuale, queste ultime emulano il funzionamento dell'hardware ed è possibile eseguire qualsiasi sistema operativo sopra di esse.I vantaggi che se ne traggono sono che consentono di far coesistere SO differenti, si possono fare funzionare SO monotask in un sistema multitask e “sicuro” e si possono emulare architetture hardware differenti, lo svantaggio è la suluzione inefficiente e la difficoltà nel condividere risorse. Gli eseguibili java (detti bytecode) vengono eseguiti dalla java virtual machine(JVM), questa macchina viene emulata in quasi tutte le architetture reali, i vantaggi sono che il codice è altamente portabile e relativamente veloce (sicuramente piu del codice interpretato), il debugging è facilitato e i controlli di sicurezza sono fatti sul codice eseguibile. Per progettare un sistema operativo si deve definire prima il problema, cioè l'obiettivo del sistema che si vuole realizzare e i “costraint” entro cui si opera, la progettazione sarà sicuramente influenzata dal sistema hardware con il quale si va ad operare e dalle applicazioni che devono essere eseguite dal sistema operativo, a seconda di queste condizioni il sistema sarà batch, time-shared, single-user, multi-user,distribuito, general-purpose, real-time o altro...In piu ci si deve basare sulla richiesta dell'utente, degli sviluppatori e altre richieste vaghe, poi si prendono distinte politiche cioè decisioni su cosa deve essere fatto e su quali meccanismi dovranno attuare queste decisioni.Nel sofware engineering è fondamentale che la componente che prende le decisioni politiche possa essere completamente diversa da quella che implementa i meccanismi, questa cosa rende possibile il cambio di una delle due lasciando immutata l'altra. Nei microkernel per esempio si implementano nel kernel solo i meccanismi, tutta la politica è lasciata di gestione ai processi fuori dal kernel, esempio contrario è MacOs <= 9 (se crasha la grafica crasha tutto dato che sia politica che meccanismi di gestione della grafica sono stati inseriti nel kernel). Nel definire sistemi operativi con la parola portabilità intendiamo che lo stesso sistema operativo viene spesso proposto per architetture hardware differenti, ed è sempre possibile prevedere molteplici tipi ti dispositivi periferici, e spesso anche diverse architetture di CPU e BUS, serve quindi prevedere meccanismi per la generazione del so specifico per l'architettura utilizzata.I parametri tipici per la generazione di un sistema operativo sono: il tipo di CPU utilizzata, la quantità di memoria centrale, quali sono le periferiche utilizzate e alcuni parametri numerici di vario tipo, come numero degli utenti, processi, ampiezza dei buffer, tipo di processi ecc...Per la system generation i metodi che possono essere utilizzati sono la rigenerazione del kernel con nuovi parametri/driver (unix e linux) o prevedere la gestione di moduli aggiuntivi collegati durante il boot (extension MacOS, DLL Windows e moduli Linux). ..:: MODULO 5 ::.. -->Sezione1: Scheduler, processi e thread. Un sistema operativo è un gestore di risorse, per svolgere qualsiasi compito un sitema operativo ha bisogno di strutture per mantenere informazioni sulle risorse gestite, tra queste ci sono le tabelle di memoria, di I/O, le tabelle del file system e quelle dei processi. Le tabelle per la gestione della memoria servono per allocare memoria per il sistema operativo, per l'allocazione principale e secondaria per i processi e per le informazioni per i meccanismi di protezione. Le tabelle per la gestione dell'I/O danno le informazioni sullo stato di assegnazione dei dispositivi utilizzati dalla macchina e servono per la gestione di code di richieste. Le tabelle per la gestione del file system invece danno l'elenco dei dispositivi utilizzati per mantenere il file system e l'elenco dei file aperti e il loro stato. Descrittori dei processi: La manifestazione fisica di un processo è il codice da eseguire, i dati su cui operare, uno stack di lavoro per la gestione di chiamate di funzione, passaggio di parametri e variabili locali e un insieme di attributi contenenti tutte le informazioni necessarie per la gestione del processo stesso, tutto questo insieme di attributi prende il nome di “descrittore del processo” (process control block). La tabella per la gestione dei processi contiene i descrittori dei processi, e ogni processo ha un descrittore a se associato.E' possibile suddividere le informazioni contenute nel descrittore in 3 aree: 1) informazioni di identificazione di un processo, 2) informazioni di stato del processo, 3) informazioni di controllo del processo. 1)Le informazioni di identificazione di un processo corrispondono all'identificatore di un processo, ovvero il process id o pid, e può essere semplicemente un indice all'interno di una tabella di processi, può anche essere un numero progressivo, in caso, è necessario un mapping tra pid e posizione del relativo descrittore, molte altre tabelle del s.o. Utilizzano il process id per identificare un elemento della tabella dei processi. Queste informazioni corrispondono anche ad identificatori di altri processi logicamente collegati al processi, come un processo collegato al pid del padre, e corrispondono infine all'id dell'utente che ha richiesto l'esecuzione del processo. Tra i descrittori dei processi ci sono anche le informazioni di stato del processo, come registri generali del processore o registri speciali, come il program counter e i registri di stato.Altre informazioni sono quelle di controllo del processo, ad esempio le informazioni di scheduling, quindi lo stato del processo (in esecuzione, pronto o in attesa), o ci sono informazioni particolari necessarie dal particolare algoritmo di scheduling utilizzato (priorità, puntatori per la gestione delle code) come altre informazioni ci sono quelle dell'identificatore dell'evento per cui il processo è in attesa.Le informazioni di gestione della memoria contengono i valori dei registri base e limite dei segmenti utilizzati, puntatori alle tabelle delle pagine ecc, le informazioni di accounting contengono tempo di esecuzione del processo e tempo trascorso dall'attivazione di un processo, le informazioni relative alle risorse hanno in loro tutto sulle risorse controllate dal processo, come file aperti, device allocati al processo, come altre informazioni ci sono le informazioni per interprocess communication (IPC) tipo segnali, semafori, ecc... (Slide 11)