[ από το report: ]
Η βασική ιδέα είναι η υλοποίηση ενός ατέρμονου βρόγχου στο σώμα του οποίου θα υπάρχει η συνάρτηση που παίρνει δείγματα από κάποιο ρολόι του συστήματος ( RTC ή CPU ). Η εκτέλεση του παραπάνω βρόγχου διακόπτεται από ένα σήμα τύπου ALARM το οποίο όταν αποσταλλεί στην διεργασία που εκτελείται οδηγεί στην μετάβαση της εκτέλσης σε μία συνάρτηση η οποία πριν τερματίσει την εκτέλεση της διεργασίας, επιτελεί τα εξής:
- υπολογίζει τις περιόδους της δειγματοληψίας, αφαιρώντας από κάθε δείγμα του ρολογιού το αμέσως προηγούμενο του
- υπολογίζει τα στατιστικά των περιόδων της δειγματολήψίας ( min, max, mean, median & deviation )
- καταγράφει τα δείγματα, τις περιόδους και τα στατιστικά σε τρία αρχεία κειμένου με αντίστοιχα ονόματα
Για την εύρεση του πραγματικού αριθμού των δειγμάτων που αντλήθηκαν μέσα στους βρόγχους άντλησης δειγμάτων υπάρχει ένας μετρητής δειγμάτων. Η τελική τιμή αυτού του μετρητή αποτελεί τον αριθμό των δειγμάτων που πάρθηκαν πραγματικά, ο οποίος είναι μικρότερος από τον αρχικά υπολογισθέντα αριθμό λόγω καθυστερήσεων που προκύπτουν κατά την εκτέλεση του προγράμματος.
Έγιναν τρεις ( 3 ) υλοποιήσεις στη C για την άντληση των δειγμάτων:
- η πρώτη περιέχει στο σώμα του βρόγχου την
gettimeofday()
η οποία επιστρέφει timestamps από το epoch, τα οποία αποθηκεύονται σε έναν πίνακα το αρχικό μέγεθος του οποίου είναι ο υπολογισθέντας αριθμός δειγμάτων ( βάσει της περιόδου δειγματοληψίας και του συνολικού χρόνου ) - η δεύτερη περιέχει στο σώμα του βρόγχου την
clock_gettime()
με επιλεγμένο τύπο ρολογιού το MONOTONIC_RAW το οποίο επιστρέφει δείγματα τύπου timestamps από το ρολόι του επεξεργαστή - η τρίτη είναι όπως η δεύτερη με τη προσθήκη linear regression του error μεταξύ της ζητούμενης και της actual περιόδου δειγματοληψίας