Οι λειτουργίες που επιτελούνται στις παραπάνω δομές δεδομένων έχουν να κάνουν με την άφιξη ή αναχώρηση ενός κυττάρου και με την άφιξη μιας πίστωσης (οι αναχωρήσεις πιστώσεων συμβαίνουν σε συνδυασμό με τις αναχωρήσεις κυττάρων και περιλαμβάνονται στις λειτουργίες που έχουν να κάνουν με αυτές). Όπως ειπώθηκε στην παράγραφο 2.1 ο ελεγκτής του ATLAS I εκτελεί αυτές τις λειτουργίες χρησιμοποιώντας δύο παράλληλες pipelines, μία για τις λειτουργίες των κυττάρων και μία για τις αφίξεις των πιστώσεων. Η διαχείριση των ουρών επιτελείται στις τελευταίες τρεις βαθμίδες της pipeline των κυττάρων, καθώς και στις τελευταίες τέσσερεις της pipeline των πιστώσεων, όπως φαίνεται στο σχήμα 2.3 και εξηγείται παρακάτω. Οι λειτουργίες για τα κύτταρα αρχικοποιούνται από τον χρονοπρογραμματιστή του μεταγωγέα, στη βαθμίδα της pipeline των κυττάρων λίγο πριν αρχίσει η διαχείριση των ουρών. Ο χρονοπρογραμματιστής δίνει υψηλότερη προτεραιότητα στην εξυπηρέτηση των συνδέσμων εξόδου έναντι των συνδέσμων εισόδου, μια και η καθυστέρηση των εξόδων προκαλεί άσκοπη μείωση του ρυθμού εξυπηρέτησης, ενώ τα εισερχόμενα κύτταρα δεν θα χαθούν ποτέ ανεξάρτητα πότε θα εξυπηρετηθούν μέσα στο χρόνο διάρκειας ενός κυττάρου. Όσο αφορά τις αφίξεις των κυττάρων η δρομολόγηση και η μετάφραση συμβαίνει παράλληλα με τον χρονοπρογραμματισμό, ούτως ώστε να καθοριστεί η ομάδα ροής του κυττάρου, η μάσκα εξόδου και η κλάση εξυπηρέτησης.
Figure 2.3: Οι δύο pipelines στη διαχείριση ουρών
Αφίξεις κυττάρων : Κατά τη διάρκεια της πρώτης βαθμίδας pipeline διαβάζεται ο πίνακας πιστώσεων, έτσι ώστε να εξακριβωθεί αν υπάρχουν πιστώσεις για την ομάδα ροής αυτού του κυττάρου για τους επιθυμητούς σύνδεσμους εξόδου του (outMask). Αν βρεθούν όλες οι επιθυμητές πιστώσεις το κύτταρο γίνεται έτοιμο. Παράλληλα η κλάση εξυπηρέτησης και η μάσκα εξόδου για το εισερχόμενο κύτταρο χρησιμοποιούνται ως διεύθυνση για να διαβαστεί ο δείκτης ουράς της κατάλληλης έτοιμης ουράς από την HTRF. Αυτή θα χρησιμοποιηθεί για να εισαχθεί το κύτταρο στην ουρά σε περίπτωση που είναι έτοιμο. Ταυτόχρονα ψάχνεται η λίστα ελεύθερων θέσεων για την πρώτη κενή θέση.
Στην επόμενη βαθμίδα το κύτταρο καταχωρείται στην CLL. Αν το κύτταρο είναι έτοιμο ο δείκτης ουράς της κατάλληλης ουράς χρησιμοποιείται για να γραφεί η διεύθυνση του νεοαφικνούμενου κυττάρου στη θέση που δείχνει ο δείκτης στο επόμενο κύτταρο. Οι πιστώσεις που διαβάστηκαν από τον πίνακα πιστώσεων (CT) και χρησιμοποιήθηκαν από το κύτταρο καταχωρούνται στην CLL και πρέπει να σβηστούν από τον CT. Αυτό το σβήσιμο θα συνέβαινε κανονικά σε αυτή τη βαθμίδα, και θα απαιτούσε μία επιπλέον θύρα στη μνήμη CT. Για να αποφευχθεί αυτή η επιπλέον θύρα, έτσι ώστε το CT να μπορεί να είναι μία SRAM γεννημένη από compiler παρά να σχεδιαστεί σε full-custom, η λειτουργία του σβησίματος καταχωρείται σε έναν ενταμιευτή για εγγραφές και εκτελείται κατά τη διάρκεια της πρώτης βαθμίδας μιας αναχώρησης ενός κυττάρου (οι αναχωρήσεις κυττάρων δεν προσπελαύνουν τον CT). Υπάρχουν 17 καταχωρητές σε αυτόν τον ενταμιευτή για εγγραφές, καθώς και οι αντίστοιχοι συγκριτές και τα κυκλώματα για προσπεράσματα, έτσι ώστε να καλυφθεί η χειρότερη περίπτωση συνεχών αφίξεων κυττάρων από όλες τις εισόδους προτού ο χρονοπρογραμματιστής αποφασίσει να εξυπηρετήσει τις θύρες εξόδου.
Στην τελευταία βαθμίδα, αν το κύτταρο είναι έτοιμο, ο νέος δείκτης ουράς και το bit άδειας ή όχι ουράς γράφονται στη μνήμη HTRF. Αν η ουρά ήταν πριν άδεια, πρέπει να γραφτεί συγχρόνως και ο δείκτης επικεφαλίδας και ο χρονοπρογραμματιστής ειδοποιείται ότι η ουρά δεν είναι πλέον άδεια. Αυτές οι προσπελάσεις θα μπορούσαν να πραγματοποιηθούν ένα κύκλο νωρίτερα, αλλά αυτό θα ερχόταν σε σύγκρουση με προσπελάσεις στην ίδια μνήμη κατά τη διάρκεια των λειτουργιών που έχουν να κάνουν με τις αναχωρήσεις κυττάρων.
Αναχωρήσεις κυττάρων : Οι λειτουργίες που συμβαίνουν όταν ο χρονοπρογραμματιστής καθοδηγεί την pipeline των κυττάρων να χειριστεί μία αναχώρηση ενός κυττάρου από μία συγκεκριμένη έξοδο και σε ένα επίπεδο προτεραιότητας είναι οι εξείς. Στην πρώτη βαθμίδα διαβάζονται οι δείκτες επικεφαλίδας και τέλους για την αντίστοιχη έτοιμη ουρά από την HTRF. Ο δείκτης επικεφαλίδας χρησιμοποιείται για να εντοπίσει το σώμα του κυττάρου (για μετάδοση) καθώς και τις υπόλοιπες πληροφορίες που σχετίζονται με αυτό. Ο δείκτης τέλους διαβάζεται έτσι ώστε να ανιχνευτεί αν αυτό ήταν το τελευταίο κύτταρο στην ουρά (δείκτης τέλους==δείκτη αρχής).
Στη δεύτερη βαθμίδα η μνήμη που κρατά τις μάσκες εξόδου προσπελαύνεται ως εξής: μηδενίζεται το bit που αντιστοιχεί στον τρέχον σύνδεσμο εξόδου, ενώ ταυτόχρονα διαβάζονται τα υπόλοιπα 16 bits. Αν αυτά τα 16 bits είναι όλα μηδέν, το κύτταρο πρέπει να βγει από την ουρά και η θέση του να επιστραφεί στην Free List, διότι ήταν είτε ένα κύτταρο unicast είτε ένα multicast που αναχωρεί από την τελευταία έξοδό του. Ο δείκτης στο επόμενο κύτταρο στην ουρά διαβάζεται επίσης παράλληλα, αφού θα χρειαστεί στην περίπτωση εξαγωγής του από την ουρά.
Στην τρίτη βαθμίδα το κύτταρο εξάγεται από την ουρά, αν είναι απαραίτητο. Αυτό συνεπάγεται την ενημέρωση της λίστας ελεύθερων κυττάρων καθώς και του δείκτη αρχής στη μνήμη HTRF, όπως και το bit εγκυρότητας αν αυτό ήταν το τελευταίο κύτταρο στην ουρά. Στην τελευταία περίπτωση ειδοποιείται και ο χρονοπρογραμματιστής ότι αυτή η ουρά είναι τώρα άδεια.
Αφίξεις πιστώσεων : Οι αφίξεις των πιστώσεων χειρίζονται από τη δεύτερη pipeline, με ρυθμό μίας ανά κύκλο ρολογιού, παράλληλα με τις αφίξεις και αναχωρήσεις των κυττάρων. Αυτή είναι μία pipeline τεσσάρων βαθμίδων. Στην πρώτη βαθμίδα η ομάδα ροής όπου ανήκει μία πίστωση και μία μάσκα των 16 bits που δείχνει το σύνδεσμο από όπου έφτασε χρησιμοποιούνται για να ψάξουμε την CLL (τα πεδία ομάδα ροής και μάσκα εξόδου) για κύτταρα που περιμένουν αυτήν την πίστωση. Το ψάξιμο αυτό απαιτεί ένα πλήρες ταίριασμα με το πεδίο που δηλώνει την ομάδα ροής, ενώ με το πεδίο της μάσκας εξόδου απαιτείται μερικό ταίριασμα (ένα μόνο bit). Δεν είναι ανάγκη να κοιτάξουμε καθόλου τη μνήμη creditMask : αφού υπάρχει μόνο μία πίστωση ανά ομάδα ροής για ένα δεδομένο σύνδεσμο μία δεδομένη χρονική στιγμή, δεν υπάρχει περίπτωση για ένα κύτταρο μιας δεδομένης ομάδας ροής που περιμένει ακόμα να αναχωρήσει από αυτό το σύνδεσμο (το συγκεκριμένο bit της μάσκας εξόδου είναι ένα) να έχει ήδη μία πίστωση για αυτή την ομάδα ροής και για αυτό τον σύνδεσμο.
Στη δεύτερη βαθμίδα, αν κανένα κύτταρο δεν περίμενε για αυτήν την πίστωση αυτή σημειώνεται στον πίνακα πιστώσεων (CT). Αφού μπορεί να υπάρξει μόνο μία πίστωση ανά ομάδα ροής μία εγγραφή ενός απλού 1 είναι αρκετή (δεν είναι ανάγκη να γίνει διάβασμα-μεταβολή-γράψιμο). Ειδάλως ενημερώνεται η μάσκα των πιστώσεων του επιλεγμένου κυττάρου με το να γίνει 1 το bit που αντιστοιχεί σύνδεσμο εισόδου, ενώ ταυτόχρονα διαβάζονται τα υπόλοιπα 16 bits, αλλά και όλη η μάσκα των συνδέσμων εξόδου. Συγκρίνοντας τις δύο μάσκες αποφασίζεται αν το κύτταρο είναι έτοιμο, δηλαδή αν πήρε και την τελευταία πίστωση που περίμενε και άρα πρέπει να εισαχθεί στην ουρά.
Κατά την τρίτη και την τέταρτη βαθμίδα εκτελείται η εισαγωγή στην ουρά, αν το κύτταρο μόλις έγινε έτοιμο. Η διεύθυνση της κατάλληλης ουράς για να διαβαστεί η HTRF σχηματίζεται χρησιμοποιώντας τη μάσκα εξόδου του κυττάρου και την κλάση εξυπηρέτησής του. Στην επόμενη βαθμίδα ο δείκτης tail->next γράφεται, όπως και ο δείκτης τέλους και το bit εγκυρότητας. Αν η ουρά ήταν πριν άδεια, ο δείκτης αρχής πρέπει επίσης να γραφτεί και να ενημερωθεί και ο χρονοπρογραμματιστής.