Winnie. Ένα πειραματικό window system. Ελένη Μαρία Στέα FOSSComm

Σχετικά έγγραφα
Απόδοση συστηµάτων thin-client σε ασύρµατα δίκτυα

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΙΣΑΓΩΓΗ

Εικονική Μνήμη (Virtual Μemory)

Λειτουργικά Συστήματα. Εισαγωγή

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ SQL SERVER 2008 R2 Express

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης III

B. Ενσωμάτωση Ιθαγενών Μεθόδων

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

server : Ο υπολογιστής του καθηγητή που θέλουμε να ελέγχει τους υπόλοιπους του εργαστηρίου client : Οι υπολογιστές των μαθητών

Λειτουργικά Συστήματα 1.1 Τι είναι Λειτουργικό Σύστημα (Operating System)

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Ταχύτητα, Απλότητα & Αξιοπιστία

Linux Packet Filtering. Εισαγωγή Netfilter / iptables ADOLF

SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Στοιχεία Θεωρίας Αριθμών Και Εφαρμογές Στην Κρυπτογραφία. Linux Random Number Generator

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Λειτουργικά Συστήματα (Λ/Σ)

Ανάπτυξη Plugins για το AgentSheets

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Προγραμματισμός συστημάτων UNIX/POSIX

Σχεδίαση και Υλοποίηση Μηχανισμού Μεταφοράς Δεδομένων από Συσκευές Αποθήκευσης σε Δίκτυο Myrinet, Χωρίς τη Μεσολάβηση της Ιεραρχίας Μνήμης

Εισαγωγή στην OpenGL: μέρος 1ο

Technical FAQ. Data Encryption: 128bit έως 256Bit με επιλογή πρωτοκόλλου (AES, Triple DES, and TwoFish). Traffic Encryption: 1024bit RCA

Ειδικό Τεύχος : Linux και Ηχος. Η Υποδοµή

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

MusicOnCloud: Μια cloud-based υπηρεσία online streaming μουσικής

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Πρόσβαση μέσω webdav. ΚΕ.Δ.Δ. Τ.Ε.Ι. Μεσολογγίου. 3. Στην συνέχεια πληκτρολογούμε το username και το password και πατάμε στο κουμπί Είσοδος.

Διάλεξη 22η: Επιπλέον στοιχεία της C

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:

Σημειωματάριο Τετάρτης 25 Οκτ. 2017

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Λειτουργικό Σύστημα: διαχείριση πόρων. Διαχείριση αρχείων. Τι είναι ένα αρχείο ; Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Βιοϊατρική τεχνολογία

ΚΑΛΟΥΠΩΜΑΤΑ & ΜΕΤΑΤΡΟΠΕΣ

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

ΤΕΙ Πελοποννήσου Τμήμα Πληροφορικής. Οδηγίες Εγκατάστασης VPN Σύνδεσης στο ΤΕΙ Πελοποννήσου

Δομές Δεδομένων. Σημειώσεις από το εργαστήριο για τον χειρισμό του προγράμματος Eclipse. 5ο εξάμηνο. v1.0

PowerShell Εαρινό Εξάμηνο

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Γραφικά Υπολογιστών Εισαγωγή

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 5 - Editor

Wrapper Classes, Abstract Classes and Interfaces

Κεφάλαιο 1. Εγκατάσταση και Περιβάλλον του SQL Server 2014

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run

Προγραμματισμός ΙI (Θ)

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 6 C & Assembly

ΕΓΚΑΤΑΣΤΑΣΗ ΕΦΑΡΜΟΓΩΝ ΓΙΑ ΠΡΟΣΩΠΙΚΟ ΥΠΟΛΟΓΙΣΤΗ (MS WINDOWS, LINUX, MACOS)

API: Applications Programming Interface

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

ΓΕΩΠΟΝΙΚΗ ΣΧΟΛΗ ΑΠΘ Εργαστήριο Πληροφορικής στη Γεωργία

Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ

3D FLASH ANIMATOR (3DFA)

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

Εργαστήριο Λειτουργικών Συστημάτων. File Systems

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΛΟΓΙΣΜΙΚΟ (software)

