PDA

Afficher la version complète : quelques questions sous unix



jejelerom
03/01/2006, 21h47
Salut à tous,

Je me permet de vous poser ces 5 questions dont je n'arrive pas à trouver des réponses satisfaisantes :

1 - Sous Unix-Linux, le processus fils peut-il modifier les variables environnements de son processus père ? et l'inverse ?

2 - Lorsqu'on utilise des Threads java, quelles conditions faut-il réunir pour obtenir un interblocage (ie comment obtenir un deadlock) ?

3 - Dans un simulateur ou un logiciel utilisant la technique de programmation guidée par les évènements, comment connait-on la date courante ?

4 - en java, la documentation de la classe LinkedList indique : <div class='quotetop'>Citation </div>
Note that this implementation is not synchronized[/b]. Que risque t'on ? Quels précautions faut il prendre dans ce cas.

5 - Du point de vue du programmeur, quel est selon vous, la différence la plus importante entre des processus lourds (ie a base de fork) et des processus légers (ie à base de thread) ?

Ce sont des questions qui ne sont pas encore claires dans ma tête, et un examen se profile samedi matin.
Sinon j'aimerai bien bosser mes expressions régulières pour cet examen, mais la documentation de l'iut est pauvre voir inexistante, et j'aimerai aussi trouver un site avec des exemples d'automates http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif.

Merci d'avance à ceux qui apporteront leur contribution http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif

P.S : Dudule aussi est invité à répondre à ces questions ..... lol http://www.alionet.org/style_emoticons/<#EMO_DIR#>/tongue.gif

marcel_kebab
03/01/2006, 22h26
Salut
1: si tu parles de la commande export, c'est non. Et je ne connais pas de commande faisant ça à part setenv mais ce n'est pas tout à fait la même chose.

2: En général, il faut le blocage d'une ressource. Le thread 1 bloque la ressource R puis interroge le thread 2. Pour répondre le thread 2 a besoin de la ressource R mais elle est bloquée par le thread 1 qui attend la réponse du thread 2....

3: comprends pas vraiment la question

4: je débute en java mais je crois que c'est en rapport avec le multithread justement.

5: pour moi c'est la même chose.

Pour les expressions régulières, il faudrait savoir de quel langage on parle, mais en cherchant sur le net tu devrais vite trouver.

Bon courage

molodoi
03/01/2006, 23h33
Salut à tous,[/b]

salut mec

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
1 - Sous Unix-Linux, le processus fils peut-il modifier les variables environnements de son processus père ? et l'inverse ?[/b]

C'est quoi une variable d'environnement? Tu parles programmation ou scripting? Si par variable d'environnement, tu entends variables globales à ton pgm, je pense que la réponse est oui.

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
2 - Lorsqu'on utilise des Threads java, quelles conditions faut-il réunir pour obtenir un interblocage (ie comment obtenir un deadlock) ?[/b]

Un exemple vaut mieux qu un lg discours


public class Interblocage {
public int variableSensible = -1;
public synchronized void ecrire(){
while(true){
try{
if(variableSensible == -1){
variableSensible = (int)(Math.random() * 1000);
break;
}
Thread.sleep(100);
}
catch(InterruptedException e){}
}
}
public synchronized int lire(){
int valeur = variableSensible;
variableSensible = -1;
return valeur;
}
} Un thread A accède à la méthode ecrire() (variableSensible = -1).

Un thread B tente d'accèder à la méthode ecrire() (variableSensible = -1).

Le thread B se met en attente du verrou (variableSensible = -1).

Le thread A sort de la méthode et libère le verrou (variableSensible = 458).

Le thread B entre dans la méthode ecrire() (variableSensible = 458).

Le thread A tente d'accèder à la méthode lire() (variableSensible = 458).

Le thread A se met en attente du verrou (variableSensible = 458).

Le thread B entre dans une boucle infinie (variableSensible = 458).

Le programme est bloqué.
Avec les threads, soigneux tu seras http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wiseman.gif

Dans l'exemple ci-dessus, la solution pour éviter l'interblocage est simple: synchroniser le bloc de code contenant la variable sensible.

Attention, par "variable sensible", j'entends "ressource partagée entre les threads"

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
3 - Dans un simulateur ou un logiciel utilisant la technique de programmation guidée par les évènements, comment connait-on la date courante ?[/b]

