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