UNIVERSITY OF ATHENS
Department of Informatics & Telecommunications

Κ24 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΥΣΤΗΜΑΤΟΣ

Spring Semester 2017: Mondays 11:00-13:00 in Room A2 and Tuesdays 11:00-13:00 in Room A1

Instructor: Mema Roussopoulou
Email: mema -at* di *dot- uoa -dot* gr
Office: A38
Office hours: Wednesdays 13:00-14:00

EDIP: Sarantis Paskalis
Email: paskalis-at* di *dot- uoa -dot* gr


Announcements

1) Please sign up on the Piazza class forum here. We will use the class forum to make any announcements regarding homeworks, lectures, exams, etc. You are required to read the class forum regularly.

2) Sample data files for HW 1: sample1, sample2, sample3 sample4 sample5 sample6
Sample config file and explanation: sample config file, explanation,


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

Σε αυτό το μάθημα θα μελετήσουμε το Λειτουργικό Σύστημα Unix από τη πλευρά του χρήστη.  Τα θέματα που θα καλύψουμε συμπεριλαμβάνουν:

  1. Βοηθητικά προγράμματα του Unix
  2. Προγραμματισμός σε κελύφη
  3. Προγραμματισμός λειτουργιών συστήματος σε C για
    1. χειρισμό λαθών
    2. δημιουργία και τερματισμό διεργασιών
    3. αποστολή/παραλαβή σημάτων
    4. είσοδο/έξοδο χαμηλού επιπέδου
    5. επικοινωνία μεταξύ διεργασιών μέσω
      1. σωλήνων
      2. υποδοχών
      3. ουρών μηνυμάτων
      4. κοινής μνήμης και σηματοφόρων
    6. δημιουργία, τερματισμό και συγχρονισμό νημάτων
    7. διαχείριση συστήματος αρχείων

This class will also include an introduction to security including the concepts of software vulnerabilities and secure programming as a part of the 10KStudents challenge.

10K students

Assignments

Στο μάθημα αυτό θα έχουμε 3 εργασίες (προγραμματισμού) και μια τελική εξέταση.  Οι ασκήσεις είναι ατομικές, εκτός αν ορίζεται διαφορετικά. Πρέπει να διεκπεραιώνονται από ένα φοιτητή/φοιτήτρια, αυτ-όν/-ή που τις παραδίδει. Ανταλλαγή απόψεων είτε δημόσια (μέσω της λίστας, στα εργαστήρια, στο μάθημα) με συναδέλφους, με τον μεταπτυχιακό συνεργάτη του μαθήματος και με τον διδάσκοντα, είτε ιδιωτικά με φίλους και γνωστούς, σχετικά με τις ασκήσεις, επιτρέπονται και, μάλλον, επιβάλλονται. Αυτό που αυστηρά απαγορεύεται είναι η αντιγραφή και παράδοση προγραμμάτων που δεν έχουν γίνει από τον/την παραδίδ-οντα/-ουσα την άσκηση. Όποι-ος/-α αποδεδειγμένα ενέχεται σε τέτοιες καταστάσεις, είτε δίνει, είτε παίρνει έτοιμο κώδικα, θα μηδενιστεί και στις δύο εξετάσεις του μαθήματος.



Class Forum

You are required to follow the class forum. Find our class forum page here.


Βιβλία για το Κ24:

·  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.

 

Διαφάνειες:

Οι διαφάνειες που χρησιμοποιούνται σε αυτό το μάθημα είναι βασισμένες σε μεγάλο βαθμό στα σετ διαφανειών που χρησιμοποίησαν οι κκ. Αλέξης Δελής και Αντώνης Δελιγιαννάκης σε προηγούμενα εξάμηνα.  Η αρχική πηγή του περιεχομένου των διαφανειών είναι οι σημειώσεις του κ. Σταματόπουλου.  Ευχαριστίες στον κ. Σταματόπουλο.    Θα τις βρείτε παρακάτω.

Αλλες Χρήσιμες Αναφορές:

·  Δωρεάν διαθεσιμότητα του Linux και FreeBSD: Ubuntu, Debian, Suse, RedHat, και FreeBSD

·  Χρήσιμο F.A.Q. για την γλώσσα προγραμματισμού C - faq-c

·  Εισαγωγικά tutorials για Unix είναι εδώ   και εδώ .

·  Tutorials για το πως να κάνετε compile προγράμματα στο Unix Tut-A, Tut-B, και Tut-C

·  C Standard Library

·  Οδηγίες για όσους γράφουν C++

·  A. D. Downey, The Little Book of Semaphores, GreenTree Press, 2007.


Grading

