Universitatea Politehnica Bucureşti
Utilizarea sistemelor de operare
Cursul 2: Sistemul de fişiere
08.10.2007
1. Introducere
• Un sistem de operare reprezintă o colecţie de programe destinate să administreze resursele hardware ale unui sistem de calcul
• Evoluţia sistemelor de operare a cunoscut o pantă ascendentă în ultimii 10 ani, ritmul schimbărilor fiind din ce în ce mai alert
• Pe piaţa sistemelor de operare destinate staţiilor de lucru există doua familii de produse: Windows, produs de Microsoft, şi Linux, aflat sub licenţă GPL
2
Sistemul de fişiere
• Componenta cea mai “vizibilă” pusă la dispoziţie de SO utilizatorului
• Comenzile pentru interacţiunea cu sistemul de fişiere sunt primele învăţate de utilizator; esenţiale pentru folosirea celorlalte comenzi
• Două componente:– componenta fizică – se ocupă cu alocarea şi
organizarea datelor pe suportul fizic (hard disk, CD-ROM, floppy disk, flash)
– componenta logică – se ocupă cu asigurarea unei structuri ierarhice de directoare şi fişiere
3
• De ce este nevoie de sisteme de fişiere?
– necesitatea stocarii unui volum mare de date
– informaţia trebuie să fie persistentă
– informaţia poate fi accesată concurent
• Unitatea fundamentală de stocare a informatiei este fişierul
• Un sistem de fişiere este o metodă de stocare şi organizare a fişierelor pentru un acces rapid şi eficient
• Sistemele de fişiere necesită un dispozitiv de stocare (hard disk, CD-ROM, floppy disk, RAM)
4
Sisteme de fişiere – privire de ansamblu
Facilităţi ale sistemelor de fişiere
• Sistemele de fişiere moderne folosesc un jurnal pentru a asigura integritatea datelor în cazul căderilor sistemului – funcţionalitatea se numeşte jurnalizare
• Modul de funcţionare a jurnalului:
– Operaţia asupra sistemului de fişiere este înregistrată într-un jurnal
– Driver-ul sistemului de fişiere execută periodic înregistrările din jurnal
– Doar daca o înregistrare a fost executată cu succes ea este ştearsă din jurnal.
– În cazul în care apare o cădere, la repornirea sistemului sunt
executate toate înregistrările din jurnal
5
Tipuri de sisteme de fişiere
• Sisteme de fişiere cu suport fizic:
– NTFS, FAT32, ext3, reiserfs, HFS+
– ISO9660, Joliet, UDF
• Sisteme de fişiere virtuale:
– procfs, devfs, sisteme fişiere prin FUSE
• Sisteme de fişiere pentru reţea:
– NFS, SMB, GFS (distributed file system)
6
Sisteme de fişiere - componente
• Un sistem de fişiere poate fi privit în două moduri:
– din perspectiva utilizitorului – logical file system
– din perspectiva sistemului de operare
• Important pentru utilizator este cum îi apare un sistem de fişiere, ce este un fişier, cum se realizează denumirea unui fişier, ce operaţii sunt permise asupra fişierului, etc.
• Pentru sistemul de operare este important modul de stocare a informaţiei pe disc, folosirea unor algoritmi eficienţi pentru acoperirea blocurilor şi sectoarelor de pe dispozitivul de stocare
7
Elementele sistemului de fişiere
• Fişier – abstracţia fundamentală; un fişier este o cantitate de informaţiestocată pe un suport fizic
• Director – element ce conţine altefişiere sau directoare
• Link (shortcut): legătură către un alt fişier/director
• Se mai numesc intrări în sistemul de fişiere
• Orice intrare în structura de directoareare un nume
• Structura cea mai obişnuită estestructura ierarhică (arbore multicăi)
• În Linux există câteva tipuri de fişiere speciale
folder
sub-folderfile
file file
8
Ierarhia de directoare Unix
9
Ierarhia de directoare Unix (2)
• / - directorul rădăcină• /bin – comenzi binare (executabile) esentiale• /home – conţine directoarele de bază ale utilizatorilor• /usr – conţine binare suplimentare• /var – date variabile (de obicei log-uri)• /boot – boot loader şi informaţii de booting• /lib – biblioteci utilizate de sistem• /dev – intrări în sistemul de fişiere pentru dispozitive
hardware• /root – home-ul superuser-ului (root)• ~ : scurtătură shell pentru directorul de bază (home) al
utilizatorului curent; ~student : scurtătură shell pentru directorul de bază al utilizatorului student
10
Ierarhia de directoare Windows
11
Ierarhia de directoare Windows (2)
• A:\ C:\ D:\ - rădăcinile pentru diferite sisteme de fişiere; partiţiile diferite se montează în rădăcini diferite
• C:\Windows\ - director conţinând programele de sistem pentru Windows
• C:\Program Files\ - director ce conţine programele de aplicaţie pentru Windows
• C:\Documents and Settings\ - echivalent /home în lumea Windows; aici există un subdirector pentru fiecare utilizator unde acesta îşi poate stoca informaţiile proprii
12
Comenzi Unix simple
• Afişarea conţinutului unui directorrazvan@anaconda:~/junk$ ls
a.out fun.o icsDrone-1.5.0.tar.gz test.cpp
fun.c icsDrone test
• Afişarea conţinutului unui fişierrazvan@anaconda:~/junk$ cat hello.c
#include <stdio.h>
int main (void)
{
printf ("Hello, World!\n");
return 0;
}
razvan@anaconda:~/junk$
13
Comenzi Unix simple
• Afişarea directorului curentstefanb@anaconda:~$ pwd
/home/stefanb
• Schimbarea directorului curentstefanb@anaconda:~/svn$ cd hooks/
stefanb@anaconda:~/svn/hooks$
• Crearea unui fişier, directorstefanb@anaconda:~/testing$ touch testfile.txt
stefanb@anaconda:~/testing$ mkdir testdir
• Stergerea unui fişier, directorstefanb@anaconda:~/testing$ rm testfile.txt
stefanb@anaconda:~/testing$ rmdir testdir
14
Comenzi Unix simple (2)
• Mutare, copierestefanb@anaconda:~/testing$ touch demutat.txt
stefanb@anaconda:~/testing$ touch decopiat.txt
stefanb@anaconda:~/testing$ mv demutat.txt mutat.txt
stefanb@anaconda:~/testing$ cp decopiat.txt copiat.txt
stefanb@anaconda:~/testing$ ls
copiat.txt decopiat.txt mutat.txt
15
Comenzi Windows
• Windows oferă un CLI prin care se poate interacţiona cu sistemul de operare similar cu shell-ul de Linux.
– Pentru a putea accesa CLI-ul, accesaţi Start > Run > cmd.exe
• Crearea şi listarea conţinutului unui director:D:\uso\curs USO\test> mkdir curs2
D:\uso\curs USO\test> dir
06.10.2007 18:52 <DIR> .
06.10.2007 18:52 <DIR> ..
06.10.2007 19:04 0 info.txt
06.10.2007 18:52 <DIR> curs2
• Copierea unui fisier D:\uso\curs USO\test> copy info.txt director
1 file(s) copied.
16
Comenzi Windows (2)
• Redenumirea şi mutarea unui fişierD:\uso\curs USO\test> move info.txt info2.txt
D:\uso\curs USO\test> move info.txt director
D:\uso\curs USO\test> dir
06.10.2007 18:52 <DIR> .
06.10.2007 18:52 <DIR> ..
06.10.2007 19:04 0 info2.txt
06.10.2007 18:52 <DIR> curs2
• Afişarea proceselor din sistem:D:\uso\curs USO\test> TaskList /SVC
Image Name PID Services
firefox.exe 5044 N/A
------output omis-----------------------
• Terminarea unui proces:D:\uso\curs USO\test> TSKill 5044
17
Fişiere
• Pot fi binare (fişiere de date, fişiere executabile) sau fişiere text
• Un fişier executabil execută un program• Un fişier text conţine caractere ASCII (human readable)• Fişierele, ca şi directoarele, au asociate un set de
drepturi
stefanb@anaconda:~/svn$ ls -l
total 28
drwxr-sr-x 2 stefanb stefanb 4096 2007-10-03 19:55 conf
drwxr-sr-x 2 stefanb stefanb 4096 2007-10-03 19:55 dav
drwxr-sr-x 5 stefanb stefanb 4096 2007-10-03 19:55 db
-rw-r--r-- 1 stefanb stefanb 2 2007-10-03 19:55 format
drwxr-sr-x 2 stefanb stefanb 4096 2007-10-03 19:55 hooks
drwxr-sr-x 2 stefanb stefanb 4096 2007-10-03 19:55 locks
-rw-r--r-- 1 stefanb stefanb 229 2007-10-03 19:55 README.txt
18
Fisiere (2)
• Fişierele pot avea o extensie; formatul estenume.extensie (file.txt, main.c, arhive.zip, program.exe)
• De obicei extensia precizează tipul fişierului, însă Linux se foloseşte şi de conţinutul lui pentru a determina tipul.
razvan@anaconda:~/junk$ file a.outa.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), not strippedrazvan@anaconda:~/junk$ file icsDrone-1.5.0.tar.gzicsDrone-1.5.0.tar.gz: gzip compressed data, from Unixrazvan@anaconda:~/junk$ file test.cpptest.cpp: ASCII C program textrazvan@anaconda:~/junk$ file fun.ofun.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not strippedrazvan@anaconda:~/junk$ file test.txttest.txt: ASCII text
19
Fişiere (3)
• Extensii comune:– .txt – fişiere text– .exe – fisier executabil– .c, .h, .cpp, .java, .py – fişier cod sursă– .o (.obj) – fişier obiect (binar)– .lib, .dll, .so – biblioteci– .exe – fişier executabil (Windows)– .sh – script shell (Unix)– .bat – batch script (Windows)– .zip, .rar, .tar, .tgz, .tar.bz2 – fişier arhivă– .doc, .xls, .ppt – fişier Office Kit– .avi, .mpeg, .rm – fisier video– .bmp, .jpeg, .png, .gif – fişier imagine– .wav, .midi, .mp3 – fişier audio
20
Directoare
• Folder/directory• O cale (path) în sistemul de fişiere este o succesiune de
directoare şi, eventual, un fişier; separatorul este / pe Unix şi \ pe Windows– /home/student/cursuri/uso2_curs.ppt– C:\Documents and Settings\Student\Cursuri\uso2_curs.ppt
• Orice ierarhie de directoare are un director rădăcină; directorul rădăcină pe Unix este /, indiferent de numărul de partiţii; pe Windows este c:\, d:\ etc.
21
Directoare (2)
• Două intrări dedicate:– . (punct) – directorul curent– .. (punct punct) – directorul părinte
razvan@anaconda:~/junk/hello$ ls -a. .. hello hello.c
• Doua tipuri de căi:– Relative (în raport cu directorul curent):./svn/db/transactions
– Absolute:/home/stefanb/svn/db/transactions
• Cum se execută un fişier executabil în Unix?razvan@anaconda:~/junk/hello$ ./helloHello, World!
22
Link-uri
• Legături (shortcuts) către alte intrări din sistemul de fişiere
• În Linux există două tipuri de linkuri:– linkuri hard
– linkuri soft (simlink-uri)
stefanb@anaconda:~/testing$ touch file.txt
stefanb@anaconda:~/testing$ ln -s file.txt linktofile.txt
stefanb@anaconda:~/testing$ ls -l
total 0
-rw-r--r-- 1 stefanb stefanb 0 2007-10-06 17:44 file.txt
lrwxrwxrwx 1 stefanb stefanb 8 2007-10-06 17:45 linktofile.txt -> file.txt
link
23
Tipuri speciale de fişiere
• Sistemul de fişiere în Linux are funcţii mai vaste decât în Windows.
• În Windows, toate fişierele au suport fizic pe disc.
• În Linux, există câteva tipuri speciale de fişiere, prinintermediul cărora se comunică cu anumite resursedin sistem:
– Legăturile simbolice
– Device files (localizate în /dev) – dispozitivele hardware
– Named pipes – folosite pentru comunicarea întreprograme
– Sockets – pentru comunicarea prin reţea
24
Discuri şi partiţii
• Pentru o mai bună organizare a datelor, pe discuri există partiţii – exemple de utilizare a partiţiilor:
– Partiţie pentru sistemul de operare Windows/Linux
– Partiţie pentru date (home directory)
– Partiţie pentru swap etc.
• Tipuri de partiţii:
– Primare (maxim 4)
– Extinsa (poate înlocui una dintre partiţiile primare)
– Logice: se regăsesc în interiorul partiţiei extinse
• Sistemele de fişiere se pot plasa doar în partiţiile primare şi cele logice, pe suprafaţa unui hard-disk
25
Sisteme de fişiere – perspectiva SO
• Sectorul 0 al unui disc conţine MBR (Master Boot Record); spre sfârşitul acestuia se află tabela de partiţii
• Fiecare partiţie conţine un sector de boot propriu şi un sistem de fişiere
• Din punct de vedere structural, sistemul de fişiere conţine:
– superbloc
– bloc de control al spaţiului liber
– directorul radăcină
– fişierele şi directoarele
26
Partiţionare şi formatare
• Procesul de împărţire a unui disc în partiţii se numeşte partiţionare – utilitarul Linux pentru acest lucru se numeşte fdisk
• Procesul de creare a unui sistem de fişiere într-o partiţie se numeşte formatare - sistemele Linux folosesc familia de comenzi mkfs pentru acest lucru: mkfs.ext3, mkfs.vfat etc.
• Aceste activităţi pot fi realizate şi în mediu grafic: GParted, QParted (Linux), sau Partition Magic(Windows)
27
Sisteme de fişiere – aspecte generale (cont.)
28
nealocatMBR
Tabela
de partitii
partitia 1 partitia 2 partitia 3
bloc de
boot
spatiu liber pt
managemntinodes
directoare
radacinasuper bloc
fisiere si
directoare
Structura unui sistem de fisiere pe disc
Montarea unui sistem de fişiere
• La pornirea SO, se încarcă de pe disc sistemul de fişiere rădăcină
• Ulterior, se pot monta (mount) alte sisteme de fişiere
• Montarea unui nou sistem de fişiere se realizeazăîntr-un anumit punct din ierarhia curentă de directoare
29
Montarea unui sistem de fişiere (2)
• Pe windows orice sistem de fişiere se montează automat într-o rădăcinăseparată (C:\, D:\, etc.)
• pe Unix există un singur director rădăcină; montarea se face, de obicei neautomat, într-un punct din ierarhie:
# mount /dev/hda7 /mnt/disk
30
Best Practice – denumirea intrărilor în sistemul de fişiere în Unix
• Unix philosophy: Keep It Simple!• Nume scurte, descriptive:
– DA: main.c, config.txt, bash.rc– NU: MainProgramFile.c, Configuration File For A Process.txt,
BourneAgainShellResourceFile– Se preferă /usr/share/doc în loc de C:\Program Files\Program
Name\Documentation
• Folosirea caracterului ‘spaţiu’ (blank) şi a caracterelor speciale shell ($, [, {, *, etc.) este descurajată
• Fişierele, directoarele ascunse încep cu caracterul . (punct)$ lssimple.c$ ls –a. .. .hidden.txt simple.c
• Denumirea unor directoare poate să se termine în .d (dir.d, /etc/init.d)
• Fisierele pot sa nu aibă extensie; în general, executabilele nu au extensie
ţ
31
Best Practice – afişarea extensiei unui fişier înWindows Explorer
• Tools -> Folder Options
• View -> Hide extensions for known file types
32
Sisteme de fişiere: ext
• Extended File System
• sistemul nativ Linux
• ext, ext2, ext3
• ext3 – folosit actualmente de multe din distribuţiile Linux – ext2 + facilităţi de jurnalizare
• planuri pentru ext4
• sistem cu alocare indexată (i-node); ext a fost bazat pe sistemul de fişiere Minix
• fsck (file system check) – utilitarul pentru verificarea consistenţei unui sistem de fişiere tip Unix
33
Inode
34
indirectare simpla
indirectare dubla
indirectare tripla
blocuri directe
count
bloc dimensiune
etichete de timp (3)
proprietar (2)
mod
date
date
date
date
date
date
date
date
date
Sisteme de fişiere: Reiser
• sistem de fişiere general-purpose
• primul sistem de fişiere cu jurnalizare inclus în kernel-ul Linux
• sistemul de fişiere implicit pe multe distribuţii Linux (Slackware, Xandros, Linspire)
• jurnalizare, online resizing, tail packing (schemă de reducere a fragmentării)
• pentru fişiere mai mici de 4K, este mai rapid decat ext3 de 10-15 ori
• Reiser4 este versiunea actuală de dezvoltare (nu a fost inclusa inca in kernel-ul Linux)
• aduce îmbunatăţiri pentru lucrul cu fişiere cu format specific
35
Sisteme de fisiere: FAT
Folosit in MS-DOS, Windows '95, Windows '98
• conţine:– sectorul de boot
– FAT region
– Root Directory Region
– Data Region
• o tabelă FAT este o listă de intrări care se mapează pe fiecare cluster şi contine:– adresa următorului cluster
– un indicator special End Of File
– un caracter special pentru marcarea “bad blocks”
– un caracter special care să indice un cluster rezervat
– zero ca să indice un cluster neutilizat
36
FAT
37
…..
intrare director
fis1
nume
73813
bloc de
start
-1
248118199
EOF24811
819973813
0
Sisteme de fişiere: NTFS
• Windows 2000, Windows XP, Windows 2003
• înlocuire pentru FAT
• s-au adăugat liste de control a accesului (drepturi de acces) şi jurnalizare
• îmbunătăţiri:– volume mount points (specificarea unei locaţii de montare, în
locul creării unui nou drive C:, D:)
– file compression
– encrypting file system
– cote (quotas)
• ntfs-3g este un driver recent pentru Linux,stabil şi performant
38
Link-uri utile
• Sisteme de fişiere:
– http://en.wikipedia.org/wiki/List_of_file_systems
– http://en.wikipedia.org/wiki/Comparison_of_file_systems
• Tipuri de fişiere:
– http://filext.com/
– http://en.wikipedia.org/wiki/Unix_file_types
39
Cuvinte cheie
• sistem de fişiere
• fişier binar
• fişier text
• extensie
• path (cale)
• director
• legături (linkuri)
• hard-disk
• partiţie primară
• partiţie extended
• partiţie logic
• sector de boot
40
• MBR
• montare (mount)
• inode
• sector de boot
• root (director radacină)
• jurnalizare
• EXT3
• ReiserFS3
• FAT32
• NTFS
• UDF
• HFS+