• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
June 17, 2025, 02:44:51 am

Login with username, password and session length
Links
  Thmmy.gr portal
   Forum
   Downloads
   Ενεργ. Λογαριασμού
   Επικοινωνία
  
  Χρήσιμα links
   Σελίδα τμήματος
   Βιβλιοθήκη Τμήματος
   Elearning
   Φοιτητικά fora
   Πρόγραμμα Λέσχης
   Πρακτική Άσκηση
   Ηλεκτρονική Εξυπηρέτηση Φοιτητών
   Διανομή Συγγραμμάτων
   Ψηφιακό Καταθετήριο Διπλωματικών
   Πληροφορίες Καθηγητών
   Instagram @thmmy.gr
   mTHMMY
  
  Φοιτητικές Ομάδες
   ACM
   Aristurtle
   ART
   ASAT
   BEAM
   BEST Thessaloniki
   EESTEC LC Thessaloniki
   EΜΒ Auth
   IAESTE Thessaloniki
   IEEE φοιτητικό παράρτημα ΑΠΘ
   SpaceDot
   VROOM
   Panther
  
Πίνακας Ελέγχου
Welcome, Guest. Please login or register.
June 17, 2025, 02:44:51 am

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Ισραήλ - Ιράν: Πόλεμος στ...
by okan
[Today at 02:33:21]

Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[Today at 02:29:21]

[Οργάνωση Υπολογιστών] Γε...
by RAFI
[June 16, 2025, 22:46:54 pm]

[Σ.Π.Η.Ε.] Γενικές απορίε...
by Nikos_313
[June 16, 2025, 19:49:00 pm]

[ΘΤΠΑ] Γενικές απορίες κα...
by Nikos_313
[June 16, 2025, 16:56:56 pm]

[Εφ.Θερμοδυναμική] Γενικέ...
by Λαμπτήρας
[June 16, 2025, 15:55:08 pm]

[Αρχές Οικονομίας] Να επι...
by _Trob
[June 16, 2025, 13:28:21 pm]

[Σ.Α.Π.Γ.] Εργασία 2025
by Nikos_313
[June 16, 2025, 12:13:45 pm]

Αποτελέσματα Εξεταστικής ...
by Nikos_313
[June 16, 2025, 12:01:53 pm]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by George_RT
[June 16, 2025, 10:22:18 am]

[Διανεμημένη Παραγωγή] Γε...
by Διάλεξις
[June 16, 2025, 01:56:37 am]

Αντικατάστασης πυκνωτή σε...
by nmpampal
[June 15, 2025, 16:25:56 pm]

[Σ.Π.Η.Ε.] Παλιά θέματα -...
by nmpampal
[June 15, 2025, 06:43:15 am]

Το thmmy.gr στο instagram...
by Mr Watson
[June 15, 2025, 00:50:23 am]

[Λογισμός ΙΙ] Απορίες σε...
by el mariachi
[June 14, 2025, 20:47:07 pm]

ΠΡΟΣΟΧΗ στο ανέβασμα θεμά...
by tzortzis
[June 14, 2025, 16:54:08 pm]

Ρυθμίσεις Θεμάτων της Ανώ...
by el mariachi
[June 14, 2025, 11:56:45 am]

Πότε θα βγει το μάθημα; -...
by Nikos_313
[June 14, 2025, 10:00:55 am]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[June 14, 2025, 09:58:14 am]

Αλέξης Τσίπρας, η επιστρο...
by Yamal
[June 14, 2025, 04:42:23 am]
Στατιστικά
Members
Total Members: 9960
Latest: valco08
Stats
Total Posts: 1426680
Total Topics: 31710
Online Today: 169
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 20
Guests: 117
Total: 137
Gianbou
Crainer
stavr0s16
PANKRAV
parvanitid
Akis Papanikolaou
dorapangeiou
Reidemption
Giorgos2222
pdiamantis
george14
Katarameno
Vgs
tasos potsakis
pliroforikarios
Giorgosklin
kofius
Εμφάνιση

Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη.
Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads με προσοχή στα ονόματα των αρχείων!

Νέα!
Πρόγραμμα Χειμερινής Εξεταστικής 2024-2025
  Show Posts
Pages: [1] 2
1  Τμήμα-Πανεπιστήμιο-Παιδεία / Πρακτική Εξάσκηση / Re: Πρακτική Άσκηση ΤΗΜΜΥ 2010-2020 on: June 30, 2020, 14:23:41 pm
Την συμπλήρωσα κ Αλεξιάδη
ΓΜ  Smiley
2  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ηλεκτρονική ΙΙΙ / Re: [Ηλεκτρονική ΙΙΙ] Εργαστήριο 2019/20 on: December 17, 2019, 18:59:06 pm
Καλησπέρα παιδιά!!Πείτε καμιά λύση και στο εξής!Πώς φορτώνουμε βιβλιοθήκες tranzistors στο Spice και γενικά τι έκδοση Spice έχετε??
Βρήκα κάποιες οδηγίες στο αρχείο How to Spice που έχουν ανεβάσει Ηλεκτρονική 3 αλλά εγώ έχω την 17.2..Κάνει??
 Smiley Cheesy
3  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ενσωματωμένα Συστήματα Πραγματικού Χρόνου / Re: [Eνσωματωμένα] Εργασίες 2019 on: August 18, 2019, 05:14:19 am
Quote from: _init on August 17, 2019, 02:49:30 am
χαχαχαχα ξεπουλάει το μαγαζί... Cheesy