MS SQL 2012 Express (Εγκατάσταση με Advanced Services)

ΔΕ10: Πληροφοριακά Συστήματα Διοίκησης IΙ Εργαστήριο # 2

EPL 660: Lab 4 Introduction to Hadoop

Προγραμματισμός Συστημάτων Υψηλών Επιδόσεων (ΗΥ421) 3η Εργαστηριακή Άσκηση

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΣΥΣΚΕΥΕΣ ΑΠΟΘΗΚΕΥΣΗΣ (ΜΝΗΜΗ)

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Εισαγωγικό Φροντιστήριο

Εισαγωγή στα Λειτουργικά συστήματα Ι. Καθηγητής Κώστας Αναγνωστόπουλος

Συνάφεια Κρυφής Μνήµης σε Επεκτάσιµα Μηχανήµατα

Εργαστήριο 5. Εαρινό Εξάμηνο

Σχολή Προγραµµατιστών Ηλεκτρονικών Υπολογιστών (ΣΠΗΥ) Τµήµα Προγραµµατιστών Σειρά 112

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

Οδηγός Χρήσης προσωπικού χώρου και επιπλέον χώρου αποθήκευσης δεδομένων στο Τμήμα Πληροφορικής

Εφαρµογές WebGIS Open Source

2.1 Σύνδεση Εξωτερικής Συσκευής στο IDE

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία Διάλεξη 9

Transcript:

Winnie Ένα πειραματικό window system Ελένη Μαρία Στέα elenemst@gmailcom FOSSComm 2013

Winnie : ένα framebuffer window system Παρέχει στα προγράμματα τρόπους να ζωγραφίζουν παράθυρα και να χειρίζονται events από συσκευές Χρησιμοποιεί το Linux /dev/fb0 για το rendering (ανεξάρτητο από drivers)

Overview

Libwinnie Το libwinnie διαβάζει events από τα διάφορα input devices και καλεί το κατάλληλο callback στο event loop mouse input: διαβάζει από το /dev/psaux 3 bytes: keyboard input: θέτει το terminal σε raw mode και διαβάζει από το /dev/tty γραφικά: ζωγραφίζει στο /dev/fb0, χρησιμοποιεί το FBIOGET_VSCREENINFO ioctl για να πάρει το ύψος, το πλάτος, τα bits per pixel, RGBorder, κάνει map το framebuffer από το /dev/fb0 στη μνήμη (mmap), το vsync ioctl δε δούλευε με τον i915

Libwinnie Το libwinnie διαβάζει events από τα διάφορα input devices και καλεί το κατάλληλο callback στο event loop mouse input: διαβάζει από το /dev/psaux 3 bytes: keyboard input: θέτει το terminal σε raw mode και διαβάζει από το /dev/tty γραφικά: ζωγραφίζει στο /dev/fb0, χρησιμοποιεί το FBIOGET_VSCREENINFO ioctl για να πάρει το ύψος, το πλάτος, τα bits per pixel, RGBorder, κάνει map το framebuffer από το /dev/fb0 στη μνήμη (mmap), το vsync ioctl δε δούλευε με τον i915

Libwinnie Το libwinnie διαβάζει events από τα διάφορα input devices και καλεί το κατάλληλο callback στο event loop mouse input: διαβάζει από το /dev/psaux 3 bytes: keyboard input: θέτει το terminal σε raw mode και διαβάζει από το /dev/tty γραφικά: ζωγραφίζει στο /dev/fb0, χρησιμοποιεί το FBIOGET_VSCREENINFO ioctl για να πάρει το ύψος, το πλάτος, τα bits per pixel, RGBorder, κάνει map το framebuffer από το /dev/fb0 στη μνήμη (mmap), το vsync ioctl δε δούλευε με τον i915

Libwinnie callbacks Κάθε client του window system μπορεί να κάνει implement κάποια από τα παρακάτω callbacks: void display(window *win); void keyboard(window *win, int key, bool pressed); void button(window *win, int bn, bool pressed, int x, int y); void motion(window *win, int x, int y); void timer(window *win);

