45
Sistemas Operativos: Ficheiros Pedro F. Souto ([email protected]) May 18, 2012

Sistemas Operativos: Ficheirosweb.fe.up.pt/~pfs/aulas/so2013/at/12fs.pdf · I permite que o tempo de vida dos dados seja independente ... determinar o tipo de processamento necessário

Embed Size (px)

Citation preview

Sistemas Operativos: Ficheiros

Pedro F. Souto ([email protected])

May 18, 2012

Sumário

Ficheiros

Diretórios

Controlo de Acesso

Implementação de Sistemas de Ficheiros

Leitura Adicional

Sumário

Ficheiros

Diretórios

Controlo de Acesso

Implementação de Sistemas de Ficheiros

Leitura Adicional

Ficheiros

I Em comparação com memória principal, o disco:I tem muito maior capacidade (o seu custo unitário é mais

baixo);I permite que o tempo de vida dos dados seja independente

do do processo que os criou;I permite a partilha de dados (hoje mais simples).

I Contudo o acesso direto ao disco não é simples:I um ficheiro fornece uma abstração dos dados no disco

mais fácil de usar.

Estrutura dum FicheiroI Ficheiros podem abstrair o espaço num disco de várias

formas:

(a) (b) (c)

1 Record

Ant Fox Pig

Cat Cow Dog Goat Lion Owl Pony Rat Worm

Hen Ibis Lamb

1 Byte

I como uma sequência de bytes (habitual em SO de usogenérico);

I como uma sequência de registos (comum há quase 50anos);

I como uma árvore (apropriada para ordenação – e.g.mainframes).

Estrutura dum Ficheiro em UnixI Em Unix, um ficheiro é uma sequência de bytes.I Cabe às aplicações definirem a estrutura que bem

entenderem:I Evita impôr restrições desnecessárias aos utilizadores

Object module

Header

Object module

Header

Object module

Header

Module nameDate

Size

Perm.Owner

Data

Data size

Text size

Magic #

Entry point

Flags

Text

Symbol Tbl.

Sym. Tbl. size

Tipos de Ficheiros em Unix

I Unix suporta diferentes tipos de ficheiros:I ficheiros;

I texto (ASCII ou outro código, p.ex. UTF-8)I binários (não texto – não legíveis)

I diretórios;I dispositivos de entrada/saída (/dev/):

character special fileblock special file

A chamada ao sistema mknod() permite criar este tipo deficheiro.

I mecanismos para comunicação entre processos:FIFO special fileUnix domain sockets

São criados usando as chamadas ao sistema mkfifo() esocket(), respetivamente.

Nomes de Ficheiros

I Ficheiros são identificados por nomes:I tipicamente, strings alfanuméricas;

I contribui para a abstração do discoI normalmente, o SO estabelece um comprimento máximo

I Unix:I distingue letras maiúsculas das minúsculas;I não conhece extensões (parte dum nome a seguir a um “.”

(ponto))I alguns programas requerem extensões específicas:

p.ex. gcc usa a extensão dos ficheiros de entrada paradeterminar o tipo de processamento necessário.

Outros Atributos (possíveis) dum FicheiroI Um SO guarda outra informação relativa a um

ficheiro, além do seu nome e do seu conteúdoTipo se o sistema de ficheiros suportar diferentes tipos;Owner o “dono” da informação no ficheiro;Proteção quem pode lêr, escrever, executar;Tamanho do ficheiro;Datas de criação, de acesso ou modificação:

um ficheiro código fonte modificado depois doficheiro objeto correspondente, deverá ser recom-pilado.

I Outros atributos possíveis, mas menos comuns:

Password para acesso ao ficheiroFlags bits que controlam ou permitem uma dads propriedade,

p.ex. hidden flag, system flag, lock flag, etc

Padrões de Acesso a FicheirosSequencial (fita magnética)

head

I bytes do ficheiro acedidos por ordemI p.ex., leitura/escrita de ficheiros por um compilador

Direto (random)I acesso a qualquer byte/registo do ficheiro sem ter que

aceder aos que o precedemI nem todos os dispositivos de E/S suportam este tipo de

