CBOX-Shout
Procurar
Quem está conectado?
Há 11 usuários online :: 0 registrados, 0 invisíveis e 11 visitantes Nenhum
O recorde de usuários online foi de 34 em Dom Ago 13, 2023 1:30 pm
Estatísticas
Temos 318 usuários registradosO último membro registrado é Buggsoulmitor
Os nossos membros postaram um total de 1475 mensagens em 209 assuntos
Trabalhos de Sistemas Operativos
5 participantes
Página 1 de 1
Trabalhos de Sistemas Operativos
Boas se alguém tivesse os exercícios de sistemas de operativos podia partilhar aqui com o pessoal
Re: Trabalhos de Sistemas Operativos
Só amanhã devo pegar nisso, hoje é dia de grande jogo!
JMary- Moderador
- Mensagens : 88
Data de inscrição : 28/09/2011
Idade : 39
Localização : Coimbra e Arredores
Re: Trabalhos de Sistemas Operativos
Ok então se puderes depois dá aqui uma ajuda, é que tu dominas isto
Eu fiz o exercício 1 da folha 2. Adicionei só mais uma coisita para ver os PID's dos processos para saber quem estava a executar o quê. O resultado obtido realmente não foi o esperado, mas porquê? Se fosse só para escrever uma vez aquilo funcionava mas com o ciclo 'for' aquilo salta de processo para processo antes de escrever as 100 vezes.
exe1.c
Eu fiz o exercício 1 da folha 2. Adicionei só mais uma coisita para ver os PID's dos processos para saber quem estava a executar o quê. O resultado obtido realmente não foi o esperado, mas porquê? Se fosse só para escrever uma vez aquilo funcionava mas com o ciclo 'for' aquilo salta de processo para processo antes de escrever as 100 vezes.
exe1.c
- Código:
#include <stdio.h>
#include <unistd.h>
int main(void) {
int i,j;
printf("Hello World\n");
int pid = fork();
if(pid > 0){//executado pelo processo pai - fork retorna um nmr > 0 para o pai (PID do proce. filho)
for(i=0;i<100;i++){
printf("Eu sou o pai PID = %u , PPID = %u \n", getpid(), getppid());
}
}
else if(pid == 0){//executado pelo processo filho - fork retorna 0 para o filho
for(j=0;j<100;j++){
printf("Eu sou o filho PID = %u , PPID = %u \n", getpid(), getppid());
}
}
else printf("Criacao do processo filho falhou..."); //se fork retornou -1 falhou na criacao do proce. filho
return 0;
}
Re: Trabalhos de Sistemas Operativos
Agora experimentei fazer a mesma coisa mas usando o execl(). Assim já funciona, mas a questão é mesmo porque é que sem o execl() não funciona
- Spoiler:
exe1exec.c- Código:
#include <stdio.h>
#include <unistd.h>
int main(void) {
int i;
printf("Hello World\n");
int pid = fork();
switch (pid){
case -1:
printf("O fork falhou...");
case 0:
execl("./child", "./child", NULL);
break;
default:
for(i=0;i<100;i++)
printf("Eu sou o pai\n");
}
return 0;
}
child.c- Código:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int j;
for(j=0;j<100;j++)
printf("Eu sou o filho\n");
return 0;
}
Re: Trabalhos de Sistemas Operativos
Mas na próxima semana é já a folha 2? Nem a folha 1 acabámos!
JMary- Moderador
- Mensagens : 88
Data de inscrição : 28/09/2011
Idade : 39
Localização : Coimbra e Arredores
Re: Trabalhos de Sistemas Operativos
JMary escreveu:Mas na próxima semana é já a folha 2? Nem a folha 1 acabámos!
Não faço ideia, mas temos 7 folhas e as aulas estão contadas por isso o prof não deve perder muito tempo com cada folha
Re: Trabalhos de Sistemas Operativos
Boas..
Estou com uma duvida no 1º exercio de SO do trabalho prático 1.
Depois de ter falado com o prof. ele disse que deviamos usar mais um sinal para o pai saber se um filho foi criado. Tive a ver a lista dos sinais disponiveis, e tentei usar o SIGCHLD, mas mesmo assim ainda não está a funcionar bem..
Mais alguem usou este sinal, e consegui fazer o que o prof pede? Agradecia uma ajuda.
Saudações Academicas.
Estou com uma duvida no 1º exercio de SO do trabalho prático 1.
Depois de ter falado com o prof. ele disse que deviamos usar mais um sinal para o pai saber se um filho foi criado. Tive a ver a lista dos sinais disponiveis, e tentei usar o SIGCHLD, mas mesmo assim ainda não está a funcionar bem..
Mais alguem usou este sinal, e consegui fazer o que o prof pede? Agradecia uma ajuda.
Saudações Academicas.
videira- Nível 2
- Mensagens : 6
Data de inscrição : 21/04/2012
Re: Trabalhos de Sistemas Operativos
O que eu usei para o pai saber que tem um filho foi algo muito simples. O programa inicia com a flag "int existe_filho=0", quando um filho é criado o filho manda um sinal ao pai (através do kill), não é muito importante qual o sinal que se envia, eu por exemplo usei o SIGUSR1, o mais importante é definir o procedimento a executar em resposta a esse sinal. Nesse procedimento basta tão simplesmente fazer "existe_filho=1;", quando um filho terminar o processo deverá ser idêntico, usando outro sinal e outro procedimento para fazer "existe_filho=0". E pronto assim sempre que o processo pai precisar de saber se tem um filho ou não basta verificar o valor de "existe_filho".
Este problema 1 é um problema simples se for feito com flags, é que depois meia dúzia de if's resolvem tudo
Este problema 1 é um problema simples se for feito com flags, é que depois meia dúzia de if's resolvem tudo
electr0- Nível 3
- Mensagens : 16
Data de inscrição : 14/12/2011
Re: Trabalhos de Sistemas Operativos
Epa era mesmo isso que me faltava.. já consegui fazer! Com as flags, ficou simples.
Muito obrigado.
Saudações Academicas.
Muito obrigado.
Saudações Academicas.
videira- Nível 2
- Mensagens : 6
Data de inscrição : 21/04/2012
Re: Trabalhos de Sistemas Operativos
Enviei agora mail ao prof, ele respondeu que o relatório deve ter uma descrição do trabalho, descrição dos exercícios e do seu funcionamento.
Vai ser um trabalhão fazer isso
Vai ser um trabalhão fazer isso
JMary- Moderador
- Mensagens : 88
Data de inscrição : 28/09/2011
Idade : 39
Localização : Coimbra e Arredores
SO
JMary escreveu:Enviei agora mail ao prof, ele respondeu que o relatório deve ter uma descrição do trabalho, descrição dos exercícios e do seu funcionamento.
Vai ser um trabalhão fazer isso
O que é que o prof. quer dizer com "descrição do trabalho"??
Luís Raposo- Nível 3
- Mensagens : 16
Data de inscrição : 05/01/2012
Localização : Coimbra
Re: Trabalhos de Sistemas Operativos
Boas, para o 1º trabalho consegui uma grande ajuda aqui..
Agora estou aqui com uma questão na pergunta 3 do trabalho 2! como fizeram para quando o programa recebe um ctrl-c ? Quando o programa recebe o ctrl-c, estava a usar o pthread_kill que enviava o SIGUSR1 para todas as threads para mudar uma flag, para usar essa flag depois de comerem mais uma vez terminarem.. mas não esta a funcionar..
alguém de outra forma diferente?
Agora estou aqui com uma questão na pergunta 3 do trabalho 2! como fizeram para quando o programa recebe um ctrl-c ? Quando o programa recebe o ctrl-c, estava a usar o pthread_kill que enviava o SIGUSR1 para todas as threads para mudar uma flag, para usar essa flag depois de comerem mais uma vez terminarem.. mas não esta a funcionar..
alguém de outra forma diferente?
videira- Nível 2
- Mensagens : 6
Data de inscrição : 21/04/2012
Re: Trabalhos de Sistemas Operativos
Boas, para o 1º trabalho consegui uma grande ajuda aqui..
Agora estou aqui com uma questão na pergunta 3 do trabalho 2! como fizeram para quando o programa recebe um ctrl-c ? Quando o programa recebe o ctrl-c, estava a usar o pthread_kill que enviava o SIGUSR1 para todas as threads para mudar uma flag, para usar essa flag depois de comerem mais uma vez terminarem.. mas não esta a funcionar..
alguém de outra forma diferente?
Agora estou aqui com uma questão na pergunta 3 do trabalho 2! como fizeram para quando o programa recebe um ctrl-c ? Quando o programa recebe o ctrl-c, estava a usar o pthread_kill que enviava o SIGUSR1 para todas as threads para mudar uma flag, para usar essa flag depois de comerem mais uma vez terminarem.. mas não esta a funcionar..
alguém de outra forma diferente?
videira- Nível 2
- Mensagens : 6
Data de inscrição : 21/04/2012
Re: Trabalhos de Sistemas Operativos
videira escreveu:Boas, para o 1º trabalho consegui uma grande ajuda aqui..
Agora estou aqui com uma questão na pergunta 3 do trabalho 2! como fizeram para quando o programa recebe um ctrl-c ? Quando o programa recebe o ctrl-c, estava a usar o pthread_kill que enviava o SIGUSR1 para todas as threads para mudar uma flag, para usar essa flag depois de comerem mais uma vez terminarem.. mas não esta a funcionar..
alguém de outra forma diferente?
Eu usei uma variável global que é posta a 1 quando recebe o sinal. Em determinada parte do código o thread vai avaliar o valor dessa variável e se verificar que é 1 vai terminar (se já tiver acabado de comer). A maneira como termino é usando pthread_exit() pois foi a maneira que vi de retornar um valor (o nº de vezes que comeu) ao thread principal. Funciona bem assim
Re: Trabalhos de Sistemas Operativos
pois, já tinha tentado fazer assim.. mas o meu problema é que quando a thread que está a executar recebe o sinal, só ela é que vai saber que a variável global mudou, as outras threads não a modificam logo só ela é que vai terminar..
Depois também usei o pthread_exit para devolver o valor do numero de vezes que comeram e o join para buscar.
Vou queimar mais um bocado a cabeça a tentar..
obrigado
Depois também usei o pthread_exit para devolver o valor do numero de vezes que comeram e o join para buscar.
Vou queimar mais um bocado a cabeça a tentar..
obrigado
videira- Nível 2
- Mensagens : 6
Data de inscrição : 21/04/2012
Re: Trabalhos de Sistemas Operativos
videira escreveu:pois, já tinha tentado fazer assim.. mas o meu problema é que quando a thread que está a executar recebe o sinal, só ela é que vai saber que a variável global mudou, as outras threads não a modificam logo só ela é que vai terminar..
Depois também usei o pthread_exit para devolver o valor do numero de vezes que comeram e o join para buscar.
Vou queimar mais um bocado a cabeça a tentar..
obrigado
Como é uma variável global todas as threads vão saber quando esta for alterada se tiverem uma parte do código que verifique a mesma.
Tópicos semelhantes
» 04-06-2012-Teste Prático de Sistemas Operativos
» 20-06-2012 - Exame Normal de Sistemas Operativos
» Resolução dos Trabalhos de Redes e Sistemas de Telecomunicações
» Trabalhos
» Trabalhos de RST
» 20-06-2012 - Exame Normal de Sistemas Operativos
» Resolução dos Trabalhos de Redes e Sistemas de Telecomunicações
» Trabalhos
» Trabalhos de RST
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|