Memoria centrale: La memoria centrale è la memoria principale di un elaboratore elettronico. In essa
sono registrati i dati temporanei elaborati dal processore durante l’esecuzione di un programma.
Essa risiede sulla scheda madre del calcolatore ed è molto vicina alla CPU; in questo modo la CPU
può comunicare in maniera più veloce con essa. E’ molto più veloce rispetto alle memorie di massa e
si suddivide in: memoria RAM, memoria ROM e memoria Cache.
Definizione di processo: un processo è un programma in esecuzione completo del suo stato
(completo del suo spazio di indirizzamento, contenuto dei registri, file aperti ecc..). Tutto o
parte dello spazio di indirizzamento è residente in memoria centrale.
Per funzionare correttamente, il Loader deve avere a disposizione un file eseguibile. Il file eseguibile viene creato a partire da un programma.
Quando scriviamo un programma, di solito lo scriviamo con un linguaggio di alto livello. Questo linguaggio non è direttamente interpetrabile da parte della macchina su cui deve essere eseguito,
per questo motivo deve essere “tradotto”, o meglio compilato. La compilazione avviene attraverso un compilatore che si occuperà dunque di trasformare un programma in un file esegubile
Un file eseguibile è un file binario memorizzato sul disco che contiene tutte le
informazioni necessarie all’esecuzione del programma da parte del processore. Il
formato del file dipende dal sistema operativo che deve curarne l’esecuzione.
Spazio di indirizzamento: lo spazio di indirizzamento,
è l’immagine della memoria visibile al programma
durante la sua esecuzione. Esso viene caricato in
memoria centrale.
Byte di
memoria
indirizzabili Traduzione in linguaggio macchina delle istruzioni che compongono il programma
indirizzo dell’istruzione successiva a quella che ha effettuato la chiamata
alla funzione
che cresce in questo modo
Un programma viene eseguito quando viene caricato nel Program Conter
(registro della CPU che contiene l’indirizzo di memoria della prossima
istruzione da far eseguire alla CPU) l’indirizzo di memoria della prima
istruzione, nell’area testo del programma da eseguire, da far eseguire alla
CPU.
A questo punto, il programma ha il controllo del processore.
SPAZIO DI INDIRIZZAMENTO – CASO DEL LINGUAGGIO C
Nell’area dati BSS vanno memorizzati tutte le variabili globali o statiche che sono
state inizializzate a zero oppure che non sono state esplicitamente inizializzate
Magic number: Il magic number è una sequenza di bit posta prima della sequenza di dati che serve a definire il formato in cui i dati sono memorizzati. Sono
nati negli ambienti UNIX per identificare il formato dei file binari e per la gestione dei dati nella memoria. Sebbene quasi tutti i formati di file siano identificati
da un magic number, la Microsoft, sin dalle sue prime versioni del suo sistema operativo ha deciso di adottare un nuovo identificativo: l’estensione.
Ad esempio:
- I file GIF iniziano con la stringa ASCII GIF87a oppure ASCII GIF89a.
- I file ZIP cominciano con la stringa PK (in esadecimale 50 4B), in onore dell’ideatore Phil Katz
- I file ELF di Linux iniziano con la stringa 7F 45 4C 46: gli ultimi 3 byte di questa stringa formano la parola ELF
CONDIVISIONE DELLA RAM
La memoria RAM (Random Access Memory - Memoria ad accesso casuale) è una memoria di tipo volatile
(necessita dell alimentazione elettrica per mantenere memorizzate le informazioni) che permette l accesso a
qualsiasi indirizzo di memoria con lo stesso tempo di accesso.
Nella memoria RAM vengono caricati i programmi che la CPU deve eseguire. Quando un programma viene
chiuso, se le informazioni non vengono salvate sul disco rigido o su una memoria di tipo non volatile,
verranno perse.
La RAM contiene lo spazio di indirizzamento di pi processi e contiene anche un area riservata che serve a
contenere i processi del sistema operativo, perché anch esso occupa risorse. La differenza tra un processo
normale ed un processo del sistema operativo è che il processo normale lavora in user mode, mentre il
processo del sistema operativo lavora in Kernel Mode e può fare tutto a differenza di un processo in user
mode.
Siccome sulla RAM devono condividere più spazi di indirizzamenti di più processi non deve accadere che un
processo abbia la possibilità di accedere agli indirizzi fisici della RAM al di fuori della sua area.
Quando il compilatore/linker va a compilare le istruzioni di un processo assume che lo spazio di
limite. Esso però non
indirizzamento del processo che sta compilando parta da 0 fino ad un valore
conosce il processo che deve compilare a quale indirizzo fisico (sula RAM) è associato, quindi, se non
iene effe a a n opera ione di riloca ione si rischia di far acca allare gli indiri i s lla memoria
RAM.
Nasce quindi la necessità di effettuare un processo di rilocazione degli indirizzi e viene fatta in
hardware, ovvero usando componenti elettronici.
Questa operazione consiste nell andare a ricavare quale è l indirizzo base del processo in esecuzione e
sommare a quest ultimo l indirizzo proveniente dal Program Counter (che contiene l indirizzo della
prossima istruzione da eseguire e questo indirizzo se lo prende dallo spazio di indirizzamento del processo in
esecuzione) a patto che sia minore del valore limite dello spazio di indirizzamento del processo.
Supponendo di star eseguendo il processo 2, il sistema operativo prima di cominciare l esecuzione di quel
processo, mette nel registro base l indirizzo base di quel processo. In questa maniera tutti gli indirizzi, sia
quelli delle istruzioni (Program Counter), sia gli indirizzi dei dati, prima di andare verso la memoria, quindi
prima di essere messi sui fili dei bus, vengono incrementati di questo valore. Questo comporta che ad ogni
passaggio da un processo ad un altro, il sistema operativo deve ricordarsi di aggiornare l indirizzo base.
Usando invece il registro limite, posso stabilire per ogni processo i vincoli di memoria in cui si può muovere
quel determinato processo. Un tentato accesso allo spazio di memoria di un altro processo, genera un errore.
DOMANDE ESAMI:
1) CLASSE SEMAFORO CODICE
2) COME VIENE DICHIARATA LA SYSTEM CALL “OPEN”
3) COME VENGONO RAPPRESENTATI I PERMESSI?
4) CHI PUO’ MODIFICARE QUESTI PERMESSI?
5) COSA SUCCEDE PER IL PROCESSO QUANDO VIENE APERTO UN
FILE?
6) COSA CI STA NELLA TABELLA DEI FILE APERTI?
7) COS’E’ IL TLB?
8) COME AVVIENE LA TRADUZIONE INDIRIZZO LOGICO AD
INDIRIZZO FISICO?
9) MI SCRIVA UN PROGRAMMA IN CUI UN PADRE GENERA 2 FIGLI
E PASSA AL SECONDO FIGLIO IL PID DEL PRIMO FIGLIO TRAMITE
PIPE. IL SECONDO FIGLIO INVIA UN SEGNALE AL PRIMO FIGLIO.
10) QUANDO SI VERIFICA IL PAGE FAULT? E COSA SUCCEDE
QUANDO SI VERIFICA? QUALI SONO I CAMPI CHE VENGONO
MODIFICATI?
11) COME E’ VISTO UN INDIRIZZO LOGICO? (PAGINA LOGICA,
OFFSET)
12) MI SPIEGHI L’ALGORITMO LRU CHE UTILIZZA IL BIT R, COME
FUNZIONA E CHE SIGNIFICA L’ACRONIMO LRU. COS’E’ IL BIT R?
COME VIENE MESSO A 1?
13) COS’E’ UN I-NODE E COME VIENE FATTO?
14) QUALI SONO LE STRUTTURE DATI DEI FILE SYSTEM? (OLTRE A
INODE ABBIAMO DIRECTORY)
15) CHE INFORMAZIONI CI SONO NELLA DIRECTORY?
16) QUESTO NUMERO DI INODE CHE STA NELLA DIRECTORY
COME LO UTILIZZO PER RECUPERARE L’INODE DAL DISCO?
17) ESERCIZIO: LETTORE SCRITTORE CON LETTORI CHE POSSONO
LAVORARE INSIEME E SCRITTORI CHE DEVONO LAVORARE IN
MUTUA ESCLUSIONE
18) ESERCIZIO: PRODUTTORE-CONSUMATORE CON UNA CODA
LIMITATA DI POSTI DI CUI 4 SONO GIA’ OCCUPATI. SE
INVERTIAMO I DUE UP ACCADE QUALCOSA?
19) COME FUNZIONA L’ISTRUZIONE TEST AND SET (TSL)?
SCRIVERE L’ISTRUZIONE A CODICE CON GLI OPERANDI
20) COS’E’ IL PROCESS CONTROL BLOCK (PCB)? QUALI SONO LE
SUE COMPONENTI? (Min 17.00)
21) QUALI SONO GLI STATI DEL PROCESSO E COME SI PASSA
DALL’UNO ALL’ALTRO? (WAIT, READY, RUNNING)
22) CHE COS’E’ UNA SYSTEM CALL?
23) COME E’ FATTA UNA DIRECTORY DOS? (MINUTO 24:50
REGISTRAZIONE) CON RIFERIMENTO ALLA PARTE DI GESTIONE
DELLA PATH
24) COS’E’ UN MONITOR? QUALI SONO LE CARATTERISTICHE CHE
FANNO DI UNA CLASSE UN MONITOR? CHE CARATTERISTICHE
DEVONO AVERE I METODI? COSA SONO LE VARIABILI DI
CONDIZIONE, A CHE SERVONO E COME VENGONO UTILIZZATE?
DOMANDE ESAMI:
1) PRODUTTORI-CONSUMATORI CON CODA LIMITATA
INIZIALMENTE PIENA
2) ATTIVAZIONE DI UN PROCESSO PADRE E UN FIGLIO. IL
FIGLIO FA L’EXEC MENTRE IL PROCESSO PADRE DEVE
RIDIGERE LO STDOUT DEL FIGLIO
3) COM’E’ FATTA LA TABELLA DELLE PAGINE? COM’E’ FATTA LA
SINGOLA RIGA DELLA TABELLA DELLE PAGINE? QUALI SONO
GLI ELEMENTI PRINCIPALI DEL RECORD? QUANTE RIGHE
DEVE AVERE LA TABELLA DELLE PAGINE?
4) LETTORI E SCRITTORI CON MEMORIA CONDIVISA. LA
SEQUENZA E’ UNA SCRITTURA SEGUITA DA TRE LETTURE
CON SCRITTORI E LETTORI CHE LAVORANO IN MUTUA
ESCLUSIONE.
5) SCRIVA L’INTERFACCIA DELLA FUNZIONE FOPEN
6) PERMESSI + TABELLA DEI FILE APERTI
7) PROGRAMMA C IN CUI UN PADRE CREA IL FIGLIO IL QUALE
INVIA UN SEGNALE SIGUSR1 AL PADRE CHE ASPETTA
QUESTO SEGNALE E TERMINA.
8) TRADUZIONE INDIRIZZO LOGICO- FISICO IN UNA MEMORIA
PAGINATA
9) LRU
10) APPLICAZIONE MULTITHREAD CON UNA CATENA DI
MONTAGGIO DI N THREAD CHE DEVONO ESEGUIRE LE
OPERAZIONI 1 ALLA VOLTA. IL THREAD CHE PARTE DEVE
ESSERE SCELTO DAL THREAD ZERO IN MODO CASUALE.
11) COSA SONO I MONITOR? DIFFERENZA CON I SEMAFORI
12) THREAD CHE INSERISCONO UNO ALLA VOLTA UN
OGGETTO NEL DEPOSITO (DI DIMENSIONE INFINITA) E
DOBBIAMO EVITARE CHE LO STESSO THREAD INSERISCA 2
OGGETTI CONSECUTIVI
13) READ
14) UNA VOLTA IDENTIFICATA LA RIGA DELLA TABELLA DEI
FILE APERTI CHE FACCIAMO?
15) COS’E’ IL TLB?
16) COSA FA IL SO QUANDO FACCIAMO UNA OPEN?
risolviamo il problema della rilocazione dinamica e permettiamo che i processi non accedano agli indirizzi fisici della RAM relativi ad altri processi
RILOCAZIONE
Indirizzo iniziale del programma nella memoria RAM Indirizzo corretto diretto alla memoria RAM
Ampiezza dello spazio di indirizzamento
PROTEZIONE
Un processo, inoltre nasce anche quando viene inizializzato il sistema, quando l’utente decide di eseguire un programma (facendo doppio click
sull’icona o lancia un file eseguibile) oppure, nel caso dei sistemi batch, quando a una certa ora del giorno inizia un job batch
Le system call, dette anche chiamate di sistema, permettono ai programmi a
livello utente di richiamare i servizi del sistema operativo. Esse sono
solitamente disponibili come speciali istruzioni assembler oppure come
funzioni speciali nei linguaggi che supportano direttamente la
programmazione di sistema (come ad esempio il linguaggio C).
Per ottenere un servizio del sistema operativo quindi si usano queste system
call e la richiesta del servizio avviene grazie al passaggio dalla modalità
utente alla modalità kernel per mezzo di un’istruzione speciale chiamata
trap.
Il codice relativo ai servizi del sistema operativo è eseguibile solo in kernel
mode per ragioni di sicurezza.
Una volta terminato il compito relativo alla particolare chiamata invocata, il
controllo ritorna al processo chiamante passando dal kernel mode alla user
mode.
Sono disponibili per il programmatore una serie di funzioni di libreria che
variano da circa 70 a oltre 200 a seconda della versione di UNIX.
POSIX che è una famiglia di standard definiti dall’IEEE (associazione
internazionale di scienziati con l’obiettivo della promozione delle scienze
tecnologiche)standardizza un nucleo base di queste system call (circa 120) a
livello di interfaccia per il linguaggio C. una
assegnano
invece di usare l’interno pathname. E’ un intero maggiore di zero.
A Lo standard input è un canale standard da cui giunge un flusso di dati in ingresso al programma. Il programma li trasferisce
effettuando operazioni di lettura. Il file descriptor ad esso associato è 0.
Lo standard output è un canale standard su cui un programma scrive i suoi dati in output. Il programma trasferisce i dati
effettuando operazioni di scrittura. Il file descriptor ad esso associato è 1.
Lo standard error è un canale standard di output tipicamente usato dai programmatori per i messaggi d’errore o di diagnostica.
È indipendente dal canale standard 1, ovvero quello di output e il file descriptor ad esso associato è 2.
I file standard vengono aperti dalla shell (terminale) del sistema operativo PUNTATORE A
CARATTERE
Serve per spostare il cursore alla fine del file. E’
utile quando si vuole effettuare una write per
scrivere senza cancellare ciò che c’è già scritto
nel file
Cancella tutto ciò che c’è scritto nel file e sposta quindi il cursore
O_TRUNC all’inizio del file
Un file può essere aperto più volte. In questo caso ad esso saranno associati più file descriptor contemporaneamente.
Set User ID: il Set UID è un tipo di permesso che se viene applicato ad un file eseguibile, indica che il file deve essere
eseguito con i permessi dell’utente proprietario del file, anzichè con quelli dell’utente che lo avvia.
Viene usato quindi per consentire ad utenti ordinari di eseguire programmi che richiedono particolari privilegi di sistema
di cui normalmente dispone solo l’amministratore.
Ritorna 0 in caso di successo e -1 in caso di errore
NOTA: quando un processo termina, tutti i file aperti da esso vengono automaticamente chiusi
1 carattere = 1 byte
Il primo parametro è il file descriptor
del file aperto da cui si vuole effettuare
la lettura.
Il secondo parametro è un array di
caratteri di dimensione prefissata.
Il terzo parametro indica il numero di Testo
byte da leggere dal file in base alla
posizione attuale del cursore nel file
(offset) (array di caratteri). (file)
Restituisce il numero di byte letti dal file partendo dalla posizione attuale del cursore nel file.
In caso di errore restituisce -1 Chiamare una read subito dopo una write, restituisce 0 perchè il
cursore nel file è all’ultima posizione quindi non legge niente dopo.
Bisogna usare la funzione lseek che sposterà il cursore in base ai
parametri che inseriamo.
Questa system call inizia
a scrivere da dove sta
posizionato attualmente il
cursore nel file. Il primo parametro è il file descriptor del file aperto e nel quale si vuole effettuare
la scrittura.
Il secondo parametro è un array di caratteri di dimensione prefissata che
all’interno in ogni casella tiene memorizzato un carattere.
Il terzo parametro indica il numero di byte da leggere dal buffer di caratteri (array
di caratteri) e da scrivere nel file.
Restituisce il numero di byte scritti nel file oppure restituisce -1 in caso di
errore.
Se non richiamo questa sistem call,
quando viene aperto un file, il cursore è
impostato di default all’inizio del file.Se
per caso dopo una open si vuole
scrivere con una write, le stringhe che
verranno scritte nel file verranno scritte
all’inizio del file, sovrascrivendo le prime
stringhe e lasciando inalterate le
restanti se sono presenti.
Restituisce la posizione del file attuale dopo l’effetto della system call. Restituisce -1 in caso di errore.
(cartelle)
DOVE VOGLIO CREARE LA CARTELLA
PERCORSO DOVE E' MEMORIZZATA QUESTA CARTELLA
Restituisce il nuovo file descriptor oppure restituisce -1 in caso di errore apetta prima
e poi procede con le prossimi istruzioni.
Restituisce il pid del processo terminato oppure -1 in caso di errore.
Quando il padre, si accorge che il figlio è terminato attraverso la wait(), il processo figlio zombie viene eliminato. Un processo
zombie occupa un insieme minimale di risorse. non il nome del file .c! Ma il nome del file eseguibile
.exe
In sostanza rimane inalterata l
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Soluzione teoria Sistemi operativi
-
Domande Teoria Sistemi operativi
-
Sistemi Operativi
-
Sistemi operativi - teoria completa