Libwinnie callbacks Κάθε client του window system μπορεί να κάνει implement κάποια από τα παρακάτω callbacks: void display(window *win); void keyboard(window *win, int key, bool pressed); void button(window *win, int bn, bool pressed, int x, int y); void motion(window *win, int x, int y); void timer(window *win);

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Winnie: τι παρέχει για drawing στους clients Το winnie και τα προγράμματα που έχουν γραφτεί γι' αυτό (clients) έχουν πρόσβαση σε ένα κοινό framebuffer Το libwinnie ξαναζωγραφίζει (update) τα pixels του union των dirty rectangles Παρέχει στους clients κάποιες βοηθητικές συναρτήσεις: fill_rect blit (αντιγραφή των pixels ενός rectangle σε ένα άλλο) blit_key (σαν τη blit αλλά επιτρέπει και διαφάνεια πχ mouse cursor) draw_line draw_polygon (rasterizer) Οι συναρτήσεις αυτές (εκτός από τη draw_polygon) κάνουν clip στα πλαίσια του παραθύρου

Επικοινωνία του winnie με τους clients Για να ανταλλάσσουν τα προγράμματα events με το winnie πρέπει οι μεταβλητές του public API της libwinnie να μοιράζονται το ίδιο address space με τους clients Τώρα το winnie χρησιμοποιεί ένα plugin σύστημα όπου κάθε client είναι ένα plugin (shared library) Μελλοντικά θα χρησιμοποιεί shared memory για IPC (under construction)

Επικοινωνία του winnie με τους clients Για να ανταλλάσσουν τα προγράμματα events με το winnie πρέπει οι μεταβλητές του public API της libwinnie να μοιράζονται το ίδιο address space με τους clients Τώρα το winnie χρησιμοποιεί ένα plugin σύστημα όπου κάθε client είναι ένα plugin (shared library) Μελλοντικά θα χρησιμοποιεί shared memory για IPC (under construction)

Επικοινωνία του winnie με τους clients Για να ανταλλάσσουν τα προγράμματα events με το winnie πρέπει οι μεταβλητές του public API της libwinnie να μοιράζονται το ίδιο address space με τους clients Τώρα το winnie χρησιμοποιεί ένα plugin σύστημα όπου κάθε client είναι ένα plugin (shared library) Μελλοντικά θα χρησιμοποιεί shared memory για IPC (under construction)

Πώς δουλεύει το plugin σύστημα Κάθε client της libwinnie είναι ένα plugin (shared library) που κάνει link τη libwinnie Έχει μια init και μια cleanup συνάρτηση (c linkage) πχ στην init μπορεί να φτιάχνει ένα παράθυρο και να το κάνει register στο window manager Υπάρχει ένα πρόγραμμα το wserver (winnie server) που ξεκινά κάνοντας κι αυτό link τη libwinnie και φορτώνει τα plugins (shared libraries) από ένα configuration file (dlopen, dlsym) Με αυτό τον τρόπο τα προγράμματα, ο server κι η libwinnie μοιράζονται το ίδιο address space (οπότε μπορούν όλοι να βλέπουν τις δομές του public API του window system)

Πώς δουλεύει το plugin σύστημα Κάθε client της libwinnie είναι ένα plugin (shared library) που κάνει link τη libwinnie Έχει μια init και μια cleanup συνάρτηση (c linkage) πχ στην init μπορεί να φτιάχνει ένα παράθυρο και να το κάνει register στο window manager Υπάρχει ένα πρόγραμμα το wserver (winnie server) που ξεκινά κάνοντας κι αυτό link τη libwinnie και φορτώνει τα plugins (shared libraries) από ένα configuration file (dlopen, dlsym) Με αυτό τον τρόπο τα προγράμματα, ο server κι η libwinnie μοιράζονται το ίδιο address space (οπότε μπορούν όλοι να βλέπουν τις δομές του public API του window system)