acesso:I por exemplo, porta série.

I p.ex. leitura duma mensagem dum ficheiro de emailPor chave acesso a um registo com um dado valor (memória

associativa)I comum em bases de dadosI pouco comum em sistemas de ficheiros actuais

Operações sobre FicheirosOperação Chamada ao Sistema em UnixCriar open() (creat()– obsoleta)Eliminar Operação sobre diretórios (adiante)Lêr read()Escrever write()Reposicionar cabeça lseek()Lêr atributos fstat(), lstat(), stat()Alterar atributos chmod(), chown() . . .Mapear na Memória mmap(), munmap

I Em Unix:I tem-se que invocar open() antes de aceder a um ficheiro;

I O SO executa várias acções para tornar as operaçõessubsequentes mais rápidas

I deve-se invocar close() quando não se pretende acedermais ao ficheiro.

I Permite que o SO liberte recursos e transfira dados para odisco.

Chamadas ao Sistema sobre Ficheiros: exemplo/* File display program. Minimal error checking */int main(int argc, char *argv[]) {

int in_fd, rd_cnt, wr_cnt;char buf[BUF_SIZE];if (argc != 2) exit(1); /* syntax error */in_fd = open(argv[1], O_RDONLY); /* open source file */if (in_fd < 0 ) exit(2); /* error in open */while (TRUE) { /* loop until done, or an error */rd_cnt = read(in_fd, buf, BUF_SIZE); /* read from source */if (rd_cnt <= 0) break; /* end of file, or error */wr_cnt = write(STDOUT_FILENO, buf, rd_cnt); /* write block read */if (wr_cnt < 0) exit(4); /* error writing */

}close( in_fd); /* close files */if( rd_cnt == 0 ) /* no error on last read */

exit(0);else /* error on last read */

exit(5);}

I write() não garante que o SO escreve todos os bytes.

Mapeamento de Ficheiros em Memória (1/3)I Tal como noutros acessos, há que invocar open(),

primeiro.I Para mapear o ficheiro na memória, usa-se mmap():

File

Address−SpaceProcess

I Subsequentes acessos à região de memória em que oficheiro foi mapeado, são acessos ao ficheiro.

I munmap() desfaz a ação de mmap(), pelo que posterioresacessos àquela região de memória poderão ser ilegais.

Mapeamento de Ficheiros em Memória (2/3)

void *mmap(void *start, size_t length,int prot, int flags,int fd, off_t offset);

I mmap() mapeia apenas o ficheiro na memória:I As páginas são trazidas pelo sistema de MV;I Uma página modificada expulsa pelo sistema de MV, é escrita no

ficheiro.I mmap() permite a partilha de memória entre processos:

I Atenção aos endereços.

int munmap(void *start, size_t length);

Mapeamento de Ficheiros em Memória (3/3)

ProblemasI Qual o comprimento dum ficheiro após alterações?

I O SO consegue saber facilmente as páginas alteradas,mas não é fácil saber qual é o último byte do ficheiro.

I Modificações num ficheiro mapeado em memóriapodem não ser visíveis imediatamente em outrosficheiros que o acedam de forma convencional

I As modificações só são escritas para o disco quando apágina correspondente é expulsa da memória.

I E se o ficheiro fôr maior do que o tamanho máximo dumsegmento, ou do espaço de endereçamento virtual?

I Os argumento length e offset permitem omapeamento parcial, mas não é tão conveniente.

Sumário

Ficheiros

Diretórios

Controlo de Acesso

Implementação de Sistemas de Ficheiros

Leitura Adicional

Diretórios

I A associação entre ficheiros e a respetiva localização nodisco é feita através de diretórios:

F1F3

F2 F4

F5

Files

Directory

I Quer os ficheiros quer os diretórios residem no disco:I Em Unix, os diretórios são um tipo especial de ficheiros.

Diretórios Planos

I Há um único diretório:

Root directory

A A B C

I As letras indicam os “donos” do ficheiro correspondente.

I Todos os ficheiros pertencem ao mesmo diretório:+ Simplicidade de implementação.- Conflitos de nomes são inevitáveis.

