21
3/8/16 1 O Sistema Operacional Unix Sistemas de Computação

Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

3/8/16 1

O Sistema Operacional

Unix

Sistemas de Computação

Page 2: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

Introdução

•  Interrupções de hardware

•  Execução de uma Chamada de Sistema

•  Alocação de memória

•  Chamadas de Sistema típicas

•  Arquitetura do Unix

Page 3: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

3

Visão simplificada do Hardware

Através do barramento trafegam: l  Dados l  Endereços (Memória e portas de E/S) l  Instruções de máquina (p. CPU controladores de E/S)

Monitor

Bus

Page 4: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

4

Arquitetura Típica do Hardware

Barramentos com diferentes velocidades Interação Dispositivos-CPU através de Interrupções de HW

Page 5: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

5

Processamento de Interrupções

(a) Iniciando uma E/S e obtendo uma interrupção de hardware (b) Fluxo de controle no tratamento de uma interrupção pelo núcleo

(a)" (b)"

Interrupção é a forma do hardware avisar o núcleo que alguma ação precisa ser tomada

O processo atual é interrompido e um tratador de interrupção é ativado.

Page 6: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

Chamadas de Sistema É o conjunto de funções/procedimentos disponibilizadas

pelo núcleo (a API) para acesso a recursos da máquina (p.ex. Entrada/Saída)

As funções fazem parte de uma biblioteca do sistema

(ligada a todo programa). Cada função executa um TRAP para trocar para o modo núcleo.

Quando um processo faz uma chamada de sistema, ele

abre mão do controle, passando-o para o núcleo.

6

Page 7: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

7

Etapas de uma Chamada ao Sistema Exemplo: read (fd, buffer, nbytes)

Chamada de sistema = interrupção de software Fluxo de controle: programa de aplicação >> biblioteca de chamadas de

sistema (libc.so) >> núcleo >> biblioteca >> programa de aplicação.

Page 8: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

Conceitos Centrais

Processo:: programa em execução contexto do processo = conteúdo dos registradores da CPU, espaço

de endereçameno e contexto de software.

espaço de endereçamento :: faixa de memória ocupada, contendo executável, dados do programa e pilha de execução

contexto de software :: identificacão, uid, conj. de arquivos abertos, sinais pendentes, processos relacionados, quotas (arquivos, memória, buffer de E/S), e privilégios, diretório corrente, etc.

Todas essas informações são mantidas pelo núcleo para cada processo, para reiniciá-lo exatamente do ponto em que foi interrompido.

Page 9: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

9

Ocupação da Memória

Cada processo ocupa uma região própria (e isolada) na memória e endereços são traduzidos

Pode ser em uma região contígua (a) ou não (b)

Page 10: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

10

Um processo na memória

l  Processos possuem 3 segmentos: text (instruções), dados dinâmicos, e pilha

l  Dados e pilha crescem em sentidos opostos l  Através da chamada de sistema BRK(newDataLimitAddr) processo

pode requisitar mais espaço de memória.

Page 11: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

11

Chamadas de Sistema: Process Management

l  pid = fork() cria uma copia do processo pai, que executará o mesmo programa a partir do mesmo ponto de execução (mas terá outro PID)

l  O exec(comand, parameters) carrega e inicia execução de um novo programa executável (comand), com o mesmo PID

l  Pid = wait(pid, &status) faz o pai esperar pelo exit/ término forçado de algum processo filho.

Page 12: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

12

Esboço de uma shell while (TRUE) { /* repeat forever */ type_prompt( ); /* display prompt */ read_command (command, parameters) /* input from terminal */ if (fork() != 0) { /* fork off child process */ /* Parent code */ waitpid( -1, &status, 0); /* wait for child to exit */ } else { /* Child code */ execve (command, parameters, 0); /* execute command */ } }

Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai,

Page 13: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

Chamada fork( ) / exec( )

13

Page 14: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

14

Sinais Um sinal é uma notificação assíncrona enviada a um processo. Sinais podem ser enviados: l  Entre processo de um mesmo grupo (com mesmo userID, real

ou efetivo) ou processo de root l  Pelo núcleo para um processo (devido a ocorrência de um erro:

divisão por zero, segmentation fault, etc.) ou como consequência de um comando do usuário CTRL-C), CTRL-\,

Em Unix existem aprox. 64 sinais: e.g. keyboard interrupt, erro em um processo, start/stop process, kill, eventos da rede, sinal de timer, etc.

Sinais podem ser tratados, bloqueados ou ignorados pelo

processso alvo. O tratador pode ser um procedimento do próprio programa de usuário.

Page 15: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

16

Chamadas de Sistema: File Management

Page 16: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

17

Chamadas de Sistema: Directory Management

Page 17: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

18

Conexão entre Sist. de Arquivos (montagem)

l  mount /etc/floppy b – integra a árvore do disquete ao sistema principal

l  umout b - desfaz a conexão

Page 18: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

19

Chamadas de Sistema: Outras tarefas

Page 19: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

Estrutura Tradicional de UNIX

Page 20: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

Tendências em Arquiteturas de S.O.

l  Hierarquia de vários níveis garantem maior isolamento e reduzem complexidade l  Executar drivers e servidores em modo usuário l  Reduzir ao máximo parte dependente do Hardware (micro-núcleo) l  Virtualização do Hardware l  Sistemas de Arquivos heterogêneos e distribuídos

Page 21: Sistemas de Computaçãoendler/courses/inf1019/transp/... · 2016. 3. 8. · Obs: fork() retorna 0 para o processo filho (criado), e o Pid do filho para o processo pai, Chamada fork(

Perguntas?