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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Λειτουργικό Σύστημα (Operating System) 1o μέρος
Advertisements

ΧΡΟΝΟΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΔΙΕΡΓΑΣΙΩΝ
Λογισμικο συστηματοσ Κεφάλαιο 4ο
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11.
ΕΝΟΤΗΤΑ 2 – Κεφάλαιο 5: Γνωριμία με το λογισμικό του υπολογιστή
Εφαρμογές Υπολογιστών Ά Λυκείου Κεφ. 4 Λογισμικό Συστήματος
Λειτουργικά Συστήματα
Εισαγωγικές έννοιες πληροφορικής
Προστασία Λογισμικού - Ιοί
Η επιστήμη των υπολογιστών
Λειτουργικά Συστήματα
Λειτουργικά Συστήματα
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ
ΛΟΓΙΣΜΙΚΟ ΣΥΣΤΗΜΑΤΟΣ Κεφάλαιο 4 ο Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
Κεφάλαιο 1ο Εισαγωγή σε Λειτουργικά Συστήματα Ορισμός ΛΣ
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Πρώτο Αρχιτεκτονική.
Λειτουργικό Σύστημα 2ο μέρος.
Κεφάλαιο 1ο: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΤΩΝ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ
ΕΠΛ432: Κατανεμημένοι Αλγόριθμοι
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι
Λογισμικο συστηματοσ Κεφάλαιο 4ο
Κλασσικά Προβλήματα Επικοινωνίας Σύνδρομων Διεργασιών
Επικοινωνία μεταξύ Διεργασιών και Σύνδρομες Διεργασίες
Εκτέλεση Αλγορίθμων σε ψευδογλώσσα
Χρονοπρογραμματισμός Διεργασιών (Process Scheduling)
Αδιέξοδα (Deadlocks).
Page  1 Ο.Παλιάτσου Γαλλική Επανάσταση 1 ο Γυμνάσιο Φιλιππιάδας.
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι
Κώστας Διαμαντάρας Τμήμα Πληροφορικής ΤΕΙ Θεσσαλονίκης 2011 Συστολικοί επεξεργαστές.
Νήματα Οι διεργασίες έχουν τα παρακάτω συστατικά:
Λειτουργικά Συστήματα ΑΔΙΕΞΟΔΑ. 3.1 Εισαγωγή  Αδιέξοδο = ένα σύνολο από διεργασίες που δημιουργούν μια κυκλική αλυσίδα όπου κάθε process στην αλυσίδα.
Κοντινότεροι Κοινοί Πρόγονοι α βγ θ δεζ η π ν ι κλμ ρσ τ κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξο κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α.
Βάσεις Δεδομένων II Διαχείριση Δοσοληψιών Πάνος Βασιλειάδης Σεπτέμβρης 2002
Τι είναι διεργασία Ένα πρόγραμμα σε εκτέλεση Η διεργασία περιλαμβάνει:
Χρονοδρομολόγηση CPU Βασικές Αρχές Κριτήρια Χρονοδρομολόγησης
Σχεδίαση αλγορίθμων (2ο μέρος)
Διαχείριση μνήμης Υπόβαθρο Εναλλαγή Συνεχής κατανομή Σελιδοποίηση
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
Διασκεδάζω Προγραμματίζοντας στο code.org
Προχωρημένα Θέματα Τεχνολογίας και Εφαρμογών Βάσεων Δεδομένων Διαχείριση Συναλλαγών Πάνος Βασιλειάδης Μάρτιος 2014
Επικοινωνία μεταξύ Διεργασιών και Σύνδρομες Διεργασίες Interprocess Communication and Concurrent Processes.
Πρωτόκολλο αμοιβαίου αποκλεισμού (mutual exclusion) για δύο διεργασίες-CPN Tools Νάνος Λέανδρος 156 Τζιαλαμάνη Βιργινία 166.
Δομές Δεδομένων - Ισοζυγισμένα Δυαδικά Δένδρα (balanced binary trees)
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Τρίτο Συστήματα.
ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ 2: ΘΕΜΑΤΑ ΘΕΩΡΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ Η/Υ
ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ. ΥΠΟΛΟΓΙΣΤΗΣ Μηχανή που μπορεί να φέρει σε πέρας πνευματικές εργασίες ρουτίνας με μεγάλη ταχύτητα.
Λειτουργικά Συστήματα
Διεργασίες.
1 Αδιέξοδα Μοντέλο συστήματος Χαρακτηρισμός αδιεξόδου Μέθοδοι διαχείρισης αδιεξόδων Πρόληψη Αποφυγή Ανίχνευση.
Λειτουργικά Συστήματα
Διαχείριση Πόρων (1/10) Εισαγωγή στην Πληροφορκή 1 Στα πρώτα χρόνια των υπολογιστών, όπου μόνο ένα πρόγραμμα είχε τη δυνατότητα να βρίσκεται στην κύρια.
Λειτουργικά Συστήματα
ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι
Δυναμικός Κατακερματισμός
Κατανεμημένα Συστήματα
Συγχρονισμός Διεργασιών
Τι είναι διεργασία Ένα πρόγραμμα σε εκτέλεση Η διεργασία περιλαμβάνει:
Κατηγορίες και Προδιαγραφές Λογισμικού Η/Υ (Software)
Βασικά Μοντέλα και Έννοιες Διεργασιών
Χρονοπρογραμματισμός CPU - SCHEDULING
Λειτουργικά Συστήματα και Ασφάλεια Πληροφοριακών Συστημάτων ΔΙΕΡΓΑΣΙΕΣ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Διεργασίες Διεργασίες Διαδιεργασιακή Επικοινωνία (IPC)
ΔΙΕΡΓΑΣΙΕΣ.
ΣΥΓΧΡΟΝΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Τρίτη Έκδοση ANDREW S
Δυναμικός Κατακερματισμός
Χρονοπρογραμματισμός CPU - SCHEDULING
Μεταγράφημα παρουσίασης:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διεργασίες

