2 Sistemul de fișiere – interfața de user space Cursul 2

Slides:



Advertisements
Similar presentations
Operating system services Program execution I/O operations File-system manipulation Communications Error detection Resource allocation Accounting Protection.
Advertisements

Files. System Calls for File System Accessing files –Open, read, write, lseek, close Creating files –Create, mknod.
6/24/2015B.RamamurthyPage 1 File System B. Ramamurthy.
Lecture 17 FS APIs and vsfs. File and File Name What is a File? Array of bytes. Ranges of bytes can be read/written. File system consists of many files,
7/15/2015B.RamamurthyPage 1 File System B. Ramamurthy.
POSIX: Files Introduction to Operating Systems: Discussion 1 Read Solaris System Interface Guide: Ch. 5.1 Basic File I/O.
CS252: Systems Programming Ninghui Li Based on Slides by Prof. Gustavo Rodriguez-Rivera Topic 8: Opening Files and Starting Processes.
UNIX Files File organization and a few primitives.
Files and Directories File types stat functions for file information
Project 6 Unix File System. Administrative No Design Review – A design document instead 2-3 pages max No collaboration with peers – Piazza is for clarifications.
Laface 2007 File system 2.1 Operating System Design Filesystem system calls buffer allocation algorithms getblk brelse bread breada bwrite iget iput bmap.
Chapter 10: File-System Interface Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th Edition, Jan 1, 2005 File-System Interface.
CS 241 Section Week #8 (10/29/09). Outline MP5 Overview Files & I/O UNIX File Systems inodes Directories Links.
File I/O open close lseek read and write – unbuffered I/O dup and dup2.
CSC 660: Advanced Operating SystemsSlide #1 CSC 660: Advanced OS Virtual Filesystem.
OS interface: file and I/O system calls File operations in C/C++? –fopen(), fread(), fwrite(), fclose(), fseek() in C f.open(…), f.close(…) in C++ I/O.
CSC 271 – Software I: Utilities and Internals An Introduction to File I/O in Linux Credited to Dr. Robert Siegfried and Beginning Linux Programming by.
File System Design David E. Culler CS162 – Operating Systems and Systems Programming Lecture 23 October 22, 2014 Reading: A&D a HW 4 out Proj 2 out.
Lecture 3: System Calls & API Standards
Chapter 11: File System Implementation
Lecture 31: Introduction to File System
Chapter 12: File System Implementation
Februarie 2018 ASE Bucuresti
ACTIVITATEA 1 -,, PROFESOR IT LA PAPI’’
CUPRINS Tastatura Imprimanta Scanner Bibliografie Recapitulare.
Funcţii Excel definite de utilizator (FDU) în VBA
Placa de bază.
Drivere fizice Universitatea Politehnica Bucuresti
Programare și securitate la nivelul arhitecturii x86
Instrumente CASE Curs nr. 7.
Memoriile externe (ME)
Căutarea şi regăsirea informaţiei.
SOFTWARE Tipuri de software.
PASII INSTALARII SISTEMULUI DE OPERARE
Partiționarea.
Dispozitive de stocare
CONFIGURAREA SWITCHURILOR
CREATE, DROP,ALTER INSERT, UPDATE, DELETE
Arhitectura serviciilor web
Căutarea şi regăsirea informaţiei.
Paxos Made Simple Autor: Puşcaş Radu George
Gestionarea datelor stiintifice
Retele de calculatoare
7 Memoria virtuală 28 martie aprilie 2011
Software product management
CONVERSII INTRE SISTEME DE NUMERATIE
OPERATING SYSTEMS DESIGN AND IMPLEMENTATION Third Edition ANDREW S
Curs 2 1 Sistem de operare-concepte: 2 Apeluri de sistem
ANALIZA INFORMAŢIEI.
Apache WEB Server.
INTERNET SERVICII INTERNET.
File System B. Ramamurthy B.Ramamurthy 11/27/2018.
A great way to create a channel of communication
Functia de documentare
Administrarea reţelelor de calculatoare
SOAP -Simple Object Access Protocol-
Programarea in limbajul Java 2004 Lecturer: Gavrila Cristian
Realizarea prezentarilor cu Microsoft PowerPoint
Software open source in industria software
Aplicaţii specializate pentru realizarea unei prezentări – PowerPoint
Implementarea listelor simplu inlantuite
CSE 333 – Section 3 POSIX I/O Functions.
File I/O (1) Prof. Ikjun Yeom TA – Mugyo
Administrare Oracle 9i Suport de curs
CSE 333 – Section 3 POSIX I/O Functions.
Persistence: File System API
CSE 333 – Section 3 POSIX I/O Functions.
Chapter 12: File-System Implementation CSS503 Systems Programming
Introduction to Operating Systems
Presentation transcript:

