(Translated by https://www.hiragana.jp/)
GitHub - papanikge/projectOS: personal Operating Systems project/exercises
Skip to content

papanikge/projectOS

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Λειτουργικά Συστήματα Ιいおた - 2012
Άσκηση 1


Γεώργιος Παπανικολάου - Αあるふぁ.Μみゅー.: 5044
Προκόπης Γρύλλος - Αあるふぁ.Μみゅー.: 4975


Build for GNU/Linux (x86_64-pc-linux-gnu) with:

  • gcc 4.6.3
    • make 3.81
    • bash 4.2.24
    • git 1.7.9.5
    • vim 7.3.429

Project hosted on http://github.com/g3orge/projectOS
There is ABSOLUTELY NO WARRANTY


Σしぐまτたうηいーたνにゅー άσκηση αυτή χρησιμοποιύμε δίεργασιές (fork) γがんまιいおたαあるふぁ νにゅーαあるふぁ μπορόυν οおみくろんιいおた διαφορετικες διαδικασίες (πぱい.χかい. ψησιμο της πιτσας) νにゅーαあるふぁ γίνονται παράλληλα. Επίσης σήματα γがんまιいおたαあるふぁ τたうηいーたνにゅー εποικοινωνία τたうωおめがνにゅー διεργασιών, κοινή μνήμη μみゅーεいぷしろんτたうαあるふぁξくしーυうぷしろん τους γがんまιいおたαあるふぁ σωστή συνεργασία κかっぱαあるふぁιいおた sockets γがんまιいおたαあるふぁ τたうηいーたνにゅー επικοινωνία client-server, κかっぱαあるふぁιいおた σημαφόροι γがんまιいおたαあるふぁ συγχρονισμό.

Ειδικότερα: Σしぐまτたうοおみくろん pizza.h δηλώνονται οおみくろんιいおた σταθερες, bool type μみゅーεいぷしろん enumeration, κかっぱαあるふぁιいおた τたうοおみくろん struct της παραγγελιας πぱいοおみくろんυうぷしろん περιεχει αριθμο τたうωおめがνにゅー διαφορετικων ειδών πίτσας της παραγγελιας, μεταβλητες χρόνου, κかっぱαあるふぁιいおた μία βοηθητικη μεταβλητη exists γがんまιいおたαあるふぁ τたうηいーたνにゅー ευκολη διαγραφή. Έδω υπάρχει ηいーた δυνατότητα αλλαγης τたうωおめがνにゅー default μεγεθών της άσκησης. (πぱい.χかい.: τたうοおみくろん χρόνο ψησίματος της μαργαρίτας)

Τたうοおみくろん client.c υλοποιέι τたうοおみくろんνにゅー πελάτη τたうοおみくろんυうぷしろん συστήματος. Χρημιμοποιει ιδιες δομές μみゅーεいぷしろん τたうοおみくろんνにゅー server κかっぱαあるふぁιいおた sockets γがんまιいおたαあるふぁ νにゅーαあるふぁ στελνει τたうηいーたνにゅー παραγγελία. Χωρις ορισματα μπαίνει σしぐまεいぷしろん interactive mode γがんまιいおたαあるふぁ είσοδο παραγγελίας αあるふぁπぱいοおみくろん τたうοおみくろん χρηστη, μみゅーεいぷしろん όρισμα rand παράγει μみゅーιいおたαあるふぁ τυχαία παραγγελία. (Χρηση τたうοおみくろんυうぷしろん run_tests.sh γがんまιいおたαあるふぁ περισσότερες)

Σしぐまτたうοおみくろん pizza_server.c υλοποιείται οおみくろん server. Οおみくろん server δουλέυει σしぐまεいぷしろん deamon mode γがんまιいおたαあるふぁ νにゅーαあるふぁ είναι σしぐまτたうοおみくろん παρασκήνιο. Αρχικοποιεί σημαφόρους, κοινη μνήμη, handlers κかっぱαあるふぁιいおた ανοίγει UNIX socket (/tmp file) σしぐまτたうοおみくろん οおみくろんπぱいοおみくろんιいおたοおみくろん περιμένει παραγγελίες. Κάθε φふぁいοおみくろんρろーαあるふぁ πぱいοおみくろんυうぷしろん δέχεται μみゅーιいおたαあるふぁ καινούργια παραγγελία εκτελει fork κかっぱαあるふぁιいおた αναμένει γがんまιいおたαあるふぁ άλλες. Τたうοおみくろん παιδί τたうοおみくろんυうぷしろん εινάι υπευθυνο γがんまιいおたαあるふぁ τたうηいーたνにゅー παραγγελία ως σύνολο.(εδώ γίνεται attach σしぐまτたうηいーたνにゅー κかっぱοおみくろんιいおたνにゅーηいーた μνήμη μみゅーεいぷしろん shmat) Εκτελεί κかっぱαあるふぁιいおた αあるふぁυうぷしろんτたうοおみくろん fork γがんまιいおたαあるふぁ νにゅーαあるふぁ γίνει τたうοおみくろん ψήσιμο τたうωおめがνにゅー πιτσων της παραγγελίας παραλληλα κかっぱαあるふぁιいおた μみゅーεいぷしろんτたうαあるふぁ παραδίδει τたうηいーたνにゅー παραγγελία.

Θέμα semaphores: Δημιουργουνταί μみゅーεいぷしろん sem_open (ένας γがんまιいおたαあるふぁ τους ψήστες, ενας γがんまιいおたαあるふぁ τους διανομείς, κかっぱαあるふぁιいおた εいぷしろんνにゅーαあるふぁ mutex γがんまιいおたαあるふぁ τたうηいーたνにゅー αποφυγη overwrite/conflict σしぐまτたうηいーたνにゅー κοινή μνήμη) κかっぱαあるふぁιいおた αρχικοποιούνται κατάλληλα μみゅーεいぷしろん sem_init (οおみくろんιいおた δύο πρώτοι σしぐまτたうοおみくろんνにゅー αριθμό τους κかっぱαあるふぁιいおた οおみくろん τρίτος σしぐまεいぷしろん 1 (δυαδικός)) Χρησιμοποιούνται δηλαδη (οおみくろんιいおた δでるたυうぷしろんοおみくろん πρώτοι) σしぐまαあるふぁνにゅー μετρητές τたうωおめがνにゅー διαθέσιμων ψηστων/διανομέων. μείωση μみゅーεいぷしろん sem_wait κかっぱαあるふぁιいおた αύξηση μみゅーεいぷしろん sem_post.

Θέμα Coca-coles: Υλοποιήθηκε σしぐまεいぷしろん μία διαφορετική αυτόνομη διεργασία (γがんまιいおたαあるふぁ αύτο οおみくろん αριθμος τたうωおめがνにゅー σしぐまωおめがσしぐまτたうωおめがνにゅー διεργασιων σしぐまεいぷしろん stand-by ειναι 2) γがんまιいおたαあるふぁ νにゅーαあるふぁ μみゅーηいーたνにゅー επειρεάζει τたうηいーたνにゅー αναμονη τたうωおめがνにゅー παραγγελιών. (Σしぐまεいぷしろん περίπτωση χρήσης alarm κかっぱαあるふぁιいおた handler τたうοおみくろんυうぷしろん SIGALRM, ηいーた αναμονή τたうωおめがνにゅー παραγγελίων θしーたαあるふぁ διακόπτωνταν οおみくろんσしぐまοおみくろん γίνονται οおみくろんιいおた έλεγχοι, πραγμα ανεπιθύμιτο. Πぱいαあるふぁρろー' οおみくろんλらむだαあるふぁ αあるふぁυうぷしろんτたうαあるふぁ υπαρχεί αあるふぁυうぷしろんτたうηいーた ηいーた διαφορετικη υλοποιηση σしぐまτたうοおみくろん coke-with-handler branch σしぐまτたうηいーた σελιδα της ασκησης σしぐまτたうοおみくろん 1) O κώδικας γがんまιいおたαあるふぁ τたうοおみくろん θέμα βρίσκεται σしぐまτたうοおみくろん τέλος τたうοおみくろんυうぷしろん αρχέιου σしぐまτたうοおみくろん label cocacola.

Θέμα sockets: Τたうαあるふぁ sockets τたうαあるふぁ κλείνουμε κατευθείαν μόλις έρθει ηいーた παραγγελία γがんまιいおたαあるふぁ ευκολία κかっぱαあるふぁιいおた ενημερώνουμε τたうοおみくろんνにゅー client (συμβολικά) σしぐまτたうοおみくろん logfile, σしぐまτたうοおみくろん οποίο εκτυπώνονται πολλων εいぷしろんιいおたδでるたωおめがνにゅー μηνυματα αあるふぁπぱいοおみくろん τたうοおみくろんνにゅー server. Ηいーた αναγνώριση της παραγγελίας γίνεται μみゅーεいぷしろん τたうοおみくろん αντίστοιχο pid τたうοおみくろんυうぷしろん process.

Τたうοおみくろん script run_tests.sh χρησιμοποιείται γがんまιいおたαあるふぁ τたうηいーたνにゅー εκίνηση πολλών client μαζί. Χωρις ορίσματα στέλνει 100 clients, εいぷしろんνにゅーαあるふぁνにゅー καθε 0.01 (γがんまιいおたαあるふぁ νにゅーαあるふぁ αλλαζουν τたうαあるふぁ νούμετα της γεννήτριας ψευγοτυχαίων αριθμών). Δでるたυうぷしろんοおみくろん πιθανά ορίσματα: Πρωτο οおみくろん αριθμός τたうωおめがνにゅー πόσων clients νにゅーαあるふぁ στέιλει κかっぱαあるふぁιいおた δέυτερο πぱいιいおたθしーたαあるふぁνにゅーοおみくろん άλλο όνομα τたうοおみくろんυうぷしろん εκτελέσιμου.


Κάποια πράγματα δでるたεいぷしろんνにゅー είναι απαραίτητα γがんまιいおたαあるふぁ τたうηいーた σωστή λειτουργεία τたうοおみくろんυうぷしろん προγραμματος αあるふぁλらむだλらむだαあるふぁ εいぷしろんιいおたτたうεいぷしろん απαιτούνταν σしぐまτたうηいーたνにゅー εκφωνηση εいぷしろんιいおたτたうεいぷしろん βοηθούσαν σしぐまτたうοおみくろん debugging, οπότε παρέμειναν. (πぱい.χかい.: τたうαあるふぁ statuses τたうωおめがνにゅー παραγγελιών κかっぱαあるふぁιいおた οおみくろんιいおた μεταβλητες χρόνου στις παραγγελιές)


Γνωστά Προβλήματα: *Μερικές φορές (μみゅーεいぷしろんτたうαあるふぁ αあるふぁπぱいοおみくろん πολλες παραγγελίες) μενουν (zombie) διεργασίες σしぐまτたうοおみくろん process table τたうοおみくろんυうぷしろん λειτουργικου συστήματος πぱいαあるふぁρろー' οおみくろんλらむだαあるふぁ τたうαあるふぁ μέτρα εναντίον τたうοおみくろんυうぷしろん γεγονότος. (βべーたλらむだ. handling τたうοおみくろんυうぷしろん σήματος SIGCHLD κかっぱαあるふぁιいおた wait εκέι γがんまιいおたαあるふぁ απορόφηφη τたうοおみくろんυうぷしろん exit status)


About

personal Operating Systems project/exercises

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 90.5%
  • Shell 6.2%
  • Makefile 3.3%