no idea http://www.alionet.org/style_emoticons/<#EMO_DIR#>/sad.gif

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
4 - en java, la documentation de la classe LinkedList indique : <div class='quotetop'>Citation
Note that this implementation is not synchronized[/b]. Que risque t'on ? Quels précautions faut il prendre dans ce cas.
[/b][/quote]

Risque: si jamais ta LinkedList est utilisée par plusieurs threads, tu n'as aucune garantie que le contenu de ta LinkedList restera cohérent tout au long du tps de vie de ton processus.

Solution: la protéger "à la main" en déclarant ceci:

List list = Collections.synchronizedList(new LinkedList(...));

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
5 - Du point de vue du programmeur, quel est selon vous, la différence la plus importante entre des processus lourds (ie a base de fork) et des processus légers (ie à base de thread) ?[/b]

Si tu connais et comprends la différent entre un processus et un thread, la question ne se pose même pas (ou, du moins, la réponse est évidente). Mais c'est de la matière qui relève plus des Systèmes d'Exploitation que de la progra pure et dure http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif

Tu écris un pgm et tu le compiles. Tu obtiens un fichier binaire. Qd tu l'exécute, ton application devient ce que l'on appelle un processus. Une zone mémoire lui est allouée. Une partie de cette zone est utilisée pour stocker les résultats (ou les variables), une autre pour l'exécution du code.

En progra système, tu as la possibilité de "forker" ton processus, çàd que tu vas le dédoubler. Tu fais une copie "conforme" au moment du fork de la zone mémoire (code et variables) associée à ton processus. Le processus de départ devient le processus père et le petit nouveau est le processus fils. A priori, il n'y a aucun lien entre les deux processus (hormis une certaine parenté), car les deux zones mémoires sont totalement distinctes. Il y a possiblité de faire communiquer les deux processus mais c'est lourd (cfr la communication par "pipe").

Cpdt, un processus a la possiblité aussi de créer un (ou des) thread(s). L'idée est de dupliquer seulement la zone mémoire correspondant au code. La zone mémoire reprenant les variables qui est utilisée par le processus est partagée par le(s) thread(s). Economie de place, donc, mais au prix d'une certaine complexité car il faut éviter plein de problèmes liés aux threads (tu en as évoqué un dans ton post).

Les threads peuvent être intéressant car la communication entre threads est facilitée (dans un sens) par l'utilisation d'une ressource partagée.

Hope this was helpful

Good luck pour ton exam, fieu http://www.alionet.org/style_emoticons/<#EMO_DIR#>/tongue.gif

<div class='quotetop'>Citation (marcel_kebab @ 3/01/2006 à 21:26) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69693)</div>
5: pour moi c'est la même chose.[/b]

http://www.alionet.org/style_emoticons/<#EMO_DIR#>/diablo.gif

Viens que je te donne la fessée

http://www.alionet.org/style_emoticons/<#EMO_DIR#>/diablo.gif


<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
Sinon j'aimerai bien bosser mes expressions régulières pour cet examen, mais la documentation de l'iut est pauvre voir inexistante, et j'aimerai aussi trouver un site avec des exemples d'automates http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif.[/b]

Fais une recherche sur les grammaires des lgges de programmation http://www.alionet.org/style_emoticons/<#EMO_DIR#>/unsure.gif

jejelerom
04/01/2006, 08h26
Je vois que pour certaines questions, vous avez tous du mal à répondre lool http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif Ce sont des questions qui ont été posées à un examen en 2004 ... effectivement les questions sont floues parfois ou pas évidentes http://www.alionet.org/style_emoticons/<#EMO_DIR#>/blink.gif

Molodoi, merci pour ton code et ta réponse sur les threads, c'est excellent. J'avais plus ou moins déjà compris mais maintenant c'est clair comme l'eau de roche.

Pour la question 3, je ne vois vraiment pas, à moins que ce soit tellement simple que je passe a coté lol http://www.alionet.org/style_emoticons/<#EMO_DIR#>/laugh.gif

La 1 : telle était la question donc doit bien y avoir une réponse http://www.alionet.org/style_emoticons/<#EMO_DIR#>/blink.gif http://www.alionet.org/style_emoticons/<#EMO_DIR#>/ohmy.gif


Bon je pars en cours, j'attend d'autres réponses en attendant 12h ^^ http://www.alionet.org/style_emoticons/<#EMO_DIR#>/cool.gif

Dudule-le-poisson
04/01/2006, 16h21
1 - Sous Unix-Linux, le processus fils peut-il modifier les variables environnements de son processus père ? et l'inverse ?[/b]