I Essencialmente, esta solução não escala, mas pode seruma solução para um sistema embebido.

Diretórios Estruturados em ÁrvoreI Quase todos os sistemas de ficheiros suportam uma

hierarquia de diretórios:

bin dev varusr etc

bin

emacs

I O uso duma àrvore permite:I evitar conflitos de nomes;I agrupar ficheiros de alguma forma relacionados;I resolver nomes duma forma eficiente.

Nome (absoluto) inclui todos os componentes desde a raiz( ) até ao ficheiro/diretório, separados por /. P.ex.:/usr/bin/emacs

Diretório Corrente (.) e Nomes de Ficheiros

Problema Os nomes (pathnames) absolutos podem serdemasiado compridos e pouco convenientes

Solução Cada processo está associado a um diretório corrente(current/working diretory), que pode variar ao longo da suavida (chdir())

Nome relativo inclui todos os componentes desde o diretóriocorrente até ao ficheiro/diretório. P.ex.: bin/emacs.

I Nomes começando com um separador são absolutosI Em Unix, chroot() permite especificar o diretório raiz

dum processo – usado para controlo de acesso.I Componentes com significado especial:

. representa o diretório corrente;.. representa o diretório pai.

Diretórios como Grafos AcíclicosI Frequentemente, é conveniente poder atribuir nomes

diferentes ao mesmo ficheiro:I o grafo resultante deixa de ser uma árvore:

Root directory

B

B B C

C C

CA

B C

B

? C C C

A

Shared file

I Unix usa o conceito de link (referência)Hard Links mapeiam nomes em (identificadores de)

ficheirosSoft Links mapeiam nomes em outros nomes

Montagem de Sistemas de FicheirosI Um sistema de ficheiros não ocupa mais de um disco.I Unix permite enxertar (mounting) sistemas de ficheiros: o

nome dos ficheiros é independente do dispositivo que oscontém.

/

a b a

c

p q r q q r

d

/

c d

b

Diskette

/

Hard diskHard disk

x y z

x y z

I Este mecanismo é extremamente flexível, permite acedera sistemas de ficheiros:

I em suportes removíveis, p.ex., USB pens;I remotos, p.ex. Network File System (NFS).

Operações sobre Diretórios

Operação Chamada ao Sistema em UnixCriar um diretório mkdir()Remover um diretório rmdir()Mudar o diretório corrente chdir()Mudar o diretório raiz chroot()Ler elementos dum diretório getdents()Criar um ficheiro open()Criar um nome novo link()Criar um link simbólico symlink()Remover um ficheiro unlink()Alterar o nome dum ficheiro rename()

I A chamada ao sistema getdents() não é fácil de usar:é preferível usar funções da libc (man readdir).

Sumário

Ficheiros

Diretórios

Controlo de Acesso

Implementação de Sistemas de Ficheiros

Leitura Adicional

Controlo de Acesso

I O controlo de acesso a ficheiros é essencial para protegero sistema:

I Ficheiros contêm programas e dados.I Em Unix, como quase tudo é um ficheiro, o controlo de

acesso do sistema de ficheiros é ainda mais importantepara a segurança do sistema.

I Um mecanismo básico para controlo de acesso são asAccess Control Lists (ACL):

I A cada objecto associa-se uma Access Control List queespecifica, para cada utilizador

I as operações que o utilizador pode realizar sobre esseobjecto.

I Pressupõe que os utilizadores são autenticadosI I.e. que o sistema verifica que são quem dizem serI Normalmente, através de passwords

Uso de ACL para Proteger o Acesso a Ficheiros

A B C

ProcessOwner

F1 A: RW; B: A

F2 A: R; B:RW; C:R

F3 B:RWX; C: RX

File

User space

Kernel space

ACL

I ACLs puras são pouco escaláveisI exigem a manutenção de muita informação.

Aproximação às ACL adoptada em Unix (1/2)I Um grupo é um conjunto de utilizadores (pessoas ou funções):

