Introduzione ai Sistemi Operativi



Documenti analoghi
Il Sistema Operativo (1)

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Dispensa di Informatica I.1

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Un sistema operativo è un insieme di programmi che consentono ad un utente di

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Protocolli di Sessione TCP/IP: una panoramica

FONDAMENTI di INFORMATICA L. Mezzalira

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Software relazione. Software di base Software applicativo. Hardware. Bios. Sistema operativo. Programmi applicativi

INFORMATICA. Il Sistema Operativo. di Roberta Molinari

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Sistemi operativi e reti A.A Lezione 2

Il Sistema Operativo

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Il software di base comprende l insieme dei programmi predisposti per un uso efficace ed efficiente del computer.

Corso di Informatica

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

STRUTTURE DEI SISTEMI DI CALCOLO

Lezione 4 La Struttura dei Sistemi Operativi. Introduzione

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Approccio stratificato

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

Rack Station RS407, RS408, RS408-RP

Corso di Informatica

Gestione della memoria centrale

ASPETTI GENERALI DI LINUX. Parte 2 Struttura interna del sistema LINUX

Corso di Informatica

GESTIONE DEI PROCESSI

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

Architettura di un sistema operativo

Le Infrastrutture Software ed il Sistema Operativo

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Sistemi operativi. Esempi di sistemi operativi

Introduzione ai sistemi operativi

SDD System design document

Corso di Informatica

Architetture Applicative

Secondo biennio Articolazione Informatica TPSIT Prova Quarta

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Architettura di un calcolatore

In un modello a strati il SO si pone come un guscio (shell) tra la macchina reale (HW) e le applicazioni 1 :

Licenze OpenSource Libertà Digitali. by Stefano (zeno), Donato (scorpio2002) Antonio (Hawkeye)

Il Software. Il software del PC. Il BIOS

Architettura di un sistema di calcolo

Il memory manager. Gestione della memoria centrale

Funzioni del Sistema Operativo

Creare una Rete Locale Lezione n. 1

La Gestione delle risorse Renato Agati

IL SOFTWARE TIPI DI SOFTWARE. MACCHINE VIRTUALI Vengono definite così perché sono SIMULATE DAL SOFTWARE, UNIFORMANO L ACCESSO SISTEMA OPERATIVO

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Laboratorio di Informatica

C. P. U. MEMORIA CENTRALE

Coordinazione Distribuita

Corso di Sistemi di Elaborazione delle informazioni

Gestione del processore e dei processi

Sistemi Operativi (modulo di Informatica II) I processi

Introduzione alla Virtualizzazione

Pronto Esecuzione Attesa Terminazione

TEORIA DEI SISTEMI OPERATIVI

Il database management system Access

Informatica - A.A. 2010/11

Il sistema operativo. Sistema operativo. Multiprogrammazione. Il sistema operativo. Gestione della CPU

Il Sistema Operativo. Introduzione di programmi di utilità. Elementi di Informatica Docente: Giorgio Fumera

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Laboratorio di Informatica

Software di base. Corso di Fondamenti di Informatica

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

01/05/2014. Dalla precedente lezione. Ruolo dei sistemi operativi. Esecuzione dei programmi

Database. Si ringrazia Marco Bertini per le slides

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Introduzione ai Sistemi Operativi

Come funziona un sistema di elaborazione

Registratori di Cassa

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

Evoluzione dei sistemi operativi (5) Evoluzione dei sistemi operativi (4) Classificazione dei sistemi operativi

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Organizzazione Monolitica

1) GESTIONE DELLE POSTAZIONI REMOTE

Contenuti. Visione macroscopica Hardware Software. 1 Introduzione. 2 Rappresentazione dell informazione. 3 Architettura del calcolatore

Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE. D. Talia - UNICAL. Sistemi Operativi 6.1

Calcolatori Elettronici A a.a. 2008/2009

ISTVAS Ancona Introduzione ai sistemi operativi Tecnologie Informatiche

Lezione 2 Principi Fondamentali di SO Interrupt e Caching. Sommario

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Sistema operativo: Gestione della memoria

Sistemi Operativi Kernel

Introduzione. Coordinazione Distribuita. Ordinamento degli eventi. Realizzazione di. Mutua Esclusione Distribuita (DME)

Informatica di Base - 6 c.f.u.

HARDWARE. Relazione di Informatica

SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

Introduzione alla programmazione in C

