unix. unix shell núcleo hardware conteúdo 1 - histórico 2 - visão do usuário 3 - serviços do...
TRANSCRIPT
UNIXUNIX
UnixUnix
Shell
núcleo
hardware
ConteúdoConteúdo
1 - Histórico1 - Histórico
2 - Visão do Usuário2 - Visão do Usuário
3 - Serviços do sistema3 - Serviços do sistema
4 - Arquitetura do sistema4 - Arquitetura do sistema
Entidades: ArquivosEntidades: Arquivos
ProcessosProcessos
Visão do usuárioVisão do usuário
Sistema de arquivosSistema de arquivos
– HierárquicoHierárquico
– Criação / destruição de arquivosCriação / destruição de arquivos
– Crescimento dinâmico de arquivosCrescimento dinâmico de arquivos
– ProteçãoProteção
Visão do usuário (cont.)Visão do usuário (cont.)
Ambiente de execuçãoAmbiente de execução
– Programa: arquivo executávelPrograma: arquivo executável
– Processo: programa em execuçãoProcesso: programa em execução
– Processos solicitam os serviços do núcleo Processos solicitam os serviços do núcleo com o uso de chamadas de sistema. Ex.: fork, com o uso de chamadas de sistema. Ex.: fork, exec, etc.exec, etc.
ShellShell
Interface entre o usuário e o sistemaInterface entre o usuário e o sistema Interpretador de comandosInterpretador de comandos Executa:Executa:
– comandos simplescomandos simples
– comandos compostoscomandos compostos
– redirecionamento de I/Oredirecionamento de I/O
– pipepipe
– ifif then else; for; while; then else; for; while;
– etc;etc;
Serviços do SistemaServiços do Sistema
Gerenciar processos;Gerenciar processos; Escalonar;Escalonar; Alocar / liberar memória;Alocar / liberar memória; Gerenciar memória secundária;Gerenciar memória secundária; E / S.E / S.
Arquitetura do SistemaArquitetura do SistemaBiblioteca
Interface
Comunicação
Hardware
Sub-sistema
de gerência
de processos
Sub-sistema de arquivos
Scheduling
Ger. MemóriaDrivers
Cache
Carac. Blocos
Programas
Nível Núcleo
Nível Usuário
Arquivos
Representação Interna dos Arquivos Representação Interna dos Arquivos
Fornecida por um i-node;Fornecida por um i-node; I-node: contém a descrição do arquivo;I-node: contém a descrição do arquivo; Cada arquivo contém um i-node;Cada arquivo contém um i-node; Mais de um nome pode estar associado a um i-Mais de um nome pode estar associado a um i-
node;node; O sistema gerencia os arquivos com três tabelas:O sistema gerencia os arquivos com três tabelas:
– Tabela de arquivos abertos: uma por processoTabela de arquivos abertos: uma por processo– Tabela de arquivos: global Tabela de arquivos: global – Tabela de i-nodes: globalTabela de i-nodes: global
•Tabelas usadas para acesso aos Tabelas usadas para acesso aos arquivosarquivos
Tab. I-nodesTab. Arq. Abertos Tab. Arquivos
i-nodesi-nodes
Proprietário;Proprietário; Tipo de arquivo (ordinário, diretório, bloco Tipo de arquivo (ordinário, diretório, bloco
especial, caracter especial, fifo(pipe));especial, caracter especial, fifo(pipe)); Permissões de acesso;Permissões de acesso; Datas de acesso (acesso, modificação, Datas de acesso (acesso, modificação,
modificação de i-node);modificação de i-node); Número de links;Número de links; Lista de blocos;Lista de blocos; Tamanho do arquivo;Tamanho do arquivo;
I-nodes (cont.)I-nodes (cont.)– ProprietárioProprietário
– GrupoGrupo
– TipoTipo
– PermissõesPermissões
– AcessadoAcessado
– ModificadoModificado
– TamanhoTamanho
– Blocos de dadosBlocos de dados
JoséJosé
AlunoAluno
OrdinárioOrdinário
RWXRWX R_XR_X R_XR_X
08 July 2000 21:0008 July 2000 21:00
08 July 2000 21:0008 July 2000 21:00
7820 bytes7820 bytes
61,44,85,31,48,92,23,55,30,7761,44,85,31,48,92,23,55,30,77
Indireto simplesIndireto simples
Indireto duploIndireto duplo
Indireto triploIndireto triplo
i-node na Memóriai-node na Memória
Estado do i-nodeEstado do i-node– Bloqueado / não bloqueadoBloqueado / não bloqueado
– Processos bloqueadosProcessos bloqueados
Número do periférico;Número do periférico; Número do i-node;Número do i-node; Contador de referências;Contador de referências;
Estrutura do sistema de arquivosEstrutura do sistema de arquivos
Boot: contém o código de boot;Boot: contém o código de boot; Super bloco: descreve o sistema de Super bloco: descreve o sistema de
arquivos (lista de blocos livres, número de arquivos (lista de blocos livres, número de arquivos, tamanho das outras áreas);arquivos, tamanho das outras áreas);
Lista de i-nodes: configurável pelo Lista de i-nodes: configurável pelo administrador, referenciados por um índice.administrador, referenciados por um índice.
boot super bloco lista i-nodes blocos dados
Tamanho dos arquivosTamanho dos arquivos
10 blocos diretos (1 K) = 10 K10 blocos diretos (1 K) = 10 K 1 indireto c/ 256 diretos = 256 K1 indireto c/ 256 diretos = 256 K 1 duplo indireto c/ 256 diretos = 64 M1 duplo indireto c/ 256 diretos = 64 M 1 triplo indireto c/ 256 dupla indireção = 1 triplo indireto c/ 256 dupla indireção =
16 G16 G
Conversão de um caminho de Conversão de um caminho de acesso em um i-nodeacesso em um i-node
(/usr/ep/artigo)
/
ctc
pass
usr 12
I-node 12proprietário
134
bloco 134
ep 25
jn
im
Direitos de acesso
Conversão de um caminho de Conversão de um caminho de acesso em um i-node (cont.)acesso em um i-node (cont.)
Bloco 256
(artigo) pum 5
mpi 11
artigo 13
aulas 27
prog 89
I-node 25
prop
direitos
tipo
256
I-node 13(artigo)
prop
direitos
tipo
bloco 0
bloco 1
Chamadas de Sistema Chamadas de Sistema
openopen closeclose readread writewrite createcreate mkdirmkdir cdcd pipepipe
openopen
fd = open ( nome, modo );fd = open ( nome, modo );
transformar “nome” em i-nodetransformar “nome” em i-node
if (ñ existe ou acesso ñ permitido)if (ñ existe ou acesso ñ permitido)
return (erro);return (erro);
Alocar uma entrada da Tabela de ArquivosAlocar uma entrada da Tabela de Arquivos
Atribuir à Tabela de Arquivos o i-nodeAtribuir à Tabela de Arquivos o i-node
Inicializar contador de deslocamentoInicializar contador de deslocamento
Alocar uma entrada na Tabela de AAAlocar uma entrada na Tabela de AA
Atribuir à TAA o índice da Tabela de ArquivosAtribuir à TAA o índice da Tabela de Arquivos
Return( índice da TAA )Return( índice da TAA )
open (cont.)open (cont.)
TAA T-Arquivos T-i-nodes
012
T-Arquivos: - apontador p/ tabela de i-nodes - deslocamento (byte corrente) - direito (leitura / escrita) - contador de referências
pipepipe
Alocar um i-nodeAlocar um i-node Alocar um elemento da tabela de arquivos (em Alocar um elemento da tabela de arquivos (em
escrita)escrita) Alocar um elemento da tabela de arquivos (em Alocar um elemento da tabela de arquivos (em
leitura)leitura) Inicializar o contador de referência do i-node em 2Inicializar o contador de referência do i-node em 2 Alocar um par de entradas em TAA (processo)Alocar um par de entradas em TAA (processo) Atribuir os elementos da tabela de arquivosAtribuir os elementos da tabela de arquivos Retornar (elementos da TAA)Retornar (elementos da TAA)
Exemplo de ProgramaExemplo de Programamain() {main() {
int fds (2);int fds (2);
char c ;char c ;
pipe (fds);pipe (fds);
pid = fork () ;pid = fork () ;
if pid != 0 {if pid != 0 {
for ( ; ; ){for ( ; ; ){
c = getchar () ;c = getchar () ;
write (fds (1),&c, sizeof (char)));write (fds (1),&c, sizeof (char)));
}}
else {else {
read ( fds (0), &c, sizeof (char));read ( fds (0), &c, sizeof (char));
printf (“%c\n”, c) ;printf (“%c\n”, c) ;
}}
}}
Processos
Gerência de processosGerência de processos
forkfork killkill execexec exitexit waitwait
execexec
acessar o arquivoacessar o arquivo verificar se é executávelverificar se é executável alocar memória (código, dados, pilha)alocar memória (código, dados, pilha) efetuar a carga efetuar a carga liberar a região de memória usada liberar a região de memória usada
anteriormenteanteriormente
Chamada execChamada exec
Biblioteca de funçõesBiblioteca de funções
execl(filename, name, arg1, arg2, execl(filename, name, arg1, arg2, arg3...)arg3...)
execve(filename, argv, envp)execve(filename, argv, envp)
forkfork
fork()fork()– Cria uma cópia exata do processo original, Cria uma cópia exata do processo original,
incluindo registradores, descritores de incluindo registradores, descritores de arquivos, etc;arquivos, etc;
– Cada processo tem seu próprio espaço de Cada processo tem seu próprio espaço de endereçamento;endereçamento;
– Retorna um valor (zero para o filho, o pid Retorna um valor (zero para o filho, o pid do filho para o pai);do filho para o pai);
fork (cont.)fork (cont.)
Procurar uma entrada livre na tabela de Procurar uma entrada livre na tabela de processos;processos;
Alocar memória;Alocar memória; Copiar a imagem do pai para o filho;Copiar a imagem do pai para o filho; Colocar no descritor o mapa de memória Colocar no descritor o mapa de memória
do filho;do filho; Fabricar um pid para o filho;Fabricar um pid para o filho; Sinalizar ao pai final de operação;Sinalizar ao pai final de operação;
Exemplo - forkExemplo - fork
main() {main() {
int pid;int pid;
pid = fork();pid = fork();
if (pid != 0)if (pid != 0)
printf(“Processo pai\n”);printf(“Processo pai\n”);
elseelse
printf(“Processo fillho\n”);printf(“Processo fillho\n”);
}}
Exemplo 2 - execExemplo 2 - exec
main() main()
{{
execl(“/bin/ls”,”ls”,0);execl(“/bin/ls”,”ls”,0);
}}
Exemplo 3 - forkExemplo 3 - fork
main() {main() {
int pid;int pid;
fork();fork();
fork();fork();
printf(“Mensagem\n”);printf(“Mensagem\n”);
}}