Εισαγωγή Διεργασία: Μία από τις δύο κεντρικές έννοιες και abstractions ενός Λ.Σ. Αποτελεί ένα μοντέλο για ένα πρόγραμμα που εκτελείται Οι διεργασίες εκτελούνται "παράλληλα": δηλ. όχι σειριακά. Υπάρχουν δύο τρόποι: Όσο μια περιφερειακή συσκευή (π.χ. δίσκος) εκτελεί μια εντολή, το Λ.Σ. "δίνει" (dispatches) τη CPU σ' ένα άλλο "έτοιμο" (ready) πρόγραμμα. Όταν η CPU "δίνεται" σ' ένα process, το process συνήθως δεν κρατάει τη CPU μέχρι να τελειώσει, ακόμα και όταν το process δεν κάνει I/O. Κάθε λίγο (π.χ. 100ms) το CPU δίνεται σ' άλλο process. Αυτός ο χρόνος = time slice / quantum. σε κάθε «στιγμή» σ' έναν υπολογιστή εκτελούνται πολλές παράλληλες ενέργειες. Για ν' αντιμετωπίσουν τις δυσκολίες που προκύπτουν, τα Λ.Σ. χρησιμοποιούν την έννοια του process. Προσέξτε: και οι 2 τρόποι δεν είναι δεδομένοι – απαιτείται υποστήριξη από υλικό (Direct mem access, 1ος τρόπος) και από τον αλγόριθμο χρονοπρογραμματισμού!

Εισαγωγή multiprogramming: αφορά στο γεγονός ότι πολλές διεργασίες τρέχουν ανά πάσα στιγμή. Ποια η διαφορά μεταξύ «διεργασίας» & "προγράμματος"; Μια διεργασία αντιπροσωπεύει ένα πρόγραμμα που εκτελείται έχει input/output και έχει και μια κατάσταση (state - δηλ. οι τιμές των μεταβλητών του προγράμματος, CPU registers, PC, SP, stack, ...) Η διεργασία που αντιστοιχίζεται σε ένα πρόγραμμα, είναι μια δομή του ΛΣ όπου αποθηκεύονται όλες οι πληροφορίες που χρειάζεται το ΛΣ για να τρέξει το πρόγραμμα σε ένα περιβάλλον πολυπρογραμματισμού. Οι διεργασίες σχηματίζουν μια ιεραρχία πατέρα-παιδιού (ή πρόγονου-απόγονου) (π.χ. Στο UNIX μέσω του fork system call).

Εισαγωγή Κατάσταση μιας διεργασίας (ως προς την εκτελεσή της) τρέχει (running): έχει τη CPU έτοιμο (ready): μπορεί να τρέξει, αλλά η CPU δόθηκε αλλού. μπλοκαρισμένη (blocked): περιμένει «εξωτερικό» γεγονός. 1. περιμένει I/O 2. CPU δίνεται σ' άλλο process 3. CPU δίνεται σ' αυτό το process 4. I/O έγινε Για την μετάβαση (1) υπάρχει συνήθως ένα block system call. Οι μεταβάσεις (2) και (3) προκύπτουν από παρεμβάσεις του scheduler (δρομολογητή/χρονοπρογραμματιστή) του Λ.Σ. Η μετάβαση (4) προκύπτει μετά από διακοπή περιφερειακής συσκευής.

