Programação por processos

Ah!!! Mas não precisa de partilhar com os outros processos.... Faz parte somento do último processo... Por isso então pode ser feito dentro deste último processo certo? Só tem de ler os valores e apresentar as mensagens Reserva ou Normal....

Pois pedia para ser por memória partilhada... Assim já percebi melhor por onde começar :)
 
Última edição:
O exercício pode ser feito de várias maneiras diferentes, mas pelo que o rui disse no enunciado era pedido para utilizar memória partilhada, daí a minha explicação passar por esta matéria.
 
Sim tal como disse num post acima para o exercício ficar mesmo bem feito deveria ser garantida a sincronização dos processos no acesso a memória. Tal como eu referi podíamos por exemplo usar semáforos para garantir a sincronização.

Só não introduzi directamente o uso de semáforos no pseudo código que fiz porque o que pretendia mesmo era que o rui.m percebesse primeiro o que tem de fazer. Não quis introduzir tudo de uma só vez para não parecer muito confuso.

Mas pronto para ficar correcto no corpo de cada um dos if's atrás referidos tem de acrescentar a exclusão mútua nos acessos de leitura e escrita em memória.

Ficaria algo do género:

if(pid = pai)
lê da consola;
pede exclusão mútua;
escreve em memória;
liberta a exclusão mútua;

o mesmo padrão repete-se para cada um dos outros processos.

Mas quando te referes a isto, estás a sugerir que introduza somaforos certo?
 
Pessoal tou com dificuldades em criar os processos....
Aquilo que eu pretendia era criar um processo pai que leia um valor do teclado e coloque na memória partilhada.
Depois ter dois filhos que vão ler o valor introduzido ao pai...
Será que alguém me pode ajudar com o código???
 
Processos =/

Boa tarde pessoal!!

estou com um enorme problema.. sou nova no linux, e o meu professor da cadeira de sistemas operativos apenas nos tem ensinado a teorica, e tenho um projecto para entregar esta semana e estou mesmo aflita!!

o trabalho é o seguinte:

Write a program, that creates 3 processes which are in relation grandfather -> father -> child.

Each of that processes prints information about itself to stdout using following format after start:

printf("%s identification: \n", label); /*grandparent/parent/child */
printf(" pid = %d, ppid = %d, pgrp = %d\n", ...);
printf(" uid = %d, gid = %d\n", ...);
printf(" euid = %d, egid = %d\n", ...);

After lunching its child (first 2 processes) the process waits for that child end and prints reason for termination of the child:
printf("%s exit (pid = %d):", label, ...); /* and one line from */
printf(" normal termination (exit code = %d)\n", ...); /* or */
printf(" signal termination %s(signal = %d)\n", ...); /* or */
printf(" unknown type of termination\n");

Mask "%s" on line with information about interruption of program with signal will be replaced either with empty string or with string "with core dump ". Use following macros to test the reason of termination of the child: WIFEXITED(), WEXITSTATUS(), WIFSIGNALED(), WCOREDUMP(), WTERMSIG(). Child (the third process) after printing information about itself run a program (function execv()), whose name with absolute path is placed as first parameter of your program. The program to be executed can have other parameters that are taken from command line (any number of them and it is not necessary to copy anything).

To start with the project check base.tar.gz*. For compilation use the -Wall option and the definition of _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED macros. Makro WCOREDUMP does not have to be defined on all systems so its use must be checked with
#ifdef WCOREDUM
...use of WCOREDUMP...
#endif
With this example your program will run /bin/ls in third process and pass -l /bin/bash as its parameters.
./proj01 /bin/ls -l /bin/bash

*#define _XOPEN_SOURCE
#define _XOPEN_SOURCE_EXTENDED 1 /* XPG 4.2 - needed for WCOREDUMP() */

/* ARGSUSED */
int main(int argc, char *argv[])
{
return 0;
}




já alguém fez um projecto destes ou tem código por onde eu me possa orientar?!

Obrigado!!
 
Uma vez que esse código não está entre os [code_] [/code_] não vou perder tempo a lê-lo. Vou ver se ainda me lembro disso e mostrar qualquer coisa para criar os 3 processos como queres.

não experimentei compilar:
Código:
int main(int argc, char ** argv) {
	
	if (fork() == 0) {
		/* processo grandfather  */
		int father_status, father_pid;
		father_pid = wait(&father_status); /* espera que o filho acabe */
		/* printf da informacao aqui parece-me */
	}
	else {
		if (fork() == 0) {
			/* processo father */
			int child_status, child_pid;
			child_pid = wait(&child_status); /* espera que o filho acabe */
			/* printf da informacao aqui parece-me */
		}
		else {
			/* processo child */
		}
	}
	return 0;
}
 
Back
Topo