Sistemi Operativi. Scheduling della CPU SCHEDULING DELLA CPU. Concetti di Base Criteri di Scheduling Algoritmi di Scheduling

Sistemi Operativi SCHEDULING DELLA CPU. Sistemi Operativi. D. Talia - UNICAL 5.1

MANUALE DI UTILIZZO: INTRANET PROVINCIA DI POTENZA

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Transcript:

Introduzione ai Sistemi Operativi Daniel P. Bovet, Vito Asta corso di Sistemi Operativi Facoltà di Ingegneria Università di Roma 1 La Sapienza - sede di Latina Anno Accademico 2002-2003 Versione 0.7, aprile 2003 Il materiale contenuto in queste dispense è soggetto al copyright GNU GENERAL PUBLIC LICENSE

GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODI- FICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The Program, below, refers to any such program or work, and a work based on the Program means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term modification.) Each licensee is addressed as you. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict

the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royaltyfree redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and any later version, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PRO- GRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM AS IS WI- THOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY CO- PYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, IN- CIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PRO- GRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS

Indice 1 Classificazione dei Sistemi Operativi 2 1.1 Introduzione.............................. 2 1.2 Definizione e ruolo di un Sistema Operativo............ 3 1.3 Software di base........................... 5 1.4 Classificazione dei Sistemi Operativi................ 6 1.4.1 Gestione a lotti........................ 7 1.4.2 Gestione a lotti multiprogrammata............. 9 1.4.3 Sistemi a partizione di tempo................ 13 1.4.4 Sistemi personali....................... 15 1.4.5 Sistemi transazionali..................... 16 1.4.6 Sistemi di controllo di processi............... 16 1.5 Una classificazione complementare................. 17 1.5.1 Sistemi di sviluppo...................... 17 1.5.2 Sistemi paralleli....................... 17 1.5.3 Sistemi distribuiti...................... 18 1.5.4 Sistemi in tempo reale.................... 19 1.6 Sviluppi futuri............................ 19 2 Struttura dei Sistemi Operativi 21 2.1 Introduzione.............................. 21 2.2 Standardizzazione e Sistemi Aperti................. 21 2.3 Componenti di un Sistema Operativo................ 22 2.3.1 Gestione dei processi..................... 22 2.3.2 Gestione della memoria primaria.............. 24 2.3.3 Gestione della memoria secondaria............. 24 2.3.4 Gestione del sistema di I/O................. 24 i

ii INDICE 2.3.5 Gestione dei file system................... 25 2.3.6 Sistema di protezione.................... 25 2.3.7 Networking.......................... 26 2.3.8 L interprete di comandi................... 26 2.4 Servizi e funzionalità di un Sistema Operativo........... 27 2.4.1 Panoramica delle chiamate di sistema........... 28 2.4.2 Chiamate di sistema e API................. 30 2.5 Implementazione di un Sistema Operativo............. 31 2.6 La programmazione di sistema................... 32 3 Struttura dei Calcolatori Elettronici 35 3.1 Introduzione.............................. 35 3.2 Architettura dei sistemi di calcolo.................. 35 3.3 Interruzioni hardware........................ 39 3.4 Interruzioni software......................... 40 3.5 I due modi della CPU........................ 42 3.6 Protezioni hardware......................... 43 3.6.1 Protezione della CPU.................... 43 3.6.2 Protezione della memoria.................. 43 3.6.3 Protezione dell I/O...................... 44 3.7 Acceso diretto alla memoria (DMA)................ 44 3.8 Dispositivi di memorizzazione.................... 45 3.8.1 Il caching........................... 47 3.9 Appendice - Gestione dello Stack.................. 49 4 Software di Base 54 4.1 Introduzione.............................. 54 4.2 Messa a punto di programmi.................... 54 4.2.1 Assemblatori, compilatori e interpreti........... 54 4.2.2 Linkaggio di programmi................... 56 4.2.3 Librerie statiche e dinamiche................ 58 4.2.4 Immissione di programmi.................. 61 4.2.5 Caricamento in memoria di un file eseguibile....... 61 4.3 Supporto durante l esecuzione.................... 62 4.4 Salvataggio/ripristino di dati.................... 63 4.5 Amministrazione del sistema.................... 64