2 Sistemul de fișiere – interfața de user space Cursul 2 21 februarie 2011 - 27 febuarie 2011 21.02.2011-27.02.2011

Suport curs 2 OSC MOS secțiunile 1 și 2 Capitolul 10 – File-System Interface Capitolul 11, Secțiunea 11.1 – File-System Structure MOS Capitolul 6 – File System Implementation secțiunile 1 și 2 LSP – Capitolul 2 (parte programatică) WSP – Capitolul 2 (parte programatică) 21.02.2011-27.02.2011

Sisteme de fișiere: definiții, concepte Cuprins Sisteme de fișiere: definiții, concepte Fișiere. Atribute ale fișierelor Operații cu fișiere API pentru lucrul cu fișiere Directoare. Operații cu directoare Tipuri speciale de fișiere Montarea sistemelor de fișiere 21.02.2011-27.02.2011

Ce este un sistem de fișiere? mod de organizare a informației (persistente) pe un suport fizic scalabilitate și acces facil unitatea de bază este fișierul din punct de vedere al utilizatorului: o interfață de acces la informație formată din directoare și fișiere (în general ierarhică) din punct de vedere al sistemului de operare structuri de date și algoritmi pentru organizarea informației pe disc 21.02.2011-27.02.2011

necesitatea unui suport persistent suport de dimensiune mare De ce este nevoie de SF? necesitatea unui suport persistent suport de dimensiune mare acces facil la informație (prin intermediul fișierelor) sistemul de fișiere mapează fișierele pe suportul fizic 21.02.2011-27.02.2011

ext3 ReiserFS HFS NTFS FAT32 ISO9660 UDF Exemple de SF ext3 ReiserFS HFS NTFS FAT32 ISO9660 UDF * sisteme de fisiere tranzactionale vs. sisteme non-tranzactionale (trade-off consistenta vs. viteza) * sisteme de fisiere distribuite * sisteme de fisiere de retea (NFS) * ce tip de SF se foloseste pt. swap si de ce? 21.02.2011-27.02.2011

Ierarhia de apeluri/interfețe utilizator aplicație metainformație translatare blocuri logice – blocuri fizice implementare SF device driver dispozitiv fizic 21.02.2011-27.02.2011

Sistemul de fișiere – vedere de ansamblu cursor de fișier nume de fișier byte stream atribute descriptor de fișier director fișier user-space kernel-space VFS superbloc alocare inode dentry FAT disc bitmap bloc 21.02.2011-27.02.2011

unitatea de bază a sistemului de fișiere Fișierul unitatea de bază a sistemului de fișiere în lumea SO există două abstractizări fundamentale fișierul – abstractizează informația/datele procesul – abstractizează efectuarea de acțiuni în sistemele Unix-like, totul este un fișier de fapt, aproape totul (Plan9 este foarte aproape) aceleași atribute și tipuri de operații cu fișiere sunt corelate cu diverse interfețe ale sistemului de operare 21.02.2011-27.02.2011

Tipuri de fișiere fișiere simple – regular files directoare – directories legături (simbolice) – hard/soft links dispozitive tip caracter – char devices dispozitive tip bloc – block devices pipes/FIFOS sockeți UNIX cum aflați tipul unui fișier în UNIX? 21.02.2011-27.02.2011

organizare/structură Fișiere simple binare, text extensie organizare/structură record șir de octeți atribute drepturi dimensiune utilizator timestamps * atributele (mai ales cele de securitate) nu se mapeaza intotdeauna simplu de la un sistem de operare la altul 21.02.2011-27.02.2011

a) byte-stream b) record file c) tree Organizare fișier a) byte-stream      b) record file      c) tree 21.02.2011-27.02.2011

Fișiere binare a) fișier executabil [1] b) arhivă [1] - Data segment: http://en.wikipedia.org/wiki/Data_segment [1] - Relocation: http://en.wikipedia.org/wiki/Relocation_(computer_science) [1] - Program Loader: http://en.wikipedia.org/wiki/Loader_(computing) a) fișier executabil [1]      b) arhivă 21.02.2011-27.02.2011

