1,108 research outputs found

    Conception et implémentation d'un langage de programmation concurrente modulaire

    Get PDF
    Shared-memory concurrency is a classic concurrency model which, among other things, makes it possible to take advantage of multicore processors that are now widespread in personal computers. Concurrent programs are prone to deadlocks which are notoriously hard to predict and debug. Programs using mutexes, a very popular synchronization mechanism, are no exception. In this thesis we studied deadlock avoidance methods with the aim of making programming with mutexes easier. We first studied a method that uses a static analysis by means of a type and effect system, then a variation on this method in a dynamically typed language. We developed more the second method. It mixes deadlock prevention and avoidance to provide an easy-to-use and expressive deadlock-free locking function. We implemented it as a Hop (dialect of Scheme) library. This lead us to develop a starvation-free algorithm to simultaneously acquire an arbitrary number of mutexes, and to identify the concept of asymptotic deadlock. While doing so, we also developped an optimization of exceptions(finally blocks). Our performance tests seem to show that using our library has negligible impact on theperformance of real-life applications. Most of our work could be applied to other structured programming languages such as Java.La programmation concurrente à mémoire partagée est un modèle classique de concurrence qui permet notamment de tirer parti des processeurs multicoeurs aujourd'hui très répandus dans les ordinateurs personnels. Les programmes concurrents sont sujets au problème des interblocages, notoirement difficiles à prévoir et à éliminer, en particulier dans le cas de l'utilisation du mécanisme de synchronisation très populaire que sont les mutex. Dans cette thèse nous avons travaillé à rendre plus aisée la programmation avec des mutex en étudiant des méthodes d'évitement des interblocages. Nous avons d'abord étudié une méthode utilisant une analyse statique par un système de types et d'effets, puis une variante de cette méthode dans un langage à typage dynamique. La seconde méthode est celle que nous avons le plus développée. Elle combine prévention et évitement des interblocages pour fournir une fonction de verrouillage sans interblocages expressive et utilisable. Nous l'avons implémentée sous forme d'une bibliothèque Hop (dialecte de Scheme). Ce faisant, nous avons développé un algorithme sans famine pour l'acquisition simultanée d'un nombre arbitraire de mutex, et identifié le concept d'interblocage asymptotique. Nous avons également été amenés à proposer une optimisation des exceptions (blocs finally). Nos tests de performances semblent indiquer un impact négligeable de l'utilisation de notre bibliothèque sur des applications concurrentes réelles. La majeure partie de notre recherche pourrait être appliquée à d'autres langages de programmation structurée tels que Java

    Un environnement formel d'assistance à la modélisation de protocoles

    Get PDF
    The use of protocol design toolkits based on UML profiles has been hampered by the lack of methodological support. Indeed, those toolkits should include an assistant based on patterns and dedicated to driving the designer step by step through a well defined methodology. Thus, the TURTLE UML profile is extended with widely accepted service and protocol-oriented patterns. These patterns are built upon UML analysis diagrams i.e. use case, interaction overview and sequence diagrams. Moreover, all these patterns and diagrams have a formal semantics. Finally, they have been implemented in TTool, the open-source toolkit supporting TURTLE. The proposed approach remains general and may be applied to various modeling languages and use-case analysis driven processes

    Vers un profil UML pour la conception de composants multivues

    Get PDF
    International audienceThis paper aims to present an UML profile based on multiviews components. A multiviews component allows to encapsulate and deliver information according to the user's point of view and offers mechanisms to manage the dynamic evolution of viewpoints and consistency among views. In this paper, we first present the notion of multiviews component and its integration into a UML profile, and thus detail an object-oriented multiviews modelling applied to a concrete example. The transition to the coding stage is described through a generic implementation pattern.L' objectif de cet article est de présenter un profil UML permettant la construction de composants logiciels multivues. Un composant multivues est une extension de la notion de composant UML permettant de stocker et restituer de l' information en fonction du profil de l' utilisateur (point de vue), et offrant la possibilité de changement dynamique de point de vue. Dans cet article, nous présentons tout d' abord la notion de classe multivues, puis le composant multivues et son intégration dans un profil UML. Nous illustrons à l' aide d' un exemple concret la mise en oeuvre d' une modélisation objet multivues. La transition vers la phase de codage est présentée à travers un patron d'implémentation générique

    Une démarche orientée modèle pour déployer des systèmes logiciels répartis

    Get PDF
    Revues des Sciences et Technologies de l'Information - "L'Objet, logiciel, base de données, réseaux" (RSTI série)International audienceDeployment of distributed systems involves many heterogeneous technologies. The system administrator has to 1) master the deployment of each technology, 2) adapt it to machine properties and 3) execute it in respect with its order dependencies. These tasks are strongly prone to errors. In this article, we present DeployWare, a model-based approach for complex distributed systems deployment. This approach relies on a metamodel split in two parts. The first allows us to describe properties, dependencies, and actions to perform to deploy software. The second allows us to compose many software instances. This metamodel allows some behavioural deployment verifications to be performed. DeployWare models can be projected onto a component-based execution platform which manages automatically machine's heterogeneity and orchestration of dependencies.Le déploiement de systèmes distribués met en jeu de nombreuses technologies hétérogènes. L'administrateur système doit 1) maîtriser le déploiement de chaque logiciel, 2) l'adapter aux propriétés des machines et 3) l'exécuter en respectant l'ordre de ses dépendances. Ces tâches sont fortement propices aux erreurs. Dans cet article, nous présentons DeployWare, une approche à base de modèles pour le déploiement de systèmes distribués complexes. Cette approche repose sur un méta-modèle en deux parties. La première permet de décrire les propriétés, les dépendances et actions à effectuer pour déployer des logiciels. La seconde permet d'assembler des instances de logiciels. Ces deux parties sont réalisées de manière à rendre possible la vérification comportementale des procédures de déploiement et des systèmes. Les modèles DeployWare sont projetés vers une plate-forme d'exécution à base de composants qui gère automatiquement l'hétérogénéité des machines et l'orchestration des dépendances

    Ingénierie Dirigée par les Modèles : des concepts à la pratique...

    Get PDF
    National audienceL'Ingénierie Dirigée par les Modèles (IDM), ou Model Driven Engineering (MDE) en anglais, s'inscrit dans l'évolution des techniques pour le développement de systèmes informatiques afin d'en maîtriser leurs complexités en se concentrant sur une préoccupation plus abstraite que la programmation classique. En s'appuyant sur des approches génératives, il s'agit d'engendrer tout ou partie d'une application à partir de modèles. Un modèle est une abstraction, une simplification d'un système qui est nécessaire et suffisante pour comprendre un aspect particulier du système modélisé et répondre aux questions que soulève cet aspect du système. Un système peut être décrit par différents modèles liés les uns aux autres, et exprimé chacun à l'aide d'un langage de modélisation dédié (Domain Specific Modeling Languages - DSML). Le principe est d'utiliser autant de langages de modélisation différents que les aspects chronologiques ou technologiques du développement du système le nécessitent. L'activité consistant à définir ces DSML (la syntaxe et la sémantique), appelée métamodélisation, est donc une problématique clé de l'IDM. En outre, les autres problématiques clés de l'IDM consistent à rendre les modèles construits opérationnels (pour la simulation, la génération de code, de documentation ou de test, la validation, la vérification, l'exécution, etc.) à l'aide de composition et de transformation de modèle. A la fois un cours et un tutoriel, cet ouvrage offre une approche didactique et pragmatique d'apprentissage de l'IDM. Nous présentons dans la première partie les principes clés de cette nouvelle ingénierie. Nous introduisons une description précise de l'état des connaissances de manière à aborder les concepts avancés de l'IDM, ainsi que les motivations et l'étendue du bouleversement attendu dans l'ingénierie du logiciel. La deuxième partie aborde ensuite les différentes étapes d'un développement dirigé par les modèles en les illustrant au travers d'un exemple concret. Chaque étape est décrite de manière à présenter l'état de la pratique et introduire certains des outils actuellement disponible

    Une approche sémantique de détection de maliciel Android basée sur la vérification de modèles et l'apprentissage automatique

    Get PDF
    Le nombre croissant de logiciels malveillants Android s’accompagne d’une préoccupation profonde liée aux problèmes de la sécurité des terminaux mobiles. Les enjeux deviennent sans conteste de plus en plus importants, suscitant ainsi beaucoup d’attention de la part de la communauté des chercheurs. En outre, la prolifération des logiciels malveillants va de pair avec la sophistication et la complexité de ces derniers. En effet, les logiciels malveillants plus élaborés, tels que les maliciels polymorphes et métamorphiques, utilisent des techniques d’obscurcissement du code pour créer de nouvelles variantes qui préservent la sémantique du code original tout en modifiant sa syntaxe, échappant ainsi aux méthodes de détection usuelles. L’ambition de notre recherche est la proposition d’une approche utilisant les méthodes formelles et l’apprentissage automatique pour la détection des maliciels sur la plateforme Android. L’approche adoptée combine l’analyse statique et l’apprentissage automatique. En effet, à partir des applications Android en format APK, nous visons l’extraction d’un modèle décrivant de manière non ambiguë le comportement de ces dernières. Le langage de spécification formelle choisi est LNT. En se basant sur le modèle généré, les comportements malicieux exprimés en logique temporelle sont vérifiés à l’aide d’un vérificateur de modèle. Ces propriétés temporelles sont utilisées comme caractéristiques par un algorithme d’apprentissage automatique pour classifier les applications Android.The ever-increasing number of Android malware is accompanied by a deep concern about security issues in the mobile ecosystem. Unquestionably, Android malware detection has received much attention in the research community and therefore it becomes a crucial aspect of software security. Actually, malware proliferation goes hand in hand with the sophistication and complexity of malware. To illustrate, more elaborated malware like polymorphic and metamorphic malware, make use of code obfuscation techniques to build new variants that preserve the semantics of the original code but modify it’s syntax and thus escape the usual detection methods. In the present work, we propose a model-checking based approach that combines static analysis and machine learning. Mainly, from a given Android application we extract an abstract model expressed in terms of LNT, a process algebra language. Afterwards, security related Android behaviours specified by temporal logic formulas are checked against this model, the satisfaction of a specific formula is considered as a feature, finally machine learning algorithms are used to classify the application as malicious or not

    Cadre algébrique pour le renforcement de politique de sécurité sur des systèmes concurrents par réécriture automatique de programmes

    Get PDF
    La société moderne est de plus en plus dépendante de l'informatique dont le rôle est devenu tellement vital au point que tout dysfonctionnement peut engendrer des pertes considérables voire des conséquences irréversibles telles que la perte de vies humaines. Pour minimiser les dégâts, plusieurs techniques et outils ont été mis en place au cours des dernières années. Leur objectif est de faire en sorte que nos systèmes informatiques fonctionnent < < ~tout le temps~> > , et ce, tout en produisant les résultats escomptés. La duplication du matériel et les tests de logiciels sont parmi les techniques les plus utilisées. Cependant, sans méthodes formelles, rien n'est garanti et des problèmes peuvent surgir à tout moment. En contrepartie, l'utilisation de méthodes formelles n'est pas à la portée de tout le monde y compris les programmeurs chevronnés et la tâche reste subtile et complexe même pour les spécialistes. Quelques lignes de code nécessitent parfois des centaines de lignes de preuve difficiles à lire et à comprendre. Malgré tout, leur utilisation n'est plus un luxe, mais plutôt nécessaire afin d'éviter les dégâts engendrés par les mauvais fonctionnements de nos systèmes critiques. Le principal objectif de notre recherche est de développer un cadre formel et automatique pour le renforcement de politique de sécurité sur des systèmes concurrents. Plus précisément, l'idée consiste à ajouter dans un programme des tests à des endroits soigneusement calculés pour qu'une politique de sécurité soit respectée. La nouvelle version du programme préserve toutes les traces de la version originale respectant la politique de sécurité et bloque les traces qui ne peuvent plus respecter la politique de sécurité même si elles sont complétées par certains suffixes. Les principaux résultats ayant contribué à l'atteinte de cet objectif sont : 1. La définition d'une algèbre de processus [symbol] offrant un cadre purement algébrique pour le renforcement de politique de sécurité sur des systèmes concurrents. Plus précisément, nous avons défini un nouvel opérateur qui permet de renforcer, d'une manière intuitive, une politique de sécurité sur un système concurrent. 2. La définition d'une logique, dénotée par [symbol], inspirée des expressions régulières étendues. En effet, [symbol] est une logique linéaire qui exprime la classe de langage régulier, mais avec la possibilité d'exprimer des propriétés infinies. 3. La définition d'une algèbre [symbol] basée sur l'algèbre [symbol]. [symbol] définit un nouvel opérateur de renforcement qui tient compte de l'introduction de la logique. 4. Le développement d'une technique d'optimisation qui, pour une certaine classe de propriétés de sécurité, permet de réduire le nombre de tests insérés dans le programme renforcé.One of the important goals of the software development process is proving that the produced systems always meet their requirements. However, establishing this goal is not only subtle and complex, but also requires high qualified persons. In addition, this operation is mostly omitted due to its high cost and the system is tested while trying to reduce the risk of errors as much as possible. The cost is, nevertheless, paid when this operation is required in order to avoid catastrophic consequences and major errors. In these cases, tools like theorem prover and those used for automatic generation of software are helpful to significantly reduce the cost of proof. Our aim is that this tool proves to be powerful and simple enough to generate benefits even to small companies and individuals with scarce budgets and limited theoretical skills . Many promising formal frameworks for automatic enforcement of security policies in programs have been proposed during the last years. Their goal is to ensure that a program respects a given security policy which generally specifies acceptable executions of the program and can be expressed in terms of access control problems, information flow, availability of resources, confidentiality, etc. The literature records various techniques for enforcing security policies belonging to mainly two principal classes: static approaches including typing theory, Proof Carrying Code, and dynamic approaches including reference monitors, Java stack inspection. Static analysis aims at enforcing properties before program execution. In dynamic analysis, however, the enforcement takes place at runtime by intercepting critical events during the program execution and halting the latter whenever an action is attempting to violate the property being enforced. Recently, several researchers have explored rewriting techniques in order to gather advantages of both static and dynamic methods. The idea consists in modifying a program statically, so that the produced version respects the requested requirements. The rewritten program is generated from the original one by adding, when necessary, some tests at some critical points to obtain the desired behaviors. This thesis aims to propose an algebraic and automatic approach that could generate from a given program, and a security policy, a new version of this program that respects the requested security policy. More precisely, we define an operator [symbol] that takes as input a process [symbol] and a security policy [symbol] and generates [symbol], a new process that respects the following conditions: [symbol] "satisfies" the security policy [symbol]. [symbol], behaviours of [symbol] are also behaviours of [symbol]. [symbol], all good behaviours of [symbol] are also behaviours [symbol]. The main results of our research are the following~: 1. The definition of a process algebra [symbol] offering an algebraic framework for the enforcement of security policies on concurrent systems. 2. The definition of a logic, denoted by [symbol], inspired from Kleene algebras and regular expressions. Basically, it allows to specify properties that can be checked on a trace-based model and properties related to infinite behavior (e.g. a server should not send the password of users). The choice of this logic is motivated by its syntax that is close to the one chosen for processes. In fact, this similarity is helpful to simplify the definition of our formal monitor. 3. The development of an optimization technique which, for a certain class of security properties, reduces the number of tests added in the target
    • …
    corecore