I um utilizador pode pertencer a vários grupos.I Cada ficheiro (directório ou dispositivo de E/S) está associado a:

I um utilizador, o seu owner;I um grupo.

I A cada ficheiro (. . . ) associa-se permissões, i.e. operaçõesI Ler (read) – rI Escrever (write) – wI Executar (execute) – x

que podem ser executadas sobre esse ficheiro, por:I o owner ;I os membros do grupo;I os restantes utilizadores.

$ ls -ltotal 1676-rw-r--r-- 1 pedro pedro 377 2008-10-27 09:28 08.04-configuration.txtdrwxr-xr-x 47 pedro pedro 4096 2012-05-11 19:59 aulaslrwxrwxrwx 1 pedro pedro 26 2008-10-06 23:10 Examples -> /usr/share/example-content[...]

Aproximação às ACL adoptada em Unix (2/2)

Vantagem Representação compactaI 9 bits para os bits de proteçãoI alguns bits para os identificadores do utilizador e do

grupoDesvantagem Pouco expressiva

I As operações são relativamente limitadasI Outros SOs suportam uma lista mais alargada, p.ex.

para eliminar ou acrescentarI Só o administrador pode criar grupos

I Outros SOs permitem permitem associar a cada ficheirouma ACL também

Sumário

Ficheiros

Diretórios

Controlo de Acesso

Implementação de Sistemas de Ficheiros

Leitura Adicional

Objectivos e Condicionantes da Implementação de SFPrincipais objetivos

Desempenho Discos são muito mais lentos do que o CPUou mesmo memória DRAM

Utilização da capacidade Discos nem sempre tiveram TB decapacidade.

Fiabilidade Discos são relativamente frágeis. Utilizadoresesperam que os dados no disco persistam.

CondicionantesTecnologia usada E SSDs?Padrões de utilização

I A maioria dos ficheiros tem apenas alguns KB.I Uma parte significativa do espaço do disco é ocupada

por alguns ficheiros muito grandes.I Um número de acessos significativos é a ficheiros

muito grandesI Alguns ficheiros são acedidos sequencialmente,

outros aleatoriamente

Implementação de Sistemas de FicheirosI Frequentemente, o disco está dividido em partições

I Alternativamente, discos/partições são agrupados em volumesI Cada partição tem o seu sistema de ficheiros.

Entire disk

Disk partitionPartition table

Files and directoriesRoot dirI-nodesSuper block Free space mgmtBoot block

MBR

Master Boot Record (MBR) Primeiro setor dos discos num PC.Usado durante o arranque. Inclui a tabela de partições.

Boot Block Primeiro bloco de cada partição. Contém códigocarregado pelo MBR e executado no arranque.

Super Block Contém metadados do sistema de ficheiros

Implementação de Ficheiros: Tamanho dos BlocosI Ficheiros consistem num conjunto de blocos de disco:I Cada bloco é um conjunto de setores contíguos

I O número de setores é tipicamente uma potência de 2I Qual deve ser o tamanho dum bloco?

Utilização do espaço em disco Quanto menor melhorI Assume que o tamanho de cada ficheiro é 2 KB

(mediana)Desempenho Quanto maior melhor

I Assume disco com 131.072 B/track, tempo de rotaçãode 8.33 ms e seek time médio de 10 ms

1000

800

600

400

200

0

0

1000

80

60

40

20

128

0

0

256

512

1K

2K

4K

8K

16K

Dis

k s

pa

ce

utiliz

atio

n

(pe

rce

nt)

Da

ta r

ate

(K

B/s

ec)

Disk space utilization

Data rate

Block size (bytes)

Implementação de Ficheiros: Blocos ContíguosI Uma possibilidade é guardar cada ficheiro no no necessário de

blocos contíguos:

File A (4 blocks)

File C (6 blocks)

File B (3 blocks)

File D (5 blocks)

File F (6 blocks)

File E (12 blocks)

File G (3 blocks)

(a)

(File A)

(File C)

File B 5 Free blocks 6 Free blocks

(File E)

(File G)

(b)

VantagensI Overhead reduzidoI Acesso sequencial muito rápido