poziționare în cadrul fișierului trunchiere închidere ștergere [2] Operații cu fișiere creare deschidere citire scriere poziționare în cadrul fișierului trunchiere închidere ștergere [2] [2] - Data remanence (sau cum sa te asiguri ca datele sterse sunt sterse): http://en.wikipedia.org/wiki/Data_remanence 21.02.2011-27.02.2011

Creare shell ISO/ANSI C Unix Windows       touch /path/to/file comenzile care scriu într-un fișier îl și creează ISO/ANSI C        FILE *f = fopen (“/path/to/file”, “rw”); Unix        int fd = open (“/path/to/file”, O_CREAT | O_EXCL, 0644); Windows        HANDLE fileHandle = CreateFile (“/path/to/file”, ..., CREATE_NEW); 21.02.2011-27.02.2011

Deschidere ISO/ANSI C Unix Windows     FILE *f = fopen(“/path/to/file”, “rt”); Unix     int fd = open(“/path/to/file”, O_RDONLY); Windows     HANDLE f = CreateFile(“/path/to/file”, ..., OPEN_EXISTING); 21.02.2011-27.02.2011

Atribute fișier deschis identificare handle, descriptor de ce nu nume? file pointer, cursor de fișier drepturi de deschidere contor de utilizare (file-open count) [3] [3] - Reference counting: http://en.wikipedia.org/wiki/Reference_counting 21.02.2011-27.02.2011

fiecare proces are o tabelă de descriptori de fișier [4] Descriptor de fișier un întreg ce identifică o instanță de fișier deschisă în cadrul unui proces Care este asocierea între un descriptor și un fișier? (unu la unu, mai multe la mai multe?) fiecare proces are o tabelă de descriptori de fișier [4] 0, 1, 2 sunt descriptori speciali – stdin, stdout, stderr FILE (ISO C) HANDLE (Win API) [4] * care este numarul maxim de descriptori pentru un proces? * cum se poate limita acest numar pe Linux? * man ulimit 21.02.2011-27.02.2011

Tabela de descriptori [5] stdin 1 stdout 2 stderr 3 opened file file pointer user info open rights 4 [5] tabela pentru un proces Linux: /proc/PID/fd . . . . . . 21.02.2011-27.02.2011

FILE (ISO C) /* /usr/include/libio.h */ struct _IO_FILE { [...]     [...]     int _fileno; } /* /usr/include/stdio.h */ typedef struct _IO_FILE FILE; 21.02.2011-27.02.2011

Citire stocarea informației într-un buffer avansul cursorului de fișier ISO C         n_recs = fread(buf, RECSZ, N_RECS, fin);         /* se foloseste cu feof(), ferror() */ Unix     n_read = read(fd, buf, BUFSIZ); [6]         /* se foloseste obligatoriu intr-un while */ Windows     ReadFile(fHandle, buf, bytesToRead, &bytesRead, NULL); [6] - Read-ahead: http://en.wikipedia.org/wiki/Readahead si http://lwn.net/Articles/155510/ 21.02.2011-27.02.2011

Scriere scrierea informației dintr-un buffer avansul cursorului de fișier ISO C      n_recs = fwrite(buf, RECSZ, N_RECS, fin);         /* scrie garantat, sau eroare de scriere */ Unix     n_written = write(fd, buf, BUFSIZ); [7]         /* se foloseste obligatoriu intr-un while */ Windows     WriteFile(fHandle,buf,bytesToWrite,&bytesWritten,NULL); [7] - Delayed writing: http://linux.die.net/man/2/fsync 21.02.2011-27.02.2011

Citire/scriere – fluxul datelor buffer user buffer user read/ReadFile write/WriteFile user space libc (fără buffering) sys_read/NtReadFile sys_write/NtWriteFile * ce alte tehnici in afara de buffering se mai folosesc pentru optimizarea vitezei? (ex: read-ahead) kernel space buffer kernel  buffer kernel hardware disc 21.02.2011-27.02.2011

Cursor de fișier modificare la read și write inițializare la deschidere modificare: ISO C     fseek(f, offset, SEEK_SET); Unix     lseek(fd, offset, SEEK_END); Windows     SetFilePointer(hFile, distanceToMove, NULL, FILE_BEGIN); 21.02.2011-27.02.2011

