FACULDADES INTEGRADAS DE CARATINGA - FIC CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: PPI PROFESSOR: HEBERT LUIZ Introdução a Computação Conceitos Básicos 1. Computador É uma máquina capaz de receber, processar, exibir e/ou armazenar dados. Visão Computacional Entrada (Input) E/OU Saída (Output) Processamento (CPU) E/OU Armazenagem (Data) 2. Hardware Conjuntos Integrados de dispositivos físicos, posicionados por mecanismos de processamento que utilizam eletrônica digital, usados para entrar, processar, armazenar e sair com dados e informações. Ex.: Mouse, Teclado, Memória RAM, Processador, etc. 2.1. Periféricos dos Computadores São dispositivos que trabalham em conjunto para que o computador possa funcionar. Existem 03 tipos: Dispositivos de Entrada de Dados (Input): Todo dispositivo que permite a entrada de dados. Ex.: Mouse, Leitura Óptica, Teclado, etc. Dispositivos de Saída de Dados (Output): Todo dispositivo que permite a saída de dados. Ex.: Monitor de Vídeo, Impressora, etc. Dispositivos de Entrada e Saída (Input/Output): Todo dispositivo que permite tanto a entrada quanto a saída de dados. Ex: Fax Modem, Placas de Rede, Drives de CDROM e Disquete, etc. 3. Software de Computadores: São Conjuntos Integrados ou não integrados de programas de computadores. Pode ser definido como a parte lógica do computador. Ex.: Sistemas Operacionais(MS Windows, GNU/Linux) e Programas de Computadores gerais(Suite de Escritório e Browsers de Internet). 3.1. Existem dois tipos de software: Software de Sistema: São programas escritos para computadores para atender necessidades do próprio computador ou de algum sistema computacional específico. Ex.: Sistemas de Informação para Redes de Computadores, Sistemas Operacionais, etc. Software de Aplicação: São programas escritos para computadores para atender demandas específicas. Ex.: Controle de Estoque, Suite de Escritórios, Navegadores de Internet, etc. 3.2 Classificação de Softwares: Software Proprietários: São aqueles produzidos com objetivo de comercialização, possuem o código fonte fechado, apenas os Binários são distribuídos, possuem licensas específicas de acordo com a propriedade intelectual e existem tanto Softwares de Sistemas, quanto Softwares de Aplicação dentro desta classificação. Software Livre: São aqueles que podem ser distribuídos livrimente(Cópia, Alteração, Execução e Leitura), possuem código fonte aberto, possuem licensas específicas redigidas pelo Free Software Fundation e GNU. Existem tanto Softwares de Sistemas, quanto Softwares de Aplicação dentro desta classificação. 4. CPU (Unidade Central de Processamento) Também chamada de Centro Único de Processamento. Tem o objetivo de analisar a entrada e obter uma saída, que é na verdade, o resultado esperado pelo usuário. A capacidade de processar, pode ser definida como organizar e manipular dados. A CPU possui três elementos associados: a Unidade Lógica e Aritmética (ULA), a Unidade de Controle (UC) e as Áreas de Registros (AR). A operação da CPU é regulada por uma série de pulsos, chamada frequência de operação (clock), que temporizam os ciclos de máquina, ou seja, uma operação de busca de uma instrução na memória principal e sua execução. O número de instruções que são executadas por segundo serve de referência para o que podemos chamar de “Velocidade” do computador. Esta “Velocidade” é medida pela quantidade de instruções que são executadas por segundo, está frequência é medida em Mhz(MIPS – Milhões de Instruções po Segundo). Como exemplo, podemos citar a velocidade de um processador qualquer. 1.7GHz, ou 1.700MGz . O Processador dos computadores podem ser visto como um componente que “processa” os dados no interior do computador, interpretando e executando instruções. A maioria dos processadores foram projetados com o uso de um processo chamado Computação com Conjunto Complexo de Instruções (CISC), que coloca tantas intruções em microcódigo no processador central quanto possível. Outro processo é o de Computação com Conjunto Reduzido de Instruções (RISC), que envolve a redução do número de instruções em microcódigos. 5. Memórias dos Computadores 5.1 Memória Principal O computador só pode identificar a informação através de sua restrita capacidade de destinguir entre dois estados, por exemplo, algo está imantado num sentido ou está imantado no sentido oposto. A uma dessas opções o computador associa o valor 1, e ao outro estado, o valor 0. Os dígitos 0 e 1 são os únicos elementos do sistema de numeração de base 2, sendo então chamados de dígitos binários, ou abreviadamente, bit. Entenda-se por bit a unidade básica de memória, ou seja, a menor unidade de informação que pode ser armazenada num computador. Este tipo de memória, possue maior velocidade de utilização, menor capacidade de armazenagem e maior custo no mercado de computadores. De forma gerais as principais são: RAM (Random Access Memory) A primeira leitura e o primeiro armazenamento dos dados são feitos nesta memória principal, que está intimamente ligada a CPU(Unidade Central de Processamento), também chamada de memória volátil, pois, funciona enquanto o computador está ligado. Esta memória retém as instruções do programa e os dados imediatamente antes ou depois do processamento, trabalhando com registros, para posterior amarmazenagem definitiva dos dados (Memória Secundária). A Memória RAM influi na capacidade do computador em armazenar temporariamente os dados e instruções de diversos softwares ao mesmo tempo. Tipos de Memória RAM • Dinâmica - Esta é uma memória baseada na tecnologia de capacitores e requer a atualização periódica do conteúdo de cada célula do chip consumindo assim pequenas quantidades de energia, no entanto possui um acesso lento aos dados. Uma importante vantagem é a grande capacidade de armazenamento oferecida por este tipo de tecnologia. • Estática - É uma memória baseada na tecnologia de transistores e não requer atualização dos dados. Consome mais energia (o que gera mais calor) comparando-se com a memória dinâmica sendo significativamente mais rápida. É frequentemente usada em computadores rápidos. Possui uma capacidade de armazenamento bem menor que a memória dinâmica. Cache A memória cache consiste numa pequena quantidade de memória RAM (Tecnologias SRAM ou DDR), incluída no chip do processador. Quando este precisa ler dados na memória RAM, um circuito especial, chamado de controlador de Cache, transfere os dados mais requisitados da RAM para a memória cache. Assim, no próximo acesso do processador, este consultará a memória cache, que é bem mais rápida, permitindo o processamento de dados de maneira mais eficiente. Enquanto o processador lê os dados na cache, o controlador acessa mais informações na RAM, transferindoas para a memória cache. De grosso modo, pode-se dizer que a cache fica entre o processador e a memória RAM. Veja a ilustração abaixo: ROM (Ready Only Memory) É um tipo de memória que contém instruções imutáveis, nela estão localizadas rotinas que inicializam o computador quando este é ligado; É não-volátil, ou seja, os dados não são perdidos com a ausência de energia; É também de acesso aleatório. Alguns dos tipos de memória ROM são: EPROM e EEPROM. EPROM- É um tipo de ROM especial que pode ser programada pelo usuário. Seu conteúdo pode ser apagado pela exposição a raios ultravioletas. EEPROM- É também um tipo especial de ROM muito semelhante á EPROM, tendo como diferença apenas o fato de que seu conteúdo é apagado aplicando-se uma voltagem específica em um dos seus pinos de entrada. 5.2 Memória Secundária A memória principal (ram) não é o único meio de armazenamento existente. Devido a algumas características que são peculiares a este tipo de memória - por exemplo: volatilidade e alto custo - , surgiu a necessidade de implementação de outro tipo de memória, chamado memória secundária. Este tipo de memória, não volátil, tem maior capacidade de armazenamento e é mais barata. Estas memórias podem ser removíveis ou não. Neste contexto, "removíveis" significa que ela pode ser retirada do computador e transportada facilmente para outro. O winchester ou disco rígido, por exemplo, não é removível. Já os demais podem ser chamados de removíveis. Estes são os tipos de memória secundária disponíveis hoje: • • • • Fitas Magnéticas (streamer e dat) Discos rígidos e flexíveis Cd-rom (compact disk read only memory) e Cd-worm (write once read many) Zip disks, Flash Memory (Pen Drivers) etc. Vejamos suas características: Fitas streamer Foi o primeiro tipo de memória secundária. Elas são usadas para armazenamento off-line de dados (backups de dados, programas, etc.). A aparência da fita magnética é similar à das fitas usadas em gravadores antigos. Ela é feita de material plástico coberto com uma substância magnetizável. Os dados são gravados na fita nos chamados registros físicos. Cada registro físico é gravado em trilhas paralelas (geralmente 7 ou 9, com a última sendo usada para gravar o bit de paridade vertical), que por sua vez são subdivididas em frames. Cada frame é o espaço usado para armazenar 1 byte, além de um bit extra, o bit de paridade (horizontal). O espaço entre um registro e outro é chamado de gap. Quando são usados registros pequenos, parte da capacidade da fita é gasta nos gaps. Portanto, devem ser usados registros maiores possíveis, para reduzir ao máximo esta perda. A vantagem do uso de fitas é que elas são compactas, portáteis, possuem alta capacidade de armazenamento e são baratas. A grande desvantagem da fita é seu acesso seqüencial. Por exemplo, para ler um registro que está no final da fita, deve-se passar por todos os outros registros. Em média, para se ler um registro de uma fita com n registros, passa-se por n/2 registros. Fitas dat São a segunda geração das fitas magnéticas. Menores, mais fáceis de armazenar e mais seguras, permitem um armazenamento maior de dados. Sua grande capacidade (2 a 4GB) a torna ótima para backup de grandes volumes de dados. Sua aparência assemelha-se à de uma fita de vídeo, mas com um tamanho bem menor. Uma fita de 2 GB custa 15 dólares, enquanto que seu acionador (drive) custa em torno de 1000 dólares. Discos Flexíveis ou disquetes São o meio de armazenamento mais popular. Seu "inventor" foi a IBM, para guardar informações sobre a manutenção dos Mainframes. Logo depois, começou a ser usado pelos fabricantes de software para distribuição de programas. Consistem de um disco plástico recoberto por uma camada de material magnético. Eles são logicamente divididos em setores e trilhas. Trilhas são grupos de bytes que estão a uma mesma distância do centro do disco. Setores são divisões de 512 bytes de uma trilha. A menor unidade de armazenamento neste tipo de disco (e nos winchesters) é a unidade de alocação. Cada unidade de alocação pode ter um ou mais setores, mas nos disquetes esta unidade de alocação eqüivale apenas a um setor (512 bytes). Quando compramos um disquete às vezes precisamos formata-lo, isto é, prepara-lo para uso. O processo de formação consiste na divisão lógica do disco em setores e trilhas, e na construção de uma tabela chamada FAT (Files Allocation Table), que é a responsável pela guarda de informações sobre os arquivos (tamanho, setor inicial, nome, data de última alteração, etc.) e sobre o disco (número de unidades de alocação, tamanho do disco, setores defeituosos, setores livres, etc.). Os primeiros disquetes com grande uso foram os de 8 polegadas. Possuíam capacidade de gravação de 180kbytes. Depois, apareceram os de 5,25 polegadas, que tinham dupla face e capacidade de gravação de 360 kbytes (baixa densidade), e 1.2 Mb (alta densidade). Por último, surgiram os de 3,5 polegadas, que, além de mais seguros, possuem capacidade de armazenamento maior. Vale ressaltar ainda que as cabeças de leitura-gravação tocam a superfície do disco, o que torna sua vida menor se comparada aos discos rígidos. Discos rígidos (winchesters) Consistem de um conjunto de discos magnéticos empilhados, dentro de uma caixa de metal blindada a vácuo. Cada disco possui duas faces, cada face tendo sua cabeça de leitura/gravação exclusiva. A divisão lógica de cada disco é a mesma dos disquetes, mas, devido ao empilhamento dos discos, surgiu um novo conceito: cilindro. Um cilindro nada mais é do que o conjunto de trilhas que estão na mesma posição em cada disco. Por exemplo: o cilindro 0 é o conjunto de todas as trilhas 0 dos sub-discos que compõem o disco rígido. Cilindro 1 é o conjunto de todas as trilhas 1... e assim por diante. Atualmente há dois padrões de discos rígidos mais usados: o padrão IDE e o padrão SCSI. O padrão IDE, mais antigo, vai aos poucos sendo substituído pelo SCSI, que é mais veloz, e velocidade de acesso aos dados, como todo mundo sabe, é um dos "gargalos" que fazem com que os computadores não sejam mais rápidos ainda. Os primeiros winchesters que chegaram aqui tinham 5 a 10 Mb. Eles foram evoluindo rapidamente, e hoje já há discos rígidos de capacidade supeiores 80 Gb (em PC´s). 6. Unidades de medida As unidades de informação: bit e byte Em Informática é muito importante considerar a capacidade de armazenamento, já que quando se faz algo no computador, pode-se guardá-lo para poder continuar a usá-lo posteriormente. Evidentemente, quando se armazena algo, isto ocupa um certo espaço de armazenamento. Assim como a água é medida em litros ou o açúcar é medido em quilos, os dados de um computador são medidos em bits e bytes. Cada valor do código binário foi denominado "bit" (binary digit), que é a menor unidade de informação. Cada conjunto de 8 bits forma o byte, o qual corresponde a um caracter. Por que 1 Kb equivale a 1024 bytes? No caso do quilo e de outras medidas de nosso dia-a-dia, a estrutura numérica é construída sobre a base 10. O termo quilo representa a milhar constituída de alguma coisa. Nossa base de trabalho numérica, sendo 10, faz com que, quando a base é elevada à terceira potência, atinja a milhar exatamente com 1000 unidades. Quando falamos em bytes, grupos de bits, não estamos falando em base 10, mas sim em uma estrutura fundamentada no código binário, ou seja, na base 2. Assim, quando queremos um quilo de bytes, temos que elevar essa base a algum número inteiro, até conseguir atingir a milhar. Mas não há número inteiro possível para atingir exatamente 1000. Então, ao elevarmos a base 2 à décima potência, teremos 1024. Com esse raciocínio agora podemos entender a seguinte tabela: Unidade de medida Número caracteres de Espaço 1 Byte 1 8 bits 1 Kilobyte (Kb) 1.024 1024 Bytes 1 Megabyte (Mb) 1.048.576 1024 Kbytes Gigabyte (Gb) 1.073.741.824 1024 Mbytes 1 Terabyte (Tb) 1,099511628 x e12 1024 Gbytes Portanto, concluímos que, por exemplo, quando se diz que um disco rígido tem capacidade de armazenamento de 4,3 Gb, são armazenados aproximadamente 4 milhões e 500 mil caracteres. 7. Sistemas Operacionais No começo da computação, para realizar a utilização dos primeiros computadores era preciso conhecer profundamente o seu funcionamento, pois, a operação e programação era realizada em paineis através de fios e sistemas extramentes primitivos. Um Sistema Operacional é um programa como todos os outros, entretanto, possui o objetivo de realizar uma abstração de todo o projeto de hardware e funcionamento computacional e fornecer uma interface amigável para os Usuários. Dessa forma, os usuários passaram a ter maior produtividade na utilização de computadores. Os Sistemas Operacionais, foram os respnsáveis por alavancar os Computadores de Propósito Geral, onde, existe um Software de Sistema (Sistema operacional) que controla e gerencia os Recursos de Hardware e os outros Softwares de aplicação, dessa forma, vários outros tipos de aplicações poderia ser desenvolvidos por demandas. Os primeros Sistemas Operacionais eram chamados Sistemas Bachs, eram executados como arquivos em Lotes, instrução após instrução de forma seqüencial. Hoje em dia, já existem Sistemas Operacionais Modernos, com conceitos do tipo Multitarefas e Multiusuários. 7.1 Sistemas de Arquivos Pode ser definido como Sistema de Arquivos as rotinas e estruturas lógicas do sistema operacional, responsáveis pelo armazenamento e gerenciamento de dados no disco rígido. A seguir explicaremos os tipos de sistemas de arquivos dos sistemas operacionais mais utilizados, bem como suas principais características e diferenças. Sistema FAT 16. Sistema de arquivos utilizado pelo MS-DOS e Windows 95. Este sistema utiliza 16 bits para o endereçamento de dados, podendo trabalhar no máximo com 65.526 (216) posições diferentes. Se observarmos que os setores possuem o tamanho de 512 bytes, fica fácil perceber que em FAT 16 só seria possível acessar 65.536 x 512 bytes= 33.554.432 bytes, isto é 32 MB. Mas trabalhar com discos de 32 MB, mesmo com o Windows 95 fica difícil... Para resolver este problema a Microsoft passou a apontar conjuntos de setores, os clusters, em vez dos setores somente. Observe esta tabela: Cluster (em FAT 16)Capacidade de acesso ao disco 2 KB128 MB 4 KB256 MB 8 KB512 MB 16 KB1GB 32 KB2 GB Dessa forma, apontando clusters dentro do limite de 32 KB cada, tornou-se possível o acesso a discos de até 2GB. A grande desvantagem do sistema FAT 16 é o desperdício. Para entender melhor, imagine que você está utilizando um HD de 2 GB, cujos clusters são de 32 KB. Neste caso todos os arquivos ocuparão espaço de no mínimo 32 KB, mesmo que sejam menores. O espaço que sobra em um cluster que não foi totalmente ocupado fica desperdiçado. Esse desperdício, que pode chegar a 25% da capacidade total do HD, é conhecido como Slack space, e é o grande problema desse sistema de arquivos, além da limitação quanto ao tamanho do disco rígido (2 GB). VFAT O sistema FAT aceita somente arquivos no formato 8.3 (no máximo 8 caracteres para os nomes dos arquivos e 3 letras para a extensão). Para permitir arquivos com nomes longos, o sistema VFAT armazena o nome do arquivo no formato 8.3 e o nome longo fica oculto entradas fantasmas do diretório, que podem ser vistas somente pelo Windows 9x.. FAT 32 O Windows 95 OSR2 (ou Windows 95B), Windows 98 e Millenium utilizam o FAT 32, uma solução para as limitações e desperdícios do FAT 16. O FAT 32 utiliza 32 bits para o endereçamento de cada cluster, permitindo clusters de até 4 KB, mesmo em discos maiores que 2 GB. Com clusters menores, o desperdício em disco é menor, então temos um problema amenizado. O tamanho máximo de uma partição com FAT 32 é de 2.048 GB (2 Terabytes), e este é um limite bem acima dos discos que temos hoje em dia no mercado. A Microsoft estabeleceu clusters de 4 KB em partições de até 8 GB. Acima disto, o tamanho dos clusters varia de acordo com tamanho do disco. Observe a tabela a seguir: Cluster (em FAT 16)Capacidade de acesso ao disco 512 bytes256 MB 4 KB8 GB 8 KB16 GB 16 KB32 GB 32 KB2 TB Sistema NTFS Desenvolvido para o Windows NT na década de 80, o NTFS incorporou a capacidade de endereçar os clusters usando 64 bits. Isso permite mais de 18 bilhões de clusters. A única limitação agora passa a ser o tamanho dos setores do HD. Como cada setor possuir tamanho de 512 bytes, o tamanho do cluster em NTFS também será de 512 bytes, independente do tamanho do disco. A única desvantagem é que, com um número muito grande de clusters, o processamento necessário para encontrar os dados desejados passa a ser muito pesado, resultando numa queda de desempenho. Um ponto importante do NTFS em relação ao FAT é a tolerância à falhas. No sistema FAT, sempre que o micro trava ou é desligado durante a atualização de arquivos ou diretórios, existe uma grande possibilidade de o sistema tornar-se inconsistente, com arquivos interligados, agrupamentos perdidos além de outros problemas. No NTFS, o sistema mantém um log de todas as operações realizadas. Dessa forma, o sistema poderá, durante a próxima inicialização, examinar este log e descobrir exatamente em que ponto a atualização foi interrompida, podendo corrigir o problema automaticamente. Neste caso a possibilidade de perdas de dados é muito menor. NTFS5 O NTFS5 é o sistema de arquivos utilizado pelo Windows 2000. A grande novidade do NTFS5 em relação ao NTFS é, principalmente, o Encripting File System, que permite criptografar os dados gravados no disco rígido, impedindo o acesso ao sistema de modo que apenas o usuário possa acessá-lo. No entanto, o acesso aos dados pode ser feito, simplesmente quando este HD é instalado como slave em outro micro. EXT2 Este é o sistema de arquivos mais utilizado pelo Linux. No início do desenvolvimento do Linux, era utilizado um sistema muito mais antigo, o Minix FileSystem. O Minix é um Mini Unix, usado por Linus Torvalds como base no estágio primário de desenvolvimento do Linux. Porém, esse sistema de arquivos possuía várias limitações, mesmo para aquela época: os blocos eram de 16 bits, o que permitia partições de, no máximo, 64 MB. Mas em pouco tempo o Linux ganhou seu próprio sistema de arquivos, o Extended File System, ou EXT. Na primeira fase, o EXT reconhecia partições de até 2 GB e suportava nomes de arquivos com até 255 caracteres. Logo o mercado começou a apresentar HD´s maiores que 2GB, e para atender a essa nova realidade, surgiu o EXT2, com suporte a partições de até 4 TB. EXT3 O EXT3 é uma evolução do EXT2 que traz uma melhora no sistema de tolerância à falhas. Este sistema mantém um relatório de todas as operações realizadas. No caso de falhas, como no exemplo de um travamento enquanto o sistema está montando, as últimas entradas do relatório são consultadas para a verificação do ponto em que houve a interrupção, e o problema é corrigido automaticamente em poucos segundos. No EXT2, quando há uma falha, o sistema roda o e2fsck, que parece com o Scandisk, para verificar cada inode em busca de erros. Esse teste demora vários minutos, e nem sempre consegue evitar a perda de alguns arquivos. HPFS O HPFS é o sistema de arquivos utilizado pelo OS/2, com recursos que se aproximam muito dos permitidos pelo NTFS como nome de arquivos com até 254 caracteres incluindo espaços, partições de até 512GB unidades de alocação de 512 bytes. O OS/2 é o sistema operacional concorrente do Windows 95 lançado pela IBM. É pouco conhecido, porém é tecnicamente muito superior ao Windows 95. Embora muito eficiente este sistema de arquivos caiu em desuso juntamente com o OS/2, sendo suportado atualmente somente pelo Linux. 8. Redes de Computadores No começo da computação existia um modelo, onde, um computador atendia a todas as necessidades computacionais da organização. Este modelo deixou de ser utilizado devido a necessidade de comunicação entre os computadores. A realização dos trabalhos, passou a serem desenvolvidas por uma série de computadores interconectados, dando origem assim as famosas redes de computadores. As redes de computadores podem ser definidas como um conjunto de computadores interconectados, os quais podem trocar informações e compartilhar dispositivos. Benefícios para a Computação Empresas: • • Compartilhamento de Recursos: • Programas; • Equipamentos; • Dados. Confiabilidade. Pessoas • Acesso a informações remotas; • Comunicação pessoa a pessoa; • Diversão interativa. Unix-Like 9 . Contexto Histórico UNIX Começa no ano de 1969, quando estava sendo conduzida uma pesquisa na Bell Labs, por Ken Thompson, visando criar um sistema operacional que fosse multitarefa e multiusuário, aproveitando os conceitos do MULTICS. O sistema operacional criado passou a se chamar UNIX. Inicialmente o UNIX rodava apenas em computadores DEC PDP-7 (que já eram antigos na época). Uma das revoluções do UNIX foi o uso de linguagens de “alto nível” no mesmo, pois os sistemas operacionais eram escritos em linguagem de máquina até aquele dia, um processo tedioso que exigia as melhores cabeças para dar algum resultado. Todo este trabalho era necessário para que cada ciclo de CPU fosse aproveitado, e não houvesse desperdício de um bit sequer. Dennis Ritchie havia inventado a linguagem C e, para provar o poder da mesma, reescreve todo o UNIX em C, dando origem a uma nova forma de desenvolver sistemas operacionais portáveis. O teste de fogo foi a prova de que o código criado pelo compilador C era tão otimizado quanto a média do código gerado “à mão”. A portabilidade é um outro tópico que se tornou tema de engenharia de software. Com os sistemas operacionais sendo escritos em linguagem de máquina, pouco ou nada se aproveita do código existente na criação do sistema operacional para outra plataforma. Isto mudou com a linguagem C. Mantendo o máximo de código em linguagem C, quando uma nova plataforma era criada, tudo o que se precisava fazer era tornar o compilador C capaz de gerar código para a nova plataforma (o processo de criar código para uma máquina diferente da máquina em que o programa está sendo compilado chama-se de compilação cruzada) e reescrever as partes que eram feitas em código de máquina (alguns trechos dos sistemas operacionais ainda são escritos em linguagem de máquina, mas são trechos que dependem da máquina e de como é sua arquitetura interna). O passo seguinte, após ter o sistema operacional para a nova plataforma já compilado e funcionando, é compilar o próprio compilador C. Com o UNIX e o compilador C funcionando no novo computador, bastava compilar as ferramentas do UNIX e aplicativos que estivessem escritos em C e pronto! Uma nova plataforma já podia ser lançada, com um sistema operacional que era o mesmo que já rodava em outras máquinas, permitindo o reaproveitamento de todo ou quase todo o código C que já houvesse escrito para a plataforma original! Outro dos conceitos do UNIX que criou escola era conhecido por KISS (Keep It Simple, Stupid - Mantenha A Simplicidade, Estúpido) - em vez de ferramentas complexas, monolíticas, capazes de executar tarefas complexas, optava-se por ferramentas simples, especializadas em uma única tarefa, mas que podiam ser combinadas para realizar tarefas mais complexas. Tanto o UNIX era constituído de pequenas ferramentas especializadas, como o próprio C era constituído de poucas palavras-chave e poucas estruturas. Um exemplo do conceito KISS é o comando sort. Tudo o que ele faz é colocar informações em ordem crescente. Ele recebe sua entrada da entrada padrão ou de um arquivo, e coloca a saída em uma determinada ordem, de acordo com os parâmetros informados na linha de comando. Tendo criado uma ferramenta capaz de fazer ordenamento de linhas, tarefas como colocar em ordem alfabética um arquivo contendo uma lista de nomes ficou trivial. Bastava filtrar o arquivo pelo comando sort. Outra possiblidade que esta abordagem dá é que outros programas ficam mais simples. Por exemplo, o comando ls é implementado por um programa que lista os arquivos do diretório, obedecendo as opções informadas na linha de comando. O que o comando ls não faz é colocar os nomes de arquivos em ordem crescente ou decrescente, mas é muito simples conseguir isto, filtrando a saída do comando ls com o comando sort. O ls não precisa saber colocar linhas em ordem crescente, este é um trabalho do sort. Fica fácil conseguir efeitos complexos simplesmente utilizando os filtros existentes. Por exemplo, o que o comando more faz é colocar a informação que recebe na entrada padrão na tela, uma tela de cada vez, aguardando que o usuário pressione alguma tecla para passar para a tela seguinte. Desta forma, o comando ls não precisa aprender a paginar a saída, o more é quem sabe como fazer isto. Juntando os três comandos apresentados, chegamos a uma construção comum em UNIX, as linhas de comando em que vários comandos são combinados para se conseguir o efeito desejado: $ ls /bin | sort | more Este conjunto de ferramentas e conceitos poderosos fizeram do UNIX um sucesso no meio acadêmico e, posteriormente, no meio comercial. O UNIX passou a ser comercializado em computadores de grande porte, conhecidos como mainframes, ao mesmo tempo que as Universidades passaram a adotar o mesmo em seus laboratórios. Conhecido pelos acadêmicos recém-formados, o UNIX logo passou à condição de “O Verdadeiro Sistema Operacional”. As características de multitarefa, multiusuário, escalabilidade, confiabilidade e segurança do mesmo o tornaram um padrão para Sistemas Operacionais, com o VMS. Linguagem de “Alto-Nível” C Na mesma época em que Ken Thompson criava o UNIX, Dennis Ritchie criava a linguagem de programação “C”, e reescreveu o UNIX em C para provar o poder da nova linguagem criada. Na época, muitos programadores utilizacam o FORTRAN, uma linguagem voltada para aplicações científicas e numéricas, e os sistemas operacionais, compiladores e ferramentas eram geralmente escritas em assembly ou em linguagem de máquina. Durante algum tempo surgiu o sentimento que “programadores de verdade não utilizavam C”, por que C facilitava demais a atividade de programação. A linguagem C passou a ser fornecida em conjunto com o UNIX, de forma a se tornar a linguagem de programação por excelência para este sistema operacional. Tanto que um dos primeiros passos para portar o UNIX para uma nova plataforma era justamente criar um compilador capaz de criar código objeto para a nova plataforma. Uma vez isto feito, a compilação do núcleo do UNIX para a nova plataforma era a tarefa seguinte. Desta forma, o C tornou-se uma ferramenta imprescindível para tornar o UNIX popular e facilmente portável. O fato de que o UNIX era distribuído com os códigos fontes, e com um compilador 'C', fez com que o UNIX ganhasse popularidade: todos os usuários do mesmo podiam corrigir bugs e inserir melhoramentos, o que fez com que o UNIX crescesse bastante na década de 1970. Internet Na mesma época que o UNIX estava dando os seus primeiros passos, também estava dando os seus primeiros passos a Internet, na forma de ARPANET. No início, a Internet era um projeto do Departamento de Defesa dos EEUU, visando criar uma rede de informática redundante e não centralizada, capaz de suportar um ataque nuclear. A plataforma escolhida como padrão para a ARPANet era o UNIX, e o mesmo passou a ser distribuído com todos os pacotes necessários à conexão com a Internet. É importante lembrar que a ARPANet não era a única rede de computadores na época, assim como a Internet também não é a única rede de computadores mundial hoje. Haviam algumas redes acadêmicas, como a BITNet, redes corporativas e a USENET. Também não era a Internet a única rede que o UNIX suportava. Havia, já na época, uma rede informal de computadores, uma espécie de BBS, que trocava correspondências e arquivos da USENET, usando o protocolo de cópia UNIX para UNIX, ou UUCP, funcionando com links de linha discada. Gnu A história do GNU Software é, no mínimo singular. Tudo começou com um programador, Richard Stallmann, que estava criando um aplicativo, e queria as especificações da interface de uma impressora, para criar um driver de impressão próprio. Ocorre que o fabricante tinha estas especificações protegidas a sete chaves, e negou o pedido, frustrando Richard Stallmann. Isto gerou no mesmo uma frustração tremenda: como programador, ele depende do código de outros programadores, e também de especificações claras. Outro evento que ocorreu foi que Stallmann havia criado um editor de textos, o EMACS, e o distribuía livremente. Um programador pegou o código e vendeu a uma empresa, que alterou o mesmo, patenteou o código e o vendeu como Lucid EMACS. Ao mesmo tempo que o Lucid EMACS era lançado, a empresa proprietária do mesmo mandou uma carta a Richard Stallmann exigindo que o mesmo cessasse de distribuir o EMACS. Stallmann se viu na necessidade de reescrever o EMACS do zero, sem nenhum código original, que era agora propriedade de uma empresa, muito embora Stallmann fosse o criador original do mesmo. Na mesma época, Richard observou que alguns acadêmicos, com o auxílio de uma comunidade universitária de programadores, faziam excelentes sistemas, o que despertava o interesse de grantes empresas, que contratavam estes acadêmicos e cooptavam o código criado pelos mesmos, tornando o mesmo indisponível para a comunidade de programadores que ajudou a criar o mesmo. A comunidade de hackers que Stallmann participava, que costumava trocar códigos fontes de programas, e o fazia para melhorar, corrigir bugs, adaptar o programa para novas plataformas, ou mesmo para canibalizar partes do código para outros programas, estava sendo destruída - os hacker eram contratados por empresas que os proibiam terminantemente de compartilhar os 'trade secrets', ou segredos do negócio. Com isto, surgiu em Stallmann a noção de que os usuários de programas deveriam gozar de mais liberdade, e não ser reféns das empresas que criam o software. Da mesma forma, os programadores não deveriam ter suas possibilidades de aprendizado e mesmo de criação limitada por licenças de software que impediam o acesso ou reutilização de código fonte. Em suas palavras, as empresas não deveriam poder impedir que se ajudasse o vizinho. Visando criar uma comunidade de programadores que compartilham o código, o Richard Stallmann criou a "Free Software Foundation", ou "Fundação do Software Livre". A finalidade desta fundação era criar software e, mais especificamente, um sistema operacional semelhante ao UNIX, mas que não contivesse nenhuma linha de código proprietário. O nome deste sistema operacional é "GNU", que significa "GNU's Not UNIX", uma definição recursiva, bem ao gosto dos hackers de UNIX e C. Um sistema operacional consiste de um núcleo, ou kernel, e um conjunto mínimo de bibliotecas e utilitários. O conjunto de bibliotecas foi criado e denominado de GNU LibC. As ferramentas criadas consistiam de ferramentas básicas, como os comandos grep, cut, ls, mkdir, rmdir, ln a ferramentas de compilação, como o make, gcc, autoconf, e outras. O núcleo do sistema operacional GNU seria o Hurd, um núcleo moderno, baseado no conceito de microkernel, com as diversas funções do mesmo implementadas como serviços. Mas criar um microkernel provou ser uma atividade muito mais complexa que o resto do sistema GNU. Até a data que esta página foi criada (junho de 2001) não havia uma versão do Hurd que pudesse ser utilizada em sistemas de produção. Minix Andy Tannenbaun, um professor de Sistemas Operacionais na Universidade de Helsinque, criou um sistema operacional para seus alunos utilizarem no aprendizado de sua cadeira. O MINIX é um sistema operacional baseado também no conceito de microkernel, e que pode ser executado em computador PC-XT, 286, 386 e superiores. Devido ao fato do código fonte do MINIX estar disponível para quem quisesse estudar o mesmo, acabou se formando uma comunidade de usuários em torno do mesmo, dedicada a trocar entre si patches e hacks, visando tornar o MINIX um pouco mais que um sistema acadêmico, como era intenção do seu criador. Entretanto, Andy Tannenbaun não acatava muitas sugestões. O MINIX foi mantido propositalmente em um estágio de desenvolvimento para poder ser utilizado em uma sala de aula como ferramenta de aprendizado sobre arquitetura de sistemas operacionais. Este "engessamento" do MINIX desagradava muitos dos hackers de MINIX, que haviam colaborado para que o mesmo chegasse onde havia chegado, e queriam que o mesmo avançasse em termos de funcionalidades e eficiência. A única alternativa para quem queria um MINIX melhorado era o uso de patches fornecidos por terceiros, um mecanismo que é eficiente para corrigir alguns bugs aqui ou ali, mas é muito frustrante para quem quer alterar radicalmente muitas partes do MINIX. Linux Um dos usuários do MINIX era Linus Torvalds. No ano de 1990 Linus Torvalds estava às voltas com um 386, e queria um sistema operacional mais poderoso que o MINIX. Como já havia estudado a cadeira de Sistemas Operacionais, ele tinha uma compreensão de como funciona um Sistema Operacional, o que deve ser implementado, e como ele queria um sistema operacional. Linus começou então a trabalhar em um núcleo de sistema operacional monolítico. A princípio era um hobby, algo que Linus fazia no seu tempo livre, nos longos invernos da Finlândia, em que não há muito a fazer, exceto programar e outras “coisas”. Linus logo percebeu que a tarefa de criar um núcleo era demais para um programador, mesmo um bom programador. Tendo uma versão com funcionalidade mínima, ele resolveu postar uma mensagem na USENET, convidando quem estivesse disponível para participar do desenvolvimento deste novo sistema operacional. Era o dia 5 de outubro de 1991: "Do you pine for the nice days of Minix-1.1, when men were men and wrote their own device drivers? Are you without a nice project and just dying to cut your teeth on a OS you can try to modify for your needs? Are you finding it frustrating when everything works on Minix? No more all-nighters to get a nifty program working? Then this post might be just for you. As I mentioned a month ago, I'm working on a free version of a Minix-lookalike for AT-386 computers. It has finally reached the stage where it's even usable (though may not be depending on what you want), and I am willing to put out the sources for wider distribution. It is just version 0.02... but I've sucessfully run bash, gcc, gnu-make, gnu-sed, compress, etc. under it." Foi este o início do Linux. Em alguns anos foi lançada a versão 1.0, seguida da versão 2.0. Atualmente o Linux já se encontra na versão 2.6, e rodando em diversas plataformas, além do 386 original: MIPS, Alpha, PowerPC e outros. O Linux está presente em projetos científicos, fornecendo o subtrato para que algumas dezenas ou centenas de computadores trabalhem e forneçam a mesma performance que um supercomputador, a uma fração do custo do supercomputador. Ele foi cortado e recortado para caber em dispositivos embarcados, de assistentes digitais a relógios de pulso. Ele foi adaptado e já foi ao espaço, à bordo do ônibus espacial, e tem seu lugar na estação espacial internacional. Ele tem sido utilizado em escolas para ensinar computação, engenharia de software, e para fornecer um suporte a outros programas educativos. Ele tem sido utilizado para automatizar hospitais e hotéis, e para tocar negócios como o de provedor de serviços de internet. Tem sido utilizado para monitorar processos e para testar teorias. Existe em laboratórios e em caixas eletrônicos. Está nos bancos e em computadores governamentais. E tem trazido espanto e maravilha a muitos que precisam de liberdade para criar, liberdade para recriar, e para expandir seus horizontes. Fruto de uma “reencarnação” de uma comunidade que acredita em compartilhar suas descobertas, e que preza muito mais a liberdade e o espírito de fraternidade que o lucro, o Linux hoje está crescendo, e precisa que novos programadores e usuários passem a tocha adiante. Novos dispositivos de hardware são criados todos os dias. Novas aplicações e usos para o computador são concebidos todos os dias. Para manter-se na fronteira, é preciso força de vontade, gênio inventivo, e estar disposto a fazer parte de uma comunidade que orgulha-se de compartilhar, de aprender, e de ensinar. Se você se sente motivado a programar pelo prazer de programar, se a excelência técnica é motivo de orgulho para ti, ou mesmo se você tem apena a sede de aprender, junte-se à comunidade de desenvolvedores do Linux. Não é uma comunidade egoísta: você pode examinar o código fonte de cada programa, e ver o que cada ferramenta, função, instrução faz. Você pode aprender com o que outros fizeram. E você pode acrescentar o teu código nesta construção. Você tem esta liberdade garantida pela GPL. 9.1 Características dos Sistemas Unix-Like Modularidade O UNIX é único em seu desenho modular, que permite usuários adicionar ou remover partes para adaptá-lo às suas necessidades específicas. Os módulos se encaixam com conexõespadrão. É possível tirar um módulo e substituí-lo por um outro ou expandir o sistema acrescentando vários módulos. De uma certa maneira, o sistema UNIX de cada pessoa é único. Muitos usários acrescentam ou eliminam módulos sempre que precisam, adaptando suas implementações às suas necessidades. É geralmente possível remover um módulo, sem prejudicar a operação do resto do sistema. Esta característica é muito útil nas implementações em microcomputadores, onde as unidades de disco têm capacidade limitada. A remoção de arquivos desnecessários abre espaço para mais arquivos de dados. Multi-tarefa A capacidade de multitasking do UNIX permite que mais de uma tarefa seja realizada simultaneamente. Esta é uma das principais características do UNIX. As tarefas que estão em execução concorrem pelos recursos da máquina que são controlados pelo sistema. É possível, portanto, que um programa que atualize um banco de dados esteja rodando ao mesmo tempo que a impressão de um relatório esteja sendo realizada e uma tela de terminal esteja sendo enviada. Em uma interface gráfica com um ambiente de janelas podese disparar cada tarefa em uma janela shell. Já em um ambiente não gráfico, as tarefas que podem ser executadas sem a intervenção do usuário são colocadas em background. Em foreground deixa-se as tarefas que necessitam da intervenção do usuário, como a edição de um arquivo. Multi-usuário Um sistema multiusuário permite que vários usuários utilizem o computador simultaneamente. Terminais (teclado e tela) podem ser conectados a um computador e os usuários destes terminais podem acessar o sistema e executar tarefas simultaneamente. O sistema irá controlar todos os acessos aos seus recursos. Estes terminais não precisam estar diretamente conectados ao computador; podem ser terminais remotos acessando pela rede. Portabilidade A portabilidade é a possibilidade dos softwares que operam em uma máquina operarem em uma outra diferente. Há dois tipos de portabilidade a serem considerados: • • Portabilidade do sistema operacional Portabilidade dos aplicativos Mais de 90% do programa kernel está escrito em C e menos de 10% em linguagem de máquina. Assim, na pior das hipóteses, apenas 10% do programa kernel terá de ser reescrito ao se deslocar o kernel para uma máquina com arquitetura diferente. Os programas aplicativos escritos em linguagem de nível mais alto, como C, são facilmente portáveis para vários sistemas UNIX. Basta que sejam recompilados, exigindo, as vezes, poucas alterações. Comunicações No UNIX temos dois tipos de comunicações, quais sejam, comunicação entre programas e comunicação entre usuários. A comunicação entre programas é realizada através de mensagens, semáfaros ou memória compartilhada. Estes mecanismos, também conhecidos por IPC, interprocess comunications, são extensões do System V. A comunicação entre usuários pode se realizar de diversas maneiras, entre elas há o mail, que é um programa para enviar e receber mensagens eletrônicas, o write, que escreve uma mensagem no terminal de outra pessoa logada no sistema, o wall, que escreve mensagens nos terminais de todas as pessoas logadas no sistema, o talk, que permite uma conversa em tempo real. Há também a comunicação entre os sistemas, tais como uucp (UNIX to UNIX Copy Protocol). Considerações sobre as características dos Sistemas Unix-Like As características citadas a cima, foram mantidas do Sistema origina UNIX, para todos os outros Sistemas, como: Solaris, BSD, HPUX, Free-BSD, GNU-Linux. A origem do Nome Unix-Like, é devido a essa semelhança de características. Sistemas como Unix!!! 10. Características dos Sistemas Unix-Like 10.1 Kernel Introdução Kernel pode ser entendido com uma série de arquivos escritos em linguagem C e em linguagem Assembly que constituem o núcleo do sistema operacional. É o kernel que controla todo o hardware do computador. Ele pode ser visto como uma interface entre os programas e todo o hardware. Cabe ao kernel as tarefas de permitir que todos os processos sejam executados pela CPU e permitir que estes consigam compartilhar a memória do computador. Como o sistema recebe o Kernel? Os computadores recebem seu kernel durante o processo de boot. Quando uma máquina com disco está em seu processo de boot, ela lê seu kernel de um disco local. Quando uma nova versão do sistema operacional é instalada a partir de uma fita, o kermel é copiado para um único arquivo naquele disco chamado vmunix. Máquinas sem disco, diskless, recebem seu kernel através do servidor de arquivos na rede. Durante o processo de boot o kernel é carregado para a memória, onde ele reside até que o sistema seja interrompido. Embora o arquivo kernel seja por default vmunix, é possível ter kernels com outros nomes O que o Kernel faz? • • • • • • • • • • • Implementa o sistema de arquivos: Permite processos criar, ler, escrever e acessar estes arquivos Gerencia Deamons: Move páginas do disco para memória Prioridades Gerencia drivers de dispositivos Gerencia software de rede que implementa serviços de rede Gerencia facilidades de comunicação entre processos Provê facilidades para criar, examinar e modificar processos Provê funções de gerenciamento do sistema Provê funções miscelâneas que tornam os recursos do sistema disponíveis aos processos, como, por exemplo: memória 10.2 Shell Shell é um programa que conecta e interpreta os comandos digitados por um usuário. É a interface que o usuário utiliza para enviar comandos para o sistema. Dos vários programas shell existentes, o Bourne shell, o Korn shell e o C shell se destacam por serem os mais utilizadas e conhecidos. Mas qualquer programador pode fazer o seu shell. Estes shells tornaram-se conhecidos pois já vinham com o sistema, exceto o Korn que tinha que ser adquirido separadamente. O Bourne shell vinha com o SV e C shell com o BSD. O Korn shell é uma melhoria do Bourne shell. Algumas Características: • • • Bourne shell • prompt: `$' Korn shell • Bourne shell adicionado de novas características úteis para edição de scripts C shell • Mais difundido • Prompt: `%' 10.3 Estrutura de arquivos Arquivos são centrais para o UNIX de uma maneira não encontrada em outros sistemas operacionais. Comandos são arquivos executáveis, usualmente encontráveis em locais previsíveis na árvore de diretórios. Privilégios do sistema e permissões são controlados em grande parte através de arquivos. Dispositivos de I/O e arquivos de I/O não são distinguidos nos níveis mais altos. Até mesmo a comunicação entre processos ocorre através de entidades similares a arquivos. O UNIX tem uma organização de diretórios hierárquica em formato de árvore conhecida como filesystem. A base desta árvore é um diretório chamado root directory. Em sistemas UNIX, todo espaço em disco disponível é combinado em uma única árvore de diretório abaixo do /, sendo que o local físico onde um arquivo reside não faz parte da especificação do arquivo UNIX. O acesso a arquivos é organizado através de propriedades e proteções. Toda segurança do sistema depende, em grande parte, da combinação entre a propriedade e proteções setadas em seus arquivos e suas contas de usuários e grupos. Enfatizando: • • • Tudo em UNIX é um arquivo Unix tem uma organização hierárquica de arquivos chamada de filesystem Acesso aos arquivos é organizado através de propriedades e proteções Mapeando arquivos para o disco Um inodo é uma estrutura de dados em disco que descreve e armazena os atributos do arquivo, incluindo sua localização: Campos de um inode • • • • • • user e group tipo do arquivo tempo de criação, acesso e modificação (modo) número de links tamanho endereço no disco Quando uma partição de disco é inicializada, um número específico de inodes é criado. Este torna-se o número máximo de arquivos de todos os tipos, incluindo diretórios, arquivos especiais e links que podem existir no disco. Tipos de arquivo • • • • Arquivos comuns Diretórios Especiais Links • hard • simbolic Arquivos comuns são arquivos contendo dados, normalmente chamados de arquivos. Estes podem ser arquivos de dados ASCII ou binários, executáveis. Diretórios são arquivos binários consistindo de uma lista de outros arquivos que ele contém (possivelmente outros diretórios). As entradas dos diretórios são pares filename-inode. Este é o mecanismo que associa inodos e localização nos diretórios. Os dados no disco não têm o menor conhecimento de sua localização (lógica) no filesystem. Arquivos especiais são os mecanismos utilizados para I/O de dispositivos no UNIX. Eles residem no diretório /dev e seus subdiretórios. Há dois tipos de arquivos especiais: arquivos especiais de caracteres e arquivos especiais de blocos. Os primeiros correspondem a acesso a dispositivos baseado em caracteres, que não é bufferizado. Os arquivos especiais de blocos correspondem a acesso a dispositivos com I/O de blocos. Dados são transferidos em blocos. Links são mecanismos que permitem vários filenames referirem a um único arquivo no disco. Há dois tipos de links: hard e simbólico ou soft. Um hard link associa dois ou mais filenames com o mesmo inodo. Hard links compartilham o mesmo bloco de dados embora funcionando como entradas de diretório independentes. Link simbólicos são pointers files que apontam para outro filename no filesystem. Arquivos Especiais • • Sockets Named pipes Sockets são um tipo especial de arquivo utilizado para comunicação entre processos. São parte da funcionalidade de interconectividade TCP/IP, primeiramente disponível nos sistemas BSD, mas parte de qualquer versão moderna hoje. Um socket pode ser pensado como pontos finais de comunicação, unidos a portas particulares do sistema, as quais processos estão conectados. Named pipes são canais abertos pelo nome por aplicações. São características do SV que migraram para todas as versões de UNIX. Named pipes frequentemente residem no diretório /dev, e eles servem como outro mecanismo para facilitar a comunicação entre processos. 10.4 Processos Um processo é um simples programa que está rodando em seu espaço de endereçamento virtual próprio. É distinto de um job ou comando, que, em sistemas UNIX, podem ser compostos de muitos processos realizando uma única tarefa. Comandos simples como "ls" são executados como simples processos. Um comando composto, contendo pipes irá executar um processo por segmento pipe. Em sistemas UNIX, o gerenciamento dos recursos da CPU deve ser feito, em grande parte, por contrôle de processos, pois os recursos de alocação e as facilidades de execução em bacht disponíveis em outros sistemas são pouco desenvolvidas ou inexistentes. Tipos de Processos • • • Interativos Batch Deamons Processos interativos são iniciados a partir de, e controlados por uma sessão terminal. Estes processos podem rodar tanto em foreground como em background. Processos batch, ou em lote, são processos não associados a nenhum terminal. Ao invés disso, são submetidos a uma fila, da qual jobs são executados sequencialmente. UNIX oferece um comando bacht muito primitivo. Daemons são processos servidores, inicialmente inicializados durante o boot, que rodam continuamente enquanto o sistema estiver ativo, esperando, em background, até que um processo requisite seus serviços. Por exemplo, network daemons ficam em estado idle até que um processo requisite serviço de rede. Atributos • • • • • Process ID (PID) Parent process (PPID) TTY UID real e efetiva (RUID, EUID) GID real e efetiva (RGID, EGID) Process ID, PID, é um número que identifica unicamente este processo e é usado para referir-se a ele. Parent process ID, PPID, é o process ID do processo pai do processo, ou seja, o processo que o criou. TTY é o dispositivo de terminal associado com o processo O UID real de um processo é o UID do usuário que o criou. O UID efetivo, é o UID que é utilizado para determinar o acesso do processo a recursos do sistema. Usualmente, RUID e EUID são os mesmos e o processo tem os mesmos acessos que o usuário que o disparou. Entretanto, quando SUID está setado em um executável, então o EUID do processo executando é setado para o UID do propritário do arquivo, que herda as permissões deste. O GUID real e efetivo de um processo é grupo primário ou corrente do usuário. Seu GID efetivo, utilizado para determinar permissões de acesso, é o mesmo que o GID real, exceto quando o SGID está setado em um executável. Neste caso, o EGID assume o GID do grupo proprietário do arquivo. 10.5 Dispositivos Os dispositivos em um sistema UNIX apresentam três características fundamentais, quais sejam: • • • Transparência Simplicidade Mounting Uma das forças do UNIX é que usuários não precisam saber das específicações dos dispositivos, ou devices, muito freqüentemente. Eles não precisam saber, por exemplo, em que disco um arquivo que necessitam está armazenado fisicamente. Os mecanismos dos arquivos especiais do UNIX permitem muitas operações de I/O em dispositivos parecerem como se fossem operações de I/O em arquivos. Já o admindistrador do sistema não tem todo este luxo, pelo menos não o tempo todo. UNIX merge todos os arquivos acessados por usuários para uma única estrutura hierárquica de diretório. Os arquivos contido nesta estrutura podem estar espalhados por muitos disco diferentes. No filesystem total do UNIX, os arquivos e diretórios fisicamente localizados em cada partição de disco são montados nesta estrutura hierárquica em forma de árvore. Uma parte integral do processo de montar uma partição de disco engloba mergir sua estrutura de diretório local para hierarquia total de diretório UNIX. Uma vez isso feito, os arquivos fisicamente residindo naquele disco podem ser acessados através da tradicional sintaxe de path (caminho) separada por barras. O sistema cuida do mapeamento para o dispositivo físico correto. 10.6 Pipes Pipe é um valiozissima característica do sistema UNIX que permite que vários programas sejam concatenados. Deste modo, o output de um programa é input do próximo. Esse recurso é muito utilizado para aplicar filtros. Por exemplo, para listar os processos de um determinado usuário, manda-se listar os proces-sos e a saída deste comando serve de entrada para um comando que filtre nesta lista todas as ocorrências do usuário procurado. exemplo% ps | grep joao 10.7 Redirecionamento O redirecionamento, como o nome já diz, serve para redirecionar a entrada e saída padrão do sistema. A entrada padrão é o teclado e a saída padrão é o terminal. É possível redirecionar a entrada para que o comando leia um arquivo ao invés do teclado e redirecionar a saída para que o resultado seja enviado para um arquivo ao invés do terminal. • • • redirecionamento de entrada: "<" redirecionamento de saída: ">" redirecionamento de saída: ">>" Conexões Tee As conexões Tee agem exatamente como uma conexão tê. Tee transcreve o resultado de um comando para a saída padrão e para um arquivo. exemplo% who | sort | tee logados | wc -l