sistemas operativos: processospaginas.fe.up.pt/~pfs/aulas/so1011/at/4proc.pdfsistemas operativos:...
Post on 31-Jul-2020
23 Views
Preview:
TRANSCRIPT
Sistemas Operativos: Processos
Pedro F. Souto (pfs@fe.up.pt)
March 22, 2011
Sumário
ProcessosConceito de Processo SequencialMultiprogramaçãoChamadas ao SistemaRotinas AssíncronasImplementação de ProcessosLeitura Adicional
Processo (Sequencial)
Representa um programa em execução
int main(int argc, char *argv[], char* envp[])}
0x0
args
data
text
heap
stack
args Argumentos passados na linha decomando e variáveis de ambiente.
stack Registos de activação correspondenteà invocação de funções.
heap Dados alocados dinamicamente usandomalloc.
data Dados alocados estaticamente pelocompilador (p.ex. a string “Hello,World!”)
text Instruções do programa.
Stack
I Região de memória que “pode ser acedida apenas” numadas suas extremidades, usando as operações push e pop(Fig. 1).Stack Pointer
pop()push(n)
Stack PointerStack Pointer
Fig. 1
f()g()
h()
Fig. 2I Este tipo de acesso é particularmente adaptado para
implementar chamada a funções (Fig. 2).
Uso da stack em funções de C
I Em C, o compilador usa a stack para:I passar os argumentos;I guardar registos do processador;I guardar o endereço de retorno;I implementar as variáveis locais;I passar o valor de retorno;
duma função.I Cada compilador estabelece uma convenção sobre
como esta informação é guardada na stack : aestrutura correspondente designa-se por stack frameou activation record.
Stack Frame do 386
Unix/Linux são SOs multiprocesso (XP,Vista,...)
i02cu0108:~> ps ax | morePID TTY STAT TIME COMMAND1 ? S 0:05 init2 ? SW 0:00 [kflushd]3 ? SW 0:03 [kupdate]4 ? SW 0:00 [kpiod]5 ? SW 0:00 [kswapd]
82 ? S 0:00 /sbin/portmap139 ? S 0:00 /sbin/syslogd141 ? S 0:00 /sbin/klogd147 ? S 0:00 /sbin/rpc.statd149 ? SW 0:00 [lockd]150 ? SW 0:00 [rpciod]158 ? S 0:00 /usr/sbin/ypbind
--more (63)
SOs suportam múltiplos processos (multiprogra-mação) por razões de eficiência, conveniência eimpaciência.
Multi-processo e eficiência
Problema processos precisam de aceder a dispositivosperiféricos de entrada e saída de dados (consola,i.e. o monitor e o teclado, rato, disco, modem,placa de rede, etc):Parâmetro TempoCiclo do CPU 1 ns (1 GHz)Acesso à cache ~ 2nsAcesso à memória ~10 nsAcesso ao disco ~10 ms
Solução quando um processo inicia uma operação deentrada/saída de dados e fica à espera que elatermine, o sistema operativo atribui o processadora outro processo:
quando a operação terminar o periférico gera umainterrupção
Multi-processo e conveniência
I Utilizadores frequentemente necessitam de usar diferentesprogramas “ao mesmo tempo”.
I A “especialização” dos programas facilita:I o seu desenvolvimento;I a sua reutilização.
I Quanto a impaciência . . .
Execução multi-processo (1/2)
I Em sistemas multiprocessador (i), vários processos podemexecutar ao mesmo tempo: um em cada processador.
I Num sistema uniprocessador (ii), o sistema operativo gerea atribuição do processador aos diferentes processos (oprocessador é um recurso partilhado pelos diferentesprocessos): pseudo-paralelismo.
P1
CPU1
MEM
P1
CPU2
P1
CPU4
P1
CPU3
(i)
P1
P3
P4
P2
t(ii)
Execução multi-processo (2/2)
A
B
C
D
D
C
B
A
Process switch
One program counterFour program counters
Pro
cess
Time
B C DA
(a) (b) (c)
I O computador é partilhado por 4 processos;I O SO dá a ilusão de que cada processo executa
isoladamente num CPU, i.e. cada processo executa numCPU virtual.
Estados dum ProcessoI Ao longo da sua existência um processo pode estar em 1
de 3 estados:
running
waitingready
1
2
3
4
1. CPU atribuído ao processo (pelo SO);
2. CPU removido do processo (pelo SO);
3. processo bloqueia à espera dum evento;
4. ocorrência do evento esperado.
execução(running): o CPU está a executar as instruçõesdo processo;
bloqueado(waiting): o processo está à espera de umevento externo (tipicamente, o fim de umaoperação de E/S) para poder prosseguir;
pronto(ready): o processo está à espera do CPU, oqual está a executar instruções de outroprocesso.
Processos: Segurança
Espaço de endereçamento disjunto Por omissão o espaço deendereçamento dum processo é disjunto do dos restantesprocessos, e do espaço de endereçamento do kernel
Associação a um utilizador Cada processo está associado aum utilizador, o seu dono, podendo executar apenas asoperações permitidas ao seu dono
Chamadas ao sistema O acesso a recursos do SO e ao HW émediado pelo kernel.
Criação de Processos
I Durante o arranque do SO:I Normalmente estes processos são não -interactivos e
designam-se por daemons:I Alguns executam sempre em kernel space, p.ex. kswapd;I Outros executam normalmente em user space, p.ex. o
servidor de HTTP (Web) e o servidor de impressão.I Em alguns SOs, conhecidos por microkernel, diferentes
serviços são fornecidos por processos especializados.
I Por invocação da chamada ao sistema apropriada.
Criação de Processos em Unix/Linux
#include <unistd.h>pid_t fork(void); /* clones the calling process */
I O processo criado (filho):I executa o mesmo programa que o programa pai;I inicia a sua execução na instrução que segue a fork().
I O processo filho herda do pai:I o ambiente e “privilégios de acesso a recursos”;I alguns recursos, incluindo ficheiros abertos.
I Contudo, o processo filho tem os seus própriosI identificador;I espaço de endereçamento:
após a execução de fork(), alterações à memóriapelo pai não são visíveis ao filho e vice-versa.
Criação de Processos em Unix/Linux (cont.)
Problema: Como é que se distingue o processo pai doprocesso filho?
Solução: fork() retorna:I o pid do filho ao processo pai;I 0 ao processo filho.
if( (pid = fork()) != 0 ) {parent(); /* this is executed by the parent */
} else {child(); /* and this by its child */
}
Hierarquia de processos em Unix/Linux
P1 P1
P2 P3
P4 P5 P6
P2
P3
I Em Unix/Linux há uma relação especial :I entre o processo pai e os seus filhos;I entre processos que têm um pai comum (grupo de
processos).
pstree
init-+--acpid+--atd+--battstat-applet+--bonobo-activati----{bonobo-activati}+--cron+--cupsd+--2*[dbus-daemon]+--dbus-launch+--dd+--events/0+--firefox-bin-+-acroread| +-7*[{firefox-bin}]+--gconfd-2+--gdm---gdm-+-Xorg| +-x-session-manag-+-gnome-cups-icon| +-gnome-panel---{gnome-panel}| +-gnome-terminal-+-6*[bash]| | +-bash---pstree
[...] [...] [...]
Execução de programasProblema: Como é que um processo pode executar um
programa diferente do do pai?Solução: Usando a chamada ao sistema execve()
#include <unistd.h>int execve(const char* filename, char *const argv[],
char *const envp[])
0x0 0x0text1
data1
args1stack1
heap1
args2stack2
heap2
data2
text2
I Substitui o programa em execução pelo contido emfilename;
I argv e envp permitem especificar os argumentos apassar à função main() do programa a executar.
Terminação de Processos
I Um processo pode terminar por várias causas:1. decisão do próprio processo, executando a chamada ao
sistema apropriada (directa ou indirectamente, p.ex. porretorno de main());
2. erro causado pelo processo, normalmente devido a umbug, p.ex. divisão por zero ou acesso a uma região dememória que não lhe foi atribuída;
3. decisão de outro processo, executando a chamada aosistema apropriada (kill em POSIX);
4. decisão do SO (falta de recursos).
I Note-se que um processo pode terminarvoluntáriamente quando detecta um erro, p.ex. umcompilador não pode compilar um ficheiro que nãoexiste.
Mais chamadas ao sistema
#include <unistd.h>void exit(int status)void _exit(int status)pid_t getpid()pid_t getppid()
I _exit() termina o processo que a invoca;I exit() é uma função da biblioteca C (deve usar-se com#include <stdlib.h>):
I invoca as funções registadas usando at_exit();I invoca a chamada ao sistema _exit().
I Após retornar de main(), um processo invoca exit().I getpid() retorna o pid do processo que o invoca.I getppid() retorna o pid do processo pai.
Sincronização com wait()
#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *status)pid_t waitpid(pid_t pid, int *status, int options);
I Suspende a execução do processo até:I um processo filho terminar (wait());I o processo filho especificado em pid terminar
(waitpid());I status permite obter informação adicional sobre o
processo que terminou. Nomeadamente, o argumentocom que invocou a função exit().
I options controla o modo de funcionamento dewaitpid().
Sincronização com wait(): exemplo
...int status;pid_t pid;...if( (pid = wait(&status)) != -1 ) {
if( WIFEXITED(status) != 0 ) {printf(‘‘Process %d exited with status %d\n’’,
pid, WEXITSTATUS(status));} else {
printf(‘‘Process %d exited abnormally\n’’, pid);}
}
Eventos Assíncronos em Processos (Sequenciais)Eventos Assíncronos (Sinais em Unix/Linux)
Excepções p.ex. divisão por 0, tentativa de acesso a umaposição de memória não válida
Notificação de eventos pelo SO, p.ex., fim duma temporizaçãoou da terminação dum processo filho, pressão dum conjuntode teclas
Comunicação entre processos Em Unix/Linux é possível umprocesso notificar um outro processo do mesmo dono
Processamento de Eventos Assíncronos
Signal Handlers são as rotinas de processamento de sinaisI Têm que ser registadas no kernel usando uma
chamada ao sistemaI Executam assincronamente ao código do processo
(semelhante às rotinas de serviço de interrupção)
Implementação de Processos
I O SO tem que manter para cada processo algumainformação numa estrutura de dados conhecida porprocess control block (PCB).
I O PCB inclui, entre outra informação:I O identificador do processo.I O estado do processo (READY,RUN,WAIT).I O evento pelo qual o processo está à espera, se algum.I O estado do CPU (PC, SP e outros registos), quando o SO
o retirou do processo, i.e. saiu do estado running.I As credenciais do processo (incluindo o owner ).I Informação sobre a memória usada pelo processo.I Informação sobre outros recursos usados (p.ex. ficheiros)
pelo processo e o estado desses recursos.
I Os PCBs de todos os processos constituem umaestrutura de dados conhecida por process table.
Comutação de Processos (1/3)
I A comutação entre processos (process switching),consiste em retirar o CPU a um processo e atribuí-lo aoutro.
I É uma função fundamental do kernel em SO multiprocesso.I A comutação entre processos inclui:
1. Transferir o estado do processo em execução para amemória (o Process Control Block );
2. Carregar o processador com o estado do processo quepassa para o estado de execução;
I Passar o controlo para o novo processo, possivelmentecomutando para user-mode.
Comutação de Processos (2/3)
I P0 está no estado RUN e passa para o estado READY :
P1
queue head
null
P2 P3P0CPU
P1CPU P0
null
queue head
P2 P3
Comutação de Processos (3/3)
I A parte do SO que faz a comutação de processosdesigna-se por despacho (dispatcher).
I A comutação entre processos é feita em instantes"oportunos", incluindo:
I chamadas ao sistema (p.ex., exit(), read());I interrupções:
I por dispositivos de E/S;I pelo relógio.
Processamento de Interrupções
Depende do hardware e do SO1. O hardware salva o estado do CPU na stack2. O hardware carrega o PC com o vector de interrupção3. A rotina em assembly guarda registos que o hardware não
tenha salvadoI Primeira parte da comutação de processos
4. A rotina em assembly inicializa uma stack para servir ainterrupção (por razões de segurança)
5. A interrupção é servida por uma rotina normalmente em C6. O despacho é executado para comutar o processo, se
necessárioI Tipicamente, a interrupção altera o estado dum processo
de WAIT para READY
7. A rotina em assembly reinicia o (?novo?) processoI Segunda parte da comutação de processos
Leitura Adicional
I Secções 2 e 2.1 deModern Operating Systems, 2nd Ed.
I Secções 3.1, 3.2, 3.3, 3,4 e 3.6 deJosé Alves Marques e outros, Sistemas Operativos,FCA - Editora Informática, 2009
I Outra documentação (transparências e enunciadosdos TPs):via http://web.fe.up.pt/~pfs/
top related