Κ24: Προγραμματισμός Συστήματος

Πληροφορίες Μαθήματος

  • Εαρινό εξάμηνο - Τμήμα άρτιων αριθμών μητρώου.
  • Μάθημα: Δευτέρα 13:00-15:00 και Τρίτη 11:00-13:00.
  • Διδάσκων: Αλέξανδρος Ντούλας, Ώρες γραφείου: Τρίτη 13:00-14:00.
    (antoulas -*at*- di -*dot*- uoa +*dot*+ gr)
  • Απαιτήσεις μαθήματος
  • Forum μαθήματος στο piazza

Περιγραφή Μαθήματος

Ο στόχος αυτού του μαθήματος είναι να εξετάσει σε βάθος το περιβάλλον Linux ως περιβάλλον ανάπτυξης. Θα εξετάσουμε την προγραμματιστική διεπαφή (API) του Linux για τις γλώσσες C/C++ καθώς επίσης και το κέλυφος (shell) του Linux. Θα καλύψουμε θέματα όπως: βοηθητικά προγράμματα του Linux, προγραμματισμός σε κέλυφος (shell programming), γλώσσες σεναρίων (script languages), προγραμματισμός λειτουργιών συστήματος σε C/C++ για χειρισμό λαθών, δημιουργία και τερματισμός διεργασιών, αποστολή/παραλαβή σημάτων, είσοδος/έξοδος χαμηλού επιπέδου επικοινωνία μεταξύ τοπικών διεργασιών, δημιουργία, τερματισμός και συγχρονισμό νημάτων, καθώς επίσης και μηχανισμοί απομακρυσμένης επικοινωνίας. Από την φύση του, το μάθημα αυτό χρειάζεται αυτενέργεια και συνεχή προσωπική προσπάθεια. Θα πρέπει να γνωρίζετε δομές δεδομένων και να έχετε ολοκληρώσει το μάθημα Κ22: Λειτουργικά Συστήματα. Το αποτέλεσμα της προγραμματιστικής δουλειάς σας θα πρέπει να τρέχει στα Linux Workstations του τμήματος.


Ανακοινώσεις

  • 27/02: Το μάθημα ξεκινάει Δευτέρα 3 Μαρτίου Διαδικτυακά.


Βιβλιογραφία


Syllabus & Πρόγραμμα

