DEDICACE
iii
A nos parents.
iv
REMERCIEMENTS
Au moment où nous terminons la rédaction de ce
mémoire, avant de laisser choir notre plume, nous voudrions nous
acquitter d'un devoir de probité intellectuelle, en remerciant ceux qui
par leur franche et précieuse contribution nous ont apporté du
soutien tout au long de ce travail.
Nos remerciements vont donc au Dr NNEME NNEME
Léandre, Chef de Département du Génie
Informatique de l'ENSET de Douala qui a toujours été disponible
pour la supervision de ce travail.
Nous remercions également M. MAMVOULA NGUIAMBA
Albert Franklin pour les sacrifices consentis pendant le suivi et la
mise en oeuvre de ce travail.
Nous tenons aussi à remercier M. ONDAPHE Arthur
pour le coup de pouce qu'il a eu à nous donner pour la
modélisation en UML.
Nous remercions M. Ndjehoya Jean Baptiste
pour l'aide qu'il nous a fourni pour la rédaction de
l'Abstract.
Merci aux membres du Jury qui ont
accepté de participer à ce Jury, nous en sommes très
honorés.
Merci à nos camarades de l'ENSET pour leur
présence dans les moments difficiles. Nous ne saurions oublier les
membres de nos familles pour leur soutien sans limite. A tous ceux qui, de
près ou de loin ont contribué à la réussite de ce
travail
v
AVANT PROPOS
L'Ecole Normale Supérieure d'Enseignement Technique
(ENSET) créée au Cameroun par arrêté
présidentiel N° 260 / CAB / PR du 10 aout 1979 est un
établissement d'enseignement supérieur situé à
Douala. Elle a pour missions :
· La formation des enseignants destinés aux
lycées d'enseignement technique du Cameroun ;
· Le recyclage et le perfectionnement du personnel
enseignant dans le cadre de la formation continue ;
· La recherche appliquée pédagogique.
Cependant, en tant qu'école technologique et au regard
de sa vocation régionale en matière des nouvelles technologies,
l'ENSET adopte le système LMD (Licence-Master-Doctorat) en 2007. Ce
système s'articule autour du savoir, du savoir-faire, du faire-savoir et
du savoir-être, ainsi à l'ENSET un accent particulier a
été mis une fois de plus sur la professionnalisation et la
qualité des enseignements afin de donner l'opportunité à
l'enseignant d'être non seulement un spécialiste de l'enseignement
mais aussi de répondre de manière efficace aux exigences des
nouvelles technologies dans le milieu industriel.
A l'issue de la formation, chaque élève
professeur doit présenter conformément a l'arrêté
ministériel N° 03 / BU / du 26 novembre 1985 :
· Un projet de mémoire pour la fin de ses
études du 1er cycle, étude sanctionné par
l'obtention du Diplôme de Professeur d'Enseignement Technique premier
grade (DIPET I) ;
· Un mémoire pour la fin de ses études du
2nd cycle sanctionnée par l'obtention du Diplôme de
Professeur d'Enseignement Technique deuxième grade (DIPET II).
C'est dans cette optique que nous nous sommes investis dans
la « Conception et la réalisation d'une application de gestion du
presse-papier de Windows 7 » et présentons ce document dont le
titre est ainsi énoncé, réalisé en vue de
l'obtention du DIPET II.
RESUME
L'informatique a connu un essor sans précédent
ces dernières décennies au point où il devient quasi
impossible à l'homme de se passer de l'utilisation de l'outil
informatique. Les logiciels d'application sont de plus en plus devenus
indispensables pour l'homme. La duplication des données ne s'est pas
mise à l'écart de ses besoins. Elle se fait d'une source vers une
cible à l'aide des opérations classiques de copie à savoir
le « copier-coller » ou le « couper-coller ». Mais il vient
que ces opérations peuvent dans certains cas être
confrontées à des insuffisances de certaines applications du
système d'exploitation Windows. En effet lorsqu'une copie est
effectuée, elle est stockée en mémoire grâce
à une application que Microsoft a intégré à partir
de sa version 3.1 de son système d'exploitation Windows à savoir
« Clipboard » plus connu sur le nom de « presse-papier
» en français. Le presse-papier de Windows ne peut
garder en mémoire qu'une seule copie. La copie multiple n'est pas
possible car la copie chargée en mémoire est
écrasée une fois qu'une nouvelle copie ait été
réalisée. L'incapacité d'effectuer des
copies multiples crée ainsi un problème de gestion de
temps. C'est dans l'optique de résoudre ce problème
qu'il nous vint à l'esprit de mettre sur pied une application «open
source» de gestion du presse-papier de Windows. La faible
documentation sur le concept « presse-papier » a orienté notre
étude vers des éléments qui lui sont intimement
liés à savoir le noyau de Windows qui est
responsable de toute application fonctionnant dans ce système
d'exploitation. Il a donc été question :
· D'étudier l'architecture du noyau de Windows
71. Ceci a fait l'objet de notre revue de littérature.
· De comprendre le fonctionnement du presse-papier natif
de Windows et d'étudier quelques applications de gestion du
presse-papier. Ce qui nous a permis d'élaborer un cahier de charges qui
fut un guide pour l'atteinte de nos objectifs.
· D'analyser (notation UML) et d'implémenter
(langage de programmation C#) l'application proprement dite grâce
à l'étude effectuée autour des logiciels de gestion du
presse-papier.
· De réaliser les tests sur l'application.
Ceux-ci ont confirmé l'atteinte à 95% du cahier
de charges.
Ce travail nous a permis de faire des perspectives pour la suite
des recherches autour du
presse-papier.
vi
1 Qui repose sur la version 6.2 de Windows NT
vii
ABSTRACT
Computer science has expanded these last decades in an
unprecedented way. As a result, it has become almost impossible for man to do
without the computer technology. Application software is increasingly
indispensable in everyday activities. Data duplication has also significantly
grown. In fact, data duplication is carried out from a source to a specific
target through copying operations, namely «copy-paste» or
«cut-paste» activities.
However, these operations might be limited by some Windows
applications because when a copy is made, it is saved in the memory thanks to
the «Clipboard» application incorporated by Windows from its 3.1
version on. The major difficulty is that Windows clipboard can save only one
copy at a time in its memory. Therefore multiple copying is not possible
because the copy saved in the memory is immediately replaced with the most
recent one. This gives rise to the double problem of time management and task
optimisation. In our quest for a solution, we have created the «Open
Source» Windows clipboard management application.
The limited documentation on the «clipboard»
concept has oriented our study towards an element which is closely linked to
the clipboard, namely the Windows core which manages all applications working
within the Windows system. So we had to:
· Study the framework of Windows 72 core which
is dealt with in our literature review
· Understand how Windows original clipboard works. This has
enabled us to draft a roadmap which guided our study throughout
· Analyse the application (with UML) and implement it (with
C#) thanks to the study of some clipboard software
· Test the application. These tests have enabled us to
conclude that the goals defined in our roadmap where met at 95%
This study has opened up new prospects for further research on
the clipboard.
2 Which is based on the 6.2 NT version Windows
viii
LISTE DES TABLEAUX
Tableau 2.1: Formats standard du presse-papier 18
Tableau 2.2 : formats de synthèse du presse-papier
[12] 22
Tableau 2.3 : Fonctions de la classe Clipboard. [14] 24
Tableau 2.4 : Liste de quelques applications de gestion du
presse-papier [15] 29
Tableau 2.5 : Tableau comparatif de quelques logiciels de
gestion du presse-papier 30
Tableau 3.1 : Relations entre les acteurs et leurs
rôles. 37
Tableau 3.1 : Les classes de l'architecture .NET 55
Tableau 4.1 : Détail des besoins pour la
réalisation du projet 63
Tableau 4.2 : Paramètres associés au type de
projet [23] 65
Tableau 4.3 : Coût du développement 66
ix
LISTE DES FIGURES
Figure 1.1 : Representation de l'architecture de windows nt
[3] 8
Figure 1.2 : Architecture des elements du nt executive [3]
10
Figure 2.1 : Transferer les donnees au fornat text dans le
presse-papier 23
Figure 2.2 : Recuperer les donnees au format text du
presse-papier 23
Figure 2.3 : Reconstitution de la structure du presse-papier
par reverse engineering [8] 24
Figure 3.1 : Historique de la constitution d'uml [16] 35
Figure 3.2 : Trois axes de modelisation uml [17] 36
Figure 3.3 : Diagramme de cas d'utilisation de la gestion
d'une collection 38
Figure 3.4 : Diagramme de cas d'utilisation de la gestion
d'un groupe 39
Figure 3.5 : Diagramme de cas d'utilisation de la gestion
d'une copie 39
Figure 3.6 : Diagramme de cas d'utilisation globale de
l'application 40
Figure 3.11 : Representation graphique d'une classe 45
Figure 3.12 : Diagramme de classe de l'application
pressepapier1.0 46
Figure 3.13 : Package de l'application pressepapier1.0 47
Figure 3.14 : Package des classes du systeme d'exploitation
48
Figure 3.14 : Diagramme de package du pressepapier1.0 49
Figure 3.15 : Schema fonctionnel de l'application 50
Figure 3.16 : Fenêtre principale 51
Figure 3.17 : Fenêtre de configuration 52
Figure 3.18 : Fenêtre d'ajout d'une nouvelle collection
52
Figure 3.19 : Fenêtre d'ajout d'un nouveau groupe (de
copies) 52
Figure 3.20 : Inscription d'une application comme visionneuse
du presse-papier 57
Figure 3.21 : Sauvegarde du contenu du presse-papier «
clipboard » 58
Figure 4.1 : Fenêtre principale 60
Figure 4.2 : Presentation du menu « fichier » 61
Figure 4.3 : Fenêtre de creation d'une nouvelle
collection 62
Figure 4.4 : Fenêtre de creation d'un nouveau groupe
62
x
LISTE DES SIGLES ET DES ABREVIATIONS
ACL: Access Control List
ANSI: American National Standard
Institute
API: Application Programming Interface
ASP: Active Server Page
CAO: Conception Assistée par
Ordinateur
CF: Clipboard Format
CLR: Common Language Run-time
COCOMO: Constructive Cost Model
COM: Component Object Model
CP/M: Control Program for Microcomputers
DIB: Device Independent Bitmap
DIF: Data Interchange Format
DLL: Dynamics Library Link
EMF: Enhanced Metafile Format
GDI: Graphical Device Interface
HAL: Hardware Abstraction Layer
HURD: Hurd of Interfaces Representing
Depth
I/O: Input/output
IDE: Integrated Development Environment
IHM: Interface Homme Machine
JIT: Just In Time
LPC: Local Procedure Call
NFS : Network File System
NGWS: Next Generation Web Services
NT: New Technology
NTFS: New Technology File System
OCL: Object Contraint Language
OEM: Original Equipment Manufacturer
OMG: Object Management Group
OMT: Object Medeling Technique
OOPSLA: Object Oriented Programming Systems,
Languages and Applications
OOSE: Object Oriented Software
Engineering
OS: Operating System
xi
PPP : Point to Point Protocol
RIFF: Resource Interchange File Format
RTF: Rich Text Format
RTOS: Real Time Operating System
SAT: Secure Access Tocken
SGR: Standard Group Report
SMP: Symmetric Multi-Processing
SRM: Security Ressource Manager
SUN: Standard University Network
TCP/IP: Transfer Control Protocol / Internet
Protocol
TIC: Technologie de l'Information et de la
Communication
TIFF: Tagged Image File Format
UML: Unified Modeling Language
WOW: Windows On Windows
XML: eXtensible Markup Language
XP: eXtreme Programming
xii
TABLE DES MATIERES
DEDICACE iii
REMERCIEMENTS iv
AVANT PROPOS v
RESUME vi
ABSTRACT vii
LISTE DES TABLEAUX viii
LISTE DES FIGURES ix
LISTE DES SIGLES ET DES ABREVIATIONS x
TABLE DES MATIERES xii
INTRODUCTION GENERALE 1
CHAPITRE 1 : REVUE DE LA LITTERATURE 3
1.1. Noyau d'un système d'exploitation
4
1.1.1. Généralités 4
1.1.2. Systèmes à noyaux restreints et Fonctions
généralement remplies par un noyau 6
1.1.2.1. Systèmes à noyaux restreints 6
1.1.2.2. Fonctions généralement remplies par un
noyau 6
1.2. Architecture du noyau de Windows 7. 7
1.2.1. Architecture générale de Windows NT 7
1.2.1.1. Le HAL (Hardware Abstraction Layer) 9
1.2.1.2. Le noyau 9
1.2.1.3. Les services du NT Executive 10
1.2.1.4. Les sous systèmes d'environnement 13
1.3. Les noyaux de Mac OS et de Linux 14
1.3.1. Le noyau de Mac OS 14
1.3.2. Le noyau de Linux 15
CHAPITRE 2 : LE PRESSE-PAPIER 17
2.1. Présentation du presse-papier 17
2.1.1. Les formats de données 18
2.1.1.1. Les formats de données standard 18
2.1.1.2. Formats inscrits du presse-papier 20
2.1.1.3. Formats privés du presse-papier 21
2.1.1.4. Formats multiples du presse-papier 21
2.1.1.5. Formats de synthèse du presse-papier 21
2.1.2. Fonctionnement du presse-papier 22
2.1.2.1. Description du processus d'extraction des
données 23
2.1.2.2. Les fonctions du presse-papier 24
2.2. Limites du presse-papier de Windows 27
2.2.1. Saisie d'un mémoire avec Latex 27
xiii
2.2.2. Manipulation des images 28
2.3. Développement logiciel autour du
presse-papier 28
2.4. Cahier des charges 31
2.4.1. Description de l'existant 31
2.4.2. Expression des besoins 31
2.4.2.1. Besoins fonctionnels 31
2.4.2.2. Besoins non fonctionnels 31
2.4.3. Solution adopté 32
2.4.3.1. Choix de la méthode d'analyse et de conception
32
2.4.3.2. Choix du langage de programmation 32
CHAPITRE 3 : DEVELOPPEMENT LOGICIEL 34
3.1. Analyse et conception 34
3.1.1. Présentation de UML 36
3.1.2. Les vues et diagrammes d'UML 36
3.1.2.1. La vue fonctionnelle 37
3.1.2.2. La vue dynamique 40
3.1.2.3. La vue structurelle ou statique 43
3.2. Schéma fonctionnel de l'application
50
3.3. Les interfaces du logiciel 51
3.4. Implémentation 53
3.4.1. Environnement de développement et langage de
programmation 53
3.4.1.1. Présentation de Visual Studio 2010 53
3.4.1.2. L'architecture .Net 53
3.4.1.3. Présentation du langage de programmation C#
56
3.4.2. Présentation des différents modules 56
3.4.2.1. La gestion de la copie 56
3.4.2.2. La gestion des collections et des groupes. 57
3.4.2.3. La sauvegarde et la restauration des données
59
CHAPITRE 4 : TESTS ET GUIDE D'UTILISATION 60
4.1. Présentation de l'application 60
4.1.1. Fenêtre principale 60
4.1.2. Fonctionnalités de l'application 61
4.2. Configuration minimale 62
4.3. Coût estimatif du projet 62
4.3.1. Estimation du coût des équipements 63
4.3.2. Estimation du coût de développement 63
4.3.2.1. Contexte de développement d'un logiciel 63
4.4.2.2. Estimation de la charge 63
CONCLUSION GENERALE 67
REFERENCES BIBLIOGRAPHIQUES 68
1
INTRODUCTION GENERALE
Les informations que manipulent les utilisateurs de l'outil
informatique sont généralement mutées d'une source vers
une autre. Parfois il arrive que certaines de ces informations soit totalement
déplacées3. De là, survient donc une
préoccupation majeure, celle de savoir ce qui se passe lorsqu'on
décide par exemple de couper un morceau de texte lors d'une saisie pour
la coller à la place d'une autre et par mégarde au moment du
collage de ce dernier au lieu de faire un Ctrl+V après sélection
de la portion à remplacer on en fait plutôt un Ctrl+C. Il vient
que le morceau de texte qui a été coupé a
été écrasé par celui copié par
mégarde. Il est donc important pour nous de se poser la question de
savoir : où se trouve ce texte et comment faire pour le
récupérer ? Lorsqu'on effectue une opération
de copie4, l'élément copié est chargé
dans une application de Windows appelée Clipboard soit «
presse-papier » en français. En effet le presse-papier gère
les fonctionnalités de « copier/coller » et «
couper/coller » des systèmes d'exploitation. Intégré
depuis le début des interfaces graphiques, il est devenu une seconde
nature pour les utilisateurs. En revanche, il n'a jamais vraiment
évolué depuis son introduction dans Windows.
Pourquoi est-il donc important de remplacer le presse-papier
de Windows ? Il ressort qu'au sein du système d'exploitation de
Microsoft, cette fonction est en effet limitée : vous pouvez effectuer
un « copier » ou un « couper » (ou encore une impression
d'écran) pour envoyer un élément (texte, image ou autre)
dans le presse-papier, mais Windows ne peut stocker en mémoire
qu'un élément à la fois. Très gênant
au vue de l'exemple présenté ci-dessus. Notons cependant qu'une
application comme Microsoft Office, depuis sa version XP, gère au
plus 24 éléments dans son presse-papier
amélioré.
De même, le presse-papier de Windows ne
différencie pas la nature des éléments qui lui sont
présentés : un texte a même valeur qu'une image par
exemple. Enfin, l'intégration du presse-papier dans Windows se limite au
simple « Copier », « Couper » et « Coller » du
menu contextuel. Aucune fonctionnalité particulière n'est
prévue. Par exemple, par défaut, il est impossible de copier d'un
clic le chemin de l'emplacement d'un programme dans le disque dur.
[1]
Ce sont toutes ces limites, et bien d'autres encore, qui ont
suscitées à la suite d'une étude préalable du
presse-papier le souci de mettre sur pied une application de gestion du
presse-
3 Dans le sens d'un « couper-coller »
4 «copier-coller» ou
«couper-coller»
2
papier de Windows. Le rapport qualité
prix de cette application est donc meilleur que d'autres applications
payantes.
A travers notre application, il sera donc possible à
tout utilisateur de visualiser et d'un seul clic récupérer une
copie perdue par le presse-papier de Windows, de stocker dans un groupe un
ensemble de copies constamment utilisé par exemple :
· Des structures et commandes utilisées lors de la
rédaction d'un mémoire ou d'une thèse de doctorat avec
l'éditeur Latex ;
· Des fragments de code utilisés dans le cadre d'un
développement logiciel ;
· des images utilisées dans le cadre des conceptions
graphiques.
Tous pouvant être facilement
récupérés en un seul clic.
Nous offrons donc ainsi à tout utilisateur de l'outil
informatique un presse-papier qui fonctionne même après un
redémarrage de Windows et dont le nombre de copie
maximale passe de 24 à un nombre théoriquement
infini.
Ce travail se divise en deux étapes : une
théorique et l'autre pratique. Dans l'étape théorique,
nous avons d'abord fais une étude sur le noyau des systèmes
d'exploitations en général et de celui de Windows en particulier.
Ensuite nous avons fait une étude du presse-papier de Windows. Enfin une
analyse des besoins nous a permis de rédiger le cahier de charges.
L'étape pratique a consisté à analyser et à
concevoir via UML (Unified Modeling Language) l'application de gestion du
presse-papier. A la suite de cette analyse, nous avons proposé une
implémentation en C# de l'application et réalisé des tests
sur celle-ci.
Ce mémoire est ordonné comme suit :
l'architecture du noyau de Windows NT 6.2 et sa relation avec le presse-papier
sont présentées dans le chapitre 1. Le chapitre 2 présente
le presse-papier dans sa globalité et son fonctionnement particulier au
sein du système d'exploitation Windows. Les différentes phases
d'analyse et de conception de l'application ainsi que son implémentation
sont présentés dans le chapitre 3. Le chapitre 4 détaille
les tests sur l'application, la configuration minimale d'utilisation et le
coût estimatif du projet.
3
REVUE DE LA LITTERATURE
|
|
CHAPITRE
1
|
|
|
|
En informatique, le
presse-papier5 est une fonctionnalité qui
permet de stocker des données que l'on souhaite dupliquer ou
déplacer. Il utilise une zone de la mémoire volatile de
l'ordinateur, pouvant contenir des informations de nature diverse (texte,
image, fichier, etc.). Ces informations sont stockées en zone
mémoire lorsqu'elles ont fait l'objet d'un appel à la fonction
copier ou couper du système d'exploitation ou d'un
logiciel. Elles sont réutilisables par la suite par l'appel de la
fonction « coller », qui replace l'objet. Ces
opérations sont possibles dans plusieurs systèmes d'exploitation
et sont utilisées chaque jour par des utilisateurs ; ceci demande une
grande manoeuvre à l'intérieur du système d'exploitation
qui doit être capable de stocker en mémoire les informations
à manipuler. Mais pouvons-nous parler de mémoire sans toutefois
parler de l'élément essentiel de tout système
d'exploitation qui de par ses fonctions assurent aussi celle de la gestion de
la mémoire ? Il s'agit ici du noyau du système d'exploitation
communément appelé Kernel en anglais.
On distingue plusieurs systèmes d'exploitation possédant un
presse-papier parmi lesquels WINDOWS 3.X, WINDOWS NT, WINDOWS 2000, WINDOWS ME,
WINDOWS XP, WINDOWS 7, WINDOWS 8, LINUX, UNIX, MAC OS, CHROME OS, ANDROID mais
un seul fera l'objet de notre étude à savoir Windows 7. Le
système d'exploitation stocke le contenu du presse-papier dans la
mémoire volatile de l'ordinateur. La gestion de cette mémoire est
une tâche réservée au noyau du système
d'exploitation; son étude est plus qu'indispensable pour la
compréhension de la relation qui existe entre le presse-papier et la
mémoire. L'objet de ce chapitre est de faire une étude globale de
l'architecture du noyau d'un système d'exploitation en
générale et en particulier de celui de Windows 7 dans un premier
temps et dans un second temps établir l'importance du choix de ce
dernier en le comparant aux noyaux de deux autres systèmes
d'exploitation à savoir Mac OS et Linux dans leurs versions
équivalentes à celle de Windows 7.
5 ou « presse-papiers »
selon l'ancienne orthographe
4
1.1. Noyau d'un système d'exploitation
1.1.1. Généralités
Le noyau d'un système d'exploitation est
lui-même un logiciel, mais ne peut cependant utiliser tous les
mécanismes d'abstraction qu'il fournit aux autres logiciels. Son
rôle central impose par ailleurs des performances élevées.
Cela fait du noyau la partie la plus critique d'un système
d'exploitation et rend sa conception et sa programmation
particulièrement délicates. Plusieurs techniques sont mises en
oeuvre pour simplifier la programmation des noyaux tout en garantissant de
bonnes performances.
En informatique, le noyau d'un système d'exploitation est
le logiciel qui assure :
· la communication entre les logiciels et le
matériel ;
· la gestion des divers logiciels
(tâches) d'une machine (lancement des programmes,
ordonnancement...) ;
· la gestion du matériel (mémoire,
processeur, périphérique, stockage...).
La majorité des systèmes d'exploitation est
construite autour du noyau. L'existence d'un noyau, c'est-à-dire d'un
programme unique responsable de la communication entre le matériel et le
logiciel, résulte de compromis complexes portant sur des questions de
performance, de sécurité et
d'architecture des processeurs.
L'existence d'un noyau présuppose selon Andrew
Tanenbaum6 une partition virtuelle de la
mémoire vive physique en deux régions
disjointes, l'une étant réservée au noyau (l'espace
noyau) et l'autre aux applications (l'espace utilisateur). Cette
division, fondamentale, de l'espace mémoire en un espace noyau et un
espace utilisateur contribue beaucoup à donner la forme et le contenu
des actuels systèmes généralistes (GNU/Linux,
Windows, Mac OS X, etc.), le noyau ayant de grands pouvoirs sur
l'utilisation des ressources matérielles, en particulier de la
mémoire. Elle structure également le travail des
développeurs : le développement de code dans l'espace noyau est
a priori plus délicat que dans l'espace utilisateur car la
mémoire n'y est pas protégée. Ceci implique que des
erreurs de programmation, altérant éventuellement les
instructions du noyau lui-même, sont potentiellement beaucoup plus
difficiles à détecter que dans l'espace utilisateur où de
telles altérations sont rendues impossibles par le mécanisme de
protection.
6 Andrew Tanenbaum, Operating Systems: Design and
Implementation, Prentice Hall, 3rd ed. (ISBN 0-13-142938-8), chapitre 1,3
- 1,4 - 4.
5
Le noyau offre ses fonctions (l'accès aux ressources
qu'il gère) au travers des appels système. Il transmet ou
interprète les informations du matériel via des interruptions.
C'est ce que l'on appelle les entrées et sorties.
Diverses abstractions de la notion d'application
sont fournies par le noyau aux développeurs. La plus courante est
celle de processus (ou tâche). Le noyau du système d'exploitation
n'est en lui-même pas une tâche, mais un ensemble de fonctions
pouvant être appelées par les différents processus pour
effectuer des opérations requérant un certain niveau de
privilèges. Le noyau prend alors en général le relais du
processus pour rendre le service demandé et lui rend le contrôle
lorsque les actions correspondantes ont été
réalisées.
Il peut arriver cependant que le processus puisse poursuivre
une partie de son exécution sans attendre que le service ait
été complètement réalisé. Des
mécanismes de synchronisation sont alors nécessaires entre le
noyau et le processus pour permettre à celui-ci, une fois qu'il est
arrivé au point où il a besoin que le service ait
été rendu, d'attendre que le noyau lui notifie l'exécution
effective du service en question.
Un processeur est capable d'exécuter un seul
processus, un multiprocesseur est capable de gérer autant de processus
qu'il a de processeurs. Pour pallier cet inconvénient majeur, les noyaux
multitâches permettent l'exécution de plusieurs processus sur un
processeur, en partageant le temps du processeur entre les processus.
Lorsque plusieurs tâches doivent être
exécutées de manière parallèle, un noyau
multitâche s'appuie sur les notions de :
· commutation de contexte :
(context switch en anglais) en informatique consiste à
sauvegarder l'état d'un processus pour restaurer à la place celui
d'un autre dans le cadre de l'ordonnancement d'un système d'exploitation
multitâche.
· ordonnancement : c'est le fait
d'ordonner des tâches à exécuter selon certaines
contraintes. Ces tâches peuvent être l'exécution
d'opération sur les entrées-sorties ou le traitement de
processus. Les contraintes peuvent être temporelles ou dimensionnelles.
;
· temps partagé.
Les entrées et les sorties font l'objet d'un
traitement spécifique par l'ordonnanceur. De l'anglais
scheduler, il désigne dans un système d'exploitation le
composant du noyau chargé de choisir l'ordre d'exécution des
processus d'un ordinateur. Il s'avère donc important de mettre un accent
sur les fonctions remplies par un noyau.
6
1.1.2. Systèmes à noyaux restreints et
Fonctions généralement remplies par un noyau
1.1.2.1. Systèmes à noyaux
restreints
Il existe de nombreux noyaux aux fonctionnalités
restreintes tels que les micro-noyaux, les systèmes sans noyau (MS-DOS,
CP/M) ou les exo-noyaux.
Ces systèmes sont généralement
adaptés à des applications très ciblées mais posent
des problèmes variés (de sécurité avec MS-DOS, de
performances avec HURD ou QNX). La plupart d'entre eux sont actuellement
inadaptés pour une utilisation généraliste, dans des
serveurs ou ordinateurs personnels.
1.1.2.2. Fonctions généralement remplies
par un noyau
Les noyaux ont comme fonctions de base d'assurer le
chargement et l'exécution des processus, de gérer les
entrées/sorties et de proposer une interface entre l'espace noyau et les
programmes de l'espace utilisateur.
À de rares exceptions, les noyaux ne sont pas
limités à leurs fonctionnalités de base. On trouve
généralement dans les noyaux les fonctions des micronoyaux : un
gestionnaire de mémoire et un ordonnanceur, ainsi que des fonctions de
communication interprocessus.
En dehors de fonctions précédemment
listées, de nombreux noyaux fournissent également des fonctions
moins fondamentales telles que :
· la gestion des systèmes de fichiers ;
· plusieurs ordonnanceurs spécialisés
(batch7, temps réel, entrées/sorties, etc.) ;
· des notions de processus étendues telles que les
processus légers ;
· des supports réseaux (TCP/IP, PPP, pare-feu, etc.)
;
· des services réseau (NFS, etc.).
Enfin, la plupart des noyaux fournissent également des
modèles de pilotes et des pilotes pour le matériel.
En dehors des fonctionnalités de base, l'ensemble des
fonctions des points suivants (y compris les pilotes matériels, les
fonctions réseaux et systèmes de fichiers ou les services) n'est
pas nécessairement fourni par un noyau de système d'exploitation.
Ces fonctions du système d'exploitation peuvent être
implantées tant dans l'espace utilisateur que dans le noyau
lui-même. Leur implantation dans le noyau est faite dans l'unique but
d'augmenter les
7 Traitement par lot.
7
performances. En effet, suivant la conception du noyau, la
même fonction appelée depuis l'espace utilisateur ou l'espace
noyau a un coût temporel notoirement différent. Si cet appel de
fonction est fréquent, il peut s'avérer utile d'intégrer
ces fonctions au noyau pour augmenter les performances.
Ces techniques sont utilisées pour pallier des
défauts des noyaux tels que les latences élevées. Autant
que possible, il est préférable d'écrire un logiciel hors
du noyau, dans l'espace utilisateur. En effet, l'écriture en espace
noyau suppose l'absence de mécanismes tels que la protection de la
mémoire. Il est donc plus complexe d'écrire un logiciel
fonctionnant dans l'espace noyau que dans l'espace utilisateur, les bugs et
failles de sécurité sont bien plus dangereux.
[2]
1.2. Architecture du noyau de Windows 7.
Windows 7 est un système d'exploitation
créé par Microsoft pour remédier les problèmes
rencontrés par les utilisateurs de Windows Vista. Construit sur une
version amélioré du noyau de Windows Vista (NT 6.0), le noyau de
Windows 7 (NT 6.1) à une architecture assez complexe qui malgré
tout permet une étroite collaboration entre les ressources
matérielles et logicielles dont a besoin un système
d'exploitation pour bien fonctionné. De la création du premier
système d'exploitation de Microsoft baptisé MS-DOS pour Microsoft
Disk Operating System (système d'exploitation du disque) jusqu'à
la version Windows 3.0 on ne parlait pas du presse-papier qui est un
élément très important qui fonctionne en étroite
collaboration avec le noyau de Windows à partir de la version Windows NT
3.1 jusqu'à la version du noyau de Windows NT 6.1 sous lequel fonctionne
Windows 7. Le but de cette partie est de présenter l'architecture du
noyau de Windows 7 en occurrence le NT 6.1 et de dégager le rapport qui
existe entre le presse-papier de Windows et son noyau (Kernel).
1.2.1. Architecture générale de Windows
NT
Pour mieux parler du noyau Windows NT 6.1 il est
nécessaire de faire une étude globale de l'architecture
générale de Windows NT. Ceci dans le but de mieux nous
éclairer sur la base de l'administration des noyaux des systèmes
d'exploitation de Windows car tous ces derniers sont conçu autour d'un
noyau de base dont les versions diffère selon les besoins du
système d'exploitation. Windows NT fonctionne dans deux modes
différents, le mode utilisateur et le mode
noyau: [3]
· Le mode utilisateur est le mode dans
lequel tournent les programmes qui sont soumis à la
sécurité du système d'exploitation, fournie justement par
les programmes qui
tournent en mode noyau. On y trouvera tous les programmes des
utilisateurs, mais aussi certains programmes du système d'exploitation
qui ont été placés ici pour ne pas trop charger de
programmes en mode noyau (peut-être aussi parce-que leurs programmes ne
sont pas stables et qu'il ne vaut mieux pas qu'ils puissent accéder
à toute la mémoire...).
· Le mode noyau est le mode dans lequel
tournent les fonctions vitales du système d'exploitation. C'est un mode
protégé où le code est très optimisé. Un
programme tournant dans ce mode n'est pas soumis aux divers contrôles de
sécurité, comme par exemple vérifier si la mémoire
à laquelle il accède lui est bien attribuée. Les
programmes ne doivent contenir aucune bogue car la sécurité est
réduite au minimum. Les programmes doivent à tout prix respecter
leur espace d'adressage. On retrouve dans ce mode tous les programmes
utilisés en permanence par le système d'exploitation. Il est
impossible de faire tourner ces propres programmes dans ce mode.
La stabilité de Windows NT est assurée
grâce à ces deux modes. Le mode noyau est le coeur du
système d'exploitation, la partie la plus petite possible, la plus
optimisée et sans aucune bogue. Tout ce qui tourne en mode utilisateur
est contrôlé par les programmes du mode noyau et ne peut donc pas
faire planter le système, en théorie bien sûr. La
Figure 1.1 montre la séparation entre les deux modes.
Cette séparation est matérialisée par une ligne
horizontale en pointillés :
8
Figure 1.1 : Représentation de l'architecture de
Windows NT [3]
9
Tout ce qui est représenté en vert
c'est-à-dire tout ce qui est en mode noyau sauf le matériel,
s'appelle le NT Executive. Il regroupe le noyau, la HAL et les
services systèmes. Les services systèmes sont tous les modules
tournant en mode noyau, autour du noyau (ne pas confondre noyau et
mode noyau) : l'I/O8 Manager, l'Object Manager, le
Security Ressource Manager, le Process Manager, le LPC, le Virtual Memory
Manager et le Graphic Manager. Sur la Figure 1.1, les services
systèmes sont représentés comme une surcouche, c'est en
fait la vision que tout programme tournant en mode utilisateur a du
système d'exploitation. Les programmes vont faire appel aux services
système via des API9 appelées "Native API". Ils ne
vont pas s'adresser directement à tel ou à tel service. Le
rôle de chacune de ces boites noires est détaillé
ci-dessous :
1.2.1.1. Le HAL (Hardware Abstraction Layer)
HAL pour Hardware Abstraction Layer, ou en français,
Couche d'Abstraction Matérielle. C'est grâce à cette couche
que Windows NT est portable sur plusieurs types de machines. Son rôle est
de masquer complètement la partie matérielle au système
d'exploitation lui-même. Tout matériel va être
représenté virtuellement au système d'exploitation. Le
système d'exploitation va utiliser le matériel via une interface
unique, sans se soucier du matériel. C'est à la couche
d'abstraction matérielle de traduire les demandes au système
physique. A un type de machine correspond une couche HAL spécifique.
Grâce à cette couche, Windows NT peut tourner sur plusieurs types
de microprocesseurs : Intel, MIPS, PowerPC, Alpha. C'est encore la couche HAL
qui gère les systèmes multiprocesseurs, en intégrant
l'interface SMP (Symmetric Multi Processing). La couche HAL est
différente suivant le nombre de processeurs dans le système.
La couche HAL représente chaque processeur comme un
processeur virtuel au noyau. Le noyau, allouera ses tâches sur ces
différents processeurs. Que ce soient des processeurs Alpha, Intel ou
autre, le noyau voit toujours des processeurs virtuels. La couche HAL n'est
accessible que par le NT Executive. Pour accéder au matériel, les
programmes utilisateurs sont donc obligés de passer par les Native
APIs.
1.2.1.2. Le noyau
Le noyau, aussi appelé micro-noyau ou Kernel pour les
anglicistes. Son principal rôle est de planifier les threads sur les
différents processeurs virtuels, en fonction de leur priorité. Il
va préempter les processus qui n'auront pas rendu d'eux-mêmes la
main après le quantum de
8 Input/Output équivalent anglais de E/S pour
Entrées/Sorties en français.
9 Application Programming Interface ou interface de
programmation d'application en français.
10
temps (slice) attribué. Il traite toutes les
interruptions système. Il traite les exceptions processeurs (divisions
par zéro, ou toute opération que le processeur s'interdit
lui-même de faire). Le noyau est aussi un programme et ce noyau tourne
sur chaque processeur. Il ne peut être préempté et ne peut
donc pas non plus être swappé10. Les parties critiques
du noyau sont écrites en assembleur et par conséquent tout ce que
le noyau ne fait pas est fait par les services du NT Executive.
1.2.1.3. Les services du NT Executive
Les services du NT Executive tournent aussi en mode noyau. Ce
sont donc des parties importantes, indispensables au système
d'exploitation. Leur rôle est de fournir les services de base aux
sous-systèmes d'environnement. La Figure 1.2
présente les différents services du NT Executive.
Figure 1.2 : Architecture des éléments
du NT Exécutive [3] Pour mieux comprendre cette figure,
énumérons un peu le rôle de chacun :
· l'Object Manager, ou Gestionnaire d'Objets
:
Sous Windows NT, tout est représenté sous forme
d'objet : un processus, un thread, un périphérique quelconque
sont des objets. Chaque objet contient une ACL : Access Control List, Liste de
Contrôle d'Accès, une liste définissant les droits que les
autres objets ont sur lui. Pour travailler avec un objet, on utilise un
handle11. Ce handle est une référence
représentant l'objet. Il contient notamment un pointeur sur l'objet
ainsi que les droits que l'on possède sur cet objet. C'est le
gestionnaire d'objets qui fournit tous les handle que les autres objets lui
demandent. Les objets sont créés, modifiés et
supprimés par le gestionnaire d'objets. Le gestionnaire d'objets
supprime les objets orphelins. Un objet ne doit exister que s'il est
utilisé. Le gestionnaire d'objet compte le nombre d'objets utilisant
chaque objet. Quand ce nombre
10 Swappé signifie que le
code d'exécution est transféré de la mémoire vive
vers le disque pour récupérer un peu de mémoire ; il sera
replacé en mémoire quand on en aura besoin.
11 Un handle est une valeur
numérique identifiant un objet informatique.
11
arrive à zéro, l'objet n'est plus
utilisé, donc supprimé. Le gestionnaire d'objet veille à
ce que chaque objet ne consomme pas trop de ressources.
s le Process Manager, ou Gestionnaire de
processus
Son rôle est de créer, modifier l'état et
supprimer les threads. Il renseigne sur l'état de chaque thread. Son
rôle n'est pas de cadencer les threads. Tout processus contient au moins
un thread initial, dans laquelle tourne effectivement le programme.
s Le Virtual Memory Manager, ou gestionnaire de
mémoire virtuelle
Son rôle est d'allouer 4 Go d'espace mémoire
à tous les processus en exécution, indépendamment de
l'espace mémoire effectivement disponible sur le système. Sur ces
4 Go, 2Go seront réservés au système, les deux restants
seront à la disposition du programmeur. Sur les systèmes
contenant suffisamment de mémoire, il sera possible d'allouer plus
d'espace pour la partie applicative (donc moins pour le système).
Il s'assure que chaque application reste dans son espace
d'adressage attribué. C'est le gestionnaire de mémoire virtuelle
qui gère le swap. Les programmes demandent des pages mémoire au
gestionnaire. Le gestionnaire leurs fournit, qu'elles soient en mémoire
vive ou swappées.
s Le LPC: Local Procedure Call, ou Appel de
Procédure Locale
Dans un système d'exploitation, tournent en permanence
un certain nombre de threads. Tous les services systèmes par exemple
sont des threads ; les sous-environnements aussi. Viennent ensuite les
applications utilisateur. Tous ces threads dialoguent en permanence entre
elles, les applications vers le sous-système d'environnement, le
sous-système d'environnement vers les services système, les
services système entre eux. Tous ces dialogues passent par le LPC qui
gère la communication entre threads. C'est un programme
spécifiquement développé pour optimiser les communications
locales entre processus.
s Le SRM : Security Ressource Manager, ou gestionnaire
de sécurité des ressources
Son rôle est de gérer la sécurité
en local sur la machine. Il sécurise l'accès à tout objet
du système. Quand un utilisateur veut utiliser un objet, il fait une
demande de handle auprès du gestionnaire d'objet. Le gestionnaire
d'objet demande au SRM quels droits l'utilisateur a effectivement sur l'objet
demandé. Le SRM compare le SAT (Secure Access Tocken, Jeton
d'accès sécurité) de l'utilisateur, contenant les droits
de l'utilisateur (appartenance aux groupes
12
donc héritage), à l'ACL de l'objet
demandé et en déduit le niveau d'accès de l'utilisateur
sur l'objet. Ce niveau d'accès sera stocké dans le handle.
· Le I/O Manager, ou Gestionnaire
d'Entrées-Sorties
C'est une grosse partie du système d'exploitation. Il
est divisé lui-même en plusieurs couches de manière
à être le plus modulaire possible. Il est constitué de
telle manière que lorsque l'on veut ajouter ou changer un driver
quelconque (disque dur, carte réseau) on ait le moins de code possible
à développer. Il faudra simplement ajouter la couche qui va bien
au bon endroit. Celle-ci s'appuiera sur ses couches supérieures et
inférieures, qui n'auront pas à être modifiées. Plus
les couches sont hautes, moins elles connaissent le système physique.
Le gestionnaire d'entrées-sorties coordonne et
gère les communications entre drivers. Ces communications se font avec
des messages spéciaux appelés I/O Request Packets. Le
gestionnaire d'entrées-sorties gère notamment les systèmes
de fichiers et les redirecteurs réseau (c'est grâce à lui
que peuvent cohabiter plusieurs systèmes de fichier, par redirection des
packets vers la bonne couche suivant leur type). Un redirecteur réseau
n'est en fait rien d'autre qu'un système de fichier spécial. Pour
une application, la méthode pour aller chercher une information sur le
serveur ou sur un map réseau est strictement identique. Le gestionnaire
d'entrées-sorties gérant les systèmes de fichier, il est
normal qu'il gère aussi le cache disque (c'est le cache qui optimise les
lectures sur le disque). Au lieu de diriger les requêtes disques
directement vers le disque, il regarde d'abord dans le cache. S'il ne trouve
pas le bloc demandé, il va alors transmettre la requête au disque.
La réponse repassera forcément par le cache, qui cette fois ci
stockera l'information. [3]
· Le Graphic Manager, ou gestionnaire
graphique
Il regroupe les deux sous-modules GDI et USER, correspondant
respectivement à l'interface graphique et au gestionnaire de
fenêtres. Ce module n'était pas présent dans le NT
Executive sur Windows NT3, ceci a été présent à
partir du Windows NT4 et présent aujourd'hui dans les autres Windows NT
jusqu'à la version 6.1 correspondant au noyau de Windows 7. Sous Windows
NT3, GDI et USER se trouvaient dans le sous-environnement Win32. Leur choix,
contesté par certains, a été justifié pour la
raison suivante : Sous Windows NT3, quand le sous-environnement Win32 plantait,
on ne pouvait absolument plus rien faire, le système était
bloqué. En le mettant dans le NT Executive, lorsque le
sous-environnement Win32 plante, le noyau est capable de repeindre votre
écran en bleu et vous afficher des informations susceptibles de vous
aider à résoudre, du moins comprendre, le problème. De
plus, par la commande CTRL-ALT-SUPPR, il décharge le système
d'exploitation. [3]
13
1.2.1.4. Les sous-systèmes d'environnement
Tous les sous-systèmes d'environnement tournent en
mode utilisateur. Ils sont au nombre de trois : Win32, POSIX et OS/2. Leur
rôle est d'offrir aux applications un environnement d'exécution.
Le sous-environnement natif de Windows NT est Win32. Les deux autres ont
étés rajoutés pour que Windows NT se dise compatible.
Windows NT sait dans quel sous-environnement faire tourner une application
grâce à l'entête du fichier. [3]
· Le sous-système d'environnement
Win32
Comme énoncé précédemment, il
s'agit du sous-système d'environnement natif à Windows NT. C'est
lui qui gère le clavier et la souris, les autres sous-systèmes
d'environnement passent donc obligatoirement par Win32 en traduisant leurs API
en API Win32. Win32 a donc une grande importance, s'il plante, on n'a plus
d'accès aux applications tournant sur les autres sous-systèmes.
Toutes les applications utilisent les API Win32 pour dialoguer avec le
système. Les applications Win32 disposent donc leur propre espace
d'adressage. [3]
· Le sous-système d'environnement
POSIX
POSIX signifie "Portable Operating System Interface" et comme
son nom l'indique, définit une interface commune à tout
système d'exploitation qui veut être à la norme POSIX. La
norme POSIX est définie sur 13 niveaux, de 0 à 12, 12
étant la norme la plus complète. Windows NT est conforme à
la norme POSIX.1, autant dire qu'il ne l'est pas. Enfin, cette norme
définit quelques critères sur le format des noms du
système de fichiers que NTFS (système de fichier sous le quel
fonctionne Windows 7) respecte. Les fonctions réseau et système
ne sont donc pas POSIX. Pour ceux qui tiennent à faire tourner une
application POSIX dans ce sous-système, les applications ont leur propre
espace d'adressage et tournent en mode multitâches
préemptif12.
· Le sous-système d'environnement
OS/2
OS/2 est l'interface de présentation qu'avait choisie
Microsoft au départ pour Windows NT, mais face au succès de
Windows 3.X (Win16), c'est Win32, une évolution de Win16, qui a
été finalement adopté. Windows NT respecte la norme OS/2
1.X, c'est à dire OS/2 mode caractère (OS/2 2.X étant le
mode graphique). On dispose cette fois ci de quelques supports
12 Se dit d'un système d'exploitation
multitâche lorsque celui-ci peut à tout moment arrêter une
application pour passer la main à la suivante.
14
réseaux. Comme pour le sous-environnement POSIX, les
applications disposent de leur propre espace d'adressage et tournent en mode
multitâches préemptif.
Comme nous l'avons présenté ci-dessus il en
ressort que le presse-papier étant une application (logiciel), sa
communication avec le matériel est assurée ici par le noyau du
système d'exploitation. Dans tout système d'exploitation, les
opérations de « copier-coller », « couper-coller »
sont assurées par une application virtuelle nommée Clipboard.
Cette application utilise la mémoire vive de l'ordinateur. Cette
mémoire vive représentée par deux régions
disjointes selon Andrew Tanebaum, l'une étant
réservée aux applications (espace utilisateur) et l'autre au
noyau (espace noyau) est l'élément sans lequel le presse-papier
ne peut exister. Il vient donc que le presse-papier fonctionne grâce
à la présence de la mémoire et que la gestion de cette
dernière est assurée par le noyau du système
d'exploitation. D'où le rapport existant entre le presse-papier et le
noyau de Windows. Ceci étant il est nécessaire de se poser la
question suivante : quand est-il du fonctionnement du noyau dans les
systèmes d'exploitation Mac OS et Linux ? La réponse à
cette interrogation nous amène à une brève étude
des noyaux de Mac OS et Linux sous les versions équivalentes à
celle de Windows 7.
1.3. Les noyaux de Mac OS et de Linux
L'étude que nous venons de mener sur l'architecture du
noyau de Windows nous amène à jeter un coup d'oeil au sein des
noyaux des autres systèmes d'exploitation assez utilisé au
même titre que celui de Windows à savoir Mac OS et Linux. Pour
cela nous allons faire une brève étude des noyaux de ces deux
systèmes.
1.3.1. Le noyau de Mac OS
Mac OS est un système d'exploitation de la
société Apple doté de plusieurs versions parmi laquelle
celle sortie en 2009 (Mac OS 10.6 Snow Leopard) année
proche de la sortie de Windows 7 tourne sur un noyau 32 bits pouvant
gérer des applications 64 bits. Actuellement Mac OS X est le seul
système d'exploitation qui permet d'avoir un noyau 32 bits et des
applications 64 bits. Windows 64 bits a été excessivement
difficile à se déployer, car le noyau étant 64 bit, il a
fallu que tous les pilotes le soient pour que l'adoption soit massive : elle ne
l'est pas encore. La technologie pour faire tourner des applications 32 bits
dans Windows 64 bits est WOW (Windows On Windows) : une surcouche d'abstraction
difficile à mettre en oeuvre et à maintenir.
[4]
Cependant, Mac OS 10.6 Snow Leopard est
livré avec deux noyaux. Le premier est un noyau en mode architecture 32
bits le second en 64 bits. Sur la majorité des Macs, le noyau
15
utilisé par défaut est le noyau 32 bits. Ceci
étant les applications fonctionnant sur cette version de Mac contiennent
du code prévu pour être lancé sur les deux architectures
à la fois et qui pénalisent donc le poids du fichier (qui
contient en pratique deux fois plus de code) et sa vitesse d'exécution
car il est très difficile d'optimiser un programme lorsque le code doit
pouvoir s'exécuter sur plusieurs architectures, complètement
différentes de surcroît. [5]
Il en ressort de cette brève étude qu'il est
difficile de programmer des applications fonctionnant sur Mac OS 10.6
Snow Leopard car fonctionnant avec deux noyaux : un noyau 32 bits et
un autre 64 bits dont le démarrage des applications se fait avec le 32
bits par défaut. Faire une application fonctionnant à sur deux
noyaux n'étant pas aisé surtout que le noyau de Mac OS 10.6 Snow
Leopard n'est pas totalement ouvert aux développeurs. C'est la raison
pour laquelle nous avons choisi de travailler sur Windows 7 car il est ouvert
aux développeurs et une grande communauté s'offre le luxe de
concevoir des applications tournant en mode noyau ; ceci pouvant nous servir de
modèle et de guide dans la réalisation de notre application.
1.3.2. Le noyau de Linux
Linux est de natif un noyau qui a été
créé en 1991 par Linus Torvald. [6] Il s'agit
d'un noyau POSIX, respectant les normes POSIX13 1003.1 et 1003.2.
C'est le noyau (version 2.6) du système d'exploitation Linux version LTS
8.04 qui retiendra notre attention car son année de sortir est proche de
celle de Windows 7.
En fait le noyau Linux est la base de tout système
Linux. C'est la partie qui réalise toute l'abstraction du
matériel, assure la gestion des droits, gère les processus, etc.
Le noyau Linux constitue de ce fait la partie d'un système Linux qui
répond strictement à la définition de système
d'exploitation. [7]
Comme tout noyau, Linux 2.6 fournit en son coeur les quatre
services de base que sont : le support du processeur, le gestionnaire
mémoire, le gestionnaire d'interruption et l'ordonnanceur.
Le noyau linux 2.6 est un noyau
monolithique14/hybride qui offre une grande ouverture de
programmation et d'intégration aux développeurs mais ce qui a
poussé notre choix vers le système d'exploitation Windows 7 et
non pas sur Linux relève du fait que le noyau Windows NT.6.1 reste
stable jusqu'à la mise en place d'un autre système d'exploitation
contrairement à
13 POSIX: Portable Operating
System for Computer Environment. C'est une norme Unix de L'IEEE qui
spécifie le noyau du système.
14 Noyau en un seul fichier executable.
16
celui de Linux 2.6 qui est passé en 2009 à sa
version 2.6.21 et dont le fonctionnement des applications écrites sur la
base du fonctionnement du 2.6 nécessiteraient parfois des mises à
jour.
Tout au long de notre étude, il a été
question pour nous de présenter dans un premier temps l'architecture
d'un noyau d'un système d'exploitation et s'attarder sur l'étude
de celui de Windows NT 6.1. Dans un second temps il a été
question pour nous de présenter le noyau de Mac OS version 10.6
surnommé Snow Leopard et celui de Linux
à sa version 2.6 ce qui nous permis de dégager
les raisons pour lesquelles nous avons choisies de travailler sur le noyau
Windows NT 6.1 dont repose le système d'exploitation Windows 7 et qui
d'après notre étude reste le plus stable à la
programmation.
17
LE PRESSE-PAPIER
Le presse-papier a été intégré
dans la famille des systèmes d'exploitation Windows à partir de
Windows 3.1. Windows utilise le presse-papier pour transférer les
données entre les applications. Il établit ainsi un lien entre
les fonctions de l'utilisateur (manipulées par user32.dll) et celles du
noyau (manipulé par win32k.sys). Cette dichotomie différencie le
presse-papier du processus, de la configuration et de l'activité du
réseau qui sont des fonctions du noyau du Système
d'Exploitation.[8] Certaines versions de Windows telles que Windows 98 et
Windows NT intègre des programmes de visionneuse de presse-papier qui
montrent le contenu courant du presse-papier.[9] Ce chapitre présente le
fonctionnement du presse-papier de Windows, ses limites ainsi que les
développements logiciels autour du presse-papier. Nous finirons en
présentant le cahier des charges d'une l'application de gestion du
presse-papier que nous allons développer afin de pallier aux limites du
presse papier natif de Windows.
2.1. Présentation du presse-papier
Le presse-papier est le mécanisme que le
système d'exploitation Microsoft Windows utilise pour permettre à
des données d'être partagées entre les applications. [9] Le
presse-papier est axé sur l'utilisateur c'est-à-dire qu'aucune
application ne doit faire appel à ce dernier à l'insu de
l'utilisateur.
Le presse-papier est sollicité chaque fois qu'une des
opérations « couper », « copier », « coller
» est effectuée. Avant que les données ne soient
copiées dans le presse-papier, l'utilisateur doit sélectionner
l'information spécifique à copier. Cette information doit
appartenir à l'un des formats de données pris en charges par le
presse-papier. Dans le cas contraire, il sera automatiquement converti en un
format de données proche de celui-ci.
18
2.1.1. Les formats de données
Microsoft Windows met à la disposition de l'utilisateur
trois (03) types de formats de données pour stocker les informations
dans le presse-papier. Ceux-ci sont sollicités lors d'une
opération devant impliquer le presse-papier.
2.1.1.1. Les formats de données standard
Les formats de presse-papier définis par le
système sont appelés format standard du
presse-papier. Ces formats prédéfinis sont
préfixés par CF (Clipboard Format) et définis dans
WINUSER.H. Le tableau suivant décrit ces différents formats.
Tableau 2.1: Formats standard du presse-papier
[10]
Constante
|
Valeur
|
Description
|
CF_TEXT
|
0x0001
|
Format texte. Chaque ligne se termine par une combinaison
retour chariot / saut de ligne (CR-LF). Un caractère zéro signale
la fin des données. Utilisez ce format pour les textes ANSI.
|
CF_BITMAP
|
0x0002
|
Spécifie un format de données de bitmap
Microsoft Windows. (HBITMAP).
|
CF_METAFILEPICT
|
0x0003
|
Spécifie le format de données de l'image du
métafichier Windows.
|
CF_SYLK
|
0x0004
|
Spécifie le format de données de lien
symbolique Windows.
|
CF_DIF
|
0x0005
|
Spécifie le format d'échange de données
Windows. (DIF, Data Interchange Format)
|
CF_TIFF
|
0x0006
|
Spécifie le format de données TIFF (Tagged
Image File Format)
|
CF_OEMTEXT
|
0x0007
|
Spécifie le format de données de texte
Windows OEM standard. Chaque ligne se termine par une
combinaison retour chariot / saut de ligne (CR-LF). Un caractère
zéro signale la fin des données.
|
|
19
CF_DIB
|
0x0008
|
Spécifie le format de données bitmap
indépendant
du périphérique (DIB, Device
Independent Bitmap).
|
CF_PALETTE
|
0x0009
|
Spécifie le format de palette Windows. Chaque fois
qu'une application met des données dans le
presse-papier qui dépend d'une palette de couleurs
ou l'assume, elle doit mettre aussi mettre la palette dans le presse-papier.
|
CF_PENDATA
|
0x000A
|
Spécifie le format de données de stylet
Windows, constitué de traits de stylet dans le cas de
logiciels prenant en charge l'écriture manuscrite.
|
CF_RIFF
|
0x000B
|
Spécifie le format de données audio RIFF
(Resource Interchange File Format). Les données
audio ici sont plus complexes que celles du format wave standard CF_WAVE.
|
CF_WAVE
|
0x000C
|
Représente les données audio dans l'un des formats
standards wave.
|
CF_UNICODETEXT
|
0x000D
|
Spécifie le format de texte Unicode. Chaque ligne se
termine par une combinaison retour chariot / saut de ligne (CR-LF). Un
caractère zéro signale la fin des données.
|
CF_ENHMETAFILE
|
0x000E
|
Spécifie le format de métafichier
amélioré
(EMF, Enhanced Metafile Format) Windows.
|
CF_HDROP
|
0x000F
|
Un identifiant du type HDROP qui identifie
une liste de fichiers. Une application peut retrouver
les informations concernant les fichiers en
passant l'identifiant à la
fonction DragQueryFile.
|
CF_LOCALE
|
0X0010
|
Spécifie le format de données de
paramètres
régionaux (culture) Windows.
|
|
CF_DIBV5
0x0017
Spécifie un objet contenant une structure
BITMAPV5HEADER suivie d'information sur l'espace de couleur
bitmap et de chiffres binaires bitmap.
20
Les formats de données les plus courants sont [11] :
· Texte (texte brut) : texte sans mise
en forme de police, couleur, images. Lorsqu'il est collé dans un
logiciel de traitement de texte, il s'affiche juste comme si vous aviez
tapé sur le clavier.
· RichText Format (Texte
formaté) : il contient les informations de mise en forme telle que la
police, la taille, la couleur...
· HTML (texte et les images
copiées à partir de navigateurs) : il contient aussi la mise en
forme et les tableaux.
· Bitmap : toutes les données
d'image sur le presse-papier utilise ce format, même si on copie une
image de type JPEG, GIF ou PNG à partir d'un navigateur web.
· Image : "autre" format d'image,
utilisé pour les dessins vectoriels faits avec un logiciel de CAO
(Conception Assistée par Ordinateur), ou l'outil de dessin dans
Microsoft Word.
· Pointeurs de fichiers : ceux-ci sont
présents sur le presse-papier lorsque vous "copiez" des fichiers ou des
dossiers dans l'Explorateur Windows. Notez que les fichiers eux-mêmes ne
sont pas vraiment sur le presse-papier ; c'est juste un «pointeur»
qui indique où se trouvent les fichiers et les dossiers à
copier.
2.1.1.2. Formats inscrits du presse-papier
De nombreuses applications fonctionnent avec des
données qui ne peuvent pas être traduites en un format standard de
presse-papier sans perte d'information. Ces applications peuvent créer
leurs propres formats de presse-papier. Par exemple, si à partir d'une
application de traitement de texte, on copie du texte formaté dans le
presse-papier en utilisant un format de texte standard, les informations de
formatage seront perdues. La solution sera d'enregistrer un nouveau format de
presse-papier tel que Rich Text Format (RTF) qui contiendrait en plus des
données, les différentes informations concernant le formatage
du
texte. La fonction
RegisterClipboardFormat15 permet d'enregistrer un
nouveau format de presse-papier.
2.1.1.3. Formats privés du presse-papier
Une application peut déclarer un format presse-papier
privé en définissant un identifiant dans la plage allant de
CF_PRIVATEFIRST à CF_PRIVATELAST.
[10]On utilise un format privé lorsque les données qu'on manipule
n'ont pas besoin d'être enregistrées dans le système. Les
ressources sollicitées lorsque le programme utilise un format
privé de presse-papier ne sont pas libérées
automatiquement après usage. On peut utiliser un message
WM_DESTROYCLIPBOARD pour libérer toutes les ressources
associées lorsque l'opération est terminée.
2.1.1.4. Formats multiples du presse-papier
Lorsqu'une application place une donnée dans le
presse-papier, elle devrait fournir des données dans autant de format
que possible. Ceci permet que la donnée stockée dans le
presse-papier puisse être utilisée par le plus d'application
possible.
Prenons par exemple un tableur (MS
Excel). On ne peut y copier que des tableaux. Ces données (tableaux)
sont probablement stockés dans le presse-papier dans un format de texte
basique, séparé par des virgules afin qu'un autre tableur ou une
application de gestion des bases de données puissent les utiliser.
Imaginons maintenant que l'on veuille exploiter les données dans une
application de traitement de texte. Il serait souhaitable de définir un
autre format de données plus adapté à cette circonstance
d'où la nécessité d'utiliser des formats de données
multiples dans le presse-papier.
Le format de presse-papier qui contient le plus d'information
doit être placé en premier sur le presse-papier, suivi des formats
moins descriptifs. Lorsqu'on souhaite coller une information à partir
d'une application, celle-ci récupère généralement
dans le presse-papier le premier objet dans le format qu'il reconnait. Les
formats du presse-papier sont classés du plus descriptif au moins
descriptif, le premier format reconnu est aussi le plus descriptif.
2.1.1.5. Formats de synthèse du
presse-papier
Le système convertit implicitement des données
vers certains formats de presse-papier. Par exemple si une application
sollicite une donnée dans un format qui n'est pas dans le
21
15 Fonction de la statique Clipboard du Framework
.NET
22
presse-papier, le système convertit un des formats
disponibles en format demandé. Les données sont converties comme
indiqué dans le tableau suivant :
Tableau 2.2 : formats de synthèse du
presse-papier [12]
Format de presse-papier
|
Format de conversion équivalent
|
CF_BITMAP
|
CF_DIB
|
CF_BITMAP
|
CF_DIBV5
|
CF_DIB
|
CF_BITMAP
|
CF_DIB
|
CF_PALETTE
|
CF_DIB
|
CF_DIBV5
|
CF_DIBV5
|
CF_BITMAP
|
CF_DIBV5
|
CF_DIB
|
CF_DIBV5
|
CF_PALETTE
|
CF_ENHMETAFILE
|
CF_METAFILEPICT
|
CF_METAFILEPICT
|
CF_ENHMETAFILE
|
CF_OEMTEXT
|
CF_TEXT
|
CF_OEMTEXT
|
CF_UNICODETEXT
|
CF_TEXT
|
CF_OEMTEXT
|
CF_TEXT
|
CF_UNICODETEXT
|
CF_UNICODETEXT
|
CF_OEMTEXT
|
CF_UNICODETEXT
|
CF_TEXT
|
|
2.1.2. Fonctionnement du presse-papier
Pour qu'une application puisse envoyer des données
dans le presse-papier, il faut d'abord qu'elle réserve un espace
mémoire en utilisant les méthodes GlobalAlloc(), GlobalLock()
et GlobalUnlock(). Ensuite elle ouvre le presse-papier via la
méthode OpenClipboard() , le vide via la méthode
EmptyClipboard(), y place les données via la méthode
SetClipboard() et enfin ferme le presse-papier via la méthode
CloseClipboard().[13]
Figure 2.1 : Transferer les données au fornat
Text dans le presse-papier
Obtenir des données du presse-papier est encore plus
facile et implique d'ouvrir le presse-papier, déterminer lequel des
formats disponible dans le presse-papier est compatible à l'application
(cette opération est spécifique à l'application),
récupérer la donnée puis fermer le presse-papier.
Figure 2.2 : Récupérer les
données au format Text du presse-papier 2.1.2.1. Description du
processus d'extraction des données
L'extraction des données du presse-papier contenues
dans l'espace alloué par le système se déroule en quatre
(04) étapes (Figure 2.3). On identifie d'abord les
fonctions de user32.dll ou win32k.sys
permettant l'accès aux données du presse-papier. Les
fonctions décrites dans ces deux fichiers [14] fournissent un bon point
de départ pour choisir les fonctions les plus appropriées. Puis
on applique le Reverse Engineering16 sur ces fonctions pour
reconstituer la structure du presse-papier. Pendant l'étape suivante, on
ajoute la capacité de rechercher des structures (données dans un
format bien précis) au programme d'analyse de mémoire. Enfin,
23
16 Reverse Engineering : technique de
décompilation d'un programme informatique.
24
on recherche dans l'espace mémoire réservé
au presse-papier des données compatible à l'application et on
effectue la copie du presse-papier.
Reconstituer la structure du presse-papier
Coder les structures dans le programme d'analyse
de mémoire
Exécuter l'analyse de la mémoire sur
l'espace mémoire réservé au presse- papier
Identifier les fonctions appropriées
Figure 2.3 : Reconstitution de la structure du
presse-papier par Reverse Engineering [8]
2.1.2.2. Les fonctions du presse-papier
Le presse-papier via la classe Clipboard expose 24
méthodes (Tableau 2.3). Ces méthodes permettent
d'obtenir des informations sur l'état du presse-papier, de le vider, d'y
envoyer des données, d'extraire son contenu etc. Chacune de ces
méthodes est sollicitées à un moment ou à un autre
du fonctionnement du presse-papier en fonction de l'opération encours.
La classe Clipboard est statique, on n'a donc pas besoin de l'instancier pour
pouvoir l'utiliser.
Tableau 2.3 : Fonctions de la classe Clipboard.
[14]
Nom
|
Description
|
Clear
|
Supprime toutes les données du Presse-papier.
|
ContainsAudio
|
Indique si le Presse-papier contient des données au
format WaveAudio.
|
|
25
ContainsData
|
Indique si le Presse-papier contient des données au
format spécifié ou qui peuvent être converties dans ce
format.
|
ContainsFileDropList
|
Indique si le Presse-papier contient des données au
format FileDrop ou qui peuvent être converties dans ce format.
|
ContainsImage
|
Indique si le Presse-papier contient des données au
format Bitmap ou qui peuvent être converties dans ce format.
|
ContainsText
|
Indique si le Presse-papier contient des données au
format Text ou UnicodeText, selon le système d'exploitation.
|
ContainsText(TextDataFormat)
|
Indique si le Presse-papier contient des données
textuelles au format indiqué par la valeur TextDataFormat
spécifiée.
|
Equals(Object)
|
Détermine si le Object spécifié est
égal au Object actif. (Hérité de Object.)
|
Finalize
|
Autorise Object à tenter de libérer des ressources
et d'exécuter d'autres opérations de nettoyage avant que Object
soit récupéré par l'opération garbage collection.
(Hérité de Object.)
|
GetAudioStream
|
Récupère un flux audio dans le Presse-papier.
|
GetData
|
Récupère des données du Presse-papier dans
le format spécifié.
|
GetDataObject
|
Récupère les données figurant dans le
Presse-papier système.
|
GetFileDropList
|
Récupère une collection de noms de fichiers du
Presse-papier.
|
|
26
GetHashCode
|
Sert de fonction de hachage pour un type particulier.
(Hérité de Object.)
|
GetImage
|
Récupère une image du Presse-papier.
|
GetText
|
Récupère des données textuelles du
Presse-papier dans le format Text ou UnicodeText, selon le système
d'exploitation.
|
GetText(TextDataFormat)
|
Récupère des données textuelles du
Presse-papier dans le format indiqué par la
valeur TextDataFormat spécifiée.
|
GetType
|
Obtient le Type de l'instance actuelle. (Hérité de
Object.)
|
MemberwiseClone
|
Crée une copie superficielle de
l'objet Object actif. (Hérité de Object.)
|
SetAudio( Byte ())
|
Ajoute un tableau Byte au Presse-papier dans le format WaveAudio
après l'avoir converti en Stream.
|
SetAudio(Stream)
|
Ajoute Stream au Presse-Papier dans le format WaveAudio.
|
SetData
|
Ajoute des données au Presse-papier dans le format
spécifié.
|
SetDataObject(Object)
|
Place les données non persistantes dans le Presse-papier
système.
|
SetDataObject(Object, Boolean)
|
Place les données dans le Presse-papier système et
spécifie si les données doivent rester dans le Presse-papier
lorsque l'utilisateur quitte l'application.
|
SetDataObject(Object, Boolean, Int32, Int32)
|
Tente de placer les données dans le Presse-papier
système le nombre spécifié de fois et dans le délai
spécifié entre les tentatives, en laissant éventuellement
les données dans le Presse-papier lorsque l'utilisateur quitte
l'application.
|
|
27
SetFileDropList
Ajoute une collection de noms de fichiers au Presse-papier dans
le format FileDrop.
|
SetImage
|
Ajoute Image au Presse-Papier dans le format Bitmap.
|
SetText(String)
|
Ajoute des données textuelles au Presse-papier dans le
format Text ou UnicodeText, selon le système d'exploitation.
|
SetText(String, TextDataFormat)
|
Ajoute des données textuelles au Presse-papier dans le
format indiqué par la valeur TextDataFormat spécifiée.
|
ToString
|
Retourne un String qui représente le Object actif.
(Hérité de Object.)
|
|
2.2. Limites du presse-papier de Windows
Bien qu'étant la plaque tournante de l'échange
des données entre les applications, le presse-papier de Windows est
quelque peu limité. En effet le presse-papier ne permet de sauvegarder
qu'une seule donnée à la fois. Par exemple, si nous copions de
suite deux textes différents dans le presse-papier, seul le dernier
texte à avoir été copié sera conservé. Il en
est de même pour les données de nature différente. Le
presse-papier est tout simplement un bloc de mémoire partagée, et
s'il peut contenir le même bloc de données
représenté dans une variété de formats (formats
multiple de presse-papier), il n'en demeure pas moins qu'il ne peut contenir
qu'un seul élément à la fois. Ceci pose un
réel problème dans la réalisation efficace de certaines
tâches.
2.2.1. Saisie d'un mémoire avec Latex
Lors de la saisie d'un mémoire avec Latex, certaines
structures sont régulièrement utilisées. Certaines phrases
font régulièrement leur apparition. Alors supposons par exemple
qu'une phrase ou une structure utilisée constamment soit
conservée dans le presse-papier de Windows après une
opération de copie pour une utilisation future ; et que pendant la
saisie une autre phrase ou structure devra être également
utilisé plusieurs fois. La première phrase ou structure qui
était sauvegardée dans le presse-papier sera
écrasée par la nouvelle. Il sera donc très avantageux de
pouvoir sauvegarder autant de phrases et structures dans le presse-papier en
vue d'un gain de temps de travail qui nous évitera à chaque fois
d'aller à une tierce page pour faire du « copier-coller ».
D'où la mise sur pied d'une application capable de
28
conserver plusieurs copies (c'est-à-dire conserver
autant de phrases et de structures que l'on souhaite dans le presse-papier)
à la fois.
2.2.2. Manipulation des images
Imaginons un infographe qui désire réaliser un
spot publicitaire constitué d'un ensemble d'images devant être
traité séparément avant d'être assemblées.
Supposons qu'au moment d'assembler ces dernières une opération de
coupage soit faite sur une des images traitées et qu'au moment de la
« coller » au lieu de faire un Ctrl+V on fait plutôt par
mégarde un Ctrl+C. Le presse-papier de Windows écrasera la
première image qui a été coupée et la remplacera
par la nouvelle copie faite par mégarde. Il est donc question pour cet
infographe de prendre un temps supplémentaire pour refaire nouvellement
les mêmes traitements sur cette image à cause d'une insuffisance
du presse-papier de Windows. D'où la nécessité d'une
application permettant de sauvegarder plus d'une image dans le presse-papier et
de pouvoir l'utiliser lorsque le besoin se fait ressentir.
Au regard de ces limites du presse-papier, il parait
nécessaire d'apporter une solution pour palier à cette
insuffisance. C'est en ce sens que de nombreuses applications de gestion du
presse-papier ont été développées.
2.3. Développement logiciel autour du
presse-papier
Certaines applications récentes fournissent
directement un gestionnaire de presse-papier qui supporte des transactions
multiples de « copier-coller ». Dans ces applications, le
presse-papier se comporte comme une pile. L'opération « copier
» ou « couper » place la donnée copiée ou
coupée au-dessus de la pile. L'opération « coller »
pointe vers la copie la plus récente. Cependant, certaines de ces
applications offrent la possibilité via une interface de consulter
l'historique des transactions, de choisir une copie plutôt qu'une autre,
d'éditer une copie, de changer de format et même d'effectuer une
recherche. La plupart de ces applications ne sauvegarde pas le contenu de leur
presse-papier. Le contenu de ce dernier est remis à zéro
lorsqu'on ferme l'application. Le tableau suivant présente une liste
non-exhaustive de quelques applications de gestion du presse-papier.
29
Tableau 2.4 : Liste de quelques applications de gestion
du presse-papier [15]
Une étude de quelques logiciels de gestion du
presse-papier de Windows nous a permis de réaliser une comparaison sur
la base des critères suivant : gestion des sessions/groupes, gestion des
sauvegardes, nombre maximum de copie sauvegardé, prise en charge de
l'édition du contenu, les fichiers, des dossiers, prise en main,
ergonomie, type de licence.
Ce qui a conduit au tableau comparatif ci-après :
30
Tableau 2.5 : Tableau comparatif de quelques logiciels
de gestion du presse-papier
Critères de comparaison
|
3D Clipboard
|
ArsClip
|
CLIPTRAY 1.61
|
ClipMate
|
Gestion des Sessions/Groupes
|
Non
|
Mauvaise
|
Non
|
Excellente
|
Gestion des Sauvegardes
|
Oui
|
Oui
|
Oui
|
Oui
|
Nombre maximum de copie sauvegardé
|
99
|
999
|
500
|
Configurable
|
Prise en charge de l'édition du contenu
|
Oui
|
Oui
|
Non
|
Oui
|
Prise en charge des fichiers audio
|
Non
|
Oui
|
Oui
|
Oui
|
Prise en charge des fichiers vidéo
|
Non
|
Oui
|
Oui
|
Oui
|
Prise en charge des images
|
Oui
|
Oui
|
Oui
|
Oui
|
Taille maximum des images prise en charges
|
32767K
|
configurable
|
Non définie
|
Non définie
|
Prise en charge des fichiers
|
Non
|
oui
|
Oui
|
Oui
|
Prise en charge des dossiers
|
Non
|
oui
|
Oui
|
Oui
|
Prise en main
|
Facile
|
difficile
|
Très facile
|
Facile
|
Ergonomie
|
Moyenne
|
Pas bonne
|
Bonne
|
Bonne
|
Type de licence
|
Gratuit
|
Gratuit
|
Gratuit
|
Commerciale
|
Site web
|
3dclipboard.com
|
joejoesoft.com
|
cliptray.f2o.org
|
thornsoft.com
|
|
Pendant notre étude, nous avons constaté qu'il
y avait sur le marché des logiciels libres et payants pour la gestion du
presse-papier. Ces deux types de logiciels offrent des possibilités plus
ou moins semblable. Il nous a été donnée de constater par
contre que les logiciels payants offraient des possibilités beaucoup
plus évoluées pour ce qui est de l'édition de contenu, de
la gestion des sauvegardes, de la gestion des sessions/groupes. Une grande
partie de ces logiciels prennent également en charge plusieurs formats
de données, se rapprochant ainsi du presse-papier natif de Windows en
plus évolué.
L'idée nous est donc venue de concevoir et
d'implémenter un logiciel de gestion du presse-papier qui serait
à la fois libre et performant. Son cahier de charges sera
détaillé dans la section suivante.
2.4. Cahier des charges
L'objet de ce cahier des charges est d'une part de
définir la liste des fonctionnalités à développer
afin de disposer d'un logiciel permettant de gérer efficacement les
opérations du presse-papier.
Ce cahier de charges spécifie aussi la méthode
selon laquelle le logiciel devra être développé. Outils
logiciels, environnement de développement, documentation ...
2.4.1. Description de l'existant
Quelques travaux dans le sens de l'optimisation du
presse-papier en général et de celui de Windows en particulier
ont déjà été réalisé. Ceux-ci sont
brièvement décrits dans la section 2.3 de ce chapitre.
2.4.2. Expression des besoins
Cette section décrit les besoins (fonctionnels et non
fonctionnels) auxquels doit répondre l'application à
développer.
2.4.2.1. Besoins fonctionnels
Ils sont directement liés aux tâches que le
logiciel devrait pouvoir exécuter. Notre future application doit pouvoir
:
· Prendre en charge toutes les opérations impliquant
le presse-papier de Windows ;
· Gérer (créer, ouvrir, sauvegarder) les
collections et les groupes ;
· Conserver un certain nombre de copie dans chacune des
sessions.
2.4.2.2. Besoins non fonctionnels
Cette application doit être compatible avec plusieurs
plate-forme Windows (XP, Vista, Seven...) Elle doit aussi satisfaire aux
besoins suivant :
· Etre ergonomique17 ;
· Prendre en charge plusieurs formats de données
;
· Etre invisible : son fonctionnement ne doit pas
interférer avec celui des autres applications. Il doit être aussi
transparent que le presse-papier natif de Windows.
31
17 Facilité et souplesse pour l'utilisation.
32
2.4.3. Solution adopté
Le logiciel devant faire preuve de transparence et de
performance, le choix de la méthode d'analyse et du langage de
programmation ne doit pas être fait au hasard.
2.4.3.1. Choix de la méthode d'analyse et de
conception
Une méthode d'analyse et de conception a pour objectif
de formaliser les étapes préliminaires du développement
d'un système afin de rendre son développement plus fidèle
aux besoins du client. Il existe plusieurs méthodes d'analyse et de
conception à savoir : RACINES, MERISE,
NIAM, OMT (Object Modeling Technique),
Booch, UML etc. Chacune de ces
méthodes a été mise sur pied pour résoudre un
problème persistant (robustesse, maintenance, sécurité...)
dans l'industrie du développement logiciel. Le choix d'une
méthode d'analyse dépend essentiellement de la composition de
l'équipe. Il n'est pas conseillé de choisir une méthode
qui implique une formation préalable de la majorité des membres
du groupe. Afin de réduire le temps d'apprentissage d'une nouvelle
méthode, nous avons opté pour la méthode d'analyse UML.
2.4.3.2. Choix du langage de programmation
Il existe de nombreux langages de programmation qui
permettent d'écrire le code dans un langage devant être
compilé afin d'être compréhensible par l'ordinateur. Le
choix de ce langage est primordial, car de lui va dépendre le temps de
développement et la performance de l'application. Plusieurs langages
s'offrent à nous à savoir Java, C++, C, C#, PHP etc.
Notre choix porte sur le langage C# ceci pour les raisons
ci-après :
· C'est un langage développer par Microsoft et donc
parfaitement compatible.
· C'est un langage facile à prendre en main.
· Son IDE (Visual Studio), est suffisamment riche et
propose assez d'outils permettant de faciliter le développement
(coloration syntaxique, complétion automatique, compilateur
intégré, aide locale et en ligne, debugger très
performant).
· Il utilise le Framework.NET18 de
Microsoft.
· C'est un langage qui nous est familier.
18
Framework.NET:
composant logiciel pouvant être ajouté au système
d'exploitation Microsoft Windows afin de faciliter le développement des
applications
33
Une application de gestion du presse-papier doit primer par sa
performance, sa transparence et son ergonomie. De nombreux logiciels de gestion
du presse-papier ont été développés pour optimiser
le presse-papier de Windows. Malgré cela, ceux-ci (les versions libres)
restent peu performantes et pas ergonomique, d'où la
nécessité d'implémenter une solution libre, ergonomique,
transparente et performante. Le chapitre suivant détaille
l'implémentation des modules principaux de notre application.
34
DEVELOPPEMENT LOGICIEL
Analyser et implémenter une solution informatique a
toujours été une tâche rigoureuse. Elle requiert ainsi des
connaissances particulières sur des méthodes d'analyse, les
langages de modélisation et de programmation. Il sera d'abord question
pour nous dans ce chapitre de présenter très brièvement
l'outil d'analyse que nous avons utilisé pour implémenter les
modules principaux de l'application. Ensuite produire un organigramme de
fonctionnement de l'application et présenter les interfaces de
l'application. Enfin nous ferons l'implémentation proprement dite de ces
modules.
3.1. Analyse et conception
L'analyse et la conception d'une application font appel aux
méthodes et langages de modélisation orientée objet.
À chacune des différentes phases de la conception d'un logiciel
correspondent des problèmes ou des contraintes différentes.
Naturellement, ces niveaux ont fait l'objet de recherches
méthodologiques considérables depuis les années 80. Il en
résulte que de nombreuses méthodes de développement ou
d'analyse de logiciel ont vu le jour, chacune plus ou moins
spécialisée ou adaptée à une démarche
particulière, voire à un secteur industriel particulier (bases de
données, matériel embarqué, etc.). Celles-ci ayant
été développées indépendamment les unes des
autres, elles sont souvent partiellement redondantes ou incompatibles entre
elles lorsqu'elles font appel à des notations ou des terminologies
différentes.
De plus, à chaque méthode correspond un ou
plusieurs moyens (plus ou moins formel) de représentation des
résultats. Celui-ci peut être graphique (diagramme synoptique,
plan physique d'un réseau, organigramme) ou textuel (expression d'un
besoin en langage naturel, jusqu'au listing du code source). Dans les
années 90, un certain nombre de méthodes orientées objets
ont émergé, en particulier les méthodes :
· OMT (Object Modeling Technique) de James
RUMBAUGH
· BOOCH de Grady BOOCH
·
35
OOSE (Object Oriented Software Engineering) de Ivar
JACOBSON à qui l'on doit les Use Cases.
En 1994, on recensait plus de 50 méthodologies
orientées objets. C'est dans le but de remédier à cette
dispersion que les « poids-lourds » de la méthodologie
orientée objets ont entrepris de se regrouper autour d'un standard.
En octobre 1994, Grady Booch et James Rumbaugh se sont
réunis au sein de la société RATIONAL19 dans le
but de travailler à l'élaboration d'une méthode commune
qui intègre les avantages de l'ensemble des méthodes reconnues,
en corrigeant les défauts et en comblant les déficits. Lors de
OOPSLA'95 (Object Oriented Programming Systems, Languages and
Applications, la grande conférence de la programmation
orientée objets), ils présentent UNIFIED METHOD V0.8. En 1996,
Ivar Jacobson les rejoint. Leurs travaux ne visent plus à constituer une
méthodologie, mais un langage. Leur
initiative a été soutenue par de nombreuses
sociétés, que ce soit des sociétés de
développement (dont Microsoft, Oracle, Hewlett-Packard, IBM - qui a
apporté son langage de contraintes OCL -, ...) ou des
sociétés de conception d'ateliers logiciels. Un projet a
été déposé en janvier 1997 à l'OMG
(Object Management Group, qui s'est rendu célèbre pour
la norme CORBA20) en vue de la normalisation d'un langage de
modélisation. Après amendement, celui-ci a été
accepté en novembre 97 par l'OMG sous la référence
UML-1.1. La version UML-2.0 est la plus rependue et la plus utilisée
à nos jours. [16] C'est cette dernière que nous utiliserons pour
la modélisation de notre application. Nous pouvons résumer
l'historique de la constitution d'UML par la figure ci-dessous.
Figure 3.1 : historique de la constitution d'UML
[16]
19
http://www.rational.com/UML/resources.html:
site de RATIONAL (principal acteur de UML) 20
http://www.omg.org: Object
Management Group
36
3.1.1. Présentation de UML
UML est un langage graphique de modélisation. UML est
issue de la fusion en 1997 de trois langages de modélisation (les plus
utilisés à l'époque) à savoir : OMT (Object
Modeling Technique) de James RUMBAUGH, BOOCH de Grady BOOCH et OOSE (Object
Oriented Software Engineering) de Ivar JACOBSON comme nous l'avons
précisé plus haut. UML est aujourd'hui le standard de
modélisation orienté objet le plus utilisé en génie
logiciel, il est géré par l'OMG (Object Management Group) qui
fait évoluer le standard. Cette partie sera essentiellement basée
sur la présentation des vues et diagrammes principaux associés
à chaque vue.
3.1.2. Les vues et diagrammes d'UML
UML est un langage graphique, il est donc basé sur
l'utilisation des diagrammes (13 au total). Ces diagrammes sont
organisés en vues. Une vue étant un moyen de décrire un
système suivant un angle donnée. A chaque vue correspond des
diagrammes UML. UML modélise un système selon trois axes ou vues
à savoir : la Vue fonctionnelle, la vue
dynamique et la vue statique. On peut
observer ci-dessous à la figure 3.2 le schéma
modélisant ces trois axes (les diagrammes mis entre
parenthèses sont ceux qui retiendront notre attention dans chaque
vue).
FONCTION
(Diagramme des cas d'utilisation)
Diagramme des séquences
STATIQUE (Diagramme de classe) (Diagramme de
packages) Diagramme d'objets Diagramme de structure
|
DYNAMIQUE (Diagramme de séquence)
Diagramme d'Etats Diagramme d'Activité Diagramme de communication
|
|
Figure 3.2 : Trois Axes de modélisation UML
[17]
37
3.1.2.1. La vue fonctionnelle
Aussi appelé vue interactive (ou des interactions) ;
elle illustre les interactions entre les différents acteurs/utilisateurs
et le système, sous forme d'objectif à atteindre d'un
côté et sous forme chronologique de scénarios
d'interactions typiques de l'autre. Elle se compose de trois diagrammes :
le diagramme des cas d'utilisation, le diagramme des
séquences, diagrammes de communication.
Diagramme des cas d'utilisation :
Les diagrammes des cas d'utilisation permettent de
représenter les exigences du point de vue purement fonctionnel du
système à réaliser. Un cas d'utilisation fait
référence à un usage particulier du système
utilisé à une fin précise. A chaque cas d'utilisation doit
être associé un acteur (utilisateur humain, dispositif
matériel ou autre système) du système qui peut le
réaliser. Un cas d'utilisation peut être inclus dans un autre ou
étendre un autre. Les relations d'inclusion sont utilisées pour
indiquer que la réalisation d'un cas d'utilisation passe par la
réalisation préalable d'une autre tandis que la relation
d'extension quant à elle est utilisée pour indiquer qu'un cas
d'utilisation ajoute un comportement à un autre.
Présentation des cas d'utilisation de
l'application :
Pour mieux comprendre les cas d'utilisation que nous allons
présenter ci-dessous il est intéressant d'identifier chaque
acteur avec ses différents rôles pour enfin ressortir facilement
ces cas d'utilisation. Pour cela nous avons le tableau ci-dessous :
Tableau 3.1 : Relations entre les acteurs et leurs
rôles.
ACTEURS
|
ROLES
|
CAS D'UTILISATION
|
Utilisateur
|
Créer une collection
|
Gérer une
|
|
|
|
|
|
Créer un groupe
|
Gérer un
|
|
|
|
|
|
|
Utilisateur
|
Faire une copie
|
|
|
|
|
Renvoie le contenu du presse-papier à l'application
|
|
|
|
|
Supprime une collection
|
|
|
|
|
De ce qui précède il vient que nous avons trois
cas d'utilisation dont nous illustrerons les diagrammes dans la suite.
Cas d'utilisation 1 : Gérer Une
Collection.
38
Figure 3.3 : diagramme de cas d'utilisation de la
Gestion d'une collection
39
Cas d'utilisation 2 : Gérer un groupe.
Figure 3.4 : Diagramme de cas d'utilisation de la
Gestion d'un groupe
Cas d'utilisation 3 : Gérer une
copie.
Figure 3.5 : Diagramme de cas d'utilisation de la
Gestion d'une copie
De ces trois cas d'utilisation on peut donc déduire le
diagramme de cas d'utilisation complet de l'application.
40
Figure 3.6 : Diagramme de cas d'utilisation globale de
l'application
Tous les cas d'utilisation étant recenser et
modéliser il est important de décrire l'aspect comportementale de
ces cas d'utilisation d'où la nécessité de la vue
dynamique.
3.1.2.2. La vue dynamique
La vue dynamique est orientée algorithme et
traitement, elle vise à décrire l'évolution (la dynamique)
des objets complexes du programme tout au long de leur cycle de vie. De leur
naissance à leur mort, les objets voient leurs états
changés et ce à cause de leur interaction avec d'autres objets du
programme. La vue dynamique est constituée des diagrammes
d'états, des diagrammes d'activité,
des diagrammes de séquence et des diagrammes de
communication.
Diagramme de séquence :
Un diagramme de séquence sert à la description
d'un scénario possible dans la description d'un cas d'utilisation d'une
fonction. Les diagrammes de séquences mettent en valeur les
échanges de messages (déclenchant des événements)
entre acteurs et objets (ou entre objets et objets) de manière
chronologique (l'évolution du temps se lisant de haut en bas). Chaque
colonne correspond à un objet (décrit dans le diagramme des
classes), ou à un acteur (introduit dans le diagramme des cas). La ligne
de vie de l'objet représente la durée de son interaction avec les
autres objets du diagramme. Notons que le même besoin dans un logiciel
peut être réalisé à travers plusieurs
scénarios, dans ce cas on aura donc plusieurs diagramme de
séquence pour ce même besoin.
41
Diagramme de séquence associé à
chaque cas d'utilisation :
Gérer une collection : une collection
est gérée par un utilisateur, le logiciel lui-même et le
système d'exploitation dans le quel tourne l'application.
Figure 3.7 : Diagramme de séquence de la
gestion d'une collection.
42
Gérer un groupe : un groupe est
contenu dans une collection. Pour cela on suppose qu'une collection a
été démarrée. Le diagramme de séquence
ci-dessous est celui d'un groupe qui sera créé et contenu dans
une collection.
Figure 3.8 : Diagramme de séquence de la
gestion d'un groupe.
Gérer une copie : une copie est
contenue dans un et un seul groupe. Pour cela on suppose que le comportement de
la copie dont le diagramme de séquence est donné ci-dessous est
dans un groupe qui lui-même est dans une collection ; bien
évidemment le groupe et la collection étant ouverts.
43
Figure 3.9 : Diagramme de séquence de la gestion
d'une copie.
Ces diagrammes de séquences nous ont permis d'avoir un
comportement détaillé de chaque objet de notre application et de
ressortir les différentes méthodes associées à
chacun d'eux. Tout ceci étant fait on peut donc présenter la vue
statique de notre application.
3.1.2.3. La vue structurelle ou statique
La vue structurelle présente la structuration des
données et identifie les objets/composants constituant le programme,
leurs attributs, opérations et méthodes, ainsi que les liens ou
associations qui les unissent. Elle regroupe également les classes
fortement liées entre elles en des composants les plus autonomes
possibles. Cette vue a pour objectif principal de modéliser la structure
des différentes classes d'une application orientée objet ainsi
que leurs relations [18]. La vue statique est
constituée des diagrammes de classes, des
diagrammes de
44
packages, des diagrammes
d'objets, des diagrammes de structure composite, des
diagrammes de déploiement.
· Le diagramme de classe :
Le diagramme de classe est le diagramme le plus
important dans la modélisation UML (il est le diagramme
prioritaire pour les outils de génération automatique de code).
Ces diagrammes sont représentés avec plus ou moins
d'exhaustivité selon que l'on est en phase d'analyse, de conception ou
d'implémentation. Avant de dessiner un diagramme de classe il est donc
important de tenir compte de la phase dans laquelle on se trouve ; ainsi donc
:
En phase d'implémentation on cherche à
décrire chaque classe, ses attributs et ses méthodes en pensant
déjà au code qui les implémentera tout en prenant en
compte les contraintes matérielles de temps d'exécution,
d'architecture, etc.
Présentation des concepts utilisés dans le
diagramme de classe
Les concepts élémentaires que nous
présentons dans cette section sont les plus employés pour la
réalisation de la vue structurelle d'un modèle UML et ceux que
nous avons utilisé pour la réalisation de notre diagramme de
classe.
Une classe :
De façon sémantique : En UML,
une classe définit la structure commune d'un ensemble d'objets et permet
la Construction d'objets instances de cette classe. Une classe est
identifiée par son nom. [18]
De façon graphique : Une classe se
représente à l'aide d'un rectangle sous forme de tableau à
une colonne et trois lignes ; qui contient le nom de la classe (première
ligne et éventuellement le nom du package auquel elle appartient)
viennent ensuite les propriétés (deuxième ligne) de la
classe puis ses opérations (troisième ligne). La Figure
3.11 illustre la classe nommée User.
Les propriétés ou attributs
Pour une classe, une propriété peut être
vue comme une forme simple d'association entre les objets (instances) de la
classe et un objet de classe standard. Il s'agit d'une variable qui est en
général propre à l'objet ou qui est peut être commun
à tous les objets de la classe (on parle alors de
propriété de classe). Dans un diagramme de classe les
propriétés de la classe sont notées de la façon
suivante :
<NomAttribut> : <Type> = [<valeur par
défaut>]. (Voir deuxième ligne Figure
3.11)
Les opérations
Une opération peut être vue comme une
tâche que doit effectuer l'objet lorsqu'on lui fait appel. En
programmation elle représente une méthode de la classe. Dans un
diagramme de classe la notation des opérations se fait de la
façon suivante :
<NomOpération> (ListeParamètres) :
<TypeRetour>(Voir troisème ligne Figure
3.11) On distingue deux catégories
d'opérations :
· celles qui modifient l'état de l'objet (ses
attributs) : ces opérations sont appelées modifiants ou
mutateurs.
· A l'opposé des opérations d'accès ou
accesseurs qui ne se contentent que de retourner la valeur d'une
propriété.
De ce qui précède on a donc la Figure 3.11
suivante :
User
IdUser : integer Nom : string
Creer( ) Demarrer( ) Changer ( )
|
|
Figure 3.11 : Représentation graphique d'une
classe
Les associations
Les associations représentent des relations entre
objets, c'est-à-dire entre des instances de classes. Aux
extrémités d'une association figure la multiplicité
(cardinalité) qui est une énumération sous forme
d'intervalle d'entiers positifs ou nuls indiquant le nombre d'objets qui
peuvent participer à une relation avec l'objet de l'autre classe dans le
cadre d'une association. Les multiplicités sont notées de la
manière suivante
1 : Obligatoire (un et un seul)
0..1 : Optionnel (0 ou 1)
0..* ou * : Quelconque
n..* : Au moins n
n..m : Entre n et m (n et m en entier)
I,n,m : I, n, ou m
45
Les multiplicités les plus utilisées sont : 1,*,
1..* et 0..1.
46
Ayant présenté de façon très
brève les concepts du diagramme de classe, et les informations acquises
lors de la réalisation des diagrammes de cas d'utilisation et de
séquence ; ces informations nous ont permis d'avoir le diagramme de
classe suivant :
Figure 3.12 : Diagramme de classe de l'application
PressePapier1.0
· Le diagramme de package
Un package est un regroupement de classes présentant
des liens sémantiques entre elles. Le regroupement de classes en package
est une activité délicate mais d'une importance capitale dans les
logiciels de grande taille. Le regroupement de classes en packages les plus
indépendants possibles améliore la modularité du logiciel
et son développement par des équipes séparées (en
évitant les interactions) ou encore en utilisant les classes statiques
déjà développées et pouvant se mettre en relation
avec les classes de l'application qu'on veut
47
implémenter. La structuration d'un modèle en
package doit respecter deux principes fondamentaux à savoir : la
cohérence et l'indépendance.
La cohérence consiste à regrouper
les classes qui sont proches d'un point de vue sémantique.
Le principe de l'indépendance vise
à concentrer les efforts pour minimiser les relations entre les packages
(autrement dit les relations entre classes de packages différents).
Les classes de la Figure 3.12 étant en
relation avec les classes statiques du système d'exploitation dont un
héritage n'est possible il est vient donc qu'il soit possible de les
mettre en relation grâce aux packages. D'où les packages suivant
:
Figure 3.13 : Package de l'application
PressePapier1.0
Figure 3.14 : Package des classes du système
d'exploitation
48
Des Figure 3.13 et Figure 3.14
on obtient le diagramme de package suivant :
49
Figure 3.14 : Diagramme de package du
PressePapier1.0.
3.2. Schéma fonctionnel de l'application
La figure ci-dessous représente le schéma
fonctionnel de l'application. Son observation permet de comprendre les
différents processus mis en oeuvre pendant le fonctionnement de
l'application, de la détection d'un événement sur le
presse-papier (Clipboard) jusqu'à la sauvegarde de la copie.
50
Figure 3.15 : Schéma fonctionnel de
l'application
51
Cette figure illustre le fonctionnement (en
arrière-plan) global de l'application. Celui-ci est masqué
à l'utilisateur par le biais des interfaces graphiques qui permettent
d'assurer l'ergonomie et la convivialité de l'application.
3.3. Les interfaces du logiciel
L'interface utilisateur (encore
appelé Interface Homme Machine - IHM) représente le moyen
d'interaction disponible sur un système informatique. Les IHM modernes
facilitent la communication entre l'application et l'utilisateur en offrant
toute une gamme de moyens d'action et de visualisation comme des menus
déroulants ou contextuels, des palettes d'outils, des boîtes de
dialogues, des fenêtres de visualisation, etc. Cette combinaison possible
d'options d'affichage, d'interaction et de navigation aboutie aujourd'hui
à des interfaces de plus en plus riches et puissantes. [19]
Les figures suivantes représentent les
différentes interfaces21 de notre application. Elles sont
susceptibles de changer pendant la phase d'implémentation.
Figure 3.16 : fenêtre principale
21 Interfaces réalisé avec le logiciel
« Balsamiq Mockups ».
52
Figure 3.17 : fenêtre de
configuration
Figure 3.18 : fenêtre d'ajout d'une nouvelle
Collection
Figure 3.19 : fenêtre d'ajout d'un nouveau groupe
(de Copies)
53
Ces différentes interfaces représentent le point
de départ de l'implémentation de l'application en C# avec l'IDE
Visual Studio 2010.
3.4. Implémentation
L'implémentation (codage ou programmation) est «
la traduction dans un langage de programmation des fonctionnalités
définies lors de la phase de conception ». [19] Le codage de
l'application s'est fait suivant les principes des méthodes
agiles22 (XP dans notre cas). Dans cette section, nous
présentons d'abord l'environnement de développement Visual Studio
2010. Ensuite nous présenterons le langage de programmation
utilisé et les différents modules développés
enfin.
3.4.1. Environnement de développement et langage de
programmation
3.4.1.1. Présentation de Visual Studio 2010
Visual Studio est un ensemble complet d'outils de
développement permettant de générer des applications Web
ASP.NET, des Services Web XML, des
applications bureautiques et des applications mobiles. Visual Basic, Visual C#
et Visual C++ utilisent tous le même environnement de
développement intégré (IDE), qui permet le partage
d'outils et facilite la création de solutions à plusieurs
langages. Par ailleurs, ces langages utilisent les fonctionnalités du
.NET Framework, qui fournit un accès à des technologies
clés simplifiant le développement d'applications Web ASP et de
Services Web XML. [20]
3.4.1.2. L'architecture .Net
L'architecture .NET (nom choisi pour montrer l'importance
accordée au réseau, amené à participer de plus en
plus au fonctionnement des applications grâce aux services Web),
technologie appelée à ses balbutiements NGWS (Next Generation Web
Services), consiste en une couche Windows, ou plutôt une collection de
DLL librement distribuable et maintenant directement incorporée dans le
noyau des nouvelles versions de Windows.
Cette couche contient un nombre impressionnant (plusieurs
milliers) de classes (tous les langages de .NET doivent être
orientés objet), ainsi que tout un environnement d'exécution (un
run-time, ou couche logicielle si vous préférez) pour les
programmes s'exécutant sous contrôle de l'environnement .NET. On
appelle cela le mode géré ou managé (managed code). La
notion de run-time n'a rien de nouveau : les programmeurs en Visual Basic la
connaissent depuis longtemps. Les programmeurs Java connaissent aussi la notion
de machine virtuelle.
22 Comme précisé dans le cahier de
charge.
54
Néanmoins, même si le run-time .NET est, dans les
faits, une machine virtuelle, Microsoft a toujours soigneusement
évité d'employer ce terme, sans doute trop lié à
Java et à Sun (Standard University Network)... Un run-time fournit des
services aux programmes qui s'exécutent sous son contrôle. Dans le
cas de l'architecture .NET, ces services font partie de ce que l'on appelle le
CLR (Common Language Run-time) et assurent :
· le chargement (load) et l'exécution
contrôlée des programmes ;
· l'isolation des programmes les uns par rapport aux autres
;
· les vérifications de type lors des appels de
fonctions (avec refus de transtypages hasardeux) ;
· la conversion de code intermédiaire en code
natif lors de l'exécution des programmes, opération
appelée JIT (Just In Time Compiler) ;
· l'accès aux métadonnées
(informations sur le code qui font partie du code même) ;
· les vérifications lors des accès
à la mémoire (pas d'accès possible en dehors de la zone
allouée au programme) ainsi qu'aux tableaux (pas d'accès en
dehors de ses bornes) ;
· la gestion de la mémoire, avec ramasse-miettes
automatique ;
· la gestion des exceptions ;
· la sécurité ;
· l'adaptation automatique des programmes aux
caractéristiques nationales (langue, représentation des nombres
et des symboles, etc.) ;
· la compatibilité avec les DLL et les modules
COM actuels qui s'exécutent en code natif non contrôlé par
.NET.
Les classes .NET peuvent être utilisées par tous
les langages prenant en charge l'architecture .NET. Ces classes sont
regroupées dans des espaces de noms (namespaces) qui se
présentent en quelque sorte comme des répertoires de classes.
Quelques espaces de noms et quelques classes (quelques-uns seulement, parmi des
milliers) :
55
Tableau 3.1 : Les classes de l'architecture
.NET
Espace de noms
|
Description
|
Exemples de classes
|
System
|
Accès aux types de base Accès à la
console.
|
Int32, Int64, Int16 Byte, Char String Float, Double, Decimal
Console Type
|
System.Collections
|
Collections d'objets.
|
ArrayList, Hashtable, Queue, Stack,
SortedList
|
System.IO
|
Accès aux fichiers.
|
File, Directory,
Stream, FileStream,
BinaryReader, BinaryWriter TextReader, TextWriter
|
System.Data.Common
|
Accès
ADO.NET aux bases de données.
|
DbConnection, DbCommand, DataSet
|
System.Net
|
Accès au réseau.
|
Sockets
TcpClient, TcpListener UdpClient
|
System.Reflection
|
Accès aux métadonnées.
|
FieldInfo, MemberInfo, ParameterInfo
|
System.Security
|
Contrôle de la sécurité.
|
Permissions, Policy Cryptography
|
System.WinForms
|
Composants orientés Windows.
|
Form, Button, ListBox
MainMenu, StatusBar, DataGrid
|
System.Web.UI.WebControls
|
Composants orientés Windows.
|
Button, ListBox, HyperLink DataGrid
|
|
56
3.4.1.3. Présentation du langage de
programmation C#
Sous la demande de Microsoft, Anders Hejlsberg23 a
mis au point un système pour rendre le développement
d'application Windows et Web beaucoup plus aisé. [21] Une nouvelle
architecture est née suivit d'un langage qui devient aussi tôt la
référence et le principal langage pour Microsoft : c'est le
« C Sharp » ou encore C#.
C'est le langage star de la nouvelle version de Visual Studio
et de l'architecture .NET. Il est dérivé du C++. Il reprend
certaines caractéristiques des langages apparus ces dernières
années et en particulier de Java (qui reprenait déjà
à son compte des concepts introduits par Smalltalk24 quinze
ans plus tôt) mais très rapidement, C# a innové et les
concepts ainsi introduits sont aujourd'hui communément repris dans les
autres langages.
C# peut être utilisé pour créer, avec une
facilité incomparable, des applications Windows et Web. C# devient le
langage de prédilection d'
ASP.NET qui permet de créer des
pages Web dynamiques avec programmation côté serveur.
C# s'inscrit parfaitement dans la lignée C ?
C++ ? C# : [22]
· le langage C++ a ajouté les techniques de
programmation orientée objet au langage C (mais la
réutilisabilité promise par C++ ne l'a jamais été
qu'au niveau source) ;
· le langage C# ajoute au C++ les techniques de
construction de programmes sur base de composants prêts à l'emploi
avec propriétés et événements, rendant ainsi le
développement de programmes nettement plus aisé. La notion de
briques logicielles aisément réutilisables devient
réalité.
3.4.2. Présentation des différents
modules
L'application est constituée de modules qui assurent
chacun la réalisation d'une de ses fonctions. Ces modules assurent la
gestion des copies, des groupes, des collections, de la sauvegarde et de la
restauration des données.
3.4.2.1. La gestion de la copie
La gestion les copies représente la fonction principale
de l'application. Pouvoir récupérer le contenu du presse-papier
chaque fois qu'il est modifié est le défi qu'il a fallu relever
à ce niveau. Ce module est le plus important de l'application.
23 Né au Danemark en 1961, il est le concepteur
du C# et principal architecte chez Microsoft.
24 Langage de programmation
L'élément clé de ce module est la classe
ClipObjet. Cette classe expose des méthodes permettant de sauvegarder
les données contenues dans le presse-papier. L'application étant
inscrite comme visionneuse du presse-papier (voir figure
3.20), chaque fois que l'utilisateur effectue une
copie, Windows lui envoie un message qui est traité dans sa WndProc. Si
le message envoyé est WM_DRAWCLIPBOARD25, le contenu du
presse-papier est stocké dans une liste chainée de ClipObjet,
LinkedList<ClipObjet> (Voir figure 3.21).
Figure 3.20 : inscription d'une application comme
visionneuse du presse-papier 3.4.2.2. La gestion des collections et des
groupes.
a. Gestion des Groupes
Un groupe est considéré dans l'application comme
étant un ensemble de copies réalisées par l'utilisateur.
Chacune des copies réalisées est stockée dans la
même structure à savoir une liste chainée dans laquelle
chaque nouvelle copie vient se positionner au-dessus de la pile.
L'implémentation de ce comportement est illustrée à la
Figure 3.21.
57
25 Message envoyé quand le contenu du
presse-papier change.
58
Figure 3.21 : sauvegarde du contenu du presse-papier
« Clipboard »
Ceci rend la structure d'un groupe assez intéressante.
En plus de contenir des propriétés permettant de l'identifier
dans la chaine de données de l'application, elle contient
également une liste chainée de copie. L'objet groupe est
représenté par la classe GroupeClass. Cette
classe expose les méthodes Del, DelCopie, AddCopie qui
permettent respectivement de supprimer le groupe, de supprimer une copie dans
un groupe et d'ajouter une copie dans un groupe.
59
b. Gestion des Collections
Une collection est considérée comme étant
un conteneur de groupe. Elle peut contenir un ou plusieurs groupes.
La structure d'une collection est assez simple. Elle est
représentée par la classe CollectionClass qui
contient des propriétés permettant de l'identifier. Cette classe
expose les méthodes Add et Delete qui permettent respectivement
d'ajouter et de supprimer une collection dans la chaine de données de
l'application. Il est important de noter que la suppression d'une collection
entraine la suppression de tous les groupes qu'elle contient.
3.4.2.3. La sauvegarde et la restauration des
données
Le module de gestion de la sauvegarde et de la restauration
des données est celui qui permet de conserver toutes les données
manipulées par l'application. Il permet aussi pendant le lancement de
l'application de restaurer les données présentes à la
fermeture. Sa mise en oeuvre a été facilitée par la
sérialisation et la désérialisation.
La sérialisation consiste à rendre un objet
susceptible d'être enregistré sur un disque ou d'être
transmis à une autre machine via une ligne de communication. La
désérialisation consiste à créer et initialiser un
objet à partir des informations provenant d'un fichier. [22]
Lorsqu'on ferme une application,
l'évènement Closing est déclenché
juste avant que l'application ne se ferme. On capture cet
évènement qu'on traite. Le traitement de cet
évènement consiste à sérialiser la chaine de
données manipulées par l'application.
Les données sauvegardées sont restaurées
pendant le chargement de l'application. Ceci est géré dans
l'évènement Load qui est déclenché
pendant le lancement de l'application. La mise en oeuvre de la
désérialisation permet de réaliser cette restauration.
Le travail ci-dessus a été réalisé
en trois grandes étapes. La première a consisté à
modéliser à travers les différents diagrammes d'UML les
cas d'utilisations, le comportement et obtenir ainsi la vue statique de
l'application. La deuxième étape a été
consacrée à la réalisation des interfaces de
l'application. La troisième a consisté à
l'implémentation des modules principaux de l'application. Ces trois
étapes nous ont permis d'avoir un prototype fonctionnel de notre
application dont les tests et le coût estimatif feront l'objet du
chapitre suivant.
60
TESTS ET GUIDE D'UTILISATION
Ce chapitre marquera la fin de notre travail. Nous y
présenterons d'abord les cas d'utilisation du logiciel et ses
différentes fonctionnalités à travers des interfaces.
Ensuite il sera question pour nous de donner les configurations minimales
requises pour l'utilisation du logiciel et enfin nous allons donner un
coût estimatif de la réalisation de cette application.
4.1. Présentation de l'application
4.1.1. Fenêtre principale
Dès le lancement de l'application, la fenêtre
suivante s'affiche.
Figure 4.1 : fenêtre principale
1-
61
Barre de titre : elle contient le nom
d'application (PressePapier1.0)
2- Espace de visualisation des copies : elle
contient les différentes copies appartenant à un groupe. (Dans
notre cas, ces copies appartiennent au groupe Word.)
3- Groupes : contiennent un ensemble de
copies.
4- Espace d'aperçu d'une image : il
présente l'aperçu d'une image lorsque l'on clique sur une copie
correspondant à une image.
5- Collections : elles contiennent un ou
plusieurs groupes
6- Barre de menu : elle contient les
différents menus qui donnent accès à toutes les
fonctionnalités de l'application
4.1.2. Fonctionnalités de l'application
L'application permet de :
· Créer une nouvelle collection
· Créer un nouveau groupe
· Enregistrer les structures de données de
l'application
La création d'une collection, d'un groupe et
l'enregistrement de la structure de donnée de l'application se font
à partir du menu Fichier de l'application. La
Figure 4.2 présente le menu
Fichier.
Figure 4.2 : présentation du menu «
fichier »
En cas de clique sur « nouvelle collection » ou
« nouveau groupe », les fenêtres présentées
respectivement à la Figure 4.3 et la Figure 4.4
s'affichent.
62
Figure 4.3 : Fenêtre de création d'une
nouvelle Collection
Figure 4.4 : Fenêtre de création d'un
nouveau Groupe
4.2. Configuration minimale
L'application nécessite pour fonctionner, les
caractéristiques minimales suivantes :
· 933 Mhz de processeur
· Une RAM de 256 Mo
· Une carte graphique de 32 Mo
· Un système d'exploitation Windows XP
· Un écran 10»
· La Framework .NET 2.0 ou plus.
4.3. Coût estimatif du projet
Cette section donne une estimation du coût total du projet
c'est-à-dire les coûts développement de l'application et
des équipements nécessaires pour sa réalisation.
63
4.3.1. Estimation du coût des équipements
Pour la réalisation de ce projet, nous avons eu
besoins des outils détaillés dans le tableau ci-dessous :
Tableau 4.1 : Détail des besoins pour la
réalisation du projet
Désignation
|
Prix Unitaire
|
Quantité
|
Prix Total
|
Hardware
|
Ordinateur Portable
|
450 000
|
2
|
900 000
|
Disque Dur externe
|
50 000
|
1
|
50 000
|
Clé internet
|
35 000
|
2
|
70 000
|
Software
|
Windows 7 Pro
|
150 594,9826
|
2
|
301 189,96
|
Visual Studio 2010
|
1 088 838
|
1
|
1 088 838
|
PowerAMC
|
84 838
|
1
|
84 838
|
Balsamiq Mockups
|
20 000,7
|
1
|
20 000,7
|
Autres
|
Connexion internet
|
60 000 (x2)
|
5 (mois)
|
600 000
|
|
Total
|
3 114 066,66
|
|
4.3.2. Estimation du coût de développement
4.3.2.1. Contexte de développement d'un
logiciel
Le développement d'un logiciel se fait
généralement dans un contexte où on a un client
(entreprise, particulier) qui demande à des ingénieurs en
informatique de lui développer un logiciel. La précision de ce
contexte est importante pour la compréhension des notions telles que le
coût de développement ou le contrat des besoins du client (la
typologie des logiciels).
4.3.2.2. Estimation de la charge
a. Définition des concepts clés pour la
compréhension de l'estimation de la charge
La charge est la quantité de travail
qu'une personne peut réaliser en jour/homme (J/h), en
mois/homme27 (M/h) ou en année/homme
(A/h). [23]
26 Les prix des software ont été
converti du dollar au F CFA en prenant 1$ = 502 F CFA.
27 C'est la charge sur un moi : en
général 20 jours.
64
La taille du projet se mesure à sa
charge. L'ordre de grandeur est donné selon les normes
ISO [23]:
|
|
Charge < 6 M/h
|
|
6 M/h <charge <12
M/h
|
|
12 M/h <charge <30
M/h
|
|
30 M/h <charge <100
M/h
|
|
100 M/h <charge
|
|
|
très petit projet
petit projet
projet moyen
grand projet
très grand projet
La durée du projet dépend de la
charge et du nombre de personnes infectées. Par exemple
60 M/h peuvent être fait [23] :
· par 1 personne pendant 5
ans
· Par 10 personnes pendant 6
mois
· Par 60 personnes pendant 1
mois.
b. Estimation de la charge
Barry W. Boehm propose en 1981 une méthode
(COCOMO : Constructive Cost Model) basée sur la
corrélation entre la taille d'un projet et sa charge en fonction des
hypothèses suivantes :
· Il est facile à un informaticien d'estimer le
nombre de lignes source.
· La complexité d'écriture d'un programme est
la même quel que soit le langage de programmation.
Les formules suivantes permettent d'estimer la charge et le
délai d'un projet :
Charge = a. (K isl)b Délai = c.
(Charge)d
Avec: K isl égale au nombre de milliers
de lignes sources.
Et les paramètres a, b, c et d
qui dépendent de la catégorie du projet.
Classification : [23]
Projet simple: < 50 000 lignes
Projet moyen: 50 000 < lignes <
300 000 Projet complexe: > 300 000 lignes
65
Tableau 4.2 : Paramètres associés au type
de projet [23]
Type de projet
|
Charge en M/h
|
Délai en M
|
|
a = 3.2
|
c = 2.5
|
Simple
|
|
|
|
b = 1.05
|
d = 0.38
|
|
a = 3
|
c = 2.5
|
Moyen
|
|
|
|
b = 1.12
|
d = 0.35
|
complexe
|
a = 2.8
|
c = 2.5
|
|
b = 1.2
|
d = 0.32
|
|
Selon la classification de la méthode
COCOMO il vient que notre projet corresponde à un projet simple au vue
de ses 1556 lignes de codes. Ainsi pour le calcul de la charge et du
délai nous avons les paramètres a = 3.2, b = 1.05, c =
2.5, d = 0.38 qui conduisent aux calculs suivants :
Charge = 3, 2 x 1, 5561,05 5M/h
Délai = 2, 5 x 50,38 5Mois
c. Cout du logiciel
L'unité de coût des logiciels s'exprime
traditionnellement en Mois/homme (M/h) ou en Année/homme (A/h) qu'il ne
faut pas confondre avec la durée du développement. Par exemple
l'emploi de trois ingénieurs sur une durée de
18 mois correspond à un coût de 54 M/h
ou 4,5 A/h. Le « volume » ou la «
taille » d'un logiciel est généralement exprimé en
nombre de lignes de code source ou d'instructions (en abrégé ls
ou kls pour millier de lignes source) que comporte le logiciel livré et
prêt à l'emploi. C'est ce paramètre, qui correspond
à la partie exécutable sur machine, qui a été
retenu comme indicateur principal de la quantité d'information contenue
dans le logiciel. La productivité d'un développement s'exprimera
en ls/h. Cet indicateur dénote la difficulté de fabrication du
logiciel. Ces unités peuvent avoir, selon la SGR
(Standish Group Report) un ordre de grandeur. On a :
· 1 H/An = 1350h,
· 1h ~ 50€,
· Productivité 2 à 5
lignes/h.
66
Ainsi notre logiciel correspond à une charge de
5M/h O, 4A/h ce qui nous donne une durée de
540 heures avec une productivité de 2 à 3 lignes de code par
heure. On a donc le tableau suivant :
Tableau 4.3 : Coût du
développement
Nombre de lignes
|
A/h
|
Heures
|
Coût
|
1 556
|
0,4
|
540
|
17 550 000 FCFA
|
Du coût estimatif de la recherche et celui du logiciel
on obtient un coût total estimatif de 20 664 066,66
FCFA.
Tout au long de ce chapitre nous avons d'abord
présenté les fonctionnalités du logiciel à travers
des interfaces, ensuite nous avons donné les configurations minimales
d'utilisation et enfin nous avons pu estimer le coût du projet.
67
CONCLUSION GENERALE
Ce mémoire rédigé dans le cadre des
travaux de fin d'étude du second cycle à l'ENSET de Douala en vue
de l'obtention du DIPET 2, nous a conviés à l'étude d'un
concept (presse-papier) régulièrement utilisé par la
population du village planétaire des TIC (Technologie de l'information
et de la communication) ; mais peu connu de ce grand public. D'où la
nécessité d'une application de gestion du presse-papier.
La mise sur pied d'une telle application permettra à
tout utilisateur de pouvoir faire des copies multiples et les utiliser lorsque
le besoin se fera ressentir, d'automatiser des tâches
régulièrement exécutées en vue d'une optimisation
du temps de travail.
Pour atteindre nos objectifs nous avons dû
procéder de manière méthodique. Ainsi une étude
préalable du noyau du système d'exploitation
Windows nous a permis de comprendre le fonctionnement du presse-papier au sein
d'un système d'exploitation en général et en particulier
au sein de Windows. Les connaissances acquises en matière d'outils
d'analyse tel qu'UML et de programmation orienté objet au cours de notre
formation à l'ENSET de Douala nous ont permis d'une part de
rédiger un cahier de charges et d'autre part d'implémenter notre
application.
Une fois la phase de développement achevée et en
dépit de tous les problèmes rencontrés, la
réalisation des essais a permis de confirmer à 95%
les attentes du cahier de charges.
Il sera intéressant dans le cadre des recherches
futures d'approfondir l'étude sur l'architecture du noyau de Windows et
du fonctionnement de ce dernier, d'étendre cette application sous
d'autres plates-formes et même de permettre une intégration dans
certaines applications régulièrement utilisées dans le
cadre de la duplication des données.
68
REFERENCES BIBLIOGRAPHIQUES
[1]
http://www.clubic.com/article-309932-1-remplacer-presse-papiers-windows.html
(Visité le 19-03-2013)
[2]
http://fr.wikipedia.org/wiki/Noyau_de_système_d'exploitation
(Visité le 24-11-2012)
[3] Jason Garms & AL-S & SM, Ressources
d'Expert
[4]
http://maclocal.free.fr/files/snow_leopard_noyau_64bit.html
(Visité le 10-12-2012)
[5]
http://www.t411.me/torrents/mac-osx-snow-leopard-v10-6-7
(Visité le 10-12-2012)
[6] Philipe Thierry, Présentation du
noyau de linux, projets pluridisciplinaire en équipe, 16 Novembre
2010
[7]
http://www.linuxcertif.com/doc/Compiler_le_Noyau_Linux/
(Visité le 10-12-2012)
[8] James Okolica, Gilbert L. Peterson,
Extracting the windows clipboard from physical memory, Digital Investigation 8
(2011)
[9] Charles Petzold, Programming Windows: The
definitive guide to the Win32 API, Fifth Edition, Microsoft Press, Dec 2001,
1290Pages
[10]
http://msdn.microsoft.com/en-us/library/windows/desktop/ms649013,
(visité le 30/01/2013)
[11]
http://www.clipboardextender.com/end-user-articles/using-the-clipboard,
(visité le 10/04/2013)
[12]
http://msdn.microsoft.com/en-us/library/windows/desktop/ms649013(v=vs.85).aspx#_
win32_Synthesize _Clipboard_Formats, (visité le 10/04/2013)
[13]
Microsoft.com How to add data to the
clipboard,
http://www.microsoft.com/windowsxp/
using/setup/tips/clip-book.mspx, (visité le 8/02/11).
[14] Charles Petzold, Programming Windows:
Fifth Edition. Microsoft Press 1999.
[15]
http://en.wikipedia.org/w/index.php?title=Clipboard_(computing)&oldid=531773363,
[visité le 30/01/2013]
[16] Olivier Sigaud : Introduction à la
modélisation orientée objets avec UML, support de cours «
Génie Logiciel et Programmation Orientée Objet » de l'ENSTA,
2004
69
[17] Pascal Roques : UML par la pratique,
5e Edition, EYROLLES ISBN 2-212-12014-1
[18] Xavier Blanc, Isabelle Mounier
avec la contribution de Cédric Besse : UML2
pour les développeurs, EYROLLES ISBN 2-212-12029-X
[19] Laurent AUDIBERT, UML 2, Édition
2007-2008
http://www-lipn.univ-paris13.fr/audibert/pages/enseignement/cours.htm
(Visité le 24/04/2009)
[20]
msdn.microsoft.com/fr-fr/library/vstudio/fx6bk1f4(v=vs.100).aspx
(Visité le 31/05/2013)
[21]
http://www.laboratoire-microsoft.org/articles/dev/csharp/
(Visité le 31/05/2013)
[22] Gérard Leblanc, C# et .Net Versions
1 à 4, Eyrolles 2009, ISBN : 978-2-212-12604-4
[23] DI GALLO Frédéric, Cours de
Génie Logiciel ; CNAM BORDEAUX 1999-2000
|