Bonsoir,

Vous vous demandez peut-être pourquoi plus un seul article n'a fleuris sur ce blog le long de ce dernier moi? Et bien, c'est tout simplement que j'ai commencer la rédaction d'un long - très long.... trop long! - document relatif au fonctionnement de la couche VFS de linux. Actuellement, je suis bien loin d'avoir rédiger la moitier de ce document, cherchant a illustrer mes dires de schéma et de code, à vérifier l'exactitude des informations que j'ai pus recueillir, la simple introduction que constituent les chapitres 1 et 2 m'ont prit énormément de temps. J'espère que toute fois ils vous paraitrons aussi claire qu'ils le sont pour moi, et que les multiples illustrations vous seront utile pour mieux visualiser les mécanismes mis en jeux.

Mais qu'est ce que VFS?

Peut-être que certains d'entre vous ont manquer mon engouement récent à l'écriture d'un file-système et les articles relatifs, aussi je me dois au moins d'expliquer succinctement ce dont il est ici question.

VFS, pour Virtual File System(Système de fichier Virtuel) est une couche d'abstraction fournis par le kernel linux affin de développer aisément des drivers qui ont a manipuler des fichier. C'est en fait très dépendant de l'architecture "tout fichier" de linux. Via vfs, il est en effet possible avec un simple éditeur de texte de modifier des données stoker sur un disque, mais aussi de modifier la configuration du processeur (il est ici question du fameux file-système /proc, qui ne correspond a aucun fichier physique, et que l'on qualifie donc de virtuel).

Ce document présente donc les bases de VFS nécessaire au développement d'un driver de filesystème, qu'il soit virtuel ou bien associer a un driver de block.

Les chapitres 1 et 2

En fait, les seuls chapitre présent sont une introduction à ce qu'est VFS et quelques détailles sur des mécanismes qui ne sont pas directement lier a son utilisation. Ainsi, le cœur du problème (manipulation des ad-spaces, structures de pointeurs de fonctions, impémentation de lookup et readdir, etc...) n'y figure pas. Ne soyez donc pas trop exigent de ces premiers chapitre et soyez sur que le contenue deviendras plus technique et ciblé dans les chapitres suivant.

Sur ce,

Je vous laisse le lien vers ces premiers chapitres : vfs_01.pdf

 

Utiliser goto, ou ne pas l'utiliser?

Voila une question qui déchaine les programmeurs de tout âge et de toutes philosophies.

Code plus crade, code plus propre. Code plus optimisé, code moins performant... Perte/Gain sémantique... Ce sont à la fois les arguments et contre arguments des deux camps.

Peut-être êtes vous surement de l'avis de nombre d'étudiants et de professeurs qui considèrent goto comme un reste d'une instruction passé, n'aillant plus la moindre utilité dans un langage comme le C, qui se veut un peu plus éloigné de la machine que l'ASM. Ou êtes vous alors de ces gens perplexes qui ne font que constater que le code du kernel linux en est truffé, et que ce ne doit pas être sans raisons?

Et bien, à moins que vous ne soyez un fervent partisan du goto, je vous conseille de lire cette article :  Le code et ses raisons: Goto en C

Voila de quoi méditer sur ce petit mot qui a fait couler tant d'encre.

 

Bonjour,

Aujourd'hui, un petit article sans grande prétention pour évoquer une petite astuce que je dois à mon prof d'algo.

"Trouvez un algo de calcul de \( a^n\mid n\in\mathbb{N}, a\in\mathbb{R}\) avec un complexité inférieur à n"

En réalité, ce n'est pas si compliqué. b peut se décomposer aisément en puissances de deux via un masque binaire que l'on fait courir de droite à gauche, jusqu'à ce que la valeur de ce masque dépasse n. A chaque décalage du masque, on met au carré une même variable initialisée avec \(a\) et si \(masque \& b \not= 0\) on multiplie le résultat actuel par cette dernière.

Concrètement :

#define MATH_IF(r, a, b)        ((1 - (r)) * (b) + (r) * (a))
 
//Décompose b en puissances de deux
// ex: a^7 = a^(1+2+4) = a^(1*2^0 + 1*2^1 + 1*2^2)
//Decimal<->Binaire 7dec = 111b
//On fait courir un masque de droite a gauche, et si le bit est actif,
// on ajouter la puissance de deux(donc un multiplie par a^mask)
int     npow(int a, int b)
{
  int   r;
  int   v;
  int   pw;
  int   mask;
 
  //n^0 = 1
  if (b < 0)
    return 1;
 
  //pw = a^(2*k) and start at a^1 (k = 0)
  pw = a;
  //We will store result in v
  v = 1;
  //Binary mask, moving from right to left
  mask = 1;
  while (mask <= b)
    {
      //Are there a bit set?
      r = (mask & b) && 1;
 
      //if r, v = v * pw
      v = MATH_IF(r, v * pw, v);
 
      //Move mask to left
      mask <<= 1;
      //pw = pw^2 (k++)
      pw = pw * pw;
    }
  return v;
}

Voila, c'est le genre de petites curiosités algorithmique amusantes.

 

Hello,

Ce message s'adresse a tous ceux souhaitant modifier le mapping de leur clavier. Grace a ce petit utilitaire de microsoft ; "Microsoft Keyboard Layout Creator" vous pourrez adapter votre clavier a votre gout.

Un exemple, Qwerty avec accent (ctrl+'+<lettre> ou encore alt gr+e=euro) est disponible ici : ENA

http://www.microsoft.com/downloads/details.aspx?FamilyID=8be579aa-780d-4253-9e0a-e17e51db2223&DisplayLang=en
 

Actuellement, je migre le serveur de etch a lenny (Oui il étais temps).

Il y  a donc certains dysfonctionnements suite a la mise a jours de nombreux pacquages (trac par exemple).

Tous devrais se stabiliser d'ici quelques jours.

© 2012 Zenol's Blog Suffusion theme by Sayontan Sinha