Εισαγωγή Πώς και πότε τρέχει ο χρονοπρογραμματιστής; (ποιός τον χρονοπρογραμματίζει;) clock interrupts: αν το time slice του process έχει παρέλθει. block: όταν το τωρινό process μπλοκάρει. Χρησιμοποιώντας το μοντέλο των διεργασιών μπορούμε ευκολότερα ν' αναπαριστούμε τις ενέργειες που εκτελούνται κάθε στιγμή σ' ένα σύστημα. Σ' αυτό το μοντέλο ο χρονοπρογραμματιστής είναι το κατώτερο επίπεδο του Λ.Σ. και κρύβει λεπτομέρειες που αφορούν το σταμάτημα και τρέξιμο διεργασιών και διαχείριση διακοπών (interrupts).

Υλοποίηση του PROCESS Περίληψη πληροφορίας για κάθε process: PC, SP, CPU registers, PSW, signals Πίνακες σελίδων (Page Tables) και άλλες πληροφορίες που αφορούν μνήμη (π.χ. swap space), pointers στα text, data τμήματα της διεργασίας ... pid, parent pid, uid, gid, κατάσταση εκτελεσιμότητας root dir, file descriptors για open files. Υπάρχει ένας πίνακας (process table) που συνήθως (στα συστήματα UNIX) υλοποιείται σαν ένας πίνακας (ή μια συνδεδεμένη λίστα) (of structs). Υπάρχει ένα struct για το κάθε process και καθένα έχει τις παραπάνω πληροφορίες σε διάφορα πεδία του.

