Вы находитесь на странице: 1из 6

PROJETO 1 GERENCIAMENTO DE PROCESSOS

OBJETIVOS
Criao de processos, IPC, gerenciamento de sinais, semforos
Processos rfos e zumbis
Criao de threads
INFORMAO ADMINISTRATIVA
Este projeto pode ser realizado em grupos de no mximo alunos! "bser#e $ue a execuo
bem sucedida deste projeto % importante, considerando $ue este ir oferecer as bases para projetos
futuros, $uanto a interao com o &" 'I(I)! *m relatrio descriti#o dos procedimentos realizados
e as respostas +s $uest,es presentes no decorrer deste projeto de#em ser entregues usando o modelo
de relatrio t%cnico-cient.fico dispon.#el no site da disciplina! O relatrio dee !er e"tre#$e
i%&re!!o e% d$a! ia! &ara o &ro'e!!or da di!(i&li"a at% o dia /010/1/02, no horrio da aula!
AVISO) A li"#$a#e% de &ro#ra%a*+o a !er $!ada , a li"#$a#e% C e o SO "o -$al todo! o!
&ro#ra%a! dee% !er (o%&ilado! , o MINI. /a %e"o! -$e 0a1a i"!tr$*+o e2&l3(ita e%
(o"tr4rio56
RECOMENDA7ES)
3bra pelo menos terminais para realizar as prticas descritas!
Em caso de d4#idas sobre comandos consulte as man pages 5pginas de manual6 ou o
professor! 7asta usar a sintaxe 8man comando9, onde comando % o comando1chamada de
sistema sob o $ual se deseja saber mais!
Para compilar todos os programas digite make!
3bra o ar$ui#o Makefile e explore as op,es poss.#eis!
O&(io"al: caso deseje uma interface mais agrad#el, configure o Eclipse para editar seus
projetos remotamente no 'I(I) 5ou ;inux6! "bser#e $ue nessa configurao #oc< poder
editar os ar$ui#os, por%m, no poder compil-los diretamente! Para tanto, #oc< de#e abrir
um terminal remoto 5no prprio Eclipse6 e compilar manualmente os ar$ui#os! "s passos
para a configurao esto dispon.#eis em:
http:11=i>i!minix?!org1en1@e#elopersAuide1EclipseButorial
3tente para o seguinte detalhe: esta prtica possui 0/ exerc.cios! Beremos C aulas! Bentem
realizar pelo menos exerc.cios por aula para apro#eitar o per.odo da aula para o
esclarecimento de d4#idas e composio do relatrio!
TAREFA 1 /#ere"(ia%e"to de &ro(e!!o!5) (ria*+o de &ro(e!!o!8 IPC8 #ere"(ia%e"to de !i"ai!8
!e%4'oro!
5a6 Como funciona a chamada de sistema fork! Expli$ue no contexto do programa fork-
ex.c! Como #oc< pode ter a certeza $ue o programa fork-ex.c est de fato
funcionandoD @emonstre!
5b6 'odifi$ue o programa fork-ex.c para $ue este realize a criao de 0/ processos filhos!
'odifi$ue a funo void do_nothing (void) de modo $ue esta imprima para cada
execuo de processo filho o pid do processo pai e o pid do processo filho 5"7&! "
PE"BFBIP" @E&B3 G*(HI" (I" @EJE &EE '"@IGIC3@"6! 3l%m disso, crie
mecanismos em seu programa para permitir a coleta de dados dos 0/ processos
simultaneamente por meio do comando ps!
5c6 Escre#a um programa o $ual de#e criar ? processos: escritores e 0 leitor! "s escritores
de#em escre#er em um pipe mensagens de tamanho pr%-definido 5sizeof(PACK!)
"#tes6! " leitor de#e ler as mensagens inseridas pelos escritores, imprimir as mensagens e
identificar o processo escritor $ue a originou! Para este exerc.cio utilize a definio de um
pacote conforme segue:
t#pedef str$ct %
int id& '( )eve g$ardar o pid do processo origin*rio ('
char data+,-./&
int lastone& '( 0sado para identificar a 1ltima str$ct inserida no
pipe ('
2 PACK!&
&ua soluo de#e ser capaz de generalizar o caso de m4ltiplos escritores e um leitor!
Eefer<ncia: 7eejKs Auide to *nix Interprocess Communication!
5d6 Como #oc< implementaria o exerc.cio da letra 5c6 usando sockets BCP? Gornea um
exemplo de cdigo usando um 4nico leitor e um escritor! *se a definio de P3CLEB
fornecida! Como generalizar a soluo para m4ltiplos escritoresD M poss.#elD Expli$ue!
Di(a) $uem ser o clienteD Nuem ser o ser#idorD
5e6 Considere as modifica,es implementadas na letra 5b6! Pes$uise o funcionamento da macro
OE)IB&B3B*&5status6 em C e modifi$ue seu programa de modo $ue, para cada um dos 0/
processos filhos criados, eles possuam um status de sa.da diferente e controlado pelo usurio
5ex! #oc< pode especificar o status de sa.da a partir da linha de comando para cada um dos
0/ processos ou simplesmente inserir no cdigo um #alor de sa.da diferenciado para cada
processo filho6!
5f6 3nalise o cdigo ctrlc.c! Expli$ue o $ue este cdigo realiza! Beste este cdigo no
'I(I) e no ;inux! Joc< obser#ou alguma diferena $uanto a execuoD Expli$ue!
Eefer<ncia: 7eejKs Auide to *nix Interprocess Communication!
5g6 ;embra-se de semforosD Eelembrando: semforos podem ser entendidos como um
mecanismo de tra#amento relati#amente simples! Joc< pode us-los para controlar o acesso
a ar$ui#os, memria compartilhada etc! 3 funcionalidade bsica de um semforo % $ue #oc<
pode ajust-lo, #erific-lo ou esper-lo at% $ue algu%m o libere 58test-n-set6! (o importa o
$uo complexo o programa seja, lembre-se destas tr<s opera,es fundamentais!
Para esta $uesto, ser fornecido um cdigo fonte parcial chamado semaphore.c
'odifi$ue este programa de modo $ue ele simule o acesso a uma regio cr.tica! @emonstre
o uso das seguintes fun,es 5estas de#em ser inseridas no local correto no programa6!
int sem_init(sem_t (sem3 int pshared3 $nsigned int val$e)&
3 funo sem_init() % usada para inicializar o #alor do semforo! " argumento
pshared de#e ser 4 para semforos locais a um processo!
int sem_5ait(sem_t ( sem)&
3 funo sem_5ait() realiza funo anloga a operao down em um semforo!
int sem_post(sem_t ( sem)&
3 funo sem_post() realiza funo anloga a operao up em um semforo!
int sem_destro#(sem_t ( sem)&
3 funo semPdestroQ56 % usada para desalocar recursos alocados a um semforo, de
forma apropriada! " semforo no programa usado como exemplo, % usado como um
mutex,ou seja, um semforo binrio para implementar a excluso m4tua entre dois
processos os $uais usam um recurso compartilhado!
OBS6) E!!a , a 9"i(a tare'a -$e dee !er reali:ada "o ;i"$26 A <i<liote(a de !e%4'oro!
/!e%a&0ore605 ai"da "+o 0aia !ido i%&le%e"tada "a er!+o =616> do MINI.6
OBSERVAO)
Para compilar seus no#os programas, #c pode inserir linhas apropriadas no ar$ui#o 'a>efile! 3
forma mais simples de compilao seria:
6gcc exemplo.c -o exemplo
o parRmetro 8-o exemplo9 indica $ue o ar$ui#o binrio gerado 5output6 de#er se chamar
exemplo!
Tare'a ? /#ere"(ia%e"to de &ro(e!!o!5) Pro(e!!o! r'+o!
TE@RICO) *m processo rfo % um processo cujo processo pai terminou ou foi terminado!
Processos rfos desperdiam recursos e podem potencialmente complicar a operao de um
ser#idor! Entretanto, existem algumas solu,es para o problema de processos rfos:
0! Exterminar o processo % a t%cnica mais comumente usada! (este caso o processo rfo %
terminado!
! Expirao % uma t%cnica na $ual cada processo % alocado por um certo per.odo de tempo
para $ue possa terminar antes $ue o processo seja finalizado! Caso necessrio, um processo
pode pedir mais tempo para terminar antes $ue seu tempo expire!
3o se tornar rfo em um sistema Unix-like, um processo % automaticamente adotado pelo processo
8init9! Esta operao % chamada re-parenting 5em uma traduo li#re, apadrinhamento6 e ocorre
por padro! Embora o processo tenha o processo init como seu pai, ele ainda % chamado processo
rfo pois o processo $ue o gerou originalmente no existe mais!
Si%$le a -$e!t+o de &ro(e!!o! r'+o!8 $!a"do o (o%a"do Aill "o &ro(e!!o &ai da tare'a 1/<5
de!ta li!ta6 De%o"!tre o re-parenting do! &ro(e!!o! 'il0o! e de!(rea o %,todo $!ado &ara
reali:ar e!te e2&eri%e"to6
Di(a) &ara a (oleta de dado! $!e o (o%a"do &!tree6
Tare'a = /#ere"(ia%e"to de &ro(e!!o!5) Pro(e!!o! :$%<i! /:o%<ie6(5
BEFEIC": (o *nix e &"s Unix-like, um processo zumbi ou defunto % um processo $ue completou
sua execuo mas ainda possui uma entrada na tabela de processos! Esta entrada ainda % necessria
para permitir ao processo $ue iniciou o processo 5agora zumbi6 a leitura de seu status de sa.da! "
termo processo zumbi deri#a da definio comum de zumbi - uma pessoa no morta! (os termos
desta metfora, o processo filho j morreu, mas ainda no foi enterrado!
Nuando um processo termina, toda a memria e recursos associados a ele so desalocados de modo
$ue possam ser usados por outros processos! Entretanto, a entrada do processo na tabela de processo
ainda perdura! " pai pode ler o status de sa.da do filho pela execuo da chamada de sistema 5ait,
momento no $ual o zumbi % remo#ido! 3 chamada 5ait pode ser executada em cdigo se$uencial,
mas % comumente executada em um handler pelo sinal &IAS;@, o $ual o pai recebe sempre $ue
um filho morre!
3ps a remoo do zumbi, seu I@ de processo e entrada na tabela de processo pode ento ser
reutilizado! Entretanto, se um pai falha na chamada 5ait, o zumbi ser deixado na tabela de
processo! Em algumas situa,es, isto pode ser desejado, por exemplo, se o pai cria outro processo
filho, ele se assegura $ue no ir alocar o mesmo I@ de processo!
*m processo zumbi no % o mesmo $ue um processo rfo! *m processo rfo % um processo $ue
ainda est executando, mas cujos pais j morreram! Eles no se tornam processos filhosT ao in#%s
disso, eles so adotados pelo init 5I@ de processo 06, o $ual espera por seus filhos!
Uumbis podem ser identificados na sa.da do comando *nix KpsK pela presena de um 8z9 na coluna
&B3B! Uumbis $ue existem por mais do $ue um pe$ueno inter#alo de tempo, tipicamente indicam
um bug no programa do processo pai, ou apenas uma deciso incomum ao sepultar filhos 5#eja o
exemplo6! 3 presena de uns poucos zumbis no % algo preocupante em si, mas pode indicar um
problema $ue se tornaria s%rio sob cargas excessi#as! Como no existe memria alocada a
processos zumbis, exceto para a tabela de processo, a preocupao primria com muitos zumbis no
% ficar sem memria, mas ao in#%s disso, ficar sem n4meros para o I@ do processo!
Para remo#er zumbis de um sistema, o sinal &IACS;@ pode ser en#iado ao pai manualmente,
usando o comando kill! &e o processo pai ainda se recusa a encerrar o zumbi, o prximo passo
seria remo#er o processo pai! Nuando um processo perder o seu pai, o init se torna o seu no#o
pai! " init periodicamente executa a chamada de sistema 5ait enterrando $uais$uer zumbis $ue
o possuam como pai!
Co"!idera"do a de!(ri*+o a(i%a8 &edeB!e -$e o al$"o %odi'i-$e o &ro#ra%a :o%<ie6( de
%odo -$e e!te 'or"e*a $%a !a3da !i%ilar a a&re!e"tada &ara o (o%a"do ps "a ta<ela a<ai2o
/o<!6 !+o a&re!e"tada! a&e"a! a! e"trada! de i"tere!!e5)
6 ps -f
S PID PPID CMD
7 899 9,: zom"ie
; 89, 899 <def$nct=
; 898 899 <def$nct=
; 89> 899 <def$nct=
; 89- 899 <def$nct=
; 89. 899 <def$nct=
Al,% di!!o8 e2&li-$e a! rela*Ce! de &are"te!(o e"tre o! &ro(e!!o! =118 =1?8 =1=8 =1D8 =1E e =1F6
Per#$"taB!e ta%<,%8 -$e% , o &ai de :o%<ie6
Tare'a D /#ere"(ia%e"to de &ro(e!!o!5) Cria*+o de t0read!
(a #erso ?!0!V o 'I(I) possui suporte a threads desde $ue instalado o pacote pth 5A(*
Portable Bhread librarQ6! Instale o pacote pth e em seguida crie um programa simples para criar a
partir do programa principal tr<s threads! 3 rotina de in.cio a ser passada a pthread_create()
de#e se chamar Print?ello() e de#e receber como parRmetro de entrada o identificador da
thread 5pode ser um n4mero de refer<ncia apenas para diferenciar uma thread de outra6! Para esta
tarefa, exige-se o uso das fun,es pthread_create() e pthread_exit() de maneira
ade$uada! 3ps terminar o programa, pede-se:
5a6 Execute o programa algumas #ezes! Beste sua execuo em um sistema ;inux e compare
as sa.das! Joc< obser#ou alguma diferena na ordem de execuo das threadsD
5b6 Considerando uma execuo de um programa similar a este 5mesmas funcionalidades6
em um sistema *(I) 5@ar=in Lernel Jersion 00!2!6, foi obtida a seguinte sa.da:
Main@ criando thread 4
Main@ criando thread 9
?ello AorldB 7o$ e$3 a thread C4B
Main@ criando thread ,
?ello AorldB 7o$ e$3 a thread C9B
?ello AorldB 7o$ e$3 a thread C,B
Como #oc< justificaria issoD

Вам также может понравиться