INDICE iii 5 Il File System 65 5.1 Introduzione.............................. 65 5.2 Ruolo di un file system........................ 66 5.3 Protezione delle informazioni.................... 67 5.4 Strutturazione di un file system................... 67 5.4.1 Struttura dei file....................... 67 5.4.2 Struttura dei nomi di file.................. 68 5.4.3 Attributi dei file....................... 68 5.4.4 Struttura e implementazione delle cartelle......... 69 5.4.5 Operazioni su file e cartelle................. 69 5.5 Implementazione dei file system................... 70 5.5.1 Dimensione dei blocchi.................... 70 5.5.2 Allocazione di blocchi ai file................. 71 5.5.3 Gestione dello spazio libero................. 71 5.5.4 Ottimizzazione delle prestazioni............... 72 5.6 Il file system di Unix......................... 73 5.6.1 Strutturazione del file system................ 73 5.6.2 File e cartelle......................... 74 5.6.3 Link hard e soft....................... 76 5.6.4 Tipi di file........................... 77 5.6.5 Inode, i-number, descrittore di file............. 77 5.6.6 Diritti d accesso e file mode................. 78 5.7 Chiamate di sistema per la gestione di file............. 80 5.7.1 Apertura di un file...................... 80 5.7.2 Indirizzamento di un file................... 81 5.7.3 Chiusura di un file...................... 83 5.7.4 Cambiamento di nome e cancellazione di file....... 83 5.7.5 Esempi............................ 84 5.8 Appendice - Funzioni di hashing.................. 87

iv INDICE 6 Interfaccia con l Utente 89 6.1 Introduzione.............................. 89 6.2 Interfaccia a menu.......................... 89 6.3 Interfaccia a comandi......................... 90 6.3.1 Lo shell di Unix........................ 90 6.3.2 Struttura dello shell..................... 92 6.4 Interfacce grafiche.......................... 94 6.4.1 Interfacce grafiche per Unix................. 95 6.5 Interfaccia grafica o a comandi................... 95 7 Gestione dei Processi e della CPU 96 7.1 Introduzione.............................. 96 7.2 Multitasking............................. 96 7.2.1 Cicli di uso della CPU e di I/O............... 97 7.3 Processi................................ 99 7.3.1 Operazioni su processi.................... 100 7.3.2 Stati di un processo..................... 102 7.3.3 Eventi e risorse........................ 104 7.3.4 Descrittore di processo.................... 106 7.3.5 Cambio di contesto...................... 107 7.3.6 Thread............................ 107 7.4 Scheduling di processi........................ 110 7.4.1 Code di scheduling...................... 111 7.4.2 Tipi di scheduler....................... 111 7.4.3 Criteri di scheduling..................... 113 7.4.4 Scheduling a breve termine................. 115 7.4.5 Algoritmi di scheduling della CPU............. 117 7.4.6 Scheduling a lungo termine................. 123 8 Processi Concorrenti 125 8.1 Introduzione.............................. 125 8.2 Programmi concorrenti........................ 125 8.2.1 Controllo di processi in Unix................ 127 8.3 Sincronizzazione tra processi.................... 138 8.3.1 Ruolo delle risorse consumabili............... 138

INDICE v 8.3.2 Paradigma della mutua esclusione............. 138 8.3.3 Paradigma produttore/consumatore............ 139 8.4 Primitive di sincronizzazione.................... 140 8.4.1 Primitive di sincronizzazione in Unix............ 142 8.5 Stallo tra processi.......................... 145 8.6 Programmazione in tempo reale................... 147 9 Spazio degli Indirizzi di un Processo 148 9.1 Introduzione.............................. 148 9.2 Indirizzi e regioni........................... 148 9.3 Modifiche dello spazio degli indirizzi................ 152 9.4 Linking dinamico........................... 154 9.5 Mapping di file in memoria..................... 156 9.5.1 Altri tipi di mapping..................... 156 10 Struttura Interna del Nucleo 159 10.1 Introduzione.............................. 159 10.2 Nucleo e processi........................... 159 10.3 Che cosa è il Nucleo......................... 160 10.4 Ruolo dei segnali di interruzione.................. 162 10.5 Gestori delle interruzioni....................... 162 10.6 Implementazione delle chiamate di sistema............. 163 10.7 Descrittori di risorse......................... 164 10.8 Interrompibilità del Nucleo..................... 165 10.9 Microkernel e kernel monolitici................... 168 10.10Implementazione dei processi in Linux............... 170 10.11Scelta del linguaggio di programmazione.............. 175 11 Gestione della Memoria Primaria 177 11.1 Introduzione.............................. 177 11.2 Indirizzamento della RAM...................... 178 11.3 Paginazione.............................. 178 11.3.1 Indirizzi logici riservati ai programmi del Nucleo..... 181 11.4 L algoritmo Buddy System..................... 181 11.5 Estensioni del Buddy System.................... 183 11.6 Demand Paging............................ 184 11.7 Swapping............................... 185