Tipuri de date specifice user space kernel space fișier deschis instanță fișier deschis fișier fizic file descriptor struct file struct inode [8] file pointer user open rights inode [8] - inode - http://elf.cs.pub.ro/so2/wiki/laboratoare/lab09 rights size block pointers uid gid 21.02.2011-27.02.2011

utilizatorul recunoaște fișierul prin nume Tipuri de date utilizatorul recunoaște fișierul prin nume programele folosesc un descriptor descriptorul indexează tabela de descriptori un element al tabelei este un pointer la o structură dinamică (instanță de fișier deschis) structura dinamică are referința la structura ce descrie fișierul fizic ce asociere există între cele trei structuri? (file descriptor, structură dinamică, fișier fizic) 21.02.2011-27.02.2011

Trunchiere fișiere eliminarea conținutului fișierului cursorul de fișier este poziționat pe 0 un fișier poate fi deschis și trunchiat         open(“/path/to/file”, O_RDWR | O_TRUNC);         truncate(“/path/to/file”, size); un fișier se poate trunchia după deschidere         ftruncate(fd, size);         SetEndOfFile(hFile); 21.02.2011-27.02.2011

Închidere se pierde accesul la fișier este eliminată intrarea din tabela de descriptori         close(fd);         CloseHandle(fHandle); 21.02.2011-27.02.2011

Duplicare descriptor duplicarea unui descriptor în alt descriptor cei doi descriptori lucrează asupra aceluiași fișier         newfd = dup(oldfd);         dup2(oldfd, newfd);         DuplicateHandle(...);         SetStdHandle(...); 21.02.2011-27.02.2011

Redirectare în shell programatic echo “mesaj” > file_out.txt         grep “cuvant” < file_in.txt programatic         fd = open (“file_out”);         close (STDOUT_FILENO);         dup (fd);         close (fd); 21.02.2011-27.02.2011

Redirectare (2) open(“file.txt) close(1) dup(fd) close(fd) stdout stdout NULL stdout stdout stdout NULL file.txt file.txt file.txt NULL file.txt open(“file.txt) close(1) dup(fd) close(fd) 21.02.2011-27.02.2011

Ștergere fișier eliminarea fișierului din sistemul de fișiere shell         rm file.txt ISO/C         remove(“file.txt”); UNIX         unlink(“file.txt”); Windows         DeleteFile(“file.txt”); 21.02.2011-27.02.2011

Directoare colecție de intrări în sistemul de fișiere folder/catalog de ce directoare? organizarea fișierelor acces facil al utilizatorului organizarea cea mai întâlnită este cea ierarhică generalizat – graf orientat aciclic (DAG) 21.02.2011-27.02.2011

înlănțuire de intrări în sistemul de fișiere Cale (path) înlănțuire de intrări în sistemul de fișiere orice sistem de fișiere are un director rădăcină (/ pe Unix) separator de cale (/ pe Unix, \ pe Windows) cale absolută cale relativă intrările . și .. sunt speciale         . (dot) - referință către directorul curent         .. (dot-dot) - referință către directorul părinte 21.02.2011-27.02.2011

Organizarea directoarelor 21.02.2011-27.02.2011

Operații cu directoare crearea/ștergerea unui director (mkdir, rmdir) crearea unei intrări (touch, mkdir, ln, mknod) eliminarea unei intrări (rm, rmdir, unlink) listarea conținutului (ls) parcurgerea unei căi (cd) redenumirea unei intrări (mv) 21.02.2011-27.02.2011

Operații cu directoare (2) UNIX DIR *, struct dirent mkdir, chdir, rmdir opendir, closedir, readdir, rewinddir Windows HANDLE CreateDirectory, RemoveDirectory, SetCurrentDirectory FindFirstFile, FindNextFile, FindClose 21.02.2011-27.02.2011

Fișiere speciale legături (links) (ln, link) char device (mknod, mknod) block device (mknod, mknod) FIFO (mknod/mkfifo, mknod/mkfifo) sockeți UNIX (N/A, socket/mknod) 21.02.2011-27.02.2011

