Il sistema operativo ZOS
Transcript
Il sistema operativo ZOS
Ilsistema operativo ZOS Last update: mercoledì 1 7 giugno 1 9 9 8 23.42 Larghezza pagina: 2 1 ,59cm Altezza: 27,94cm Margine destro: 2cm Sinistro: 2cm Superiore: 2.5cm Inferiore: 2cm Intestazione e piè pagina di: 1 , 25cm Da ormai molti anni mi interesso di programmazione del computer. Iniziando con il C su Amiga, ho poi imparato il Pascal e l'Assembly e programmato su PC IBM e MSDOS. Dopo aver sviluppato diversi prodotti software dagli svariati utilizzi, ho deciso di cominciare un progetto per me molto importante e di grande soddisfazione: un SISTEMA OPERATIVO. GENERALITA' DI UN SISTEMA OPERATIVO In generale un SISTEMA OPERATIVO e' composto da due componenti principali: il LOADER ed il KERNEL, integrati poi anche da una parte di codice che si occupa dell'interazione con l'utente. Il LOADER e' la parte di codice, di solito di piccole dimensioni, che si occupa di caricare il KERNEL in memoria e di eseguirlo. Nella maggior parte dei casi il LOADER si colloca nel settore di BOOT del supporto de dicato al SISTEMA OPERATIVO per cui occupa fino a 5 1 2 Bytes. Per questo motivo, non trascurabile, e' necessario scrivere il LOADER in linguaggio Assembly per poter assicurare potenza, velocità e ridotte dimensioni del codice. Il KERNEL e' la parte più importante del SISTEMA OPERATIVO: si occupa infatti di predisporre l'HARDWARE del computer ad interagire con il SOFTWARE. Più in particolare il KERNEL inizializza i dispositivi HARDWARE (Scheda video, Scheda sonora, et.),definisce i vari INTERRUPT ed inizializza la memoria. La cosa più importante che il KERNEL si occupa di fare e' la creazione della TABELLA DEGLI INTERRUPTS, cioè mette a disposizione del SOFTWARE delle routine per interagire meglio con il sistema stesso, per esempio la routine per LEGGERE UN FILE. Per l'interazione con l'utente, il SISTEMA OPERATIVO esegue un particolare programma, chiamato SHELL (traduzione: conchiglia, guscio) che si occupa di acquisire ed interpretare i comandi forniti dall'utente. Un sistema operativo deve anche avere, necessariamente, delle routine di gestione dei dischi (rigidi e floppy) e della memoria. LA MEMORIA La memoria e' la parte principale di un sistema a microprocessore come un computer. In un PC esistono e convivono due tipi differenti di memoria: RAM e ROM. La ROM (Read Only Memory), non cancellabile, nei PC è de dicata ad ospitare il BIOS (Basic Input Output System) che contiene il codice che il uP esegue al BootStrap, ovvero la procedura di inizializzazione del sistema all’accensione del computer. Un processore 8086 (o superiore) esegue le istruzioni, all'atto dell’accensione, locate all'indirizzo assoluto F F F F h : F F F 0 h , ovvero nella parte più alta della memoria in cui deve trovarsi un JMP(istruzione di salto) che punta alla routine iniziale del BIOS. La memoria ROM, come da nome, non e' riscrivibile per cui rimane inalterata nel tempo. I produttori di PC, per ovviare alla necessita' di mantenere fissa la configurazione del BIOSdeterminata dall'utente, hanno inserito nelle schede una memoria CMOSRAM alimentata da una batteria al litio che contiene, in 64Bytes, i dati di configurazione del BIOS. La RAM (Random Access Memory) in un PC IBM Compatibile è suddivisa in 3 tipi principali che differiscono principalmente solo per l'uso a cui sono destinati: 1 1 ) Memoria RAM Convenzionale 2) Memoria RAM Video 3) Memoria EMS/XMS La RAM Convenzionale e' quella fetta di memoria destinata all'esecuzione dei programmi e alla memorizzazione dei dati. Nei sistemi 8086 Reali (*) e' di 640KByte massimi. La Memoria Video, senza entrare in particolari, è dedicata invece a contenere i dati da visualizzare sul monitor, cioè la scheda video preleva le informazioni da mostrare sul monitor direttamente da queste locazioni. Gli ultimi tipi di memoria, cioè EMS (Expan de d Memory) e XMS (eXtended Memory) sono presenti solo nei sistemi equipaggiati con uP 80286 o superiore e non sono altro che memorie addizionali usabili solo grazie alla modalità Protetta (*) prevista solo dai processori più avanzati (nel 80286 la Intel , per la prima volta, incluse nei suoi uP la modalità protetta per facilitare la progettazione di sistemi multitasking e multiuser). Parleremo più avanti di questi due tipi di modalità del processore; intanto basti sapere che in modalità Protetta e' possibile indirizzare fino a 4 GigaByte di memoria RAM contro il misero 1Mbyte utilizzabile in modo Reale. In un PC delle ultime generazioni, inclusa nella scheda madre, è presente un ulteriore tipo di memoria RAM chiamata cache utilizzata solo dalla CPU per poter accedere velocemente alle istruzioni poiché questa memoria ,di ridotte dimensioni, presenta tempi di accesso ridottissimi. Il BIOS, oltre ad inizializzare il sistema, mette a disposizione del programmatore particolari routine per facilitargli il compito di interagire con l’hardware. I primi vettori di interrupt puntano, infatti, a delle routine del ROM-BIOS. Per esempio l’ interrupt 1 3 h punta alle routine di gestione dei dischi HARD e FLOPPY permettendo (attraverso opportuni parametri) la lettura, la scrittura, et. senza dover interagire direttamente con l’hardware. Generalmente si tende ad evitare l’utilizzo delle routine BIOSperché la loro esecuzione comporta molto tempo-macchina. (*) Ogni CPU Intel (e compatibile) 286 e superiore può operare in due modalità: REALE e PROTETTA. In modalità REALE il processore emula le funzioni della “preistorica” CPU 8086 che poteva indirizzare solo 1 megabyte di memoria RAM. Sull’8086 venne sviluppato l’MS-DOS, un SO che opera in modalità reale e ,a causa delle sue caratteristiche base, non può operare in modalità PROTETTA, chiamata così poiché ad ogni task la CPU assegna un ben determinato spazio nella memoria RAM (ne può utilizzare fino a 4 Gigabyte) e non vi sono possibilità che possa “sconfinare” se non in alcuni casi particolari. Infatti ogni TASK ha una sua tabella chiamata LDT (Local Descriptor Table) in cui vengono memorizzati i sui parametri di esecuzione, ovvero priorità, memoria assegnata, et. In modalità protetta esiste anche una GDT (Global Descriptor Table) che contiene le caratteristiche del sistema. DISCHIRIGIDIo MEMORIADI MASSA Per memoria di massa si intendono quei dispostivi che permettono l'archiviazione dei dati e dei programmi. Un tempo per memoria di massa si intende vano i WORM (Write Only, Read Many), dei primitivi streamer a nastro che permettevano l'archiviazione permanente dei dati o, per i più fortunati, degli arcaici floppy disk a 5. 1 2 pollici che contenevano solo 360KByte di dati. Oggigiorno, invece, si sente comunemente parlare di Hard Disk, Floppy Disk, CD-ROM Riscrivibili e degli ultimissimi DVD : tutti questi dispositivi, benché diversi, sono delle memorie miste tra RAM e ROM, poiché memorizzano i dati e ne permettono, oltre alla lettura, anche la modifica e l'eventuale rimozione in tempi successivi per migliaia di volte. Negli Hard Disk e nei Floppy, l'informazione viene memorizzata su un supporto magnetico. Questi dispositivi sono, essenzialmente, dei dischi di alluminio o plastica ricoperti da uno strato di ossido ferroso 2 capace di mantenere inalterato il dato nel tempo. I Floppy Disk, tanto per dare un'idea, riescono a registrare fino a 2 MBytes di dati mentre gli Hard Disk arrivano a capacita' fino a 1 0 GigaByte e oltre ! I CD-ROM Riscrivibili e i DVD sfruttano la luce LASER per incidere delle microfessure in dischi di plastica con un foglio di alluminio al loro interno. Il LASER attraversa indisturbato la plastica ed incide, in corrispondenza di uno '0' una piccolissima fessura sul foglio di alluminio (o altro materiale riflettente). Un CD-ROM contiene fino a 650MBytes mentre un DVD si prevede che riesca a concentrare fino a 1 7 GigaByte su un solo supporto. Un PC interagisce con tali supporti tramite delle interfacce, chiamate CONTROLLER che permettono al uP di controllare tali periferiche. Il BIOS, di fatto, dopo aver inizializzato il sistema, cerca di leggere il settore di BOOT (locato al settore 1 , traccia 0, lato 0) dal dischetto inserito nel floppy drive (il dispositivo che accoglie il floppy disk). Se non vi sono dischetti nel drive, tenta di leggere il BOOT dall'HARD DISK. Come già ripetuto, il settore di BOOT contiene il codice per l'esecuzione del sistema operativo. Ogni supporto per poter essere utilizzato deve essere formattato cioè preparato alla memorizzazione dei dati, come un foglio bianco su cui vengono tracciate le righe per la scrittura. Ogni supporto fisico, durante la formattazione, viene suddiviso in settori. Per i floppy ogni settore e' di 5 1 2 Bytes mentre per gli Hard Disk vi sono varie dimensioni. Ogni supporto fisico, oltre alla suddivisione in settori, viene ripartito anche in tracce (o cilindri) e facce. Per la precisione ogni faccia e' composta da N tracce e ogni traccia e' ripartita in M settori di X dimensione ciascuno. Da ciò e' possibile notare che per la localizzare un insieme di dati (un settore) e' necessario conoscere tre numeri, o coordinate fisiche. Ciò che ho appena affermato non e' però sempre vero, in quanto la FAT (File Allocation Table = tabella di allocazione dei file) usa le coordinate logiche, ovvero i dati fisici vengono manipolati in modo da ottenere un solo numero dal quale pero' e' possibile l'operazione inversa. Per la gestione dei file il SO de ve poter avere una lista dei file e delle directory contenute nel supporto. MS-DOS, ad esempio, utilizza un particolare settore del disco per memorizzare la ROOT directory, da cui si diramano tutte le altre. Ogni oggetto (directory o file) e’ identificato da una struttura in cui sono specificati alcuni suoi parametri e proprietà (per es. la dimensione, la data e l’ora di creazione, gli attributi e il primo cluster della FAT in cui sono memorizzati i suoi dati) . HARDWARE Ogni SOche si rispetti de ve prevedere la sua esecuzione su PC diversi. Anche se la CPU rimane Intel (80x86 e Pentium) o compatibile (Cyrix, Amd) ci sono alcune periferiche che possono differire e che sono comunque fondamentali per la sua corretta esecuzione, prima fra tutti la scheda video che si occupa di far pervenire all’utente le informazioni di cui necessita. In commercio esistono moltissimi diversi tipi di schede grafiche, che però hanno alcune caratteristiche in comune. Per esempio, come già detto nel paragrafo della MEMORIA, le schede video utilizzano delle particolari aree di memoria per la manipolazione dei dati da visualizzare. Fortunatamente le aree di memoria sono, per tutte le schede, uguali semplificando enormemente il lavoro del programmatore. Oltre alla scheda video, in un PC vi sono moltissime altre periferiche, molte delle quali completamente trasparenti all’utente ed al programmatore, per esempio il controllore DMA (Direct Memory Address), oppure il PIC (Programmable Interrupt Controller) che svolgono attività fondamentali per il funzionamento della CPU. Per permettere al SO di interagire con periferiche anche non compatibili, vengono creati i Driver, ovvero delle interfacce software che si occupano di mediare la comunicazione tra SOe hardware. Anche l’HARD DISK ed il FLOPPY DRIVE sono dispositivi hardware ma la loro gestione è affidata a particolari schede, chiamate appunto controller, che si occupano dell’interfacciamento di tali dispositivi con il processore centrale. Spesso periferiche non comuni vengono vendute con i driver appositi proprio perché il SO non può sempre prevedere cosa vi è installato in un PC. Problemi di incompatibilità tra hardware e software sono spesso causa di problemi nel funzionamento e possono danneggiare alcune periferiche. 3 PREFAZIONE AL SISTEMA OPERATIVO Z.O.S. Prima di scrivere il codice vero e proprio del sistema operativo mi sono dovuto prefiggere alcuni obiettivi base su ciò costruire tutto il sistema e cioè: • Velocità • Gestione di più utenti (Multiuser) • Gestione di più processi (Multitasking) • Stabilità • Semplicità d'uso UNIX, noto sistema operativo, incorpora quasi tutte queste caratteristiche eccetto l'ultima, infatti è universalmente nota la difficoltà per l'utente di interagire con tale SO. Parallelamente ad UNIX, nel mondo dei calcolatori e' famosissimo l'MS-DOS (comunemente chiamato DOS) della Microsoft. Il DOS non prevede le capacita’ Multitasking e Multiuser, pero' e' veloce e semplice da usare. In ZOScerco di conciliare i pregi di questi due SO senza pero' limitare nessuna delle capacita' principali, ovvero il multitasking ed il multiuser. Il codice è scritto in puro assembly 80x86 e compilato con i TASM(Turbo AsseMbler della Borland Inc.) . Inizialmente ho scritto il kernel in codice a 1 6 bit ed in modalità reale ma poi ho deciso di convertirlo in codice a 32 bit in modalità protetta poiché ZOSnecessità di molta memoria per poter essere eseguito. Irequisiti minimi per il funzionamento di ZOSsono: • • • • Processore 80286 o superiore (meglio 80386). Almeno 8 MByte di memoria RAM. Scheda video VGA. Unità floppy 1 .44 MByte. L’Hard Disk non è necessario in quanto ZOSè nato per essere eseguito su dischetto floppy anche se in futuro sarà possibile l’installazione su disco rigido. MULTITASKING Multitasking è la capacità di un computer di eseguire più processi (task) contemporaneamente. In teoria pero' non e' cosi' in quanto il processore centrale può eseguire solo un’istruzione alla volta. L'operazione di multitasking viene realizzata semplicemente facendo eseguire alla CPU le istruzioni dei diversi processi (o task) ciclicamente e salvandone il risultato in memoria. Mi spiego meglio: Supponiamo che ogni TASK abbia un'area di memoria dedicata all'immagine dei registri della CPU (*). Eb b ene, quando viene il suo turno, nei registri interni della CPU viene caricata l'immagine dei registri salvata precedentemente, vengono eseguite le istruzioni del TASK e, quanto il tempo e' scaduto, nell'area de dicata viene salvata l'immagine dei registri in quel momento, così da non perdere il lavoro. Esistono due tipi principali di tecniche per il multitasking: Preemptive e Cooperative . Nel primo tipo (Preemptive) e' il SO che decide quale task eseguire e quanto de ve essere eseguito (priorità di esecuzione) e non vi e' possibilità che un solo task prenda il controllo dell'intero sistema. Nel Cooperative, invece, ogni singolo task decide quando e' il momento di passare al suo successivo; e' intuibile comprendere che se un task decidesse di NON restituire il controllo, il sistema sarebbe bloccato. 4 (*) Ricordo che ogni CPU ha dei registri interni che utilizza per compiere le operazioni richieste. Le CPU 80x86 e superiori hanno 1 2 registri a 1 6 bit: AX, BX, CX, DX per usi svariati; SIe DI per le operazioni in memoria come index; CS, DS, ES, SScome indirizzi di segmento di memoria ; BP come puntatore in memoria e IP come offset della successiva istruzione da eseguire (CS:IPformano l’indirizzo istruzione da eseguire). Anche se il Cooperative e' più semplice da implementare, ho optato per il Preemptive in quanto mi garantisce maggior stabilità del sistema. Per un multitasking Preemptive e' necessario che la routine di controllo venga richiamata periodicamente per poter assicurare il task switching (cambiamento di processo); essendo progettato per lavorare in PC IBMCompatibili ho deciso che l'Interrupt 1 C h (System Tick) facesse al caso mio in quanto viene eseguito circa 1 1 , 7 volte al secondo. Ciò significa che un task di priorità 1 (la più bassa) viene eseguito per soli 1 / 1 1 , 7 secondi: per calcolare il tempo di esecuzione approssimativo di un task e' sufficiente divi dere la sua priorità per la frequenza di interruzione 1 C h ( 1 1 . 7 Hz) . In ZOS è possibile per l’utente modificare la priorità di un task con il comando CHTASKPRIin cui è necessario immettere il PID (Process Identification = Numero di identificazione di un processo) e la nuova priorità da assegnare con un numero compreso tra 1 e 1 2 7 . MULTIUSER Questa e' una proprietà tipica di ogni nuovo SO, poiché il rapido avanzamento della tecnologia ha portato all'affermazione delle cosiddette reti di computers ,dei sistemi collegati ad altri sistemi fino a creare un fittissimo net (rete) in cui migliaia di utenti interagiscono contemporaneamente. Esempio lampante è Internet, la “rete delle reti”. E' frequente oramai trovarsi a condivi dere un computer con qualcun’ altro, che sia il fratello, il genitore o il caporeparto, e perciò nasce la necessita' di tutelare i propri dati da "innocenti sbirciate" o anche veri e propri furti, fino alla distruzione da parte di qualche utente inesperto e pasticcione. In un sistema multiuser c'e' una gerarchia ben definita di libertà. All'apice della piramide troviamo il SUPERVISOR (Supervisore) che ha potere di vita e di morte su chiunque. Scendendo ancora troviamo gli AMMINISTRATORI e poi, per terminare, gli UTENTI SEMPLICI (Users). Come in tutte le gerarchie, il SUPERVISORpuò ve dere e modificare qualunque oggetti (directory, file, et.) presente sul sistema ed assicura un comportamento corretto degli utenti rimuovendo o avvertendo utenti il cui comportamento non sia consono all'ambiente di utilizzo. Tutti gli altri possono solo ve dere o 5 modificare oggetti di coloro che stanno "sotto" nella scala gerarchica, mentre gli USERS potranno operare solo nello spazio a loro concesso. CONDIVISIONE DE L L E RISORSE Le periferiche di ogni singolo sistema possono essere usate da un task alla volta. Detto ciò è evidente la necessità di limitare l’operato di ciascun task in modo che non interferisca con l’attività di un altro. Per es., ipotizziamo che un task deb b a fare una certa presentazione sullo schermo del PC ma, nel bel mezzo del disegno il controllo passi ad un altro processo che invece de ve cancellare lo schermo. E’ evidente che si verrebbe a creare un momento di caos sul video poiché mentre meta’ schermo è occupato dalla presentazione, viene parzialmente cancellato dal secondo task. Il primo task però non può sapere che lo schermo e’ stato ripulito per cui continuerà, una volta che gli viene restituito il controllo, a disegnare la sua presentazione da mezzo schermo, il punto in cui si era precedentemente interrotto. E v enti di questo genere, se non vengono considerati, possono verificarsi in momenti inopportuni causando il crash del sistema o, nella peggiore delle ipotesi, nel trovarsi l’ HardDisk rovinato. Ci sono diversi metodi per evitare che ciò accada: in ZOSho utilizzato una specifica variabile in cui ogni singolo BIT rappresenta una diversa risorsa hardware (tastiera, schermo, disco, seriali, et. ) e, se settato (cioè posto ad 1 ) , indica che la risorsa è occupata altrimenti è libera. Per evitare che certi task possano irregolarmente prendere il controllo, ho usato una specifica routine, richiamabile con un interrupt software, che permette di prenotare un task per l’utilizzo di una specifica risorsa. In memoria, infatti, vi sono delle “liste di prenotazione” tante quante sono le risorse, gestite da due routine che si occupano di smistare il tutto. In questo modo non vi sono rischi che un task possa interferire con un altro. Altri sistemi operativi utilizzano tecniche diverse per raggiungere il medesimo scopo (come il polling ad una periferica finché non si libera) ma il motivo è sempre lo stesso. Nella gestione delle risorse (di cui fanno parte anche le periferiche) possono sorgere dei problemi, specialmente il cosiddetto Dead Lock ovvero “stallo”. La causa del Dead Lock e’ la cosiddetta Circolar Wait (“attesa circolare”) e si verifica quando un task attende il rilascio di una specifica risorsa detenuta da un altro processo e, parallelamente, l’altro task attende il rilascio della risorsa posseduta dal primo. Ciò che si viene a creare è un loop infinito di attese che bloccano l’esecuzione di questi due processi. Solo i SO semplici hanno questo problema in quanto 6 difficilmente implementano delle tecniche raffinate per il controllo delle risorse. Spesso i processi attendono il rilascio delle risorse in polling ed è proprio per questo loop infinito che terminano la loro esecuzione. ZOSè strutturato in modo che non possa andare in stallo in quanto i task in attesa per le risorse vengono messi in queue (coda) e gestiti da un processo secondario appositamente creato per la gestione delle risorse che impedisce di fatto il Dead Lock. TASK 1 TASK 2 Richiede risorsa B Detiene risorsa A PROBLEMATICHE DEI Richiede risorsa A SISTEMIOPERATIVI Detiene risorsa B Durante la progettazione dei SO è necessario affrontare alcune problematiche che possono, se trascurate, impedire il normale funzionamento del sistema. Molte di queste sono gi state citate nei precedenti paragrafi per cui non mi soffermerò più del dovuto. La gestione della memoria è il problema che più ossessiona i progettisti perché determina in maniera profonda le caratteristiche del sistema. Lo scopo di tutto ciò è evitare conflitti e cioè: • • • Proteggere il SOda processi secondari non autorizzati. Proteggere i singoli task da possibili “intrusioni” (sovrascrittura, corruzione del codice da parte di altri processi). Impedire il superamento dell’area di memoria assegnata ad ogni task. Nei processori che operano in modalità protetta molti di questi problemi sono già risolti in quanto un task che “sconfina” (vi sono due registri chiamati bound registers che delimitano lo spazio fisico assegnato ad ogni processo) dalla sua area causerà una eccezione di violazione della memoria che, normalmente, causerà la terminazione del task. Altri problemi possono essere causati dalla lentezza di alcune periferiche, es. la stampante. Un processo che necessita di questa risorsa de ve detenerne il controllo esclusivo per evitare la miscelazione di dati provenienti da altri task per cui la CPU dovrà essere impegnata ad eseguire l’operazione di stampa causando il rallentamento generale del sistema. La soluzione a questo problema si chiama SPOOLING (SPOOL è l’acronimo di Simultaneous Peripheral Operations On Line) e prevede l’impiego di una memoria di massa ad accesso diretto, tipicamente un disco rigido. In pratica il SO si occupa di gestire le richieste dando ai processi l’illusione di disporre ognuno di una propria periferica simulandone le relative operazioni su disco. Infatti questa tecnica è nota anche come virtualizzazione delle periferiche. Un processo de dicato, chiamato spooler, si occupa della gestione delle richieste. In questo modo l’unico processo che realmente detiene la stampante (o altre periferiche “lente”) e’ lo spooler evitando l’attesa, da parte dei processi richiedenti, del rilascio della risorsa e del rallentamento causato dall’uso della stessa. TASK 1 TASK 2 MEMORIA DI MASSA AD ACCESSO DIRETTO (Hard Disk) SPOOLER PERIFERICA LENTA (Stampante) GESTIONE DEI FILE E DE L L E DIRECTORY 7 Nel sistema operativo ZOS la lista dei file e delle directory sul disco è organizzata come un indice concatenato (albero binario). Ho utilizzato una lista concatenata in cui e’ sempre possibile, partendo da un record (una lista è composta da tanti record quanti sono gli oggetti, poiché ogni oggetto ha il suo record personale), conoscere il precedente, il successivo, il parent (genitore) e il child (figlio). Spostandosi attraverso questa lista è possibile vedere tutti i record che vi sono memorizzati. ROOT (Dir Radice) Kernel (FILE) SETUP (File) UTILITIES BINARIESUTILITIES (Dir) (Dir) SYSTEM (Dir) Osserviamo la figura precedente: Partendo dalla directory radice (ROOT) passiamo al file Kernel (Il nucleo del SO è pur sempre un file su disco) notando però che anche da Kernel parte una freccia verso ROOT : DEFRAG (File) significa, in sostanza, che Kernel appartiene alla directory ROOT. Proseguendo arriviamo alla directory BINARIES che ha una directory figlia UTILITIES ed un file DE FRAG. A sua volta UTILITIES ha una figlia, chiamata SYSTEM UTILITIES che però è vuota (non ci sono ne file ne directory figlie). Nella directory SYSTEM UTILITIES ci sono due file chiamati SHELL e SETUP. Tornando indietro ve diamo che BINARIES è concatenata con MAIL, una directory vuota che rappresenta la fine della catena. Naturalmente ciò che viene memorizzato sul disco è una lista unica in cui ogni record contiene un puntatore alla struttura precedente, successiva, eventuali figlie (solo per le directory in quanti i file, ovviamente, non possono avere figli) e genitore. Questa è la struttura usata da ZOSper ogni record: SHELL(Dir) MAIL (File) FileTable: Tipo db 0 Nome db 14 DUP (20h) FSize dd 0 Attributi db 0 Time Date dw 0 dw 0 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Tipo del FILE 00h=Non esiste, cancellato 01h=Directory 02h=File generico 03h=File eseguibile 04h=Riservato Nome del FILE Size del file (Parent per le directory) Attributi Bit Meaning if set 0 All Hidden 1 All Read Only 2 Group Hidden 3 Group Read Only 4 Me Hidden 5 Me Read Only 6 Reserved 7 Volume Root ; Last Access Time ; Last Access Date 8 Cluster NextFile PrevFile PUser dw dw dw dw 0 0 0 0 ; Primo CLUSTER (Child per le directory) ; Prossimo FILE (0FFFFh=End of List) ; Precedente FILE (0=ROOT) ; Puntatore alla struttura User del proprietario La variabile Tipo contiene un valore che indica il tipo del file memorizzato e permette di identificare un record di file (la variabile ha un valore diverso da 0 1 h e 00h) da uno di directory (la variabile vale 0 1 h). Il nome dell’oggetto è contenuto nell’array Nome che contiene fino a 1 4 elementi; significa, praticamente, che un nome non può essere più lungo di 1 4 caratteri e, considerato che non è prevista l’estensione (.EXE, .COM et. comune in MS-DOS) sono più che sufficienti. Nel caso che il record sia di un file, la dimensione e’ memorizzata nella DD (Double word, 32 Bit) FSize che mi permette di avere file grandi fino a 4GigaByte ! La variabile Attributi è una delle più importanti indica le caratteristiche del record: • • • • Permesso di ve dere il file. Permesso di leggere il file. Permesso di modificare (scrivere) il file. Indicare se è INDEX del supporto. In caso l’utente immetta il comando DIR per ve dere quali directory sono disponibili, il SO preleva il record e verifica se l’utente ha i diritti per ve derlo; se può, è reso disponibile altrimenti tralasciato. Un utente con i diritti di SUPERVISOR può ve dere il contenuto di tutto il disco senza limitazioni ed è l’unico che può operare modifiche su file di sistema e di configurazione dello stesso. ZOS, per es. nella ROOT del sistema memorizza il Kernel (Il cuore del SO) e il SysConfig (File di configurazione). E’ evidente che se ogni utente potesse modificare tali file basterebbe una piccola modifica, accidentale o dolosa, per influenzare il sistema con conseguenze imprevedib ili. Le altre variabili Time e Date indicano semplicemente l’ultimo accesso al record. Le ultime quattro variabili sono tra le più importanti della struttura poiché permettono al SO di sapere esattamente dove è fisicamente il file (Cluster, che indica il primo cluster della FAT in cui è memorizzato il file), oppure quali strutture precedono o succedono a quella corrente (PrevFile e NextFile ) e chi è il proprietario dell’oggetto (PUser). L’utente , nel SOZOS, può creare ,nello spazio a lui concesso, directory e file usando i comandi MKDIR( Make directory) e E DIF (E dit File , un editor de dicato). Può altresì rimuovere gli oggetti con il comando RM (Remove ). GESTIONE UTENTI Dopo aver avviato il computer e caricato ZOSl’utente si troverà sullo schermo alcune informazioni ed un prompt “ROOT>”. In questa situazione l’utente è NESSUNO, ovvero non può accedere od utilizzare alcuna risorsa del sistema. Infatti digitando il comando WHOAMI(che permette di sapere chi sei) si nota che non vi è ne nome ne livello e lo stato è ROOT, il più basso possibile. Ogni utente regolarmente registrato possiede un UID (User IDentification) e un PIN (Personal Identification Number, l’equivalente di una password che può essere una qualsiasi stringa di testo). Per accedere alle risorse del sistema è necessario digitare LOGIN (“entra”) il quale chiede all’utente il proprio UID e PIN. Nel caso vi siano errori o l’utente non è riconosciuto (per errore di battitura o password errata) viene ritornato un messaggio di errore. C’è anche la possibilità che l’utente venga “espulso” temporaneamente dal sistema (User Expired = Utente scaduto). In questo caso si è avvisati al momento del LOGIN. E’ probabile che l’utente commetta errori nel digitare la password poiché per motivi di sicurezza, non viene visualizzata sullo schermo; infatti vi sono un massimo di 5 tentativi di immissione, passati i quali l’utente viene bloccato (User LOCKED). Un utente bloccato può ancora entrare ma ha solo una possibilità, per sessione, di digitare la password corretta. Questa precauzione può sembrare inutile ma molti hackers utilizzano il metodo “brute force” (forza bruta) per scovare le password ed entrare in un sistema: con il metodo implementato da ZOS un tentativo di “brute force” richiede un enorme quantità di tempo (infatti ogni 9 tentativo errato provoca un ritardo di circa 1 - 2 secondi) , cosa spesso non disponibile ad un hacker. Una volta che l’utente ha superato con successo la sessione di LOGIN viene visualizzata l’ora del suo ultimo accesso il sistema ed il prompt cambia con il nome dell’utente entrato (Es. se entro con SUPER prima del LOGIN il prompt è “ROOT>”, dopo il LOGIN diventerà “ROOT.SUPER>”). Un utente può, ovviamente, cambiare il suo PIN digitando SETPIN. Con il comando USERS l’utente può avere la lista degli UID sullo schermo e ve dere chi è nel sistema e chi no mentre con il comando ASK si può avere informazioni aggiuntive su ogni singolo utente (Il PIN non è accessibile a nessuno se non dall’utente che ne è proprietario). Per uscire dal sistema è necessario digitare LOGOUT. E’ previsto (ma non ancora implementato) un sistema di E- Mail tra gli utenti del sistema gestito da un task de dicato. In qualunque momento della sua permanenza sul sistema, l’utente può consultare l’aiuto digitando H E LP che visualizza sullo schermo tutti i comandi del sistema correlati da una breve descrizione. Ecco una lista del principali comandi: VERSION DIR FILE LHRES TASK CHTASKPRI RM RN MKDIR EDIF H E LP USERS ASK KILL LOGIN LOGOUT NEWUSER CHATT CHL E V E L TIME DATE REBOOT WHOAMI CLS CDIR RDIR Restituisce la versione corrente del Kernel. Lista delle directory figlie della directory corrente. Lista dei file nella directory corrente. Stato delle risorse hardware. Lista dei task in esecuzione e relativo stato. Cambia la priorità di esecuzione di un processo. Rimuove una directory o un file. Rinomina una directory o un file. Crea una nuova directory. E ditore di testo per i file. Visualizza lista comandi Lista utenti. Restituisce le informazioni di uno specifico utente. Uccide uno specifico task. Inizia sessione. Termina sessione. Crea un nuovo utente. Modifica attributi di una directory o un file. Cambia diritti di un utente. Restituisce l’ora di sistema. Restituisce la data corrente. Arresta il sistema. Restituisce le informazioni relative all’utente richiedente. Cancella lo schermo. Cambia directory. Torna alla directory ROOT. 10