vi INDICE 12 Gestione della Memoria Secondaria 188 12.1 Introduzione.............................. 188 12.2 Gestione dello spazio su disco.................... 188 12.3 Scheduling del disco......................... 190 12.3.1 Scheduling FCFS....................... 191 12.3.2 Scheduling SSTF....................... 191 12.3.3 Scheduling SCAN...................... 192 12.3.4 Scheduling C-SCAN..................... 192 12.3.5 Scheduling LOOK e C-LOOK................ 193 12.4 Gestione dei dischi.......................... 193 12.4.1 Formattazione dei dischi................... 193 12.4.2 Gestione del blocco di bootstrap.............. 194 12.4.3 Gestione dei blocchi difettosi................ 194 12.5 Gestione della zona di swap..................... 194 13 Gestione dei Dispositivi di I/O 196 13.1 Introduzione.............................. 196 13.2 Architettura di I/O.......................... 196 13.3 Dispositivi di I/O riconosciuti dal file system........... 198 13.3.1 Programmazione di un device file.............. 198 13.4 Supporto del Nucleo......................... 199 13.5 Sincronizzazione tra CPU e dispositivo di I/O........... 200 13.6 Uso di cache nei driver per dischi.................. 201

Elenco delle tabelle 4.1 Confronto tra linguaggi compilati e interpretati........... 56 7.1 Differenza di produttività indotta dal multitasking......... 99 7.2 Esempio di processi per l algoritmo di scheduling SJF....... 118 7.3 Esempio di processi per gli algoritmi di scheduling SJF e RR... 121 vii

viii ELENCO DELLE TABELLE

Elenco delle figure 1.1 Componenti di un sistema di calcolo - schema........... 4 1.2 Organizzazione della memoria RAM per un sistema batch monoprogrammato.............................. 9 1.3 Organizzazione della memoria RAM per un sistema batch multiprogrammato.............................. 11 1.4 Stati dei task in un sistema a partizione di tempo......... 15 1.5 Schema architetturale di un sistema SMP.............. 18 2.1 Esecuzione di una chiamata di sistema mediante Trap....... 29 2.2 API, chiamate di sistema e Nucleo.................. 31 3.1 Architettura di un sistema di calcolo................. 36 3.2 Struttura della ALU.......................... 37 3.3 Struttura fisica di un disco...................... 46 3.4 Gerarchia dei dispositivi di memorizzazione............. 47 3.5 Organizzazione di uno stack..................... 53 4.1 Un esempio di riferimenti tra moduli................. 57 4.2 Un esempio di collegamento tra moduli............... 58 4.3 Fasi di messa a punto di un programma............... 62 5.1 Organizzazione di un file system di Unix.............. 74 5.2 Collocazione dei file nello spazio dei nomi.............. 75 5.3 Tecnica delle tabelle di hashing.................... 88 7.1 Architettura minima di riferimento per un sistema concorrente.. 97 7.2 Un esempio di esecuzione multitasking di programmi....... 98 7.3 Stati di un processo e relative transizioni.............. 103 ix

x ELENCO DELLE FIGURE 7.4 Commutazione e cambio di contesto tra due processi........ 108 7.5 Code di scheduling dei processi.................... 112 7.6 Migrazione dei processi tra le code di scheduling.......... 113 7.7 Diagramma degli stati dei processi e ruolo degli scheduler..... 114 7.8 Punti di intervento dello scheduler di CPU............. 116 7.9 Scheduling FCFS, primo caso..................... 117 7.10 Scheduling FCFS, secondo caso.................... 117 7.11 Scheduling FCFS, senza prelazione.................. 118 7.12 Scheduling FCFS, con prelazione................... 119 7.13 Scheduling SJF, confronto con RR.................. 122 7.14 Scheduling RR............................. 122 8.1 Un esempio di sincronizzazione tra processi............. 127 8.2 Creazione di una pipe e condivisione con un processo figlio.... 135 8.3 Interazione tra processi di sistema in un sistema per la gestione a lotti.................................. 141 8.4 Esempio di stallo tra due processi.................. 146 9.1 Spazio degli indirizzi di un processo................. 150 10.1 Struttura interrupt driven del Nucleo............... 161 10.2 Esecuzione di una chiamata di sistema da parte del Nucleo.... 164 10.3 Esecuzione annidata di programmi del Nucleo........... 166 10.4 Chiamata di sistema che pone il processo in uno stato di attesa.. 167 10.5 Esecuzione di un processo prioritario con gestione interruzione incompiuta............................... 167 10.6 Interazione client/server tra processo utente e processo di sistema. 169 11.1 Trasformazione di un indirizzo logico in un indirizzo fisico..... 179 11.2 Swapping................................ 187 13.1 Architettura di I/O.......................... 197

