Fundamentos de Sistemas Operativos PDF

Summary

This document describes fundamental concepts of operating systems, specifically focusing on file systems, with diagrams and explanations of file structures and manipulation in Java.

Full Transcript

Fundamentos de Sistemas Operativos 4. Sistema de ficheiros Um sistema de ficheiros de uso geral é um programa que é parte do sistema operativo e que tem por função gerir as entidades designadas por ficheiros. Um ficheiro é uma coleção de bytes que pode ser um programa, um texto, um conjunto de foto...

Fundamentos de Sistemas Operativos 4. Sistema de ficheiros Um sistema de ficheiros de uso geral é um programa que é parte do sistema operativo e que tem por função gerir as entidades designadas por ficheiros. Um ficheiro é uma coleção de bytes que pode ser um programa, um texto, um conjunto de fotografias, uma música, etc. Um ficheiro é a entidade que é guardada e manipulada pelo sistema de ficheiros. O modelo de acesso a um ficheiro é designado por “Open- Read/Write – Close”. Este modelo de acesso foi adotado nos canais de comunicação USB, Bluetooth, WiFi, etc. O suporte físico de um ficheiro pode ser um disco rígido, uma pen drive, uma fita magnética, etc, ou seja, qualquer dispositivo físico que permita o armazenamento permanente de bits. Os suportes físicos são organizados em blocos de dimensão fixa , por exemplo, 1kbyte, 2kbytes, 4 kbytes, etc. Estes blocos são tantos quantos a dimensão do dispositivo físico utilizado. No dispositivo físico também tem de existir uma tabela que descreve o estado dos blocos, ocupado ou livre. A tabela de descrição dos blocos bem como a informação constante nos blocos que constituerm um ficheiro são geridas pelo sistema de ficheiros. Desta forma, o sistema de ficheiros deve disponibilizar as seguintes funcionalidades: 1. Criar e eliminar um ficheiro; 2. Leitura e escrita de um ficheiro; 3. Acesso a um ficheiro através de um nome lógico. 4. Gerir o espaço de memória ocupado pelo ficheiro no dispositivo físico de suporte para que a organização física do ficheiro seja abstrata ao utilizador. 5. Proteger os ficheiros contra falhas do sistema de suporte. 6. Segurança no acesso aos ficheiros. 33 Fundamentos de Sistemas Operativos 4.1 Suporte físico O suporte físico mais comum de um sistema de ficheiros é um disco rigido que tem a estrutura interna apresentada na figura 4.1.1. Figura 4.1.1 : Estrutura física de um disco rigido para armazenamento de dados binários. Na figura 4.1.1, à esquerda observa-se as várias partes para controlo de um disco rigido. Ao centro, pode observar que um disco rigido pode ser constituido por vários pratos ou discos. À direita, observa a divisão física de cada prato ou disco que é dividido em pistas e cada pista é dividida em sectores. A unidade elementar de armazenamento de informação é o sector que pode armazenar 1Kbyte, 2Kbytes, 4Kbytes, etc, consoante a dimensão de cada disco. 34 Fundamentos de Sistemas Operativos 4.2 Definições Um ficheiro é uma entidade abstrata identificada por um nome e que fisicamente contém valores binários organizados em bytes e que ocupa num disco o conjunto de sectores necessários para o armazenamento total do ficheiro. Por exemplo um ficheiro com 1Mbyte de dimensão para ser armazenado num disco com sectores de 4Kbytes ocupa no disco 106/4.103= 250 sectores. Um sector físico geralmente dá lugar à noção abstrata de cluster que define a unidade mínima de ocupação de um ficheiro. Os possíveis atributos de um ficheiro necessários à sua descrição são: 1. Nome do ficheiro – um conjunto de caracteres; 2. Extensão – um conjunto de 3 caracteres que define o tipo do ficheiro; 3. Proteção - Permissões de acesso; 4. Palavra Chave – conjunto de carateres que permite o acesso ao ficheiro; 5. Dono ou criador do ficheiro – o utilizador proprietário do ficheiro; 6. Directoria – é uma flag que indica se o ficheiro é uma diretoria ou um ficheiro de dados; 7. Tipo de acesso – indica o tipo de acções realizadas por quem acede ao ficheiro, só de leitura ou leitura e escrita; 8. Invisivel – flag que indica se o ficheiro é ou não invísivel nas listagens; 9. Ficheiro de Sistema – flag que indica se o ficheiro é normal ou de sistema; 10. Ficheiro de Arquivo – flag que indica se o ficheiro é normal ou de arquivo; 11. Acesso Aleatório – indica o tipo de acesso sequencial ou aleatório; 12. Ficheiro Temporário – indica que é um ficheiro persistente ou temporário; 13. Flag de lock – indica se o acesso ao ficheiro foi trancado por algum processo; 14. Primeiro sector – indica o primeiro sector onde começa a informação do ficheiro; 15. Data e hora da criação 16. Data e hora da última alteração 17. Data e hora do último acesso 18. Dimensão corrente 19. Dimensão máxima 35 Fundamentos de Sistemas Operativos 4.3 Volumes Um disco pode ser linearizado, ver figura 3.2.3.1, em pistas e sectores que por sua vez podem descrever um ou mais volumes, como o mostrado na figura 3.2.3.2. Pista 0 Sector 0 Sector 1 Sector 2 Sector 3 Sector 4 Sector 5 Sector 6 Sector 7 Sector 8 Sector 9 Sector 10 Figura 4.3.1: Linearização de uma pista de um disco Master Boot Record MS-DOS LINUX Windows 10 Extended Figura 4.3.2: Disco com vários volumes. A partição Master Boot Record de um disco contém quatro descritores de partições, cada descritor contém: 1. Active flag – indica se a partição está ativa ou não; 2. Início absoluto da partição – qual o sector onde começa a partição. 3. Dimensão da partição – a partir desta informação define-se o sector de fim da partição. 4. Tipo de partição. A partição Extended pode conter várias partições lógicas. Cada partição lógica tem um extended boot record que a descreve. A última partição lógica é preenchida com zeros. 36 Fundamentos de Sistemas Operativos 4.4 Estrutura duma partição Master Boot Record MS-DOS LINUX Windows 10 Extended Diretoria Boot FAT 1 FAT 2 Cluster 1 Cluster 2 Cluster N ROOT Dados Figura 4.4.1: Estrutura duma partição. Boot – É um setor com o código de arranque do sistema operativo e com as definições do volume. FAT1 – File Allocation Table é uma tabela com informação acerca da ocupação e tipo dos clusters. Cluster é um bloco de informação. FAT2 – É uma duplicação da FAT1 para garantir coerência na informação e aumentar a tolerância a falhas. Diretoria ROOT – dimensão fixa com 512 entradas por omissão. Clusters – Blocos de informação com uma dimensão multipla do sector. 37 Fundamentos de Sistemas Operativos 4.5 Estrutura duma diretoria Diretoria Boot FAT 1 FAT 2 Cluster 1 Cluster 2 Cluster N ROOT Nome Extensão Atributo Não usados Tempo Data 1º Bloco Dimensão em Bytes bytes 8 3 1 10 2 2 2 4 Figura 4.5.1: Estrutura duma diretoria. Nome – Conjunto de 8 carateres. Extensão – Conjunto de 3 carateres. Atributo – Este caráter tem os seguintes valores e significados: A – Arquivo ; D – Diretoria; V – Nome do volume; S – System Files; H – Hidden File; R – Read-Only. Tempo – hora da criação Data – data da criação 1º Bloco - Informação de onde começa. Dimensão em bytes – 232 = 4Gbytes dimensão máxima de um ficheiro em FAT. 38 Fundamentos de Sistemas Operativos 4.6 Estrutura duma FAT Diretoria Boot FAT 1 FAT 2 Cluster 1 Cluster 2 Cluster N ROOT FAT 0 descritor Media descriptor 1 Não usado Ficheiro 1: 2 5 6 9 2 5 3 10 Ficheiro 2: 3 10 4 BAD Cluster estragado Cluster máximo 32Kbytes 5 6 Bits FAT Nº Clusters Espaço FAT Máxima 6 9 Dimensão 7 FREE Cluster livre 12 212 212x1,5=6KB 4Kx32K= 128Mbytes 8 FREE 16 216 216x2=128KB 64Kx32K= 9 -1 Fim de ficheiro 4Gbytes 10 -1 Fim de ficheiro 32 228 228x4=1GB 256Mx32K= 8Tbytes Figura 4.6.1 - Estrutura duma FAT com 2 ficheiros e dimensões. 39 Fundamentos de Sistemas Operativos 4.7 Manipulação de Ficheiros em Java através de Input e Output Streams Uma stream é uma entidade lógica que se comporta como um canal de leitura ou escrita com acesso a ficheiros ou a dispositivos de Entrada/Saída (I/O devices). A hierarquia de classes para Leitura de ficheiros e dipositivos de entrada/saída está ilustrada na figura 3.3.1. java.lang.object Manipulação de carateres. java.io.Reader java.io.BufferedReader java.io.FilterReader java.io.InputStreamReader java.io.StringReader java.io.FileReader java.io.InputStream Manipulação de bytes. java.io.FileInputStream java.io.ByteArrayInputStream java.io.FilterInputStream java.io.ObjectInputStream java.io.SequenceInputStream java.io.DataInputStream java.io.BufferInputStream 40 Figura 4.7.1 –Hierarquia de classes para Leitura. Fundamentos de Sistemas Operativos A hierarquia de classes para escrita em ficheiros e em dipositivos de entrada/saída está ilustrada na figura 4.7.2. java.lang.object Manipulação de carateres. java.io.Writer java.io.BufferedWriter java.io.FilterWriter java.io.OutputStreamWriter java.io.StringWriter java.io.PrintWriter java.io.FileWriter java.io.OutputStream Manipulação de bytes. FileOutputStream ByteArrayOutputStream FilterOutputStream ObjectOutputStream DataOutputStream BufferOutputStream PrintStream 41 Figura 4.7.2 –Hierarquia de classes para Escrita. Fundamentos de Sistemas Operativos Exercício 1: Construa uma classe ListarDiretorias que dispõe dos seguintes métodos: i) void Dir(String pathname) – se o pathname for uma diretoria deve listar todos os ficheiros dentro da diretoria e referir as subdiretorias. Se o pathname for um ficheiro deve listar o ficheiro e a sua dimensão. ii) void Dir() – lista os ficheiros da diretoria corrente; Resolução da alínea 1.i) if (subFicheiro.isDirectory()) System.out.format("%-45s %s \n", ficheiros[i], "[dir]"); public class ListarDiretorias { else File ficheiro; System.out.format("%-50s %-9s %s \n", ficheiros[i], subFicheiro.length(), " bytes"); void Dir(String nome) { } ficheiro = new File(nome); } if (!ficheiro.exists()){ else { // é um ficheiro, mostrar o seu conteúdo System.out.println("O " + ficheiro + " não existe."); BufferedReader leitor= null; return; try { } leitor = new BufferedReader(new FileReader(ficheiro)); if (!ficheiro.canRead()) { } catch (FileNotFoundException e2) {} System.out.println("O " + ficheiro + " não aceita leitura."); String line; return; try { } while ((line = leitor.readLine()) != null) if (ficheiro.isDirectory()) { System.out.println(line); System.out.println("A diretoria " + ficheiro +" contém:"); } catch (IOException e) {} String[] ficheiros = ficheiro.list(); try { for (int i = 0; i < ficheiros.length; i++) { leitor.close(); // concatenar o nome da diretoria ao nome do ficheiro } catch (IOException e) {} File subFicheiro = new File(ficheiro + "\\" + ficheiros[i]); } 1 de 2 } 2 de 2 42

Use Quizgecko on...
Browser
Browser