Legături (link-uri) folosite pentru referirea unui fișier deja existent symlink (soft link) hard link soft link pot referi intrări din alt sistem de fișiere         $ ls -l /usr/bin/cc         lrwxrwxrwx 1 root root 20 Oct 6 2005 /usr/bin/cc -> /etc/alternatives/cc         lrwxrwxrwx 1 root root 12 Apr 22 2007 /etc/alternatives/cc -> /usr/bin/gcc 21.02.2011-27.02.2011

de tip caracter (char device) Fișiere dispozitiv de tip caracter (char device) parcurgere secvențială asociate cu dispozitive seriale, mouse, tastatură             $ ls -l /dev/ttyS0             crw-rw---- 1 root dialout 4, 64 Feb 26 2005 /dev/ttyS0 de tip bloc (block device) acces aleator citire în blocuri; discuri, CD-ROM, USB Flash Drive             $ ls -l /dev/sda             brw-rw---- 1 root disk 8, 0 Feb 26 2005 /dev/sda 21.02.2011-27.02.2011

Sockeți Unix și FIFO-uri sockeții Unix sunt o formă de comunicare inter-proces – comunicare locală au asociată intrare în sistemul de fișiere         # ls -l /var/run/cups/cups.sock         srwxrwxrwx 1 root root 0 2008-03-03 11:10 /var/run/cups/cups.sock FIFO (pipe cu nume) sunt mecanisme de bază de comunicare inter-proces un proces scrie, alt proces citește         $ ls -l mypipe         prw-r--r-- 1 razvan razvan 0 2008-03-03 21:14 mypipe 21.02.2011-27.02.2011

Standard I/O vs. Low-Level I/O Standard I/O – fopen, fread, fwrite, fclose buffered I/O double-buffering problem acces high-level pentru lucrul cu șiruri Low Level I/O – open/CreateFile, read/ReadFile wrappere [9] peste apeluri de sistem cea mai mare flexibilitate nu sunt portabile [9] - Wrapper functions - http://en.wikipedia.org/wiki/Wrapper_function 21.02.2011-27.02.2011

Drepturi de acces la crearea fișierului la deschiderea fișierului în Unix user, group, others read, write, execute             chmod(“/path/to/file”, 0644); /* drepturi în octal */ în Windows citire, scriere, listare, traversare, creare sub-fișier, etc.             SetNamedSecurityInfo(...); 21.02.2011-27.02.2011

Montarea SF atașarea unui punct de intrare în sistemul local de fișiere (mount point)         mount(“/dev/hda5”, “/mnt/hda5”, “ntfs”, ...)         SetVolumeMountPoint("C:\\mycd\\", "D:\\"); 02.03.2010

SF virtuale; fișiere speciale sistemele de fișiere virtuale nu au un suport fizic procfs montat în /proc devfs montat în /dev ce suport au? există și intrări de fișiere specializate (fișiere fără suport fizic – de obicei char device-uri) /dev/null /dev/zero /dev/urandom 21.02.2011-27.02.2011

Cuvinte cheie director sistem de fișiere cale fișier ierarhie tipuri de fișiere byte-stream descriptor de fișier cursor de fișier tabelă de descriptori redirectare director cale ierarhie rădăcină fișiere speciale standard I/O low-level I/O drepturi de acces montare SF 21.02.2011-27.02.2011

Exercițiu 1 Ce afișează următoarea secvență de cod?         int fd1 = open(“file.txt”), fd2 = open(“file.txt”),             fd3 = dup(fd1), off;         lseek(fd1, 100, SEEK_CUR);         lseek(fd2, 100, SEEK_CUR);         off = lseek(fd3, 100, SEEK_CUR);         printf(“%d\n”, off); 21.02.2011-27.02.2011

Exercițiu 2 Care sunt asocierile corecte (unu la unu, unu la mai multe, mai multe la unul, mai multe la mai multe) între următoarele concepte? descriptor de fișier – fișier (pe disc) descriptor de fișier - cursor de fișier proces - descriptor de fișier proces - tabelă de descriptori 21.02.2011-27.02.2011

Exercițiu 3 Pentru fiecare dintre opțiunile de creare/deschidere a fișierelor în Windows, care este formatul echivalent Linux? Windows OPEN_ALWAYS OPEN_EXISTING CREATE_ALWAYS CREATE_NEW TRUNCATE_EXISTING Linux O_CREAT O_TRUNC O_EXCL 21.02.2011-27.02.2011

Exercitiu 3 – Windows creation flags 21.02.2011-27.02.2011

Întrebări ? 21.02.2011-27.02.2011