Premessa La presente dispensa è una versione derivata da quella omonima scritta dal Prof. Daniel P. Bovet, con adattamenti ed ampliamenti a cura dell ing. Vito Asta, ed è destinata ai corsi di Sistemi Operativi tenuti da quest ultimo per i corsi di laurea e di laurea specialistica in Ingegneria Gestionale, Ingegneria delle Telecomunicazioni e Ingegneria Elettronica dell Università Tor Vergata - Roma 2, nonché per i corsi di laurea in Ingegneria Informatica e Ingegneria delle Telecomunicazioni dell Università La Sapienza - Roma 1 (sede distaccata di Latina). La maggior parte degli argomenti trattati è accompagnata, ovunque possibile, con esempi concreti di codice in ambiente Unix/Linux, in particolare per illustrare l uso reale delle chiamate di sistema o funzioni di libreria trattate. Ogni esempio di codice è preceduto dalla sua esposizione sintetica in pseudo-codice, per facilitarne la comprensione ed eventualmente per permettere anche al lettore non pratico del linguaggio C di capirne il significato e la logica. Nel testo, i riferimenti a comandi, chiamate di sistema e funzioni di libreria sono annotati in questa font di caratteri; i corrispondenti riferimenti a pagine di manuale sono invece annotati secondo la convenzione invalsa nella documentazione del Sistema Operativo Unix, nome(sezione). Così read() è un generico riferimento alla omonima chiamata di sistema, mentre read(2) è un riferimento alla relativa pagina di manuale, nella sezione 2 (e quindi un esplicito invito al lettore a consultarla). Per informazioni sulla strutturazione delle sezioni della manualistica Unix, si veda Asta [3]. La dispensa è al momento in uno stato non ancora definitivo; pertanto alcuni degli argomenti sono accennati solo schematicamente. Lo studente è invitato, per queste parti, a far riferimento alle dispense dalle lezioni, pubblicate sul sito WEB del corso: http://www.axdigital.com/~vito/solt 1

Capitolo 1 Classificazione dei Sistemi Operativi 1.1 Introduzione Lo studio del software di base in generale e dei Sistemi Operativi in particolare si rivela complesso in quanto doppiamente condizionato, sia dalla architettura (hardware) del calcolatore per cui è progettato tale software, sia dalle diverse esigenze dell utenza a cui il sistema finale (hardware più software) è destinato. L approccio seguito in questo testo è quello di scindere, per quanto possibile, le esigenze dell utenza, e quindi le caratteristiche funzionali del software di base, dalle tecniche di realizzazione. A tale scopo, si introducono in questo capitolo alcuni concetti preliminari attinenti alla definizione stessa e al ruolo di un Sistema Operativo, quindi all area del software di base; successivamente si illustrano, prescindendo dai criteri realizzativi, le funzionalità di varie classi di Sistemi Operativi, mettendo in evidenza al tempo stesso l evoluzione storica che tali sistemi hanno subìto in funzione delle innovazioni tecnologiche conseguite. Tecnicamente parlando, un Sistema Operativo consiste essenzialmente in quattro moduli principali: un programma di inizializzazione che viene eseguito quando viene avviato l elaboratore 1 ; un Nucleo che esegue chiamate di sistema, ossia particolari procedure mediante le quali i programmi possono richiedere uno dei vari servizi offerti dal Nucleo 2 ; un sistema d archiviazione (file system) 3 ; un interfaccia che consente all utente di esprimere le proprie richieste 4. 1 Questo argomento è trattato nel Paragrafo 10.3 pag. 160. 2 Argomento trattato nel Paragrafo 2.4.2 pag. 30. 3 Argomento trattato nel Capitolo 5. 4 Argomento trattato nel Capitolo 6. 2