Date Topic Handouts/Assignments Slides/Notes
Mon, Mar 04 Course logistics. Introduction to Unix, basic commands lecture 01
Tue, Mar 05 File processing, basic commands (cont'd)
lecture 02
Mon, Mar 11 csh, bash, environment variables,
input/output, process management, makefiles.
Tue, Mar 12 Shell scripting, parameters, simple arithmetic, if, case, sample programs lecture 04
Mon, Mar 18 No class
Tue, Mar 19 Shell scripting, for, while, file contents, exec
Mon, Mar 25 No class
Tue, Mar 26 Error handling, Low-level I/O lecture 06
Mon, Apr 01 Low-level I/O, signals
Tue, Apr 02 Processes, Process Control lecture 08
Mon, Apr 08 Process Control, Pipes
Tue, Apr 09 Internetworking with Sockets lecture 10
Mon, Apr 15 Internetworking with Sockets
Tue, Apr 16 Threads lecture 12
Mon, Apr 22 Threads
Tue, Apr 23 IPC, Message Queues, Shared Memory lecture 14
Mon, Apr 29 No class
Tue, Apr 30 No class
Mon, May 06 No class
Tue, May 07 No class
Mon, May 13 Shared Memory, Semaphores lecture 15
Tue, May 14 Semaphores, Locking
Mon, May 20 Advanced Threads, Monitors lecture 17
Tue, May 21 Semaphores, Locking
Mon, May 27 Advanced Threads, Monitors lecture 17
Tue, May 28 sed lecture 18
Mon, Jun 03 awk lecture 19
Tue, Jun 04 Επανάληψη


Οδηγίες Παράδοσης των Ασκήσεων

  • Οι προγραμματιστικές ασκήσεις δεν παραδίδονται μέσω email. Ασκήσεις που στέλνονται μέσω email θεωρούνται πως δεν έχουν υποβληθεί. Η όλη διαδικασία είναι στο πνεύμα του προγραμματισμού συστήματος που είναι και το θέμα του μαθήματος και είναι αρκετά απλή.
  • Τις ασκήσεις πρέπει να τις παραδώσετε στην ώρα τους, δηλαδή μέχρι τις 23:59:59 της ημέρας που έχει ανακοινωθεί ως προθεσμία για την παράδοση της άσκησης. Παραδόσεις μπορείτε να κάνετε και αργότερα όμως θα υπάρχει η αντίστοιχη ποινή που περιγράφεται στην εκάστοτε άσκηση.
  • Το Unix user ID σας είναι sdiXYABCDE όπου XY είναι ο χρόνος εγγραφής και ABCDE είναι τα 5 τελευταία ψηφία του Α.Μ. σας. Εάν ξεκινήσατε σπουδές έως και το 2010 έχετε Unix user ID της μορφής stdXYABC όπου XY είναι ο χρόνος εγγραφής και ABC τα 3 τελευταία ψηφία του Α.Μ.
  • Για οποιοδήποτε πρόβλημα σχετικά με τα μηχανήματα Unix/Linux του τμήματος θα πρέπει να επικοινωνήσετε απευθείας με τους administrators στο admin -*at*- di -*dot*- uoa +*dot*+ gr.
  • Βήματα για την υποβολή των ασκήσεων:
    • Πριν ξεκινήσετε την άσκηση βεβαιωθείτε πως έχετε χώρο στο δίσκο. Αυτό γίνεται με την εντολή quota -v στο home directory σας.
    • Επίσης πριν ξεκινήσετε την άσκηση βεβαιωθείτε πως έχετε γράψει το user ID σας στο χαρτί που περνάει στην τάξη ώστε να έχει δημιουργηθεί ο κατάλληλος κατάλογος για εσάς για να μπορέσετε να παραδώσετε την άσκηση.
    • Όταν βγει η ανακοίνωση πως έχουν ανοίξει οι κατάλογοι για την υποβολή των ασκήσεων θα πρέπει οπωσδήποτε να κάνετε μια δοκιμαστική υποβολή. Αν υπάρξει κάποιο λάθος κατά τη δοκιμαστική αυτή υποβολή επικοινωνείστε μαζί μου άμεσα. Είστε υπεύθυνοι να βεβαιωθείτε πως μπορείτε να υποβάλλετε ασκήσεις κανονικά τουλάχιστον μία εβδομάδα πριν την προθεσμία υποβολής. Αν αφήσετε την υποβολή τελευταία στιγμή και υπάρχει κάποιο πρόβλημα πιθανώς θα καταλήξετε να υποβάλλετε την άσκηση εκπρόθεσμα.
    • Βάζετε όλο τον κώδικα σε ένα directory. Βεβαιωθείτε πως ο κώδικας κάνει compile. Θα πρέπει να έχετε ένα Makefile, οπότε οι εντολές make και make clean θα πρέπει να δουλεύουν. Βεβαιωθείτε πως έχετε στο directory μόνο κώδικα, README, Makefile και άλλα αρχεία που χρειάζεται ο κώδικάς σας αλλά όχι τα binaries. Ο κώδικάς σας θα γίνει compile από την αρχή κατά την εξέταση της άσκησης.
    • Φτιάχνετε ένα tar-ball με το directory στο οποίο έχετε τον κώδικά σας. Για παράδειγμα αν έχετε τον κώδικα στο directory projectX/ τότε δημιουργείτε το tar-ball ως εξής:

      (πριν κάνετε το ο,τιδήποτε φυσικά βεβαιωθείτε πως έχετε αντίγραφο του κώδικά σας π.χ. cp -r project2 project2.bak)

      tar cvf FirstLast-projectX.tar projectX

    • Υποβάλλετε το tar-ball προς βαθμολόγηση. Μπορείτε να κάνετε πάνω από μία υποβολλές αλλά κρατείται μόνο η τελευταία.
    • Καλό θα είναι να έχετε ένα backup .tar της άσκησής σας όπως ακριβώς αυτή υποβλήθηκε σε κάποιο εύκολα προσπελάσιμο μηχάνημα (server του τμήματος, github, cloud).
    • Είστε υπεύθυνοι για να διασφαλίσετε τον κώδικά σας, είτε από λάθος διαγραφές, αλλαγές είτε από τρίτους.
    • Η σωστή υποβολή ενός σωστού tar.gz που περιέχει τον κώδικα της άσκησής σας και ό,τι αρχεία χρειάζονται είναι αποκλειστικά ευθύνη σας. Άδεια tar/tar.gz ή tar/tar.gz που έχουν λάθος και δεν γίνονται extract δεν βαθμολογούνται.




Χρήσιμοι Σύνδεσμοι