Bonjour,
Voici une melting-pot de questions sur linux et même si je me doute que j 'aurais peu de réponses, la moindre réponse m'aidera grandement à avancer donc d'avance merci.
Besoin de confirmation :
*Si j'ai bien compris, Linux possède des niveaux de priorités entre interruptions et comme la trappe possède la priorité la plus basse, forcément une trappe ne peut interrompre une interruption matérielle par exemple?
*Concernant la pile d'un processus, le noyau initialise directement une structure pile des que la fonction est appelée (exemple main()) puis remplit cette structure des que cette fonction en appel une autre?
Ordonnancement :
*un processus créant un autre processus ou créant un thread : le processus ou thread "fils" aura t il le même quantum de temps que son père?si oui une application pourrait crée des milliers de processus et monopoliser le CPU non?
*peux t on qualifier linux standard de temps réel (temps réel non critique) puisque l on peut modifier la politique d 'ordonnancement en SCHED_RR ou SCHED_FIFO?Si oui ca veut dire qu on peux faire cohabiter des processus temps réel avec des processus classiques sur le système?
*un processus classique possède une priorité statique à 0 tandis que les processus temps réels possèdent une priorité entre 1 et 99.
mais l'appel système nice() modifie la priorité statique? ou une priorité de base affectant la priorité dynamique?
Dans le cas ou il modifie la priorité statique, cela voudrait dire que l'on peux rendre un processus classique plus prioritaire qu'un processus temps réel?
La priorité dynamique est bien calculé suivant la priorité fixe et du champs counter du PCB?
*Comment l'ordonnanceur linux est appelé pour effectuer une commutation de contexte?L'ordonnanceur définit un quantum de temps pour le processus et paramètre l'IRQ horloge en conséquence?
Système de fichier :
*Le répertoire est un fichier spécial dont l'inode pointe vers des blocs contenant les inodes des fichiers contenus dans ce repertoire.
Dans ce cas pourquoi utiliser une structure DIR pour les manipuler plutôt qu'une structure classique FILE?DIR permet-elle de lire un FILE mais à un plus haut niveau ?
*accès aux données du répertoire :
J'aimerais affiché le contenu d'un dossier via un descripteur de fichier (et non un FILE) et j'aimerais savoir pourquoi ce code ne marche pas :
la l'affichage sur le terminal fait en boucle : "transaction en cours"), pourtant il devrait m'afficher les blocs de données du répertoire et donc le contenu de ce répertoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char* argv[]) { int fd; char buffer[1024]; int temp; if((fd=open(".",O_RDONLY))==-1) perror("erreur ouverture fichier\n"); printf("debut transaction\n"); while(temp=read(fd,buffer,sizeof(buffer))) { write(1,buffer,temp); printf("transaction en cours\n"); } return 0; }
*concernant les tubes : l'inode d'un tube ne contient pas de bloc de données donc sa table d'index pointe vers des données en RAM?
*concernant les processus noyau kupdate et bdflush : sont ils la pour vider le buffer cache (donc structure logicielle en RAM) ou bien le cache matériel?
D'ailleurs l'appel fflush() vide le buffer cache c'est bien ca?
Espace d'adressage d'un processus :
*j'aimerais récupérer l'espace d'adressage complet d un processus (région de code, données et pile) : pourquoi cat mem dans /proc ou cat maps ne marche pas?il ne m'affiche rien d'ailleurs quelle différence entre ces deux fichiers?
Gestion des pages manquantes dans la RAM :
*si Page fault dans la RAM, est ce le processeur et donc le noyau qui réalise une entrée sortie sur le disque ou bien la RAM voyant que la page est manquante fait elle même cette entrée sortie en mode DMA?
Ou bien dit autrement lors d'une écriture le processeur s'adresse directement au DD pour écrire la page ?
Gestion de la mémoire
*Quelle différence entre une zone de swap et une partition normale? la zone de swap est plus rapide oui mais pourquoi?
*la RAM gère ses cadres de page dans une table indiquant le nombre de cases de 1 case libre, le nombre de cases de 2 cases contigus libres, etc... afin d'éviter la fragmentation.
Le disque lui gère ca avec un vecteur de bit donc pourquoi ne fait il pas comme la RAM afin d'éviter la fragmentation? pour des raisons de performance?
IPC :
*Pourquoi faire un ftok() pour récupérer un identifiant externe d'IPC?ftok() utilise un numero + le nom d'un fichier pourquoi utiliser un nom de fichier pour générer une clé alors qu'un simple numéro peut faire l'affaire via un #define CLE 314 par exemple
*Concernant les régions de mémoire partagées :
shmget() definit les droits en elcture, écriture et éxécution de la région mais shmat() les définis aussi? on définit deux fois les droits de la région c'est pas logique.
Fonctions du noyau :
*Concernant les fonctions du noyau bread() et breada() : pourquoi utiliser bread() si breada() utilise la localité spatiale et donc est plus performant?
*Comment tester la validité d'un tampon vu que getblk() renvoie un tampon mais ne le teste pas alors que bread() teste le tampon?
Divers :
*J'ai lu pas mal de bouquins concernant le noyau linux et aimerait maintenant m'attaquer a la lecture du code source du noyau : existe t-il des sources entièrement commentées ou expliquées quelque part?d'une part pour une version système V et d'une autre part pour une version linux.
*Le noyau initialise le segment BSS à 0 dans ce cas pourquoi une variable non initialisée ne contient elle pas forcement la valeur 0?
*Dans un unix système V :
le noyau possède une table des processus avec des entrées de structure proc, la structure User constituant la seconde moitié du PCB du processus se situant quant à elle dans la zone U de l 'espace d'adressage du processus.pourquoi la structure User contient un pointeur vers la structure Proc? Cela ne devrait-il pas être l'inverse ?
*Comment le noyau identifie t-il root?il a un numéro spécial d'uid dont la valeur est testée lors de chaque appel système?
Voilou désolé pour le pavé un peu long je me doute de toute façon que je n'aurais pas énormément de réponses.
Merci
Partager