1.2. DEFINIZIONE E RUOLO DI UN SISTEMA OPERATIVO 3 In effetti, i testi di Sistemi Operativi più accreditati si limitano a trattare i suddetti argomenti. Dato il carattere introduttivo di questo testo, si ritiene tuttavia opportuno studiare i Sistemi Operativi seguendo un approccio top down, partendo quindi da una descrizione delle varie componenti di un sistema di calcolo, fino ad arrivare (nei prossimi capitoli) all analisi delle varie componenti importanti di un Sistema Operativo. 1.2 Definizione e ruolo di un Sistema Operativo A differenza di altre macchine, il calcolatore, considerato come congerie di circuiti hardware, non è un oggetto facilmente utilizzabile di per se stesso: esso è in grado di eseguire istruzioni e quindi programmi, purché tali programmi siano scritti in linguaggio macchina binario, l unico riconosciuto dal calcolatore. Inoltre, quando un calcolatore inizia ad operare in seguito all accensione, esso cerca in una area di memoria (generalmente, su una traccia di disco prefissata) le istruzioni da caricare in memoria e da eseguire per prime. Com è ovvio, questa inizializzazione della macchina, chiamata bootstrapping, sarà effettuata con successo, a condizione che la traccia di disco letta contenga effettivamente un programma scritto in linguaggio macchina. Si desume da quanto appena detto che è praticamente impossibile per l utente utilizzare direttamente l hardware di un calcolatore, anche accettando di programmare in linguaggio binario, a meno di non disporre di strumenti che gli consentano, da un lato, di immettere programmi nella macchina e, dall altro, di estrarre dalla memoria verso l esterno i risultati dei calcoli eseguiti. È da queste considerazioni, ed altre ad esse correlate, che scaturisce la necessità di disporre di Sistemi Operativi. Un Sistema Operativo è un programma (o un insieme di programmi) che agisce da intermediario tra l hardware e l utente. Gli scopi di un Sistema Operativo sono fondamentalmente due: eseguire programmi dell utente e rendere più facile la soluzione dei suoi problemi; rendere il calcolatore conveniente ed efficiente da usare. Si noti, ed è questo un dettaglio non da poco, che i termini convenienza (cioè facilità d uso) ed efficienza sono spesso in contraddizione tra loro: molto spesso la facilità d uso viene ottenuta ampliando gli strati intermedi di software, per aggiungere funzionalità più sofisticate o più ergonomiche, e ciò appesantisce inevitabilmente il sistema globale. Si pensi, per fare un esempio tipico, alla pesantezza (in termini di risorse di calcolo, di dispositivi hardware, di spazio in memoria centrale e su disco) di un qualunque sistema di interfaccia grafica: tale interfaccia è con tutta evidenza piacevole e potente, tanto da permettere tipicamente l uso di un calcolatore anche a persone senza nessuna esperienza informatica; ma è estremamente più pesante rispetto ad una semplice interfaccia a carattere (cioè a riga di comando), come quella offerta dallo shell di Unix 5. 5 Lo shell di Unix viene trattato nel Paragrafo 6.3.1 pag. 90; si veda inoltre Asta [3] e [4].

4 CAPITOLO 1. CLASSIFICAZIONE DEI SISTEMI OPERATIVI User 1 User 2 User 3 User N... Compilatore Assembler Editor di testo Sistema di database Software di base Nucleo Hardware del computer Figura 1.1: Componenti di un sistema di calcolo - schema. Da un punto di vista macroscopico, un Sistema Operativo può pensarsi diviso in due componenti principali 6 : un Nucleo, o Kernel, che è la parte residente di un Sistema Operativo (sempre in memoria e sempre pronta ad eseguirsi); Un insieme di programmi 7 e di funzioni di libreria a corredo, facente parte stabile della distribuzione del Sistema Operativo, detto software di base. Tale insieme, commentato più in dettaglio nel Paragrafo 1.3, comprende a sua volta diverse categorie. Allargando la visuale, e ricordando come detto che il Sistema Operativo fa da intermediario tra l hardware e l utente, si può dire che le componenti di un sistema di calcolo sono dunque quattro, illustrate nella Figura 1.1: hardware fornisce le risorse di calcolo basilari: CPU (unità centrale), memoria, dispositivi di I/O (ingresso/uscita); Nucleo controlla e coordina l uso dell hardware tra i vari programmi per tutti gli utenti; come già detto, è la parte di un Sistema Operativo sempre in memoria e sempre pronta a eseguirsi; 6 Alcuni autori tendono a definire un Sistema Operativo come la sola parte sempre residente in memoria, cioè lo identificano col solo Nucleo. 7 Tali programmi sono talvolta divisi in due gruppi: programmi detti di sistema e programmi applicativi di base; la distinzione comunque non è netta ed univoca nella letteratura.