Εδώ σ'εχασα λίγο...
Οποίον τρόπο και να διαλέξεις (εκτός αν δεν χρησιμοποίησεις καθόλου παράλληλο προγραμματισμό) θα χρειαστείς τουλάχιστον δυο threads: το server thread και το client thread.
- Το server thread θα κάνει bind() και θα ανοίξει ένα socket που θα κάνει listen(). Κάθε φορά που θα συνδέεται ένα νέο node μέσω του socket που κάνει listen(), θα δημιουργείται ένα νέο socket, θα το πω για ευκολία node socket.
- Το client thread θα λουπάρει τη λίστα με τις IP των nodes και θα προσπαθεί να κάνει connect() σε κάθε node που δεν είναι συνδεδεμένο με το δικό σου node (βλ. status στο προηγούμενο ποστ). Κάθε φορά που θα γίνεται επιτυχές connect() θα δημιουργείται ένα καινούργιο socket, επίσης node socket.

Απο εκεί και πέρα αυτό που έγραφα στο προηγούμενο ποστ είναι ότι ενδεικτικά μπορείς να κάνεις τις εξής υλοποιήσεις:
Α) να φτιάχνεις ένα καινούργιο thread για κάθε node socket, να κάνεις την ανταλλαγή μηνυμάτων και να το κλείνεις μετά
Β) να στέλνεις όλα τα node sockets σε ένα thread και να χρησιμοποιήσεις I/O multiplexing για να κάνεις την ανταλλαγή μηνυμάτων σε όλα μαζί απο το ίδιο thread.

Λέγωντας Ι/Ο multiplexing εννοώ select, poll ή epoll ή kqueue. Προτείνω select ή poll μιας και δεν παίζει με τίποτα να έχουμε πάνω απο 10 nodes ταυτόχρονα συνδεδεμένα οπότε δεν έχει νοήμα να μπλέξεις με τα τελευταία που είναι πιο περίπλοκα.

Αν πάλι δεν έγινα κατανοητός, γράψε μέχρι να το βρούμε  Tongue

Χαχα..Οκ..έτσι όπως το θέτεις δεν γίνεται να μην ρωτήσω κι άλλη ερώτηση.... Tongue

Κοίτα..έχω τις εξής απορίες για να το κλείσουμε το θέμα.. Smiley ελπίζω δηλαδή Tongue Grin:
1.Τα server thread και τα client thread είναι απαραίτητα ή μπορώ να κάνω threads μόνο συγκεκριμένα set εντολών των server και των client
πχ listen,connect κλπ και όχι ολόκληρο τον client και τον server? Grin Γιατί σε προηγούμενα posts αυτό μου είχες πει εκτός αν κατάλαβα εγώ λάθος.. Tongue

2.Τα server thread και client thread σαν τελευταίο όρισμα(το τέταρτο από αριστερά προς τα δεξιά)πρέπει να έχουν το buffer μου ή όποια θέση μνήμης θέλω?και πρέπει να είναι κοινή μεταξύ τους ή όχι?

3.Όταν λες το client thread θα λουπάρει τη λίστα με τις IP των nodes τι εννοείς?Ότι θα είναι μέσα σε while(1) όλες οι εντολές?
Και ακόμα και αυτό να εννοείς πώς θα λουπάρει τη λίστα με τις IPs?Εννοείς ότι κάθε φορά που θα μπαίνει στη λούπα θα προσπαθεί να κάνει connect στην εκάστοτε Receivers IP ή Servers IP να το πω καλύτερα που όρισα?Ή με άλλα λόγια την IP που κάθε φορά εγώ θα ορίζω σαν Receivers IP με τυχαίο τρόπο -εννοώ με τον τρόπο που μας είπανε είτε μέσα στη while(1) είτε έξω από την while(1) μέσω όποιου τρόπου το ορίσαμε εμείς όπως πχ μέσω alarm(1) κλπ- αυτό θα προσπαθεί να την κάνει connect και αν γίνει το connect αυτό θα δημιουργήσει ένα νέο socket?Αυτό εννοείς που λέω ή εννοείς κάτι άλλο θα λουπάρει τις IPs?Επίσης το AEM τo δικό μας πρέπει σε λούπα να το πληκτρολογούμε εμείς ή αλλιώς πρέπει να το εισάγουμε?Για το ΑΕΜ του παραλήπτη μας είπανε..μέσω τυχαίου τρόπου θα επιλέγεται....

4.Είναι απαραίτητο να φτιάχνω ένα καινούργιο thread για κάθε node socket που δημιουργείται ή όχι?
Επίσης είναι απαραίτητο να το κλείνω μετά ή όχι?Φαντάζομαι να κάνω exit εννοείς σωστά?Αλλά είναι απαραίτητο αυτό ή όχι?
Και τέλος για κάθε καινούργιο node socket που δημιουργείται εννοείς από την εντολή sockfd = socket(AF_INET, SOCK_STREAM, 0) και κάτω??

5.Πώς ορίζω την SENDERS IP και την RECEIVERS IP ώς client_address και server_adress αντίστοιχα για να μπορέσω να τις χρησιμοποιήσω μετά στα socket?Θα μπορούσα να κάνω πχ αυτό serv_addr.sin_addr.s_addr=SENDER_ADDR;
   cli_addr.sin_addr.s_addr=RCVER_ADDR;??Επίσης στα sockets πώς ορίζω την IP? Όπως είπα ή αλλιώς?
πχ στο socket του client      bcopy((char *)server->h_addr,            ενώ στο socket του server         serv_addr.sin_addr.s_addr =
                                     (char *)&serv_addr.sin_addr.s_addr,                                                          INADDR_ANY;
                                                            server->h_length);                                                    

6.Ως 4α ορίσματα theads ξεχωριστών και μεμονωμένων set εντολών και όχι όλου του client ή του server όπως πχ αν κάνω threads ξεχωριστά για listening ή για connect τι πρέπει να βάλω?newsockfd ενώ στο listening sockfd?Επίσης σαν 4α ορίσματα των socket threads αν κάνω?την server adress??

