Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

All'atto dell'accensione è necessario che un particolare programma scritto in binario avvii le elaborazioni: esso deve per prima cosa essere caricato in memoria centrale RAM (dato che un programma deve essere presente in memoria centrale per essere eseguito) e quindi successivamente mandato in esecu...

All'atto dell'accensione è necessario che un particolare programma scritto in binario avvii le elaborazioni: esso deve per prima cosa essere caricato in memoria centrale RAM (dato che un programma deve essere presente in memoria centrale per essere eseguito) e quindi successivamente mandato in esecuzione. 1. Il programma di bootstrap (o semplicemente di boot) viene scritto dal produttore dell'hardware ed è memorizzato in ROM. 2. All'accensione del PC l'hardware è predisposto per effettuare il caricamento del programma di boot a partire da un determinato indirizzo (i processori a 32 bit caricano la prima istruzione dall'indirizzo esadecimale 0xFFFFFFF0 di quello che si chiama IPL, Initial Program Loader, che assume il controllo della CPU all'accensione) 3. Ogni componente hardware, appena viene alimentato, manda in esecuzione un programma di autodiagnostica POST (Power On Self Test), che è costituito da una serie di test che verificano il corretto funzionamento del dispositivo. eventi generati dalla funzione image\_start() dopo l'accensione del PC: 1. Dopo aver effettuato POST in scheda madre che controlla se tutti test sono andati a buon fine, pc fa il suono beep e si procede con lo stesso test sulla scheda video 2. Conteggio della memoria dinamica 3. Controllo delle periferiche di input 4. Controlli delle periferiche collegate al PC Apple -\> bootstrap si trova soltanto sulla RAM Windows -\> si trova parzialmente sul disco Al termine di queste operazioni, kernel, ovvero il nucleo del OS che sarà descritto in seguito, viene caricato in memoria. Tutte queste operazioni sono effettuate eseguendo le istruzioni presenti nel programma di boot; nei sistemi IBM sono un insieme di routine software alle quali è stato dato il nome di BIOS (Basic Input-Output System) sostituito in quasi tutti i PC a partire del 2010 da UEF. BIOS, ovvero firmware è un software stabile non modificabile dall'utente. OS ---\> un gruppo di programmi che gestisce il funzionamento del computer agendo come intermediario tra l'utente e il calcolatore. Il software di base è costituito da: - il sistema operativo; - i linker; - gli editor; - i loader; - i traduttori; - i debugger Software di sistema serve al computer per funzionare, software applicativo serve all'utente per lavorare. È possibile installare due OS contemporaneamente sul computer grazie alla partizione del disco, cioè la suddivisione di esso. Il sistema operativo, svolge principalmente due compiti: - è il gestore delle risorse hardware (CPU, memoria, periferiche) - fornisce il supporto all'utente per impartire i comandi necessari al funzionamento del computer, cioè fa da interfaccia tra l'hardware e il software applicativo Il SO risiede sull'hard disk come tutti gli altri programmi e viene caricato nella memoria RAM all'accensione della macchina, o meglio, solo una sua parte viene caricata in memoria centrale ovvero kernel che rimane sempre caricato in memoria. Il OS lavora sullo schema chiamato "a buccia di cipolla" perché è formato da un insieme di programmi che si occupano ognuno del compito proprio. Deitel 1983. - 1° livello, nucleo (kernel); - 2° livello, gestore della memoria centrale; - 3° livello, gestore delle periferiche; - 4° livello, file system; - 5° livello, interfaccia con l'utente (shell) o interprete dei comandi; - 6° livello, programmi applicativi Shell serve a kernel per poter comunicare con l'utente tramite le chiamate delle funzioni se esse non vengono chiamate direttamente dai programmi utente. - le interfacce grafiche di tipo CUI sono tipiche dei sistemi operativi a linea di comando, come per esempio MS-DOS, Unix e Linux (nelle vecchie distribuzioni), che presentano un invito, o prompt; - le interfacce grafiche di tipo GUI sono tipiche dei sistemi operativi user friendly, come per esempio Windows, macOS e Linux (nelle distribuzioni più recenti). Con kernel si occupa di interagire con i programmi applicativi che, ogni volta che necessitano di un servizio da parte di un dispositivo hardware, devono "passare attraverso lui". I programmi utente non possono accedere direttamente ai dispositivi fisici, ma possono utilizzare solo dispositivi logici attraverso primitive di sistema che costituiscono il kernel. Tra i suoi compiti fondamentali: - avvio e terminazione dei programmi (cioè la gestione dei processi); - assegnazione della CPU ai diversi processi; - sincronizzazione tra i processi; - sincronizzazione dei processi con l9ambiente esterno Il primo SO idoneo a essere utilizzato su PC è stato l9MS-DOS (MicroSoft Disk Operative System), in seguito spesso chiamato semplicemente DOS. Possedeva il pregio di occupare poca memoria RAM ma lo svantaggio di richiedere conoscenze tecniche abbastanza approfondite da parte dell'utente. Le differenze tra un programma e un processo: - Il programma è costituito dall'insieme delle istruzioni, memorizzato su memoria di massa (è un'entità statica). - Il processo è un'istanza di un programma in evoluzione, cioè che è eseguito dal processore, quindi deve essere residente in memoria RAM (è un'entità dinamica). - Task e Job sono sinonimi di processo (letteralmente "compito"): - nei sistemi batch si parla di job; - nei sistemi di time sharing si parla di processo o task L'ottimizzazione del tempo di CPU avviene grazie alla multiprogrammazione, cioè alla contemporanea presenza di più programmi in memoria: - dello scheduling dei job, che consiste nell'insieme delle strategie e dei meccanismi utilizzati per la scelta dei programmi che dal disco devono essere caricati in RAM; - dello scheduling della CPU, che consiste nell'insieme delle strategie e dei meccanismi che permettono di assegnare e sospendere l9utilizzo della CPU da parte dei vari programmi. L'esecuzione di un programma, quindi un processo, è costituita da una successione di fasi di elaborazione sulla CPU e fasi di attesa per l'esecuzione di operazioni su altre risorse del sistema. Distinzione di parallelismo in: - multitasking, ossia esecuzione di più programmi indipendenti sulla CPU e sul processore di I/O; - multiprocessing, ossia multiprogrammazione estesa a elaboratori dotati di più CPU e processori di I/O Il processo è costituito da due parti. - Il codice (composto dalle istruzioni). - I dati del programma, a loro volta suddivisi in: - variabili globali, allocate in memoria centrale nell9area dati globali; - variabili locali e non locali delle procedure del programma, memorizzate in uno stack; - variabili temporanee introdotte dal compilatore (tra cui il program counter) caricate nei registri del processore; - variabili allocate dinamicamente durante l9esecuzione, memorizzate in un heap. L'insieme di tutti i dati di un processo prende anche il nome di contesto del processo che, naturalmente, varia istante per istante, a partire dal valore contenuto nel program counter, un registro che specifica l'istruzione successiva che la CPU deve eseguire. Riassumendo, abbiamo quindi tre modelli di computazione per i processi: - modello di computazione indipendente; - modello di computazione con cooperazione; - modello di computazione con competizione Vediamo dettagliatamente in quale stato può trovarsi un processo rispetto al processore: 1. nuovo (new), è lo stato in cui si trova un processo appena è stato creato, cioè quando l9utente richiede l'esecuzione di un programma che risiede sul disco; 2. esecuzione (running), è lo stato di evoluzione del processo, nel senso che la CPU sta eseguendo le sue istruzioni, e quindi a esso è assegnato il processore. Nei sistemi a monoprocessore (quelli analizzati in questo testo) un solo processo può essere in questo stato; 3. in attesa o sospeso (waiting), è lo stato del processo quando gli manca una risorsa per poter evolvere e quindi sta aspettando che si verifichi un evento (per esempio che si liberi la risorsa che gli serve e che il processore gliela assegni); 4. pronto (ready-to-run), è lo stato del processo quando ha tutte le risorse necessarie alla sua evoluzione tranne la CPU (cioè è il caso in cui sta aspettando che gli venga assegnato il suo time-slice di CPU, vedi più avanti in questa lezione); 5. terminato o finito (terminated), è lo stato in cui tutto il codice del processo è stato eseguito e quindi ha terminato l'esecuzione; il sistema operativo deve ora rilasciare le risorse che esso utilizzava. Seguiamo ora la vita di un processo dal principio. - Il nuovo processo si vede assegnato un identificatore (PID, Process IDentifier) e viene inserito nell'elenco dei processi pronti (RL, Ready List) in attesa che arrivi il suo turno di utilizzo della CPU. - Quando gli viene assegnata la CPU, il processo passa nello stato di esecuzione, dal quale può uscire per tre motivi: 1. termina la sua esecuzione, cioè il processo esaurisce il suo codice e quindi finisce (exit); 2. termina il suo tempo di CPU, cioè il suo quanto di tempo, e quindi ritorna nella lista dei processi pronti (RL); 3. gli manca la disponibilità di una risorsa, ossia per poter evolvere necessita di una risorsa che al momento non è disponibile e quindi il processo si sospende (suspend) e passa nello stato di attesa, insieme ad altri processi, formando la Waiting List (WL). Con RL si indica la Ready List, cioè la lista dei processi che si trovano nello stato di pronto (ready) e stanno aspettando il loro turno di utilizzo della CPU. Con WL si indica la Waiting List, cioè la lista dei processi che si trovano nello stato di attesa (wait), aspettando che si liberi una risorsa oltre alla CPU che permetta loro di evolvere (stampante, memoria ecc.). Dallo stato di sospeso, cioè dallo stato di attesa, un processo non può passare in quello di esecuzione: infatti, quando si rende disponibile la risorsa che sta "aspettando", viene spostato dalla WL ma viene inserito nelle RL, cioè nella lista dei processi pronti ad accedere alla CPU. Il program counter, lo stato e i registri formano il contesto del processo: questi campi prendono anche il nome di area di salvataggio dello stato della CPU. I meccanismi con i quali i processi vengono scelti dal WL prendono il nome di politiche di gestione o di schedulazione (scheduling) e il componente del SO che si occupa di questa gestione si chiama job scheduler. A seconda della modalità di gestione, lo scheduler sospende il processo che è in esecuzione mettendolo nella coda dei processi pronti e "risvegliando" un processo da tale coda per assegnargli la CPU: questo evento produce quello che si chiama cambio di contesto (context-switch). Il processo che viene sospeso dovrà successivamente essere ripristinato senza che rimanga traccia di quanto è successo: al processo deve \ - i sistemi batch puntano a massimizzare il throughput, cioè il numero di job per unità di tempo; - a minimizzare il turnaround time, cioè il tempo medio di completamento; - i sistemi interattivi invece hanno l'obiettivo di minimizzare i tempi di risposta dando l'impressione di "esclusività" tra utente e sistema; Algoritmi di scheduling: - FCFS - SJF - Con priorità - Round Robin - MLFQ Per evitare di gestire singolarmente i blocchi fisici, i dati vengono organizzati in file e la loro gestione è demandata a un componente specifico del SO: il file system. Con file system si intende quella parte del sistema operativo che gestisce la memorizzazione dei dati e dei programmi su dispositivi di memoria permanenti e mette a disposizione i programmi e i meccanismi necessari per la loro gestione. Il file system è composto dai file appartenenti agli utenti e dai file di sistema che contengono dati o programmi; questi file sono organizzati in directory e vengono memorizzati all9interno di uno o più supporti di tipo permanente, che sono in grado a loro volta di contenere grandi volumi di dati. - Dal punto di vista dell'utente un file è un insieme di dati correlati tra loro e associato in modo univoco a un nome che lo identifica, memorizzato in un dispositivo di memoria secondaria. - Dal punto di vista del sistema operativo, un file è un insieme di byte (eventualmente strutturato). Per ogni file il SO raccoglie un insieme di informazioni in un record, il descrittore del file che ne è la carta di identità e che contiene: - nome, composto da una stringa di caratteri con lunghezza variabile; alcuni SO hanno case sensitive naming; - identificatore, un valore numerico che lo identifica in modo univoco nel file system;; - tipo, incluso nel nome sotto forma di estensione,; - locazione, il puntatore al dispositivo e alla locazione fisica del file nel dispositivo; - dimensione corrente, espressa in byte; - data e ora; Nei SO multiutente sono previsti anche dati aggiuntivi come: - utente proprietario, ossia utente che ha creato il file e ne ha i massimi diritti; - permessi, ossia alcuni flag che mantengono le informazioni per il controllo di chi può accedere al file, modificarlo oppure solo leggerlo I descrittori dei file sono memorizzati in un contenitore, la directory, anch'essa memorizzata nella memoria secondaria: l'immagine del file system è memorizzata in memoria di massa attraverso il concetto di volume, che è composto da una sequenza di blocchi (o record fisici) di dimensione fissa. Metodi di allocazione dei file: - contigua - Indicizzata - Linkata

Use Quizgecko on...
Browser
Browser