1.3. SOFTWARE DI BASE 5 software di base tale strato definisce i modi in cui le risorse del sistema vengono usate per risolvere i problemi computazionali degli utenti, e comprende tra l altro compilatori 8, sistemi di data base, sistemi di automazione d ufficio, etc. utenti sono in definitiva coloro che devono usufruire delle capacità dei sistemi di calcolo, e possono essere, in pratica, non solo persone fisiche, ma anche macchine dedicate, o altri calcolatori. 1.3 Software di base Si è già accennato, in apertura di capitolo, alla necessità di disporre di adeguati strati di software che permettano all utente di non dover gestire l hardware di un calcolatore in modo diretto; da ciò scaturisce, tra l altro, l esigenza di disporre di programmi di base e di funzioni di libreria che permettano all utente di porsi ad un livello più macroscopico ma più agevole nel servirsi di una macchina da calcolo. Fortunatamente, già negli anni 40 i progettisti delle prime macchine scoprirono che era conveniente sviluppare programmi in maniera modulare, introducendo sottoprogrammi (o subroutine) generiche richiamabili dal programma principale; il concetto si è poi esteso a programmi standard di uso comune, presenti nella distribuzione di un dato Sistema Operativo: era nato, in nuce, il software di base, inteso come corredo di programmi e funzioni di libreria standard accessibili all utente con lo scopo di facilitare l interazione uomo/macchina. Da allora, il software di base è evoluto di pari passo all hardware con delle marcate interdipendenze: sviluppi nel campo delle architetture e delle apparecchiature periferiche rendono necessario lo sviluppo di nuovo software di base; allo stesso tempo, tecniche di programmazione collaudate condizionano la progettazione dei più recenti microprocessori. Anche se non esistono definizioni rigorose, si indica dunque come software di base l insieme di programmi e funzioni di libreria, a disposizione di tutti gli utenti di un sistema, che complementano il Nucleo nel fornire le funzionalità di un Sistema Operativo. Il software di base fornisce un ambiente standard per lo sviluppo e l esecuzione di programmi e di procedure di comandi, e più in generale per l utilizzazione pratica del sistema. Il software di base può essere diviso in varie categorie 9 : Programmi a complemento delle funzionalità del kernel (lilo, init, etc.; vari daemon 10 : telnetd, ftpd, httpd, sendmail, etc.) 8 Il meccanismo di funzionamento di compilatori ed interpreti verrà descritto più in dettaglio nel Paragrafo 4.2.1 pag. 54. 9 Per ognuna delle categorie si danno esempi reali, propri del Sistema Operativo Linux; per maggiori dettagli, si veda Asta [3], o si consultino le relative pagine di manuale: ad es., init(8), bash(1), cc(1); per le librerie di funzioni, si consulti intro(3). 10 Il termine daemon, in ambiente Unix, indica genericamente un programma che funge da server per un applicazione di rete; così ad esempio ftpd indica il server per l applicazione FTP (File Transfer Protocol) di trasferimento di file su reti di tipo Internet, cioè basate