7.Για να γίνει αυτή η επαναληψιμότητα τόσο στο διάβασμα των μηνυμάτων όσο και στο ένας server να μπορεί να εξυπηρετήσει πολλούς clients και ένας client να μπορεί να εξυπηρετήσει πολλούς servers(ποιο από τα δύο είναι απαραίτητο??) πρέπει να
βάλω είτε την connect είτε την listen μέσα σε επανάληψη ίση με τον αριθμό των nodes που θα έχουμε??
Πρέπει να κάνω κάτι αντίστοιχο είτε κάνω socket threads είτε όχι και για τα node sockets που τυχόν θα δημιουργηθούν αν γίνει ένα connection ή όχι??

8.Αυτό που λέει στην εκφώνηση της εργασίας <<Αποστέλλονται όλα τα μηνύματα που δεν έχουν σταλεί στον συγκεκριμένο παραλήπτη στο παρελθόν>> πώς το κάνουμε?Ελέγχουμε το socket που μας στέλνει ο client??και πριν στείλουμε κάτι ελέγχουμε τι έχει μέσα στον buffer μας??Επίσης αντίγραφα από τον buffer πρέπει να κρατάει και ο server και ο client????Επομώνως εν τέλει πρέπει να βάλω 2 buffer διαφορετικούς?1 για τον server κι έναν για τον client?Ή θα χειρίζονται και οι 2 τον ίδιο buffer πχ με κάποιο mutex??
Από το socket πρέπει να στέλνουμε 1-1 μήνυμα τη φορά επίσης ή όλα μαζί?Εγώ δεν ξέρω να το κάνω όλα μαζί..μόνο μήνυμα μήνυμα..
Τέλος σε περίπτωση που είναι 1 τελικά ο buffer στον buffer αποθηκεύονται μόνο αυτά που λαμβάνονται(όπως και αναφέρει?)ή και αυτα που δημιουργούνται και αποστέλλονται??Αυτό δεν το ξεκαθαρίζει!!

Τον τρόπο με το I/O Multiplexing άστον καλύτερα γιατί πρώτον πρέπει ακόμα να μάθω τα βασικά Tongue
Δεύτερον όπως είπες κι εσύ για 10 ΑΕΜ να κάτσω να ασχοληθώ με την select() δεν έχει τόσο νόημα..Απλά σε ρώτησα για να πάρω μια ιδέα..

Τελείωσα με τις ερωτήσεις Tongue Tongue  Grin Grin

Όπως και να χει χίλια ευχαριστώ για τις απαντήσεις σου..Αν μου απαντήσεις και σε αυτές πιστεύω με κάλυψες....
 Roll Eyes Roll Eyes Roll Eyes Roll Eyes
4  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ενσωματωμένα Συστήματα Πραγματικού Χρόνου / Re: [Eνσωματωμένα] Εργασίες 2019 on: August 16, 2019, 22:31:18 pm
Quote from: _init on August 16, 2019, 12:56:40 pm
Γενικά, έχει πολλούς τρόπους να το κάνεις. Δεν υπάρχει σωστό. Είναι τι θέλεις να ακολουθήσεις.
Ενδεικτικά, σου έγραψα μια αρχιτεκτονική που θα μπορούσες να εφαρμόσεις, σύμφωνα με την οποία θα έχεις:

- ένα thread που θα κάνεις το bind() και listen() που είναι ουσιαστικά το server thread
- ένα thread που θα προσπαθείς να κάνεις connect() στα διάφορα nodes απο τη λίστα που είναι ουσιαστικά το client thread

Απο εκεί και πέρα ότι συνδεθεί ένα node στο δικό σου είτε μέσω του listening socket (server) είτε μέσω του connect (client) θα δημιουργηθεί ένα νέο socket που είναι αυτό που θα χρησιμοποιήσεις για να ανταλλάξεις μηνύματα με το άλλο node.
Εδώ τώρα μπορείς να ακολουθήσεις δίαφορους τρόπους. Ενδεικτικά:
Α) να δημιουργείς ένα νέο thread για κάθε τέτοιο socket, το οποίο θα διαχειρίζεται την ανταλλαγή μηνυμάτων με το εκάστοτε node.
Β) να έχεις ένα thread που θα στέλνεις όλα αυτα τα sockets και να χρησιμοποιήσεις I/O multiplexing για να διαχειριστείς τις ανταλλαγές μηνύματων.

Αν δεν έγινα κατανοητός πες μου να γράψω κι άλλα... Tongue

Κοίτα..ενώ καταλαβαίνω τι θες να μου πεις σε γενικές γραμμές δεν καταλαβαίνω τι θες να μου πεις ακριβώς. .κάπου το χάνω  Tongue Δεν δίνουμε κάνα ραντεβού στο Πολυτεχνείο καλύτερα να σε ρωτήσω από κοντά??  Tongue Και ο καφές κερασμενος Grin Cool η ανοίγουμε κάνα μπουκάλι  Grin  Cheesy όλα πληρωμένα χαχαχα  Tongue

Οκ σοβαρά τώρα..Κοιτα αν μπορείς πες μου λίγο πιο συγκεκριμενα 2 τελευταία πράγματα please γιατί κάπου το χασα.. Ευτυχώς που έχουμε κάνα μήνα ακομα μεχρι να παραδοσουμε την εργασία  Tongue


Κοίτα θα σου πω έναν τρόπο υλοποίησης ετσι όπως τα κατάλαβα εγώ..και θα σε κάνω και μια δυο διευκρινιστικες και επιβεβαιωτικες ερωτήσεις πάνω σε αυτά που μου είπες για να δω αν τα κατάλαβα τελικά σωστά.....


