Diario delle Lezioni
A.A. 2020/2021

Progettazione di Sistemi Operativi
Ingegneria Informatica - Laurea Magistrale


Data
Argomento
Tipo
N Ore
Riferimento
Lun. 21/09/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
Introduzione all'insegnamento: obiettivi, programma, testi consigliati, esame, sito dell'insegnamento (Slide prog.pdf).
Definizione di Sistema Operativo. Storia dei Sistemi Operativi: esecuzione sequenziale ed esecuzione batch: origine dei linguaggi comandi (come quello della shell di UNIX); origine del concetto di dispositivi logici di I/O e della ridirezione; origine del concetto di spooling (Slide GeneralitaSO-1.pdf).
L
2
Mer. 23/09/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
GENERALITÀ - Storia dei Sistemi Operativi: concetto di multiprogrammazione. Categorie di Sistemi Operativi: sistemi batch, sistemi multiprogrammati (esempi, sistemi real-time e sistemi in time-sharing) e misti. Struttura di un Sistema Operativo: monolitico, stratificato e a micro-kernel. Illustrazione dei vari gestori che costituiscono un Sistema Operativo in particolare multiprogrammato e multiutente. Meccanismi per gestire la protezione (bit di modo ed esecuzione differenziata, istruzioni privilegiate di I/O ed esempio di HW per la protezione della memoria) e iniziato ulteriori problematiche nel caso di sistemi distribuiti (Slide GeneralitaSO-1.pdf).
L
2
Ven. 25/09/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
GENERALITÀ - Definizione di Punto di Vista esterno e di Punto di Vista Interno (Slide GeneralitaSO-1.pdf).
PROCESSI - Primo livello di un Sistema Operativo: NUCLEO. Grafo di precedenza degli eventi. Definizione di Processo sequenziale: grafo ad ordinamento totale. Definizione di Processo non sequenziale: grafo ad ordinamento parziale. Requisiti per eseguire un processo NON sequenziale: elaboratore NON sequenziale e linguaggio di programmazione NON sequenziale. Definizione di processo concorrente. Stati e descrittore di processo (Slide Processi-2.pdf).
L
2
Lun. 28/09/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
PROCESSI - Relazioni fra processi concorrenti: disgiunti e interagenti (competizione e cooperazione). Descrizione dei modelli dei processi ad ambiente globale e locale e relativi tipi di interazione. Il problema base della competizione in ambiente globale: la mutua esclusione con definizione di sezione critica. I 6 requisiti (lasciato da guardare i vari tentativi per risolvere il problema della M.E.). Introdotto l'ipotesi di sezioni critiche sufficientemente brevi: primitive LOCK ed UNLOCK e loro implementazione con istruzioni HW tipo TEST-AND-SET oppure EXCHANGE.
Definizione di Semaforo: primitive WAIT e SIGNAL. Definizione di invariante del semaforo: prove di correttezza. Discusso se i 6 requisiti che deve avere una soluzione al problema della Mutua Esclusione perché sia accettabile sono soddisfatti nei semafori. (Slide ProcessiConcorrenti-2bis.pdf).
L
2
Mer. 30/09/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
PROCESSI - Ripreso discorso sui semafori: osservazioni su WAIT e SIGNAL con dettaglio su transizioni di stato dei processi. Indivisibilità di WAIT e SIGNAL (Slide ProcessiConcorrenti-2bis.pdf).
Esempi di uso dei semafori: 1) gestore di risorse: una prima soluzione naif e seconda soluzione 'vera'. 2) problema lettori/scrittori: prima soluzione con discussione sul problema della starvation e ultima (terza) soluzione senza starvation (Slide EsempiDiUsoDISemafori-2ter.pdf).
L
2
Ven. 02/10/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (1) - Esercizi su file e processi pesanti in Linux: si veda il documento EsercitazioneVenerdì2Ottobre2020.pdf.
E
2
Lun. 05/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
PROCESSI - Ripreso discorso su esempi di uso dei semafori: 3) problema della cena dei filosofi: possibile soluzione e discussione problema di deadlock e soluzioni alternative (Slide EsempiDiUsoDISemafori-2ter.pdf).
Cooperazione fra processi nel modello ad ambiente globale. Problema di invio di segnali: soluzione con uso di semafori. Problema del produttore/consumatore: soluzione con buffer circolare e semafori. Caso più produttori e più consumatori: nuova soluzione sempre con buffer circolare e semafori (Slide ProcessiCooperantiInAmbienteGlobale-3.pdf).
MONITOR. Costrutti di sincronizzazione di alto livello per risolvere i problemi derivanti dall'uso dei semafori che sono meccanismi di basso livello. Costrutti di sincronizzazione di alto livello: il costrutto di sincronizzazione MONITOR del Concurrent Pascal. Due livelli di sincronizzazione: mutua esclusione nell'accesso al monitor e variabili condizione (con operazioni WAIT e SIGNAL). Spiegato il comportamento delle operazioni WAIT e SIGNAL e le differenze rispetto alle omonime operazioni sui semafori. Presentazione delle due semantiche possibili della SIGNAL su una variabile condizione: la semantica SEGNALA E ASPETTA (Hoare) e quella SEGNALA E CONTINUA (cui si ispira Java) (Slide CostruttiDISincronizzazione-3bis.pdf).
L
2
Mer. 07/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
PROCESSI - Esempi di uso di MONITOR relativi a problemi di competizione in ambito globale: 1) semplice problema di MUTUA ESCLUSIONE su una risorsa (lasciato da guardare agli studenti); 2) problema LETTORI-SCRITTORI (QUEUE come ulteriore operazione su variabili condizione); 3) problema dei FILOSOFI.
Esempi di uso di MONITOR relativi a problemi di cooperazione in ambito globale: soluzione del problema PRODUTTORI-CONSUMATORI.
Realizzazione del Monitor in termini di semafori: un semaforo MUTEX per ogni istanza di tipo monitor, 1 semaforo inizializzato a 0 per ogni variabile condizione e 1 semaforo URGENT per realizzare la semantica SEGNALA E ASPETTA, oltre che un insieme di contatori.
Variabili condizione con priorità. Mostrato due esempi: gestione risorsa con tempo di uso e gestione disco a testine mobili (Slide CostruttiDISincronizzazione-3bis.pdf).
L
2
Ven. 09/10/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (2) - Esercizi su processi pesanti in Linux: si veda il documento EsercitazioneVenerdì9Ottobre2020.pdf.
E
2
Lun. 12/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
PROCESSI - Ripreso esempio gestione disco a testine mobili con variabili condizione con priorità.
Problema dei monitor innestati (Slide CostruttiDISincronizzazione-3bis.pdf).
Ripreso differenze fra Modello ad Ambiente Globale e Modello ad Ambiente Locale: illustrato da dove sono derivate e discusso sul fatto che hanno lo stesso potere espressivo.
MODELLO AD AMBIENTE LOCALE - Scambio di messaggi e definizione di canale "logico" di comunicazione. Le 5 caratteristiche che può avere un canale che dipendono da 3 scelte implementative. 1) designazione coppia sender/receiver: a) diretta (schema simmetrico e asimmetrico); b) indiretta (mailbox). 2) Bufferizzazione: a) Assenza bufferizzazione (sincronicità); soluzioni al possibile problema di blocco con introduzione time-out oppure b) Presenza di bufferizzazione (asincronicità): caso di bufferizzazione finita (N) e infinita. Semantica della Receive non bloccante. Ultima scelta implementativa: 3) Lunghezza dei messaggi: a) fissa e b) variabile (Slide AmbienteLocale-5.pdf).
L
2
Mer. 14/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
PROCESSI - Ripreso MODELLO AD AMBIENTE LOCALE (o SCAMBIO DI MESSAGGI). Il caso delle pipe di UNIX. Realizzazione fisica di un canale logico: il caso di UNIX. Send sincrona vs. asincrona. Problemi di ordinamento dei messaggi. Condizioni di errore: terminazione dei processi (il caso di UNIX, pipe senza scrittore e pipe senza lettore), messaggi persi o corrotti. Esempi: due soluzioni al problema produttori/consumatori; due soluzione per la realizzazione di un semaforo binario nel caso ci siano delle eccezioni al modello ad ambiente locale. Linguaggi di programmazione concorrenti con modello ad ambiente locale: CSP, OCCAM e ADA con rendez-vous esteso, presente anche nelle RPC dei sistemi operativi distribuiti o nelle RMI di Java (Slide AmbienteLocale-5.pdf).
L
2
Ven. 16/10/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (3) - Esercizi su processi pesanti in Linux: si veda il documento EsercitazioneVenerdì16Ottobre2020.pdf.
E
2
Lun. 19/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
NUCLEO. Punto di vista interno del NUCLEO di un S.O. Processo Running, Ready Queue, code dei processi sospesi e descrittori di processo (esempio di UNIX e LiNUX). Primitive di base (creazione, distruzione, sospensione e riattivazione di processi) e loro relazione con le transizioni di stato. Transizioni di stato in generale e quindi rivisto le transizioni di stato in UNIX. Approfondimento process/context switching e dispatcher. Approfondimento su creazione processi: rivisto il caso di UNIX: process table, text table, spazio di indirizzamento di un processo (kernel area, data area e code area) e primitive fork ed exec (Slide Nucleo-4.pdf).
L
2
Mer. 21/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
NUCLEO. Processi pesanti vs. processi leggeri (thread): modelli cui si ispirano, performance, implementazione e modelli di multithreading (Slide Nucleo-4.pdf).
Classificazione dei tipi di scheduler: a lungo, a medio e a breve termine (CPI Scheduler). I 5 parametri per valutare le prestazioni dello scheduler di breve termine. CPU Scheduler senza preemption e con preemption (problematiche legate all'implementazione delle primitive). Concetto di CPU- e I/O-burst per lo scheduler di breve termine. Algoritmi di Scheduling: FCFS (Slide Scheduler-4bis.pdf).
L
2
Ven. 23/10/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (4) - Approfondimento sui thread. La libreria POSIX Pthread: creazione, distruzione, join, recupero identificatore thread, uguaglianza fra identificatori e yield (Slide Pthread.pdf).
E
2
Lun. 26/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
NUCLEO - Riassunto di quanto visto la lezione scorsa sullo scheduler. Ripreso algoritmi di Scheduling: SJF, SRTF, ROUND-ROBIN, con priorità con e senza preemption (per sistemi Soft Real-Time), con code multiple e anche con retroazione (il caso di UNIX). Scheduling per sistemi multiprocessore eterogenei e omogenei: asymmetric multiprocessing e symmetric multiprocessing; problema del bilanciamento del carico e predilezione del processore; accenno allo smart scheduling. Scheduling di Linux: prima della versione 2.5, dalla versione 2.6 e quello della versione 2.6.23 (Lucidi Scheduler-4bis.pdf).
L
2
Mer. 28/10/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
NUCLEO - Problema del DEADLOCK: definizione ed esempi. Le quattro condizioni necessarie. Grafo di allocazione: ciclo come condizione necessaria e caso particolare come condizione necessaria e sufficiente; esempi di cicli come situazione di deadlock e non. Classificazione dei metodi per il trattamento del deadlock: prevenzione vs. soluzione a posteriori. Metodi per il trattamento del deadlock: 1) Prevenzione statica: negazione di una delle 4 condizioni, in particolare dell'ultima (attesa circolare) con ordinamento dei tipi di risorse. 2) Prevenzione dinamica. Definizione di stato sicuro e di sequenza sicura. Primo semplice esempio (Lucidi Deadlock-6.pdf).
L
2
Ven. 30/10/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (5) - Proseguito per la prima ora l'analisi della libreria POSIX Pthread: mutex e variabili condizione. Illustrato anche i semafori definiti per trattare shared memory ma usabili anche con i thread. Introdotto le varie primitive per l'uso di questi strumenti di sincronizzazione (Slide Pthread.pdf). Per la seconda ora, ssercizi sui Pthreads in Linux: si veda il documento EsercitazioneVenerdì30Ottobre2020.pdf.
E
2
Lun. 02/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
NUCLEO - DEADLOCK - Metodi per il trattamento del deadlock: Ripreso 2) Prevenzione dinamica. Algoritmo del banchiere: vari esempi; svantaggi e caso particolare di tipi di risorse con singola istanza. 3) Detection e Recovery. Algoritmo di Detection con esempi e caso particolare. Osservazioni su quando attivare l'algoritmo di Detection. Varie possibilità di Recovery: uccisione o preemption delle risorse, in quest'ultimo caso necessità di checkpoint (accenno all'uso dei checkpoint per ottenere fault-tolerance). Metodi misti usati dai Sistemi Operativi per prevenire i deadlock nell'uso delle proprie risorse interne. Per i processi utenti, di solito, i S.O. nno prevedono soluzioni come nel caso di UNIX, ma lasciano la soluzione del problema all'utente e/o al sistemista (Lucidi Deadlock-6.pdf).
L
2
Mer. 04/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
MEMORIA - Terzo livello: Gestione della memoria. Punto di vista dell'utente: binding fra spazio di indirizzamento logico del programmatore e spazio di indirizzamento fisico; 3 possibilità per il binding: a tempo di traduzione (codice binario assoluto), a tempo di caricamento (codice rilocabile staticamente) e a tempo di esecuzione (codice rilocabile dinamicamente). Punto di vista interno: funzioni del Gestore della Memoria. Categorizzazione delle politiche di allocazione e parametri di valutazione. Politiche di allocazione contigua: 1) Monitor monoprocesso con esempio del SO MS-DOS: soluzioni al problema di protezione. 2) Partizionamento statico: strategie di selezione (first fit e best fit) e frammentazione interna. Definizione della tecnica di swapping e sue problematiche: N.B. la tecnica di swapping NON è applicabile solo al partizionamento statico! Problematiche di protezione e condivisione nel caso di partizionamento statico (Lucidi MemoriaAllocazioneContigua-7.pdf).
L
2
Ven. 06/11/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (6) - Esercizi sui Pthreads in Linux: si veda il documento EsercitazioneVenerdì6Novembre2020.pdf.
E
2
Lun. 09/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
MEMORIA - Riassunto della lezione scorsa. Ripreso politiche di allocazione contigua: 2) Partizionamento statico: conclusioni.
3) Partizionamento dinamico: evoluzione del partizionamento statico. Algoritmo di allocazione: definizione costante c e strategie di selezione (first fit e next fit; best fit e worst fit). Algoritmo di deallocazione e problema della fusione aree libere. Frammentazione esterna: compattazione.
4) Segmentazione. Tabella dei segmenti (TDS). Osservazione su dimensione delle TDS e quindi necessità di registro base e registro limite della TDS. Problema overhead in accesso: soluzione con cache o registri di segmento (Lucidi MemoriaAllocazioneContigua-7.pdf).
L
2
Mer. 11/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
MEMORIA - Politiche di allocazione contigua. Ripreso Segmentazione: Protezione e condivisione. Conclusioni su segmentazione (Lucidi MemoriaAllocazioneContigua-7.pdf).
Politiche di allocazione non contigua: Paginazione. Tabella delle pagine (TDP). Allocazione/deallocazione delle pagine: tabella della memoria o lista numeri pagine libere. Requisiti Hw per implementare la paginazione: a) Registri base e limite della TDP; b) problema overhead in accesso: cache delle pagine: TLB miss, hit ratio e EAT (tempo di accesso effettivo). Protezione e condivisione: meno flessibili rispetto alla segmentazione. Approfondimenti sulla organizzazione delle TDP: paginazione gerarchica su 2, 3, ... 7 livelli e tabella delle pagine invertita (Lucidi MemoriaAllocazioneNonContigua-8.pdf).
L
2
Ven. 13/11/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (7) - Esercizi sui Pthreads in Linux: si veda il documento EsercitazioneVenerdì13Novembre2020.pdf.
E
2
Lun. 16/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
MEMORIA - Conclusioni su paginazione. Vantaggi/svantaggi di paginazione e segmentazione e quindi possibilità di combinazione dei due metodi di allocazione (segmentazione con paginazione) (Lucidi MemoriaAllocazioneNonContigua-8.pdf).
MEMORIA VIRTUALE - Definizione di Memoria Virtuale. Paginazione su richiesta: pager. Bit di presenza/mancanza di pagina. Meccanismo del page fault e problema della interrompibilità delle istruzioni dovute ad esso: requisiti Hw. Strategie di ricerca e di posizionamento. Possibilità di ottimizzazione se a livello Hw è presente il Dirty Bit. Strategie di sostituzione: 1) FIFO e anomalia di Belady; 2) Ottima (OPT). Altra strategia di sostituzione oltre la FIFO e l'OPT: LRU (Least Recently Used) (Lucidi MemoriaVirtuale-8bis.pdf).
L
2
Mer. 18/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
MEMORIA VIRTUALE - La strategia optima e quella LRU NON soffrono dell'anomalia di Belady. Implementazioni complete di LRU (solo con HW dedicato): 1) con Contatore degli accessi; 2) con Stack dedicato. Approssimazioni della politica di sostituzione LRU utilizzando il Reference Bit: memorizzazione dei reference bit, algoritmo di seconda chance (NRU, Not Recently Used), classi di pagine (uso anche del Dirty Bit e quindi algoritmo di seconda chance migliorato). Politiche di sostituzione locali o globali. Politiche di allocazione: uguale e diseguale. Problema del trashing. Definizione del principio di località. Teoria del working set, come politica di allocazione/sostituzione. (Lucidi MemoriaVirtuale-8bis.pdf).
L
2
Ven. 20/11/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (8) - Esercizi sui Pthreads in Linux: si veda il documento EsercitazioneVenerdì20Novembre2020.pdf e ProblemadelBarbiereAddormentato.pdf per la descrizione del problema del Barbiere addormentato.
E
2
Lun. 23/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
MEMORIA VIRTUALE - Ripreso Teoria del working set, come politica di allocazione/sostituzione. Implementazione della Teoria del working set: uso ancora del reference bit. Politica di allocazione basata sulla Frequenza dei Page-Fault. Struttura dei programmi e influenza sui page-fault. File mappati in memoria: possibilità di condivisione, anche come memoria condivisa. Allocazione di memoria al Kernel: metodo BUDDY e metodo a LASTRE: esempio di uso in Linux. Considerazioni varie: dimensione della pagina, cache delle pagine (TLB); protezione e condivisione; I/O interlocking; elaborazioni in tempo reale. Memoria virtuale basata sulla segmentazione: vantaggi e svantaggi. Memoria virtuale basata su segmentazione con paginazione per ottenere i vantaggi di entrambi gli schemi. Gestione della memoria in particolare quella virtuale in UNIX. Conclusioni sulla memoria virtuale (Lucidi MemoriaVirtuale-8bis.pdf).
L
2
Mer. 25/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
FILE - Gestione dei FILE: importanza della indipendenza dai dispositivi fisici. Concetto di file e suoi attributi (metadati). Tipi di file. Struttura logica dei file. Concetto di directory. Punto di vista dell'utente (esempi di UNIX e DOS): comandi tipici. Organizzazione delle directory con aspetti di efficienza, nominazione, condivisione e protezione: directory ad un solo livello, directory a due livelli (MFD e UFD), ad albero. Iniziato a parlare della organizzazione più generale dei directory a grafo aciclico o DAG: concetto di link software e hardware (Lucidi FileSystem-9.pdf).
L
2
Ven. 27/11/2020
ESERCITAZIONE IN STREAMING A CAUSA DEL CORONA VIRUS.
Esercitazione in Laboratorio (9) - Esercizi sui Pthreads in Linux: si veda il documento EsercitazioneVenerdì27Novembre2020.pdf e ProblemaDeiFumatori.pdf per la descrizione del problema dei Fumatori di Sigarette e ProblemaDeiCannibaliACena.pdf per la descrizione del problema dei Cannibali a Cena.
E
2
Lun. 30/11/2020
LEZIONE IN STREAMING (E VIDEO-REGISTRATA) A CAUSA DEL CORONA VIRUS.
FILE - Completato analisi delle strutture delle directory: problema cancellazione link e problematica di rendere aciclico un grafo: caso di Unix, Windows e MAC-OS.
Concetto di volume: trasparenza o meno nei S.O. Protezione di risorse con particolare riferimento al file system; dominio di protezione e possibilità di modificare il dominio (il caso di exec e SUID/SGID di UNIX). Matrice di protezione e sua implementazione con ACL (il caso di UNIX) e C-List. Punto di vista del programmatore di sistema (primitive): creazione, scrittura, lettura e cancellazione. Necessità per ottimizzare le operazioni di un'ulteriore operazione: apertura file e quindi anche chiusura file. Discorso sulla tabella dei file aperti: implementazione in UNIX. Metodi di accesso: sequenziale e diretto. Punto di vista del S.O.: stratificazione in vari livelli. Concetto di blocco fisico e relazione con record logico. Possibili malfunzionamenti. Directory come file: indirizzo fisso della directory root (Lucidi FileSystem-9.pdf).
L
2
Mer. 02/12/2020
L
2
Ven. 04/12/2020
E
2
Lun. 07/12/2020
L
2
Mer. 09/12/2020
L
2
Ven. 11/12/2020
E
2
Lun. 14/12/2020
L
2
Mer. 16/12/2020
L
2
Ven. 18/12/2020
E
2
Lun. 21/12/2020
L
2
Mer. 23/12/2020
L
2

Legenda:
E= Esercitazione
L= Lezione