6 CAPITOLO 1. CLASSIFICAZIONE DEI SISTEMI OPERATIVI Interfaccia utente (sh, ksh, bash, etc.) Librerie di funzioni standard di uso comune (libc, libm, libcrypt, etc.) Supporto per linguaggi di programmazione (cc, as, ld, ar, pc, perl, python, javac, etc.) Caricamento, esecuzione e profiling di programmi (sh, adb, sdb, prof, time, etc.) Modifica di file (ed, vi, emacs, etc.) Manipolazione di file e cartelle (cp, mv, rm, mkdir, etc.) Informazione sullo stato del sistema (date, ls, who, df, du, etc.) Comunicazione (vari client: telnet, ftp, mutt 11, netscape, rlogin, rcp, rsh, ping, etc.) A tal proposito, è importante notare che la maggior parte degli utenti vede (e giudica) un Sistema Operativo proprio dai programmi appartenenti al software di base, e non dalle chiamate di sistema e dalle funzioni di libreria; i primi sono di fatto l interfaccia verso l utente, e quindi costituiscono l interfaccia di base tra l utente e il Sistema Operativo(interfaccia utente), mentre le seconde realizzano un secondo tipo di interfaccia (interfaccia di programmazione), che però è visibile solo a quel sottoinsieme di utenti che scrivono programmi. A differenza dei programmi applicativi veri e propri, che servono, come il nome indica, a specializzare il calcolatore per risolvere problemi legati al mondo della produzione e del lavoro, i programmi nell area del software di base si collocano a un livello intermedio tra l hardware e i programmi applicativi. Anche qui la linea di demarcazione è alquanto soggettiva, ma si può dire ad esempio che un programma di gestione magazzino sviluppato per una azienda è senz altro un esempio di programma applicativo; viceversa, un programma flessibile che consente, partendo da uno schema generale, di costruire un programma di gestione magazzino, fornendo informazioni specifiche sul modo in cui l azienda registra i prodotti immagazzinati, può essere considerato software di base. 1.4 Classificazione dei Sistemi Operativi Risulta opportuno, prima di procedere oltre nello studio dei Sistemi Operativi, dare una schematica classificazione di tali sistemi che metta in evidenza le sulla suite di protocolli TCP/IP. Il nome di questi server, come si può notare dagli esempi, termina di solito con la lettera d, che sta appunto ad indicare che si tratta di un daemon. Il client corrispondente (cioè il programma che viene attivato dall utente e interagisce con esso, richiedendo servizi al server con il quale si collega) di norma ha lo stesso nome, ma senza la d finale; così il client FTP si chiama appunto ftp. I server (o daemon) sono programmi che di regola vengono lanciati automaticamente all avvio del sistema, e non terminano mai (se non all arresto del sistema). Per approfondimenti sulle reti di calcolatori e sulla programmazione TCP/IP secondo il paradigma client-server, si veda Tanenbaum [16] e Stevens [14]. 11 Mutt è un client molto potente del protocollo SMTP (Simple Mail Transfer Protocol), per la gestione della posta elettronica.

1.4. CLASSIFICAZIONE DEI SISTEMI OPERATIVI 7 caratteristiche dell utenza che essi devono soddisfare, più che le tecniche realizzative hardware e software. Com è ovvio, sono possibili più tipi di classificazioni, che riflettono differenti approcci di analisi. Una prima suddivisione, che tiene in conto sia aspetti funzionali che di cronologia evolutiva, distingue quattro tipi principali di Sistemi Operativi, chiamati rispettivamente: sistemi batch (o a lotti) si dividono a loro volta in sistemi batch monoprogrammati sistemi batch multiprogrammati sistemi interattivi (o a partizione di tempo; in inglese, time-sharing) sistemi personali sistemi dedicati divisibili anch essi in sistemi transazionali sistemi per il controllo di processi I Sistemi Operativi dei primi tre tipi offrono all utente la possibilità di scrivere, mettere a punto ed eseguire programmi arbitrari scritti in uno dei linguaggi di programmazione supportati dal sistema. L utente tipico di tali sistemi, che saranno descritti nel seguito del paragrafo, è quindi in molti casi un programmatore, che accede al calcolatore tramite un terminale. Il dialogo utente-sistema si svolge normalmente inviando comandi da terminale e ricevendo in risposta messaggi audiovisivi dal sistema. Come si vedrà in seguito, le funzioni del Sistema Operativo nell assistere il programmatore vanno ben oltre la semplice compilazione ed esecuzione controllata di programmi, per cui si parla comunemente di ambiente di sviluppo offerto dal Sistema Operativo, intendendo con tale termine l insieme di servizi offerti che consentono una maggiore facilità nella progettazione, nella stesura e nella verifica di nuovo software. Come meglio evidenziato nel seguito del capitolo, invece, i sistemi del quarto gruppo sono dedicati ad un tipo specifico di applicazione, e non permettono lo sviluppo di nuovi programmi. 1.4.1 Gestione a lotti Tralasciando le primissime implementazioni, che risalgono alla prima metà del secolo trascorso, la prima forma sufficientemente organizzata di Sistema Operativo vide la luce grazie all introduzione di lettori di schede perforate. Nacque così, all inizio degli anni 50, una modalità di colloquio chiamata gestione a lotti (batch processing). Le principali caratteristiche di tale forma di colloquio possono così essere sintetizzate: Le richieste degli utenti sono costituite da pacchi di schede perforate; ogni pacco, chiamato lavoro o job inizia con una scheda di identificazione dell utente e consiste in una sequenza di passi o step. Il job viene fisicamente