DesvantagensI E se o ficheiro tiver que crescer?I Fragmentação do disco.

I Não é problema em sistemas de ficheiros do tipo write-once,p.ex. CD-ROMs, DVDs, etc.

Implementação de Ficheiros: Listas LigadasFile A

Physical block

Physical block

4

0

7 2 10 12

File block

0

File block

1

File block

2

File block

3

File block

4

File B

0

6 3 11 14

File block

0

File block

1

File block

2

File block

3

I Elimina a fragmentação externaI Mas ainda sofre de fragmentação interna

I O acesso não sequencial é pouco eficienteI O espaço disponível em cada bloco deixa de ser uma

potência de 2I O link ocupa alguns bytes.

Lista Ligada Usando uma Tabela em MemóriaI Ambos os problemas podem ser resolvidos mantendo os

links numa tabela em memória (File Allocation Table (FAT))File A

Physical block

Physical block

4

0

7 2 10 12

File block

0

File block

1

File block

2

File block

3

File block

4

File B

0

6 3 11 14

File block

0

File block

1

File block

2

File block

3

Physical block

File A starts here

File B starts here

Unused block

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

10

11

7

3

2

12

14

-1

-1

I O problema é que esta tabela ocupa bastante espaço emmemória (um link por bloco)

I Em princípio, a FAT poderia estar em memória virtualpaginada;

I Mas nesse caso, o acesso a um ficheiro poderá exigiracessos ao disco adicionais.

I Tal como os blocos, os links podem estar afastados uns dosoutros.

Index nodes (Inodes)Ideia agregar as referências para os blocos com os dados

juntamente com outros metadados dum ficheiro num inode

File Attributes

Address of disk block 0

Address of disk block 1

Address of disk block 2

Address of disk block 3

Address of disk block 4

Address of disk block 5

Address of disk block 6

Address of disk block 7

Address of block of pointers

Disk block containing additional

disk addresses

I O bloco apenas comreferências para osblocos de dados,permite reduzir ooverhead para ficheirospequenos

I Tipicamente os inodes, residem em blocos do disco bemdeterminados:

I Em Unix, o SO cria-os quando formata o disco.I Outra vantagem o acesso não sequencial é mais eficiente

Unix InodesI Os apontadores podem ocupar bastante espaço:

I Embora muito mais pequenos do que um bloco/setor, o seunúmero pode ser muito elevado.

I Para uma melhor utilização do espaço no disco, Unix usavários níveis de indireção:

I-node

Attributes

Dis

k ad

dres

ses

Single indirect block

Double indirect block

Triple indirect block

Addresses of data blocks

I O i-node contém o endereçodos 10 primeiros blocos.

Implementação de Diretórios em UnixI Diretórios são implementados como um ficheiro

I Diretórios mapeiam o nome de ficheiros na sua localizaçãono disco

I Mas o SO conhece a sua estrutura:

(a)

games

mail

news

work

attributes

attributes

attributes

attributes

Data structure containing the attributes

(b)

games

mail

news

work

I Cada elemento dum diretório pode:a) ou conter os atributos do ficheiro correspondente;b) ou a localização duma estrutura de dados contendo esses

atributos (em Unix, os inodes):facilita a partilha de ficheiros.

Resolução dum Nome

I É o processo de determinar o ficheiro a que esse nome serefere.

I Este processo consiste na análise de cada um doscomponentes do nome, da esquerda para a direita:

independentemente do nome ser absoluto ou rela-tivo.

I Para que o SO resolva um nome, o processo tem que teras necessárias permissões de acesso a cada um dosdiretórios atravessados.

I A resolução de nomes pode ter um custo muito elevado,pelo que o SO pode manter uma cache de nomesresolvidos.

I A cache mapeia o nome dum ficheiro nos seus atributos

Resolução de Nomes em UnixI A resolução começa com a leitura do i-node do diretório raiz

I O i-node 2, por razões históricasI Aponta para os blocos de dados com os elementos (entries)

I Em seguida, pesquisa-se o primeiro componente neste diretório,e o processo prossegue como ilustrado para /usr/ast/mbox:

