Sistemas Operativos: Ficheirosweb.fe.up.pt/~pfs/aulas/so2013/at/12fs.pdf · I permite que o tempo...
Transcript of Sistemas Operativos: Ficheirosweb.fe.up.pt/~pfs/aulas/so2013/at/12fs.pdf · I permite que o tempo...
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
news
work
attributes
attributes
attributes
attributes
Data structure containing the attributes
(b)
games
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