Πώς δουλεύει το plugin σύστημα Κάθε client της libwinnie είναι ένα plugin (shared library) που κάνει link τη libwinnie Έχει μια init και μια cleanup συνάρτηση (c linkage) πχ στην init μπορεί να φτιάχνει ένα παράθυρο και να το κάνει register στο window manager Υπάρχει ένα πρόγραμμα το wserver (winnie server) που ξεκινά κάνοντας κι αυτό link τη libwinnie και φορτώνει τα plugins (shared libraries) από ένα configuration file (dlopen, dlsym) Με αυτό τον τρόπο τα προγράμματα, ο server κι η libwinnie μοιράζονται το ίδιο address space (οπότε μπορούν όλοι να βλέπουν τις δομές του public API του window system)

Plugin system

Window Management Ο window manager διαχειρίζεται την ιεραρχία των παραθύρων (πχ δίνει focus, αποφασίζει αν κάποιο win θα γίνει maximize ή unmaximize κα) Χρησιμοποιεί reparenting (δηλ τα windows δεν είναι απευθείας παιδιά του root window αλλά το καθένα είναι παιδί ενός frame που του βάζει ο window manager για να το χειριστεί

Window Management Ο window manager διαχειρίζεται την ιεραρχία των παραθύρων (πχ δίνει focus, αποφασίζει αν κάποιο win θα γίνει maximize ή unmaximize κα) Χρησιμοποιεί reparenting (δηλ τα windows δεν είναι απευθείας παιδιά του root window αλλά το καθένα είναι παιδί ενός frame που του βάζει ο window manager για να το χειριστεί

Debugging Το winnie μπορεί να τρέξει και πάνω από X αν γίνει compile ώστε να χρησιμοποιεί ένα sdl backend αντί να γράφει κατευθείαν στο framebuffer => πιο εύκολο debug

Ένας καλύτερος IPC μηχανισμός Το μειονέκτημα που έχουν τα plugins είναι ότι προφανώς οι clients δεν μπορούν να είναι standalone applications αλλά πρέπει να είναι βιβλιοθήκες Ένας καλύτερος τρόπος για ανταλλαγή events ανάμεσα στο winnie και τους clients είναι χρησιμοποιώντας ένα shared memory space για τις public δομές

Ένας καλύτερος IPC μηχανισμός Το μειονέκτημα που έχουν τα plugins είναι ότι προφανώς οι clients δεν μπορούν να είναι standalone applications αλλά πρέπει να είναι βιβλιοθήκες Ένας καλύτερος τρόπος για ανταλλαγή events ανάμεσα στο winnie και τους clients είναι χρησιμοποιώντας ένα shared memory space για τις public δομές

IPC με shared memory

Shared memory - ο allocator Τα κοινά data structures (δηλ οι δομές που περιέχουν τις public μεταβλητές για το κάθε subsystem) δεσμεύουν χώρο με έναν custom allocator στην κοινή μνήμη (και οι classes γίνονται construct με placement new) Στην αρχή του shared memory block υπάρχει ένας πίνακας με τα offsets στα οποία ξεκινάει το memory block του κάθε subsystem ώστε ο client να μπορεί να τα εξάγει εύκολα όταν έχει κάνει map το shared memory area

Shared memory - ο allocator Τα κοινά data structures (δηλ οι δομές που περιέχουν τις public μεταβλητές για το κάθε subsystem) δεσμεύουν χώρο με έναν custom allocator στην κοινή μνήμη (και οι classes γίνονται construct με placement new) Στην αρχή του shared memory block υπάρχει ένας πίνακας με τα offsets στα οποία ξεκινάει το memory block του κάθε subsystem ώστε ο client να μπορεί να τα εξάγει εύκολα όταν έχει κάνει map το shared memory area

Shared Memory Area

Μελλοντικές προσθήκες TODO: Να τελειώσω το shared memory IPC μηχανισμό (semaphores, named pipes) Βελτιώσεις στο window manager Περισσότερους και πιο περίπλοκους clients (πχ κονσόλα)

Ευχαριστώ πολύ! https://githubcom/hikiko/winnie https://githubcom/hikiko/winnie/tree/winnieclientsas-plugins elenemst@gmailcom