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&atildeo
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
Download

Introdução a Computação Conceitos Básicos 1