Je pense que le prof désignait le côté scripting ; page 17 de son *.sxi, on peut lire "Recopie du père vers le fils uniquement!" ; le processus fils hérite donc des variables d'environnement (export / setenv) mais si ce n'est qu'une simple recopie, le fils ne peut modifier les var. d'env. de son père et vice-versa. Mais bon c'est un sujet sur lequel on se plante facilement, je ne garantis pas la réponse.

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
2 - Lorsqu'on utilise des Threads java, quelles conditions faut-il réunir pour obtenir un interblocage (ie comment obtenir un deadlock) ?[/b]

Les réponses précédentes sont parfaites ; en résumé il suffit que les deux threads se bloquent mutuellement pour accéder à une ressource.

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
3 - Dans un simulateur ou un logiciel utilisant la technique de programmation guidée par les évènements, comment connait-on la date courante ?[/b]
En regardant la date du 1er evenement dans l'échéancier si je me souviens bien ; en tout cas, il n'y a pas de variable contenant la date en cours ailleurs que dans l'échéancier, le prof a bien insisté là-dessus en amphi.

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
4 - en java, la documentation de la classe LinkedList indique : <div class='quotetop'>Citation
Note that this implementation is not synchronized[/b]. Que risque t'on ? Quels précautions faut il prendre dans ce cas.
[/b][/quote]

On risque effectivement d'obtenir des incohérences si plusieurs threads modifient la même liste. Utiliser la version synchronisée me parait aussi la solution la plus simple. Sinon, on peut synchroniser l'objet qui contient la liste mais cela dépend de la façon dont est organisée le programme.

<div class='quotetop'>Citation (jejelerom @ 3/01/2006 à 20:47) <{POST_SNAPBACK}> (index.php?act=findpost&pid=69692)</div>
5 - Du point de vue du programmeur, quel est selon vous, la différence la plus importante entre des processus lourds (ie a base de fork) et des processus légers (ie à base de thread) ?[/b]

Forker un processus à un moment donné consiste à copier la zone mémoire dans laquelle il s'exécute à ce moment ; on obtient alors deux processus identiques (puisqu'il y a eu copie) mais n'ayant pas de zone mémoire commune (ptet le code mais ça ne change rien). Vu que la copie s'effectue à un moment donné, le fils hérite d'une copie des données du père (sauf verrous sur les fichiers).
Le thread suit presque le même principe : chaque processus a sa propre pile mais le tas est partagé, ce qui est bien sûr plus difficile à gérer, d'où le besoin de synchronisation pour éviter que les différents threads n'écrivent tous en même temps dans le tas.
La différence essentielle réside donc dans la gestion de la mémoire.

jejelerom
04/01/2006, 20h44
ahhhhhhh dudule chhhut parle pas du prof ou d'amphi http://www.alionet.org/style_emoticons/<#EMO_DIR#>/diablo.gif http://www.alionet.org/style_emoticons/<#EMO_DIR#>/bang.gif après on va croire que j'y vais pas http://www.alionet.org/style_emoticons/<#EMO_DIR#>/whistling.gif et personne ne voudra répondre à ce sujet http://www.alionet.org/style_emoticons/<#EMO_DIR#>/sweatingbullets.gif

Merci pour tes réponses dudules http://www.alionet.org/style_emoticons/<#EMO_DIR#>/cool!.gif

jov
04/01/2006, 21h05
puisqu'on parle de ressources critiques, d'interblocage, etc... j'en profite pour poser une autre question. Y'a-t-il en Java l'équivalent des objets protégés en Ada....c'est à dire un type d'objet comportant des procédures, foncitons et entrées (dans le cas de Ada) ne pouvant être accéder que par une tâche à la fois (sauf pour les fonctions qui ne modifient pas l'état).

et si quelqu'un à la réponse pour le c/c++ je suis aussi preneur http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif

molodoi
05/01/2006, 09h26
puisqu'on parle de ressources critiques, d'interblocage, etc... j'en profite pour poser une autre question. Y'a-t-il en Java l'équivalent des objets protégés en Ada....c'est à dire un type d'objet comportant des procédures, foncitons et entrées (dans le cas de Ada) ne pouvant être accéder que par une tâche à la fois (sauf pour les fonctions qui ne modifient pas l'état).

et si quelqu'un à la réponse pour le c/c++ je suis aussi preneur http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif[/b]

Certains objets en Java sont synchronisés par défaut (Vector, Hashtable, ...)