Root directoryI-node 6 is for /usr

Block 132 is /usr

directory

I-node 26 is for

/usr/ast

Block 406 is /usr/ast directory

Looking up usr yields i-node 6

I-node 6 says that /usr is in

block 132

/usr/ast is i-node

26

/usr/ast/mbox is i-node

60

I-node 26 says that

/usr/ast is in block 406

1

1

4

7

14

9

6

8

.

..

bin

dev

lib

etc

usr

tmp

6

1

19

30

51

26

45

dick

erik

jim

ast

bal

26

6

64

92

60

81

17

grants

books

mbox

minix

src

Mode size

times

132

Mode size

times

406

Implementação de Hard LinksI O elemento dum diretório correspondente a um hard link contém

apenas o i-node do ficheiroI Só podem apontar para ficheiros no mesmo sistema de ficheiros

I Para evitar dangling links, cada ficheiro tem um atributo queconta o número de nomes (reference count):

C's directory B's directory B's directoryC's directory

Owner = C Count = 1

Owner = C Count = 2

Owner = C Count = 1

(a) (b) (c)

I Normalmente, os sistemas de ficheiros não suportam a criaçãode hard links para diretórios:

I Introduzem a possibilidade de criar estruturas do sistema deficheiros patológicas, a menor das quais é a introdução de ciclos.

Implementação de Symbolic/Soft LinksI Symbolic links são implementados como ficheiros especiais

I O seu conteúdo é um pathname do ficheiro referidoI Cada symbolic link requer um i-nodeI Não incrementa o reference count do ficheiro referido

I Podem conduzir a dangling pointers

I Na resolução dum symbolic link, o resto do pathname porprocessar é acrescentado ao seu conteúdo

block21986

/home/pedro/Examples/Ubuntu_Free_Culture_Showcase/Josh Woodward - Swansong.ogg

/usr/share/example-content/Ubuntu_Free_Culture_Showcase/Josh Woodward - Swansong.ogg

I-node 3284 for/home/pedro

21789

Modesizetimes

/usr/share/example-content

I-node 15796 for/home/pedro/Examples

21986

Modesizetimes

block21789

3284 .

2 ..

Examples15796

I Symbolic links são mais flexíveis do que hard links. Podemapontar para:

I DiretóriosI Ficheiros em outros sistemas de ficheiros

Gestão do Espaço no DiscoI Como manter informação sobre os blocos livres?

(a) (b)

Free disk blocks: 16, 17, 18

A bitmapA 1-KB disk block can hold 256 32-bit disk block numbers

86

234

897

422

140

223

223

160

126

142

141

1001101101101100

0110110111110111

1010110110110110

0110110110111011

1110111011101111

1101101010001111

0000111011010111

1011101101101111

1100100011101111

0111011101110111

1101111101110111

230

162

612

342

214

160

664

216

320

180

482

42

136

210

97

41

63

21

48

262

310

516

I Cada bloco da lista inclui um vetor de no de blocos livres,mais uma referência para o bloco seguinte na lista.

I Com o sistema de ficheiros quase cheio, listas ocupammenos espaço do que bitmaps.

I Bitmaps facilitam a alocação de blocos contíguosI Praticamente todos os sistemas de ficheiros usam bitmaps

Sumário

Ficheiros

Diretórios

Controlo de Acesso

Implementação de Sistemas de Ficheiros

Leitura Adicional

Leitura AdicionalSistemas Operativos

I Secção 9.1: Organização do Sistema de FicheirosI Secção 9.2: Estrutura Interna dos Sistemas de

ArmazenamentoI Excepto Subsecção 9.2.3

I Secção 9.3: LinuxI Até Subsecção 9.3.2.2 (inclusive)

Modern Operating Systems, 2nd. Ed.

I Secções 6.1 e 6.2: Files e DirectoriesI Secção 6.3: File System Implementation

I Excepto Subsecções 6.3.6 e 6.3.7

I Subsecção 6.4.5: The UNIX V7 File SystemI Subsecção 9.6: Protection Mechanisms

I Excepto Subsecção 9.6.3