Πληροφορίες Μαθήματος
- Εαρινό εξάμηνο - Τμήμα άρτιων αριθμών μητρώου.
- Μάθημα: Δευτέρα 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 Μαρτίου Διαδικτυακά.
Βιβλιογραφία
- 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 |
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 δεν βαθμολογούνται.
Χρήσιμοι Σύνδεσμοι
-
Δωρεάν διαθεσιμότητα του 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.