1.Ας πούμε ότι φτιάχνουμε μια λουπα που δημιουργεί threads και μέσα υπαρχει το connect και ένα thread που παίρνει σαν όρισμα τη συνάρτηση connection και κάνει connection..η λουπα διαρκεί μέχρι να γίνει connection με ανώτατο όριο όσος είναι και ο αριθμός των nodes αλλιώς επιστρέφει μήνυμα λαθους
2.Αντιστοιχα φτιαχνουμε μια λουπα για το listen όπου καλουμε τη συνάρτηση listening που φτιαξαμε μέσα στην οποία υπάρχει το listen() και το bind() από εντολες
3.Φτιαχνουμε όχι σε λουπα όμως αυτα δύο ξεχωριστά threads ένα για το server socket κι ένα για το client socket αντιστοιχα που παίρνουν σαν όρισμα
2 αντιστοιχες συναρτησεις που φτισξαμε για αυτό το σκοπό στις οποίες βαζουμε μέσα τις εντολές των sockets..
Κατά τα άλλα προφανώς βάζουμε και mutex cond κλπ για το κλείδωμα κλπ κοινών περιοχών μνήμης..

Είναι σωστή αυτή η υλοποιηση??Αν υποθέσουμε οτι βάζουμε μέσα ακριβώς ότι σου είπα από εντολες..

Και τέλος οι εξής διευκρινιστικες ερωτήσεις:

α.Με βάση τα λεγόμενά σου πρέπει να βάλουμε σε λουπες τα sockets.....τα threads για το connect και το listen δεν τα βάζουμε σε λούπες..Σωστά????αυτό δεν εννοούσες???

Είναι όμως κι αυτό που λέω εγώ σωστό η όχι????

β.Ακόμη η αλλαγή από την μία κατάσταση server στην client γίνεται αυτόματα σωστά??δηλαδή δεν χρειάζεται ούτε alarm ούτε τίποτα..Σωστά??

γ.Επίσης
Αρα εν τελει δεν είναι απαραίτητο να φτιάξουμε στη main ένα συνολικό server thread και ένα συνολικό client thread??Μπορουμε να το κάνουμε και χωρίς αυτα και μόνο με τα 3 η 4 threads που συζητησαμε??
Οι εντολές του client και του server μέσα στη main δεν θα ναι Μ αυτόν τον τρόπο ούτως η άλλως και σ αυτή την περιπτωση?

δ.Τέλος αυτό με το I/O multiplexing έχεις κάνα link να μου στείλεις?με select()εννοείς??

Τελείωσα για σήμερα ..  Lips Sealed
5  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ενσωματωμένα Συστήματα Πραγματικού Χρόνου / Re: [Eνσωματωμένα] Εργασίες 2019 on: August 16, 2019, 11:08:45 am
Quote from: _init on August 16, 2019, 10:26:17 am
Grin Grin Grin

Τα client και server μπορεις να τα βαλεις ως thread στη main.

Μπορείς να συνδεθείς με ένα node με δυο τρόπους:
- να συνδεθεί αυτό σε εσένα στο listen()ing που κάνεις με το server thread σου
- να συνδεθείς εσύ σ'αυτό κάνωντας connect() με το client thread σου
Και στις δυο περιπτώσεις αφού γίνει establish το connection θα προκύψει ένα νέο socket. Ένα TCP Socket στέλνει και λαμβάνει απο διαφορετικά "κανάλια" πράγμα που σημαίνει ότι μπορείς να λαμβάνεις/στέλνεις απο/προς το αλλο node ταυτοχρονα. Οπότε, αφού επιτευχθεί η σύνδεση με όποιον απο τους δυο τρόπους, χάνεται η έννοια του client/server και τα δύο nodes είναι ίσα (peers).

Υπάρχει και η εξής εναλλακτική:
Να έχεις δύο sockets για τη σύδεση με το κάθε node. Το ένα socket απο το server thread σου και το άλλο socket απο το client thread σου. Στο socket του server thread θα στέλνεις μόνο και στο socket του client thread θα λαμβάνεις μόνο.
Φυσικά, όλοι θα πρέπει να το υλοποιήσουμε με τον ίδιο τρόπο αλλιώς θα υπάρξει πρόβλημα στην επικοινωνία.
Γι'αυτό έστειλα email στον Φλώρο αλλά μάντεψε... Cheesy

Εγώ πάντως ακολούθησα την πρώτη περίπτωση, όπου γίνεται establish το connection με όποιον τρόπο και μετά επικοινωνούνε τα nodes και προς τις δυο κατευθύνσεις μέσω του ίδιου socket.

Ναι θα τα βάλεις σε μια λίστα και μετά θα τα βάζεις στο πρόγραμμα και προγραμματιστικά θα τα μετατρέπεις σε IP όπως έγραψα στο προηγούμενο ποστ.
Βάλε εσύ τώρα 10 random ΑΕΜ να δεις ότι δουλεύει και θα στείλουν αυτοί τη λίστα 1 μέρα πριν απο το deadline.

Έτσι όπως το έχω καταλάβει θα παράγονται απο το πρόγραμμα. Δεν θα συνδέεσαι δηλαδή εκείνη την ώρα στο RPi για να γράψεις μήνυμα.
Οπότε, μπορείς να κάνεις έναν πίνακα με κάποια μηνύματα και να διαλέγει κάθε φορά ένα απο εκείνα ή μπορείς να στέλνεις το ίδιο μήνυμα κάθε φορά. Δεν διευκρινίζει η εκφώνηση το περιεχόμενο του μηνύματος.
Ναι θα βάζεις έναν timer για μια τυχαία διάρκεια κάθε φορά στο διάστημα που γράφει η εκφώνηση (1-5 ή 5-10 δε θυμάμαι) και όταν τερματίζει ο timer θα παράγεις ένα τυχαίο μήνυμα και θα το προσθέτεις στο buffer σου.