Programming Assignments: 50%
To pass the course, you must achieve:
1) a score of at least 50% on HW1.
2) an average score of 50% on HW2 and HW3.

Final Exam: 50%

You may submit programming assignments at most three days after the deadline, with a penalty of 5% deduction per day. For example if you submit an assignment two days late, the maximum possible grade you can receive for that assignment is 90%. Programming assignments will not be accepted if they are submitted more than three days past the deadline.

There will be required oral examinations for each programming assignment. If you are unable to be physically present on the days of the oral examinations, you may be examined via Skype (with a webcam) after first having notified the teaching instructor and assistants and sent us a scanned image of your student ID.

The above grading policy holds for the September exam period. That is, the grade during the September exam period will be based on the programming assignments submitted and the student's performance on the September exam using the percentages indicated above.


Course Policy

Assignments are due on the day listed on the class schedule below. Should there be a change in deadline, this will be announced on the class mailing list.

Cheating will NOT be tolerated and will result in immediate failure of the class. Consider yourself warned.

NO LAPTOP OR CELL PHONE USE ALLOWED IN CLASS.


Υποβολή Ασκήσεων:

·  Φτιάξτε ένα tar-ball με όλη την δουλειά σας (source files, header files, Makefile, README-file, κλπ) και δώστε του ένα όνομα που ΕΥΚΟΛΑ σας ξεχωρίζει (π.χ. "MemaRoussopoulou-projectX.tar") όπου Χ είναι ο αριθμός της εργασίας π.χ. project1. 

ΠΡΟΣΟΧΗ: φροντίστε να φτιάξετε τα δικαιώματα αυτού του αρχείου πριν την υποβολή, π.χ. με chmod 755 MemaRoussopoulou-projectΧ.tar

·  Το παραπάνω αρχείο το αντιγράφετε στον παρακάτω κατάλογο:
/
home/users/k24/projectX/USER-ID
όπου
USER-ID ειναι το login όνομα σας στον Unix Server. Για το παραπάνω παράδειγμα η υποβολή για την άσκηση X θα γινόταν με την απλή εντολή
cp MemaRoussopoulou-projectΧ.tar /home/users/k24/projectX/mema/
δεδομένου οτι το
login id του χρήστη είναι mema.

·  Μπορείτε να κάνετε πολλαπλές υποβολές. Μόνο η τελευταία υποβολή λαμβάνεται υπόψη.

·  Πάντα βάζετε ενα README αρχείο με οδηγίες για τον εξεταστή της άσκησης.


Separate Compilation - C (gcc):
Εδώ είναι ένα tar file (απλό "επίπεδο" file) που ονομάζεται
sample-C-prog.tar
Κατεβάστε αυτό το αρχείο tar στον λογαριασμό σας και κάντε το un-tar με την παρακάτω εντολή:
your-machine-prompt> tar xvf  sample-C-prog.tar
Αυτό δημιουργεί ένα κατάλογο με όνομα SampleGCC
Το πρόγραμμα γίνεται "αυτόματα" compile με την βοήθεια του Makefile (που θα βρείτε στο κατάλογο SampleGCC).
Για να διαγράψετε "παλιά" object files ή executables απλά γράψτε:
your-machine-prompt> make clean
Για να ξανακάνετε compile γράφετε:
your-machine-prompt> make
Για πιο πολλές πληροφορίες για το make  kai gcc πηγαινετε στην
σελίδα.
Αν δεν γνωρίζετε τι είναι το "
tar" "gcc" "make"  απλά γράφετε "man tar", "man gcc",  "man make" για να δειτε σκιαγραφήσεις των εν λόγω προγραμμάτων συστήματος


Tar-balls:
Ενα
tar-file ειναι μια επιπεδοποιημένη μορφή ενός αριθμού αρχείων (που μπορεί να περιλαμβάνει και καταλόγους):

·  Δημιουργία ενός tar file: ας πούμε οτι έχουμε ένα κατάλογο που ονομάζεται myproject και μέσα σε αυτόν το κατάλογο υπάρχουν τα αρχεία: main.c,  stack.c, stack.h, main.o, stack.o, a.out kai MyDatafile. Για να δημιουργήσετε ένα αρχείο tar δώστε την εντολή
your_machine_prompt:> tar cvf mine.tar myproject
Το νέο
mine.tar θα έχει όλες τις πληροφορίες που υπάρχουν στον κατάλογο myproject  και όλα τα σχετικά αρχεία. Αυτό διευκολύνει τα πράγματά αν χρειάζεται να μετακινηθεί ένας μεγάλος αριθμός από λογικά συνδεδεμένα αρχεία/κατάλογους μεταφέροντας απλά ένα file (το tar file εμπεριέχει όλη την πληροφορία της ιεραρχίας καθώς και την δομή της).

