Πληροφορίες Μαθήματος
- Εαρινό εξάμηνο - Τμήμα άρτιων αριθμών μητρώου.
- Μάθημα: Δευτέρα 13:00-15:00 (A1) και Τρίτη 11:00-13:00 (A1).
- Διδάσκων: Αλέξανδρος Ντούλας
(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 του τμήματος.
Ανακοινώσεις
- 18/03: Το μάθημα της Δευτέρας 21 Μαρτίου δε θα πραγματοποιηθεί. Κανονικά θα συνεχίσει το μάθημα την Τρίτη 21 Μαρτίου.
- 21/02: Το μάθημα ξεκινάει Τρίτη 22 Φεβρουαρίου.
Βιβλιογραφία
- M.J. Rochkind, Advanced Unix Programming, Prentice-Hall Software Series, Englewood Cliffs, NJ, 2004.
-
Kay Robbins, Steven Robbins, Unix Systems Programming: Communication, Concurrency, and Threads", Prentice Hall PTR, 2003.
Syllabus & Πρόγραμμα
Date |
Topic |
Handouts/Assignments |
Slides/Notes |
Tue, Feb 22 |
Course logistics. Introduction to Unix, basic commands
|
|
lecture 01 |
Mon, Feb 28 |
File processing, basic commands (cont'd)
|
| lecture 02 |
Tue, Mar 01 |
csh, bash, environment variables, input/output, process management, makefiles.
|
|
|
Mon, Mar 07 |
No class - Καθαρά Δευτέρα |
|
|
Tue, Mar 08 |
Shell scripting, parameters, simple arithmetic, if, case, sample programs |
|
lecture 04 |
Mon, Mar 14 |
Shell scripting, for, while, file contents, exec |
|
|
Tue, Mar 15 |
Error handling, Low-level I/O |
|
lecture 06 |
Mon, Mar 21 |
Low-level I/O, signals |
|
|
Tue, Mar 22 |
Processes, Process Control |
|
lecture 08 |
Mon, Mar 28 |
Process Control, Pipes |
|
|
Tue, Mar 29 |
Internetworking with Sockets |
|
lecture 10 |
Mon, Apr 04 |
Internetworking with Sockets |
|
|
Tue, Apr 05 |
Threads |
|
lecture 12 |
Mon, Apr 11 |
Threads |
|
|
Tue, Apr 12 |
IPC, Message Queues, Shared Memory |
|
lecture 14 |
Mon, Apr 18 |
No class - Πάσχα |
|
|
Tue, Apr 19 |
No class - Πάσχα |
|
|
Mon, Apr 25 |
No class - Πάσχα |
|
|
Tue, Apr 26 |
No class - Πάσχα |
|
|
Mon, May 02 |
Shared Memory, Semaphores |
|
lecture 15 |
Tue, May 03 |
Semaphores, Locking |
|
|
Mon, May 09 |
Advanced Threads, Monitors |
|
lecture 17 |
Tue, May 10 |
Semaphores, Locking |
|
|
Mon, May 16 |
Advanced Threads, Monitors |
|
lecture 17 |
Tue, May 17 |
sed |
|
lecture 18 |
Mon, May 23 |
awk |
|
lecture 19 |
Tue, May 24 |
Επανάληψη |
|
|
Mon, May 30 |
Επανάληψη |
|
|
Tue, May 31 |
Επανάληψη |
|
|
Οδηγίες Παράδοσης των Ασκήσεων
- Οι προγραμματιστικές ασκήσεις δεν παραδίδονται μέσω 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 σας.
-
Βάζετε όλο τον κώδικα σε ένα 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
-
Αλλάξτε τα permissions του tar-ball που πρόκειται να υποβάλλετε.
chmod 755 FirstLast-projectX.tar
-
Υποβάλλετε το tar-ball προς βαθμολόγηση στο eClass
Όπου First είναι το όνομά σας, Last είναι το επώνυμό σας, Χ είναι είναι ο αριθμός του project (π.χ. 1, 2, 3) και sdiABCDEFG είναι το user ID σας.
-
Καλό θα είναι να έχετε ένα backup .tar της άσκησής σας όπως ακριβώς αυτή υποβλήθηκε σε κάποιο εύκολα προσπελάσιμο μηχάνημα (server του τμήματος, github, cloud).
-
Είστε υπεύθυνοι για να διασφαλίσετε τον κώδικά σας, είτε από λάθος διαγραφές, αλλαγές είτε από τρίτους.
-
Η σωστή υποβολή ενός σωστού tar.gz που περιέχει τον κώδικα της άσκησής σας και ό,τι αρχεία χρειάζονται είναι αποκλειστικά ευθύνη σας. Άδεια tar/tar.gz ή tar/tar.gz που έχουν λάθος και δεν γίνονται extract δεν βαθμολογούνται.
Frequently Asked Questions
- Μπορώ να παρακολουθήσω το τμήμα άρτιων ενώ έχω άρτιο Α.Μ. ή ανάποδα;
Όχι.
- Θα υπάρχει μετάδοση live stream;
Όχι.
- Είμαι μακριά/δουλεύω/δεν μπορώ να παρακολουθήσω τις διαλέξεις μπορώ να πάρω το μάθημα;
Θα πρέπει να εμφανιστείτε με την ταυτότητα σας για την εξέταση.
- Μπορώ να υποβάλλω τις προγραμματιστικές ασκήσεις με email;
Όχι
- Μπορείτε να μου κρατήσετε βαθμούς για επόμενες χρονιές;
Όχι.
- Μπορώ να πάρω ασκήσεις ή κομμάτια από άλλους, να βάλω φίλους μου να μου κάνουν τις ασκήσεις ή να τις βρω επί πληρωμή;
Η αντιγραφή και αντίστοιχες πρακτικές απαγορεύoνται αυστηρά. Όλοι όσοι εμπλέκονται παίρνουν μηδέν στο μάθημα.
- Συντρέχει είτε από την αρχή του εξαμήνου είτε ξαφνικά κάποια πολύ σοβαρή, ανυπέρβλητη δυσκολία που με εμποδίζει να ολοκληρώσω το μάθημα. Τι να κάνω;
Επικοινωνήστε μαζί μου άμεσα και αναλόγως την περίπτωση θα αποφασίσουμε τι είναι εφικτό για την εκάστοτε περίπτωση.
Χρήσιμοι Σύνδεσμοι
-
Δωρεάν διαθεσιμότητα του Linux και FreeBSD:
Ubuntu,
Debian,
Mint,
Suse,
RedHat, και
FreeBSD
-
Χρήσιμο F.A.Q. για την γλώσσα προγραμματισμού C - faq-c
-
Εισαγωγικά tutorials για Unix:
[1] ,
[2] ,
και [3].
-
The Linux Command Line
-
Tutorial για το πως να κάνετε
compile
προγράμματα στο Linux.
-
Linux Manual
Pages
-
B. Barney, POSIX Thread Programming, Lawrence Livermore National Laboratory (llnl.gov).
-
Oracle Corp., Multithreaded Programming Guide
-
Μια αναφορά απο (παλιούς) φοιτητές του τμήματος:
εδώ
-
Καθώς αναπτύσσετε την άσκηση μπορείτε να χρησιμοποιήσετε τον
gdb
ή και την καλύτερη έκδοσή του όσον αφορά στην διεπαφή:
ddd.
Αν είναι επιθυμητό, μπορείτε να
χρησιμοποιήσετε ένα IDE όπως το
codelite, το
netbeans ή το
eclipse.
-
Το manual για τον
debugger GDB
-
C Standard Library
-
The GNU C Library
-
Oracle-Solaris System Calls
-
Οδηγίες για όσους γράφουν C++
-
A. D. Downey, The Little Book of Semaphores, GreenTree Press, 2007.