ναι. (και το bind() μαζί)



Οκ.. Smiley Κατάλαβα..Όλα όσα λες είναι ξεκάθαρα..Το μόνο που δεν έχω καταλάβει από αυτά που είπες και είναι και η τελευταία μου ερώτηση..

Τελικά θα έχω
a periptwsh.2 threads ένα server κι ένα client στη main που θα τρέχουν τις ρουτίνες client και server?

Ή θα έχω b periptwsh.4 threads τελικώς?Ένα για το connect , ένα για το listening, ένα για το ένα socket του server και ένα για το άλλο socket του client??

Αυτό δεν έχω καταλάβει..

Εν τέλει έπειτα μου είπες αν κατάλαβα καλά ότι μπορούμε στην b περίπτωση είτε να έχουμε ένα thread για socket εννιαίο είτε 2 threads για server και client??

Αυτά δεν έχω καταλάβει από τις απαντήσεις σου..

ΓΙα τα άλλα σαφώς πάρα πολλά ευχαριστώ!!!!!  Grin Smiley Αλλά και για αυτά Tongue
6  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ενσωματωμένα Συστήματα Πραγματικού Χρόνου / Re: [Eνσωματωμένα] Εργασίες 2019 on: August 16, 2019, 05:47:08 am
Quote from: _init on August 16, 2019, 00:17:25 am
χαρά μου να βοθήσω όσο μπορώ  Cool

Ναι, θεωρητικά θα μπορούσες να κάνεις ένα τέτοιο abstraction (one producer-multiple consumers) αλλά δεν ξέρω κατά πόσο θα βοηθούσε.
Το κάθε node είναι producer με την έννοια ότι συνδέονται σε αυτό άλλα nodes και τραβάνε απο το buffer του και παράλληλα είναι και ένας απο τους πολλούς consumers του κάθε άλλου node που συνδέεται με τη έννοια ότι τραβάει απο το buffer εκείνου.



Μην το συζητάς.. Tongue ..Με βοήθησες πάρα πολύ όπως σου είπα....    Roll Eyes

Βασικά κάτι τελευταίες απορίες έχω μωρέ.. LOL Tongue Τελευταίες τελευταίες ελπίζω......Να κοκκαλώσει το χέρι μου από την πληκτρολόγηση να μην μπορώ να γράψω άλλο.. Tongue

1.Βασικά αυτό για τον consumer-producer στο ρώτησα..γιατί δεν έχω καταλάβει στο πρώτο σκέλος της απάντησής σου που μου είπες για το P2P αν εννοείς

a.ότι θα πρέπει να χωρίσω server και client σε 2 συναρτήσεις και εκεί μέσα στις συναρτήσεις τους να βάλω τα threads(αν και τότε θες 4 threads,1 για το connect 1 για το listen και 2 για τα sockets)και θα τους καλώ από την main σαν συναρτήσεις ή σαν threads..  ή αν εννοείς
b.ότι θα υπάρχουν μέσα στην main αυτά τα 3 threads και απλά θα υλοποιούν αυτές τις λειτουργίες..Και θα προσομοιώνεται έτσι η λειτουργία server και client μαζί..
Τι από τα 2 εννοείς?? Smiley

2.Επίσης πάνω στο ίδιο θέμα με το P2P πώς θα εναλάσσεται η λειτουργία server client?Aπλά μέσω των threads?px 0.1 sec το ένα 0.1 sec το άλλο? Ή θα είναι ανοιχτά και τα δύο πάντα?Όμως αυτό λογικά δεν είναι λάθος?Δεν θα πρέπει για ένα χρονικό διάστημα το κάθε ενσωματωμένο να λειτουργεί είτε μόνο σαν node είτε μόνο σαν server?(πχ με κάποια alarm ή κάτι να ενεργοποιείς την μία ή την άλλη λειτουργία κάθε φορά)

3.Επίσης τη λίστα με τα ΑΕΜΣ και τις IPs είπε μήπως πότε θα τα ανεβάσει??Πέφτει και εξεταστική γαμώτο..Αυτά θα τα βάλουμε σε μια λίστα δηλαδή και από εκεί θα τα τραβήξουμε?Δεν θα τα πληκτρολογεί ο χρήστης?

4.Τέλος τα μηνύματα πώς θα τα παράγουμε..Με μια random τυχαία ανά 1-5 λεπτά μου είπες..Τα μηνύματα επίσης θα παράγονται κι αυτά τυχαία??Ή θα τα πληκτρολογεί ο χρήστης τυχαία??

5.Όταν λες για το listen() ένα thread εννοείς ένα για το listen() και για το bind() μαζί ή μόνο για το listen()??Ενώ εννοείς 1 thread για το client socket ή 2 threads,1 για το client socket κι ένα για το server socket??

Ευχαριστώ και εκ των προτέρων για τη βοήθεια.. Smiley Tongue
7  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ενσωματωμένα Συστήματα Πραγματικού Χρόνου / Re: [Eνσωματωμένα] Εργασίες 2019 on: August 15, 2019, 23:29:18 pm
Quote from: _init on August 15, 2019, 13:18:23 pm
Ένα αρχείο θέλεις, ναι.
Απο εκεί και πέρα έχει πολλούς τρόπου με τους οποίους μπορείς να το υλοποιήσεις.
Ενδεικτικά, μια αρχιτεκτονική είναι:
- Ένα server thread που κάνει listen()
- Ένα client thread που προσπαθεί να κάνει connect() σε άλλα nodes απο τη λίστα
- Ένα thread για κάθε socket που προκύπτει είτε απο τον client είτε απο τον server

