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

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

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

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

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


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

  • 23/03: Ανακοινώθηκε η 2η άσκηση.
  • 23/02: Ανακοινώθηκε η 1η άσκηση.
  • 16/02: Το μάθημα ξεκινάει Δευτέρα 18 Φεβρουαρίου.

Προγραμματιστικές Ασκήσεις

Άσκηση 3
Μπορείτε να βρείτε την Άσκηση 3 εδώ. Προθεσμία παράδοσης Κυριακή 2 Ιουνίου, 23:59.
Οδηγίες για την υποβολή της άσκησης.
Άσκηση 2
Μπορείτε να βρείτε την Άσκηση 2 εδώ. Προθεσμία παράδοσης Παρασκευή 12 Απριλίου, 23:59.
Οδηγίες για την υποβολή της άσκησης.
Άσκηση 1
Μπορείτε να βρείτε την Άσκηση 1 εδώ. Προθεσμία παράδοσης Παρασκευή 15 Μαρτίου, 23:59.
Οδηγίες για την υποβολή της άσκησης.

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


Syllabus & Πρόγραμμα

Date Topic Handouts/Assignments Slides/Notes
Mon, Feb 18 Course logistics. Introduction to Unix, basic commands lecture 01
Tue, Feb 19 File processing, basic commands (cont'd)
Project 1 discussion
lecture 02
Mon, Feb 25 csh, bash, environment variables,
input/output, process management, makefiles.
Ανακοίνωση Άσκησης 1
Tue, Feb 26 Shell scripting, parameters, simple arithmetic, if, case, sample programs lecture 04
Mon, Mar 04 Shell scripting, for, while, file contents, exec
Tue, Mar 05 Error handling, Low-level I/O lecture 06
Mon, Mar 11 No class - Καθαρά Δευτέρα
Tue, Mar 12 Low-level I/O, signals Προθεσμία Άσκησης 1,
Παρασκευή 15/3, 23:59
Mon, Mar 18 Processes, Process Control lecture 08
Tue, Mar 19 Process Control, Pipes
Mon, Mar 25 No class - 25η Μαρτίου
Tue, Mar 26 Internetworking with Sockets lecture 10
Mon, Apr 01 Internetworking with Sockets
Tue, Apr 02 Threads lecture 12
Mon, Apr 08 Threads
Tue, Apr 09 IPC, Message Queues, Shared Memory Προθεσμία Άσκησης 2,
Παρασκευή 12/4, 23:59
lecture 14
Mon, Apr 15 Shared Memory, Semaphores lecture 15
Tue, Apr 16 Semaphores, Locking
Mon, Apr 22 No class - Πάσχα
Tue, Apr 23 No class - Πάσχα
Mon, Apr 29 No class - Πάσχα
Tue, Apr 30 No class - Πάσχα
Mon, May 06 Advanced Threads, Monitors lecture 17
Tue, May 07 sed lecture 18
Mon, May 13 awk lecture 19
Tue, May 14 awk, Επανάληψη basic commands
Mon, May 20 Επανάληψη shell scripting
Tue, May 21 Επανάληψη processes, pipes, sockets
Mon, May 27 Επανάληψη IPC, threads, semaphores
Tue, May 28 Επανάληψη Προθεσμία Άσκησης 3,
Κυριακή 2/6, 23:59


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

  • Οι προγραμματιστικές ασκήσεις δεν παραδίδονται μέσω 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 σας στο χαρτί που περνάει στην τάξη ώστε να έχει δημιουργηθεί ο κατάλληλος κατάλογος για εσάς για να μπορέσετε να παραδώσετε την άσκηση.
    • Όταν βγει η ανακοίνωση πως έχουν ανοίξει οι κατάλογοι για την υποβολή των ασκήσεων θα πρέπει οπωσδήποτε να κάνετε μια δοκιμαστική υποβολή. Αυτό γίνεται τρέχοντας τις εξής εντολές από ένα μηχάνημα Unix/Linux του τμήματος:

      touch Test-FirstLast-projectX.tar
      chmod 755 Test-FirstLast-projectX.tar
      cp Test-FirstLast-projectX.tar /home/users/k24/projectX/sdiABCDEFG/
      ls -l /home/users/k24/projectX/sdiABCDEFG/*


      Όπου First είναι το όνομά σας, Last είναι το επώνυμό σας, Χ είναι είναι ο αριθμός του project (π.χ. 1, 2, 3) και sdiABCDEFG είναι το user ID σας. Θα πρέπει να δείτε ένα άδειο αρχείο με όνομα Test-FirstLast-projectX.tar. Αν υπάρξει κάποιο λάθος κατά τη δοκιμαστική αυτή υποβολή επικοινωνείστε μαζί μου άμεσα. Είστε υπεύθυνοι να βεβαιωθείτε πως μπορείτε να υποβάλλετε ασκήσεις κανονικά τουλάχιστον μία εβδομάδα πριν την προθεσμία υποβολής. Αν αφήσετε την υποβολή τελευταία στιγμή και υπάρχει κάποιο πρόβλημα πιθανώς θα καταλήξετε να υποβάλλετε την άσκηση εκπρόθεσμα.
    • Βάζετε όλο τον κώδικα σε ένα directory. Βεβαιωθείτε πως ο κώδικας κάνει compile. Θα πρέπει να έχετε ένα Makefile, οπότε οι εντολές make και make clean θα πρέπει να δουλεύουν. Βεβαιωθείτε πως έχετε στο directory μόνο κώδικα, README, Makefile και άλλα αρχεία που χρειάζεται ο κώδικάς σας αλλά όχι τα binaries. Ο κώδικάς σας θα γίνει compile από την αρχή κατά την εξέταση της άσκησης.
    • Φτιάχνετε ένα tar-ball με το directory στο οποίο έχετε τον κώδικά σας. Για παράδειγμα αν έχετε τον κώδικα στο directory projectX/ τότε δημιουργείτε το tar-ball ως εξής:

      tar cvf FirstLast-projectX.tar projectX

      Πριν κάνετε το ο,τιδήποτε φυσικά βεβαιωθείτε πως έχετε αντίγραφο του κώδικά σας (π.χ. cp -r project2 project2.bak)
    • Αλλάξτε τα permissions του tar-ball που πρόκειται να υποβάλλετε.

      chmod 755 FirstLast-projectX.tar

    • Υποβάλλετε το tar-ball προς βαθμολόγηση με την εντολή

      cp FirstLast-projectX.tar /home/users/k24/projectX/sdiABCDEFG/

      Όπου First είναι το όνομά σας, Last είναι το επώνυμό σας, Χ είναι είναι ο αριθμός του project (π.χ. 1, 2, 3) και sdiABCDEFG είναι το user ID σας.
    • Για να ελέγξετε αν η άσκηση έχει υποβληθεί σωστά μπορείτε να χρησιμοποιείσετε την εντολή:

      ls -l /home/users/k24/projectX/sdiABCDEFG/*

      Μπορείτε να ελέγξετε αν το αρχείο που μόλις υποβάλλατε έχει το ίδιο μέγεθος με αυτό που είναι στο δικό σας directory.
    • Με την εντολή

      rm /home/users/k24/projectX/sdiABCDEFG/old-version.tar

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


Frequently Asked Questions

  • Μπορώ να παρακολουθήσω το τμήμα άρτιων ενώ έχω άρτιο Α.Μ. ή ανάποδα;
    Όχι.
  • Χρησιμοποιείτε το e-class;
    Όχι.
  • Θα υπάρχουν μαγνητοσκοπήσεις του μαθήματος ή μετάδοση live stream;
    Όχι.
  • Αν δεν πάρω τουλάχιστον 50/100 στην πρώτη άσκηση μπορώ να συνεχίσω στο μάθημα;
    Όχι.
  • Είμαι μακριά/δουλεύω/δεν μπορώ να παρακολουθήσω τις διαλέξεις μπορώ να πάρω το μάθημα;
    Θα πρέπει να εμφανιστείτε αυτοπροσώπως για την εξέταση των ασκήσεων και το τελικό διαγώνισμα.
  • Μπορώ να υποβάλλω τις προγραμματιστικές ασκήσεις με email;
    Όχι
  • Μπορείτε να μου κρατήσετε βαθμούς για επόμενες χρονιές;
    Όχι.
  • Μπορώ να πάρω ασκήσεις ή κομμάτια από άλλους, να βάλω φίλους μου να μου κάνουν τις ασκήσεις ή να τις βρω επί πληρωμή;
    Η αντιγραφή και αντίστοιχες πρακτικές απαγορεύoνται αυστηρά. Όλοι όσοι εμπλέκονται παίρνουν μηδέν στο μάθημα.
  • Συντρέχει είτε από την αρχή του εξαμήνου είτε ξαφνικά κάποια πολύ σοβαρή, ανυπέρβλητη δυσκολία που με εμποδίζει να ολοκληρώσω το μάθημα. Τι να κάνω;
    Επικοινωνήστε μαζί μου άμεσα και αναλόγως την περίπτωση θα αποφασίσουμε τι είναι εφικτό για την εκάστοτε περίπτωση.


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