·  Βγάζοντας πληροφορία από ενα tar-file: για να κάνουμε την αντίστροφη διαδικασία ανάκλησης αρχείων/καταλόγων δίνουμε την εντολή:
your_machine_prompt:> tar xvf mine.tar
που θα έχει σαν αποτέλεσμα την δημιουργία ενός κατάλογου (στην νέα θέση στο σύστημα αρχείων) που ονομάζεται
myproject και περιέχει όλα τα αρχεία :main.c, stack.c, stack.h, main.o, a.out, MyDatafile.


Μεταφορές Αρχείων από και προς τα Συστήματα Unix του Τμήματος (iokasti.di.uoa.gr/linuxXX.di.uoa.gr):
Μπορείτε να κάνετε την ανάπτυξη των ασκήσεων σας σε "απομακρυσμένα" συστήματα αλλά θα πρέπει ΠΑΝΤΑ το τελικό αποτέλεσμα να ΤΡΕΧΕΙ στα συστήματα
Unix (Solaris/Linux) του τμήματος. Τέτοιες μεταφορές μπορούν εύκολα να γίνουν με: sftp η scp



Syllabus & Schedule (tentative)

Date

Topic

Handouts, Assignments

Lecture Notes

Monday 20/2

Class overview.

 

Topic 1:  Intro to Unix, basic commands, file processing, C shell, metacharacters, environment variables, process management, makefiles.


Topic 1 (pdf)

Tuesday 21/2

Topic 1 (cont'd)

 

 

Monday 27/2

No class -- Greek Lent holiday.

| HW1 assigned (sample data files posted above)


HW 1 due: Sunday March 19

 

Tuesday 28/2

Topic 2:  Bash shell programming: parameters, arithmetics, expr, conditional statements, if stmt, case stmt, for loops, while loops, sample script programs.

 

 

Monday 6/3

Topic 2 (cont'd).

 

Topic 2 (pdf)

Topic 2 (Sample bash scripts)

Tuesday 7/3

Φροντιστήριο – θέμα: HW 1.

 

 

Monday 13/3

Topic 3: Error handling, perror, errno, low-level I/O, system calls link, unlink, mkdir, rmdir, rename, symlink, readlink, signals, signal handling actions, syscalls raise, pause, alarm.

 

Topic 3 (pdf)

Topic 3 (Topic 3 sample programs )

Tuesday 14/3

Topic 3 (cont'd)

 

 

Monday 20/3

Topic 3 (cont'd).

 

 

Tuesday 21/3

Topic 4: Process: concept, process state machine execution, syscalls getpid, getppid, exit, fork, wait, waitpid, exec, orphan processes, zombie processes, pipes, file descriptors after exec

 

Topic 4 (pdf)

Topic 4 (Topic 4 sample programs )

Monday 27/3

Topic 4 (cont'd).

 

 

Tuesday 28/3

Φροντιστήριο – θέμα: HW 2

 

 

Monday 3/4

Topic 4 (cont'd)

 

 

Tuesday 4/4

Topic 5: Interprocess Communication across the Net: client-server model, handling client requests, socket syscalls, bind, connect, listen, accept, bzero, bcopy, TCP, UDP

| HW 2 assigned


HW 2 due: Sunday April 30

Topic 5 (pdf

Topic 5 (Topic 5 sample programs )

Monday 10/4-Tuesday 18/4

Easter break – no class.

 

 

Monday 24/4

Topic 5 (cont’d)

 

 

Tuesday 25/4

Topic 5 (cont'd)

 

 

Monday 1/5

No class -- Holiday.

 

 

Tuesday 2/5

Topic 6: Threads: concept, thread creation, termination, going from single-threaded to multi-threaded, synchronization, binary semaphores, conditional variables, producer-consumer problem

 

Topic 6 (pdf)

Topic 6 (Topic 6 sample programs )

Monday 8/5

Topic 6 (cont'd)

 

 

Tuesday 9/5

Topic 6 (cont'd)

 


 

Monday 15/5

Φροντιστήριο – θέμα: HW 3

 

 

Tuesday 16/5

Topic 6 (Threads cont'd)

HW 3 assigned
HW 3 due: Sunday June 4

Topic 6 (cont'd) Monitor-style programming (see slides by Y. Smaragdakis) )

 

Monday 22/5

Topic 6 (cont'd)

 

 

Tuesday 23/5

Topic 7: Interprocess Communication:  System V, message queues, shared memory, semaphores, deadlock

 

 Topic 7 (pdf)

Topic 7 (Topic 7 sample programs )

Monday 29/5

Topic 7 (cont’d)

 

 

Tuesday 30/5

Topic 7 (cont’d)