Θεωρητικά, θα μπορούσες να κάνεις ένα αρχείο με ένα thread μέσα και να χρησιμοποιήσεις asychronous Ι/Ο multiplexing (linux epoll ή kqueue) για να τα διαχειριστείς όλα αλλά είναι αρκετά πιο σύνθετο και δεν υπάρχει λόγος.

Ένα socket δεν κλείνει μετά απο επιτυχή αποστολή μηνύματος. Για να κλείσεις το socket πρέπει να χρησιμοποιήσεις close() ή shutdown().
Εκτός αν θέλεις να πείς κάτι άλλο και δεν το καταλαβαίνω εγώ σωστά.

Υποτίθεται θα μας δώσουν λίστα με τα ΑΕΜ όσων είναι γραμμένοι στο μάθημα.
Η εκφώνηση λέει ότι το κάθε RPi πρέπει να έχει IP στο δίκτυο της μορφής 10.0.ΧΧ.ΥΥ όπου ΧΧΥΥ το ΑΕΜ του κάθε φοιτητή.
Οπότε, αν σου δώσει λίστα με τα ΑΕΜ εσύ έχεις ουσιαστικά και τις IP όλων των πιθανών nodes αφού έχουν την παραπάνω μορφή.
Άρα, στο πρόγραμμα θα φτιάξεις μια τέτοια λίστα με όλες τις IP και θα βάλεις το client thread σου να σκαναρει ένα ένα item τη λίστα και να προσπαθεί να κάνει connect() -κάνοντας skip nodes που πιθανον θα έχουν συνδεθεί απο server thread, οπότε καλό θα ήταν στον πίνακα με τις IP να κράτας και μια bool status στήλη ώστε να μην προσπαθείς να κάνεις connect σε node που είσαι ήδη συνδεδεμένος-

To buffer ουσιαστικά είναι το ιστορικό των τελευταίων 2000 unique μηνυμάτων που έχει λάβει το node σου + τα μηνύματα που κάνεις generate.

Προσθέτεις μήνυμα στο buffer όταν:
- συνδεθείς με ένα αλλο node, κάνεις receive μήνυμα και ελέγξεις ότι δεν είναι ήδη στο buffer
- κάνεις generate random μήνυμα, όπως αναφέρει η εκφώνηση

Απο εκεί και πέρα, κάθε φορά που κάνεις connect με ένα node του στέλνεις όλο το buffer σου (όπως είναι τη δεδομένη στιγμή) ή του στέλνεις απο το σήμειο και κάτω που είχες μείνει (γιατί λέει στην εκφώνηση ότι πρέπει να κρατας ποια μηνύματα έχει στείλει σε ποιον, οπότε αν δεν έχουν μπει στο buffer σου πάνω απο 2000 μηνύματα απο τότε που συνδέθηκες τελευταία φορά με το Χ node, αν ξανασυνδεθείς δεν χρειάζεται να του στείλεις όλο το buffer απο τη αρχή αλλά μόνα τα καινούργια μηνύματα απο την τελευταία φορά).

Επίσης:
- Δεν σε ενδιαφέρει αν και πως θα φτάσει το μήνυμα σου στον τελικό παραλήπτη.
- Όταν κάνεις generate το δικό σου μήνυμα, απλά το προσθέτεις στο buffer σου και το transmission γίνεται με τον παραπάνω τρόπο.
- Δεν ασχολείσαι καθόλου με τα buffer των άλλων.
- Για το σβήσιμο των παλαιότερων μηνυμάτων υπάρχει μια υλοποίηση στο λινκ που έγραψα στο προηγούμενο ποστ.

Oκ..Κατάλαβα..Ευχαριστώ πάρα πολύ _init..Η βοήθειά σου ήταν valuable.. Smiley
Μια final last question Tongue
Η υλοποίησή της εργασίας με το μοντέλο P2P ουσιαστικά βασίζεται στο consumer-producer μοντέλο με τον consumer ως τον client και τον producer ως τον server??
Απλά στο P2P model ο κάθε consumer-client είναι και producer-server??
Θα μπορούσα δηλαδή να βασίσω την υλοποίησή μου στο producer-consumer μοντέλο θεωρώντας τον consumer ως τον client και τον producer ως τον server?
8  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ενσωματωμένα Συστήματα Πραγματικού Χρόνου / Re: [Eνσωματωμένα] Εργασίες 2019 on: August 15, 2019, 05:59:11 am
Quote from: _init on August 14, 2019, 13:20:40 pm
είναι p2p σύστημα οπότε όλα τα nodes είναι και client και server μαζί. Σε ένα tcp socket μπορείς και να στέλνεις και να λαμβάνεις ταυτόχρονα όποτε εφόσον κάνεις establish το connection μεταξύ των δύο nodes δεν σε ενδιαφέρει ποιος είναι ο client και ποιος είναι ο server.
επίσης, δεν πρέπει να στέλνεις και να λαμβάνεις μόνο τα μηνύματα που αφορούν στο ΑΕΜ σου αλλά όλα τα μηνύματα που έχει το node στο buffer του.

Δεν τίθεται θέμα serialize-deserialize. Στέλνεις κάθε μήνυμα ξεχωριστά (σαν string), όχι όλο το buffer μαζί.

Θα δίνετε λίστα με τα ΑΕΜ, οπότε θα μπορείς να φτιάξεις την ip του κάθε node στο δίκτυο και μετά θα προσπαθείς να κάνεις connect() σε κάθε node απο τη λίστα που θα έχεις φτιάξει.

Η εκφώνηση λέει ότι τα μηνύματα αποθηκεύονται σε ring buffer.
ενδεικτικά: https://embedjournal.com/implementing-circular-buffer-embedded-c/.