Υλοποίηση του PROCESS Πώς επιτυγχάνεται ο παραλληλισμός (concurrency - δηλ. ότι υπάρχουν πολλές διεργασίες που τρέχουν) όταν υπάρχει ένα και μοναδικό CPU ; Λόγω του (πιθανού) διαμοιρασμού CPU μέσω των time slices (δηλ. Του χρονομερισμού (timesharing) -- αν εξετάσουμε το σύστημα για μια χρονική στιγμή μεγαλύτερη ενός time slice θα δούμε ότι σ' αυτή τη χρονική στιγμή "τρέχουν" > 1 διεργασίες. Πολλές συσκευές περιφέρειας (peripheral devices) (συνήθως) έχουν δικούς τους επεξεργαστές. Eτσι, όσο ένα I/O (π.χ. σε δίσκο) εκτελείται εκ μέρους μιας διεργασίας, μια άλλη εκτελείται από τη CPU

Επικοινωνία Διεργασιών Συνθήκες Ανταγωνισμού (Race Conditions): περιγράφει καταστάσεις όπου >1 διεργασίες διαβάζουν ή γράφουν σε κοινά δεδομένα και το τελικό αποτέλεσμα εξαρτάται από το πότε τρέχει η κάθε διεργασία. Το πρόβλημα είναι: έλεγχος πρόσβασης σε κοινή μνήμη. Παράδειγμα: Δύο διεργασίες (P1, P2) κάνουν και οι δύο αναλήψεις από ένα τραπεζικό λογαριασμό (κοινό) - η μία ανήκει π.χ. στο σύζυγο και η άλλη αντίστοιχα στη σύζυγο. Η ρουτίνα ΑΝΑΛΗΨΗ καλείται και από τις δύο διεργασίες. ΑΝΑΛΗΨΗ: read (υπολοιπο); if υπολοιπο > ποσό_ανάληψης write (υπολοιπο  υπολοιπο – ποσό_ανάληψης);

Επικοινωνία Διεργασιών Το P1 εκτελεί το read() και μετά η CPU δίνεται στο P2 το οποίο εκτελεί read() και write(). Μετά, η CPU δίνεται στο P1 που εκτελεί το write().  μόνο η μία ανάληψη φαίνεται - η άλλη "χάθηκε". Αυτό είναι ένα "τυπικό" race condition. Κρίσιμες περιοχές (Critical Sections): Πώς μπορούμε ν' αποφύγουμε τα race conditions; Πρέπει να βρούμε ένα τρόπο ούτως ώστε μόνο ένα process να έχει πρόσβαση στα κοινά δεδομένα σε κάθε στιγμή. Αυτή η ιδιότητα λέγεται και mutual exclusion (αμοιβαίος αποκλεισμός).  ν' απομονώσουμε/κλειδώσουμε το τμήμα του κώδικα το οποίο γράφει/διαβάζει κοινή μνήμη. Αυτό το τμήμα ονομάζεται critical section.

Σηματοφόροι-Semaphores Eνας τύπος μεταβλητών. Στην ουσία "μετράει" όλες τις κλήσεις αφύπνισης για ένα process. Δύο πράξεις: UP & DOWN (σαν τα WAKEUP & SLEEP). DOWN(s) : 1 ατομική ενέργεια (atomic action) { if s = 0 then sleep() else s = s - 1 } UP(s): s: = s + 1 Αν μετά την εκτέλεση του UP(s), s = 1 και υπάρχει κάποιο process που κοιμάται γιατί το s ήταν 0, τότε το σύστημα διαλέγει κάποιο απ' τα μπλοκαρισμένα process και το ξυπνάει. Oλα αυτά που εκτελούνται στο UP() είναι επίσης atomic.

Κλασσικά Προβλήματα IPC Οι φιλόσοφοι που γευματίζουν - Dining Philosophers N φιλόσοφοι κάθονται σ' ένα τραπέζι με N πιάτα φαγητό (σούσι). Για να φάει ένας φιλόσοφος χρειάζεται 2 ξυλάκια (chopsticks) -- δεξιά και αριστερά κάθε πιάτου βρίσκεται από ένα ξυλάκι. Ο κάθε φιλόσοφος περνάει την ζωή του σκεπτόμενος και τρώγοντας, εναλλάξ. Το πρόβλημα είναι να βρεθεί ένας αλγόριθμος για την ζωή των φιλοσόφων που να επιτρέπει τα παραπάνω χωρίς «προβλήματα».

Κλασσικά Προβλήματα IPC

Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Μια πρώτη λύση για Ν φιλοσόφους: philosopher (i) while (1) { think; take_fork(i); /* πάρε αριστερό ξυλάκι */ take_fork(i+1 mod Ν); /* πάρε δεξί ξυλάκι */ eat; put_fork(i); put_fork(i+1 mod Ν); }

Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Ο παραπάνω αλγόριθμος δεν ικανοποιεί! Αν όλοι οι φιλόσοφοι πεινάσουν την ίδια στιγμή και εκτελέσουν τον αλγόριθμο τότε όλοι θα πάρουν το πηρούνι στα αριστερά τους. Όμως κανείς δεν θα καταφέρει να πάρει το δεξί πηρούνι  όλοι θα ... πεθάνουν της πείνας. Αυτό είναι ένα γενικότερο και πολύ σημαντικό πρόβλημα για την δημιουργία συστημάτων λογισμικού και λέγεται αδιέξοδο (deadlock).

Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Αδιέξοδο προκύπτει όταν >1 processes δημιουργούν μια κυκλική αλυσίδα: όπου το κάθε process για να συνεχίσει χρειάζεται έναν πόρο που τον κατέχει το επόμενο process... Κοκ  Πρα  Κιτρ  Μπλε  Πορτ  Μωβ Κοκ

Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Μια 2η λύση είναι ν' αναγκάσουμε τον κάθε φιλόσοφο, μόλις πάρει το αριστερό ξυλάκι να εξετάσει αν το δεξί είναι διαθέσιμο. Αν ναι, εντάξει. Αλλιώς, αφήνει το αριστερό ξυλάκι και δοκιμάζει πάλι μετά από κάποιο χρονικό διάστημα. Το πρόβλημα μ' αυτή τη λύση είναι λίγο διαφορετικό. Αν όλοι οι φιλόσοφοι αρχίσουν την ίδια στιγμή, ενδέχεται να πάρουν το αριστερό την ίδια στιγμή, να τ' αφήσουν την ίδια στιγμή κ.ο.κ. Αυτό το φαινόμενο ονομάζεται επ’ αόριστον αναβολή (indefinite postponement) ή λιμοκτονία (starvation): οι διεργασίες συνεχίζουν να τρέχουν αλλά δεν σημειώνουν καμία πρόοδο...

Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Μια 3η λύση: να δημιουργήσουμε ένα critical section στον αλγόριθμο των φιλοσόφων (μετά το "think") ο οποίος να προστατεύεται από ένα semaphore (mutex = 1). Πριν μπεί στο critical section ο κάθε φιλόσοφος καλεί DOWN(mutex) και μόλις βγει καλεί UP(mutex).

Οι φιλόσοφοι που γευματίζουν - Dining Philosophers mutex = 1; philosopher (i) while (1) {think; down(mutex); take_fork(i); /* πάρε αριστερό ξυλάκι */ take_fork(i+1 mod Ν); /* πάρε δεξί ξυλάκι */ eat; put_fork(i); put_fork(i+1 mod Ν); up(mutex); } Η λύση αυτή είναι σωστή; Είναι καλή λύση ;

Οι φιλόσοφοι που γευματίζουν - Dining Philosophers Μια καλύτερη λύση: Χρησιμοποιείται ένα semaphore (mutex = 1) για προστασία critical section. Χρησιμοποιείται ένα semaphore για κάθε φιλόσοφο π.χ. s[1..Ν], για Ν φιλόσοφους. Αρχικά s[i] = 0, i= 1,...,Ν. Τέλος υπάρχει και μία μεταβλητή που αντιπροσωπεύει την κατάσταση ενός φιλόσοφου state[i] (με τιμές : ΣΚΕΦΤΕΤΑΙ, ΠΕΙΝΑΕΙ, ΤΡΩΕΙ). Απαίτηση: Για να φάει ένας φιλόσοφος, κανείς από τους 2 γείτονές του δεν μπορεί να βρίσκεται στην κατάσταση ΤΡΩΕΙ.

Το Πρόβλημα Αναγνωστών/Συγγραφέων (Readers & Writers) Χρησιμοποιείται κυρίως για την μοντελοποίηση προβλημάτων ταυτόχρονης πρόσβασης διαφορετικού τύπου. Πολλοί αναγνώστες (readers) μπορούν ταυτόχρονα να προσπελαύνουν ένα αντικείμενο. Αν όμως το αντικείμενο προσπελαύνεται από έναν συγγραφέα, τότε κανείς άλλος (reader ή writer) δεν μπορεί να προσπελάσει το αντικείμενο. π.χ. τραπεζικοί λογαριασμοί = data items ερωτήσεις για ύψος υπολοίπου = readers αναλήψεις, καταθέσεις = writers

Το Πρόβλημα Αναγνωστών/Συγγραφέων (Readers & Writers) 2 σηματοφόροι: ένας (mutex) να προστατεύει το read_count και ένας (item) για τη read-write και write-write σύγκρουση. reader writer while (1) { while (1) { down (mutex); create_data(); read_count ++; down (item) ; if (read_count==1) write_item(); down (item); up (item) up (mutex) ; } read_item(); down (mutex); read_count --; if (read_count == 0) up (item); up (mutex); } Αρχικά, mutex = 1 και item = 1 και read_count = 0. Υπάρχει κάποιο πρόβλημα μ' αυτή την λύση;

Χρονοπρογραμματισμός CPU - SCHEDULING Πότε ένας αλγόριθμος δρομολόγησης είναι "καλός"; Δίκαιος: ισοκατανομή CPU κύκλων στις διεργασίες Αποδοτικός: Συνήθεις μετρικές για να ορισθεί το «αποδοτικός»: CPU utilization (υψηλό ποσοστό χρήσης του CPU) response time: μικρός χρόνος απόκρισης για αλληλεπιδραστικές εφαρμογές - interactive) turnaround time (χρόνος απόκρισης – συστήματα δέσμης) throughput (# διεκπεραιωμένων διεργασιών / μονάδας χρόνου) Συνήθως, δε μπορούμε να ικανοποιήσουμε όλα αυτά ταυτόχρονα !

Χρονοπρογραμματισμός CPU - SCHEDULING Προεκτοπιστικός χρονοπρογραμματισμός: [Preemptive Scheduling]: Οταν ο αλγόριθμος επιτρέπει η CPU να δοθεί σ' άλλο process πριν το τρέχον process να έχει τελειώσει. «Non-preemptive» αλγόριθμοι δίνουν τη CPU σ' ένα process μέχρι να τελειώσει, μετά διαλέγουν άλλο process ... κ.ο.κ. To «preemptive scheduling» δημιουργεί τα προβλήματα που είδαμε σχετικά με ταυτόχρονη πρόσβαση σε κοινή μνήμη. Απ' την άλλη μεριά, το «non-preemptive scheduling» φαίνεται μη εφαρμόσιμο για τις πιο πολλές εφαρμογές (που έχουν πολλά processes στο σύστημα ταυτόχρονα).