ΟΚ..Απλά έχω κάποιες τελευταίες ερωτήσεις πάνω στις απαντήσεις σου..

ΝΟ1 ερώτηση..Στην πρώτη απάντηση που έδοσες για το P2P εννοείς

α.ότι θα έχω 1 τελικό αρχείο(server-client ας το πούμε) με 2 threads μέσα όπου αυτό περιλαμβάνει ουσιαστικά για κάθε thread 1 connection και 1 socket..Δηλαδή καποιο socket πρεπει να ειναι σε standby  
και καποιο να παροσπαθει να κανει connection..Ή αλλιώς ένα socket για να περιμένει για αίτημα connection για αποστολή ή λήψη μηνύματος(λειτουργία server) και ένα socket για να κάνει αίτημα για αποστολή ή λήψη μηνύματος(λειτουργία client)?

β.2 αρχεία ένα server και ένα client με 1 thread το καθένα μέσα

γ.1 αρχείο με ένα thread μέσα????

Εγώ αν το κάνω με 1 αρχείο ξέρω να το κάνω μόνο με 2 threads..Υπάρχει και άλλος τρόπος??Εσύ ποιον τρόπο εννοείς??

ΝΟ2 ερώτηση.Όταν στέλνεις ένα μήνυμα πχ 500 χαρακτήρες γράφεις ότι πρέπει να το στείλουμε 1-1 τα μηνύματα σωστά?Πώς όμως θα γίνει αυτό?Αφού όταν ανοίγεις ένα socket αυτό κλείνει μόνο του..Πρέπει να το έχω πάντα ανοιχτό?Πώς θα το κάνω??

ΝΟ3 ερώτηση μου έγραψες <<Θα δίνετε λίστα με τα ΑΕΜ, οπότε θα μπορείς να φτιάξεις την ip του κάθε node στο δίκτυο και μετά θα προσπαθείς να κάνεις connect() σε κάθε node απο τη λίστα που θα έχεις φτιάξει.>>
Που θα δίνετε η λίστα?? Την γραφω εγώ εννοείς??  Επίσης εννοείς ότι πρέπει εγώ να ορίσω μια τυχαία IP για κάθε ΑΕΜ??Και επίσης πώς θα την εντοπίζω την IP του γείτονα για να του στείλω μήνυμα??Εγώ αυτό που ξέρω ότι μπορεί να γίνει είναι με μια συνάρτηση πχ findip() που μπορείς να φτιάξεις να βρεις την IP την δικιά σου ενός ενσωματωμένου ας πούμε αλλά όχι να βρεις την IP του γείτονα..του receiver ας πούμε..γι αυτόν φαντάζομαι πρέπει να βάλεις τον χρήστη να πληκτρολογήσει την IP του receiver..Υπάρχει κι άλλος τρόπος??Εννοείς πχ να στέλνω σε όλους τυχαία μηνύματα από όλους και να έχω εκ των προτέρων εγώ ορίσει τα ΑΕΜ και να βάλω πχ μια random που θα επιλέγει τυχαία από την λίστα που έχω ορίσει εγώ με ΑΕΜ ένα ΑΕΜ....??Αυτό πώς γίνεται όμως στην πράξη??Αυτό εννοείς εν τέλει??

ΝΟ4 ερώτηση:  εγώ τα μηνύματα θα τα σβήνω από τον buffer είτε όταν γεμίσει είτε όταν παραδοθεί το μήνυμα στο σωστό παραλήπτη  ?'Η μόνο αν έχει γεμίσει? Το μονο που θα κοιταω δηλαδή ειναι αν το εχω ξαναστειλει σε αυτον που εχω κανει connection? Ή πρέπει να κοιτάω και αν ο παραλήπτης είναι ο τελικός παραλήπτης του μηνύματος που στέλνω??Και τότε να το διαγράφω από τον buffer του παραλήπτη..Βέβαια εδώ υπάρχει το πρόβλημα ότι μπορεί να διαγραφεί μόνο από τον δικό του buffer και όχι από τον buffer των άλλων και οι άλλοι να μην ξέρουν αν διαγράφηκε..Συνεπώς αν ισχύει αυτό οι άλλοι θα συνεχίσουν να στέλνουν το ίδιο μήνυμα σαν να μην στάλθηκε στον τελικό παραλήπτη του..By the way ίσως να υπάρχει κάποιος efficient τρόπος αλλά χρειάζεται ή όχι τελικώς??

ΑΝ μπορείς please πες μου κι αυτές τις ερωτήσεις κι έκλεισα Tongue


9  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ενσωματωμένα Συστήματα Πραγματικού Χρόνου / Re: [Eνσωματωμένα] Εργασίες 2019 on: August 14, 2019, 02:44:15 am
Quote from: Apostolof on June 24, 2019, 23:14:45 pm
Εγώ έκανα δύο συναρτήσεις στον buffer, μία serialize που παίρνει όλο τον buffer και τον κάνει ένα μεγάλο string με συγκεκριμένο format και μία deserialize που παίρνει ένα string (ελπίζοντας ότι θα έχει το σωστό format) και το μεταφράζει σε στοιχεία του buffer. Έτσι ο ένας στέλνει το string της serialize και ο άλλος που το παίρνει κάνει deserialize.

Για να ανακαλύψω τις συσκευές στο δίκτυο και να βρω τις IP, αυτή τη στιγμή, κάνω ένα broadcast ping και μετά χρησιμοποιώ το arp cache. Έπειτα για να δω αν κάθε μία από τις συσκευές που ανακάλυψα είναι online κάνω ξεχωριστά ping τη κάθε μία. Αυτό όμως παίρνει αρκετό χρόνο. Έχετε βρει κάποιο καλύτερο τρόπο; Εσείς τι κάνετε;

Επίσης, παρατήρησα ότι τα timestamps του κάθε node (έχω 2 Rpi και τεστάρω) είναι διαφορετικά ακόμα και για πολύ κοντινές χρονικά καταγραφές, κάνετε κάποιο clock synchronization για να το διορθώσετε; Αν το έχει ψάξει κανείς ας στείλει links/υλικό.


Apostolof καλα ολα αυτα που λες..Αλλα.....Ερωτήσεις:
1.εκανες ενα αρχειο και ειναι ολα τα ενσωματωμενα servers ή υπάρχουν και clients και servers?

Πιο συγκεκριμένα απο αυτο που λεει δεν καταλαβαινεις αν θα ειναι a.polloi clients polloi servers   b.1 server πολλοι clients η c.ολοι servers-clients....Πώς το έκανες εσύ?Σε περίπτωση που είναι όλοι servers-clients όταν βλέπουν κάτι συνδεδεμένο και οι 2 αποστελουν και λαμβανουν μηνυματα αναλογα με το ΑΕΜ και επειτα και οι 2 το αποθηκευουν στη λιστα τους....

2.Αυτο με το serialize deserialize ειναι απαραιτητο??δεν μπορουμε να μετατρεψουμε τους ints σε ενα string και να τα ενσωματωσουμε ολα σε ενα string για να τα στειλουμε ως μηνυματα?

3.Μπορείς να πεις τιποτα παραπανω για το πως ανιχνευεις τις συσκευες? Tongue (ια να ανακαλύψω τις συσκευές στο δίκτυο και να βρω τις IP, αυτή τη στιγμή, κάνω ένα broadcast ping και μετά χρησιμοποιώ το arp cache. Έπειτα για να δω αν κάθε μία από τις συσκευές που ανακάλυψα είναι online κάνω ξεχωριστά ping τη κάθε μία.) κανα link Tongue

4.Τα μηνυματα τα εχεις αποθηκευσει σε ουρα???
10  Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Συστήματα Πολυμέσων / Re: [Πολυμέσα] Εργασία 2018/2019 on: February 08, 2019, 23:22:16 pm
Καλό ερώτημα..Και γω το ίδιο αναρωτιέμαι....
Μάλλον όμως αυθαίρετα το παίρνεις..Αλλιώς σκέφτηκα έναν τρόπο για το πώς προκύπτει(πολύ πολύπλοκο)αλλά δεν νομίζω ότι ζητάει αυτό....Όποιος θέλει το ανεβάζω όμως..(Σου λέει έναν τύπο KBD ή SIN και δεν το σπας....)
11  Μαθήματα Ενεργειακού Κύκλου / Ηλεκτρικές Μηχανές Α / Re: [Ηλεκτρικές Μηχανές Α] Ηλεκτρικές Μηχανές ως μάθημα επιλογής? on: January 16, 2018, 17:52:43 pm
 Τα εργαστήρια είναι υποχρεωτικά?Δηλαδή χωρίς να παρακολουθήσεις το εργαστήριο δεν μπορείς να δώσεις στις τελικές εξετάσεις?
Ή δίνεις με άριστα το 8?
12  Μαθήματα Βασικού Κύκλου / Ηλεκτρονική Ι / Re: [Ηλεκτρονική Ι] Γενικές απορίες,ανακοινώσεις και επικαιρότητα 2013/2014 on: September 12, 2014, 02:39:51 am
Άρα προφανώς εννοείς ότι υπάρχει κάποια ανακύκλωση αλλά δεν αρκεί..Γιατί μπορεί να βάλουν και καινούργια..Και στις ασκήσεις πιστεύεις παίζει αυτό?Από που να διαβάσω θεωρία?Από το βιβλίο του Sedra Smith?Καλό βιβλίο είναι..Καταλαβαίνεις τι γίνεται..Αλλά το θέμα είναι ότι είναι γιγάντιο..Και δεν παίζει να τα χρειάζεσαι όλα..
13  Μαθήματα Βασικού Κύκλου / Ηλεκτρονική Ι / Re: [Ηλεκτρονική Ι] Απορίες στις ασκήσεις 2013/2014 on: September 12, 2014, 02:31:08 am
Μάλιστα..Κατάλαβα..Αυτό για το τρίτο θέμα όμως..για τα άλλα 2?Πιο συγκεκριμένα για το πρώτο..το 2ο είναι πιο κλασικό..
14  Μαθήματα Βασικού Κύκλου / Ηλεκτρονική Ι / Re: [Ηλεκτρονική Ι] Γενικές απορίες,ανακοινώσεις και επικαιρότητα 2013/2014 on: September 10, 2014, 01:41:37 am
Σε ευχαριστώ πάντως πολύ για τη βοήθεια..Το έψαχνα το θέμα αυτό για καιρό.. Άλλη ερώτηση υπάρχει κάτι στάνταρ στις ερωτήσεις θεωρίας που βάζουνε κάθε χρόνο?Θέλω να πω πρέπει υποχρεωτικά να τα διαβάσω όλα από το βιβλίο για να είμαι καλλημένος ή υπάρχει κάποια ανακύκλωση?
15  Μαθήματα Βασικού Κύκλου / Ηλεκτρονική Ι / Re: [Ηλεκτρονική Ι] Γενικές απορίες,ανακοινώσεις και επικαιρότητα 2013/2014 on: September 10, 2014, 01:38:56 am
Έχεις δίκιο αλλά καίγομαι γιατί δίνω το μάθημα και θέλω να το περάσω..άλλωστε δεν ξέρω σε ποιο topic ταιριάζει καλύτερα η ερώτησή μου..από την άλλη χρωστάω πολλά..
Pages: [1] 2
Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Scribbles2 | TinyPortal © Bloc | XHTML | CSS
Loading...