ËåéôïõñãéêÜ ÓõóôÞìáôá óêçóç 3 1 ÅéóáãùãéêÜ ¼ôáí äýï Þ ðåñéóóüôåñåò äéåñãáóßåò Þ íþìáôá ðñïóðåëáýíïõí ôïí ßäéï ðüñï (resource) Þ ãñüöïõí óôéò ßäéåò èýóåéò ìíþìçò, áðáéôåßôáé óõã ñïíéóìüò ãéá áðïöõãþ race conditions. Ãéá ôïí óõã ñïíéóìü äéåñãáóéþí (processes) êáé íçìüôùí (threads) ðáñý ïíôáé ôá åîþò åñãáëåßá: Processes: Semaphores (óçìáöüñïé) Threads: Mutexes êáé condition variables Óôçí Üóêçóç áõôþ èá åîïéêåéùèåßôå ìå ôç ñþóç ôùí ðáñáðüíù åñãáëåßùí óå äéáöïñåôéêü óåíüñéá. Ãéá ôç äéåîáãùãþ ôçò Üóêçóçò êáôåâüóôå ôï ó åôéêü code template áðü ôç äéåýèõíóç http://rio.ceid.upatras.gr:8000/ spyros/os/code.tar. 2 Óõã ñïíéóìüò äéåñãáóéþí ÌåëåôÞóôå ôïí êþäéêá ôùí ðñïãñáììüôùí syn_process_1 êáé syn_process_2. Ï óôü ïò áõôþò ôçò Üóêçóçò åßíáé íá ôá ôñïðïðïéþóåôå êüíïíôáò ñþóç óçìáöüñùí þóôå ôá äýï áõôü ðñïãñüììáôá íá ðáñüãïõí «óùóôü» output, ùñßò üìùò íá ôñïðïðïéþóåôå êáèüëïõ ôç display(). Ôá ðñïãñüììáôá áõôü ìðïñåßôå íá ôá êüíåôå compile ùò åîþò: gcc syn_process_1.c display.c -o syn_process_1 gcc syn_process_2.c display.c -o syn_process_2 Ãéá ôï syn_process_1, èýëïõìå íá áðïöýãïõìå ôï «áíáêüôåìá» ôùí ìçíõìüôùí ðïõ ôõðþíïíôáé. Ãéá ðáñüäåéãìá ôï ðáñáêüôù èåùñåßôáé «óùóôü»: åíþ ôï ðáñáêüôù èåùñåßôáé «ëüèïò»: HelKalo world! limera kosme HKeallilo merawokorldsme 1
Óôï syn_process_2 ôï ðáñáêüôù output èåùñåßôáé «óùóôü», äçëáäþ ðüíôá íá ôõðþíåôáé ðñþôá ôï ab áêïëïõèïýìåíï áðü ôï \n:... åíþ ôï ðáñáêüôù èåùñåßôáé «ëüèïò»: abab ab 3 Óõã ñïíéóìüò íçìüôùí ÌåôáôñÝøôå ôá ðñïãñüììáôá syn_process_1.c êáé syn_process_2.c íá ñçóéìïðïéïýí íþìáôá áíôß ãéá äéåñãáóßåò, êáé ïíïìüóôå ôá áíôßóôïé á ðñïãñüììáôá syn_thread_1.c êáé syn_thread_2.c. Ãéá ôá íþìáôá ðñýðåé íá ñçóéìïðïéþóåôå õðï ñåùôéêü pthreads, ðïõ åßíáé ôï standard API. Áí êáé ôá åñãáëåßá óõã ñïíéóìïý äéåñãáóéþí ðïõ ñçóéìïðïéþóáôå óôá ðñïçãïýìåíá ðñïãñüììáôá èá ìðïñïýóáí íá ñçóéìïðïéçèïýí êé åäþ, óôá ðñïãñüììáôá áõôü ïöåßëåôå íá ñçóéìïðïéþóåôå õðï ñåùôéêü ôá åñãáëåßá óõã ñïíéóìïý íçìüôùí ðïõ ðñïóöýñåé ôï API ôçò âéâëéïèþêçò pthreads. 4 Ïäçãßåò ðáñüäïóçò êáé áõôüìáôïõ feedback Ãéá ôçí ïñèüôåñç õëïðïßçóç ôçò Üóêçóçò êáé ôç äéüñèùóç óöáëìüôùí, Ý åôå óôç äéüèåóþ óáò Ýíá óýóôçìá áõôüìáôçò äéüñèùóçò, ôï ïðïßï ìðïñåßôå íá ñçóéìïðïéþóåôå üóåò öïñýò èýëåôå. Ìå ôï óýóôçìá áõôü, ìáò óôýëíåôå ôçí õëïðïßçóþ óáò, êáé ìýóá óå ëßãá ëåðôü óáò åðéóôñýöïíôáé óõíïðôéêü áðïôåëýóìáôá ôïõ åëýã ïõ ðïõ êüíïõìå. Ôá ôåóô óôá ïðïßá õðïâüëëïõìå ôéò õëïðïéþóåéò óáò óå áõôü ôï óôüäéï ðéèáíüí íá åßíáé ëéãüôåñá (êáé ëßãï áðëïýóôåñá) áðü ôï óýíïëï ôùí ôåóô ðïõ èá ôñýîïõìå ãéá ôçí âáèìïëüãçóç ôçò Üóêçóçò. ÄçëáäÞ, ôï üôé ðåñíüôå üëá ôá ôåóô åðéôõ þò äåí óõíåðüãåôáé áõôüìáôá 10 óôá 10. Ãéá íá ìáò óôåßëåôå ôçí Üóêçóç, áêïëïõèþóôå ôá ðáñáêüôù âþìáôá: Óôåßëôå ìáò óõíçììýíá ôá áñ åßá syn process [12].c, syn thread [12].c, êáé report.pdf óôç äéåýèõíóç spyros+hw3@ceid.upatras.gr. Ôá áñ åßá display.c êáé display.h ÌÇÍ ìáò ôá óôåßëåôå, èá ôá ðñïóèýóïõìå ïýôùò Þ Üëëùò ìüíïé ìáò ãéá íá âåâáéùèïýìå üôé äåí Ý ïõí ôñïðïðïéçèåß. Áêüìá êé áí ôá óôåßëåôå èá ôá áíôéêáôáóôþóïõìå ìå ôá äéêü ìáò versions. Ôï subject ôïõ email ÐÑÅÐÅÉ íá åßíáé áðïêëåéóôéêü êáé ìüíï ï Áñéèìüò Ìçôñþïõ óáò (ð.., 1234), ùñßò Ýîôñá êåíü, ùñßò "ÁÌ: 1234", ùñßò "Re:", ùñßò ïôéäþðïôå Üëëï ðýñá áðü ôá ôýóóåñá áñéèìçôéêü øçößá ôïõ ÁÌ óáò. Ôï email ðñýðåé íá óôáëåß áðü ôïí ëïãáñéáóìü óáò óôï CEID. Èá ëüâåôå Üìåóá åðéâåâáßùóç ãéá ôï email óáò, êáé óå ëßãá ëåðôü èá ëüâåôå êáé äåýôåñï email ðïõ èá óáò äßíåé ìéá Ýíäåéîç ôïõ ðüóá ôåóô ðåñüóáôå. Ôï ðåñéå üìåíï ôùí ôåóô åßíáé åðßôçäåò êñõöü, þóôå íá äéåñåõíþóåôå üëåò ôéò ðéèáíýò áéôßåò óöáëìüôùí. ÌåñéêÜ êáé ìüíï ìåñéêü ôåóô ðáñý ïõí êüðïéï hint ãéá ôï åßäïò ôïõ ëüèïõò, áí äåí ôá ðåñüóåôå. 2
Ìðïñåßôå íá óôåßëåôå ôçí õëïðïßçóþ óáò üóåò öïñýò èýëåôå. Ç ôåëåõôáßá õëïðïßçóç ðïõ èá ëüâïõìå èá åßíáé êáé áõôþ ðïõ èá âáèìïëïãçèåß. ¼ëåò ïé ðñïçãïýìåíåò èá áãíïçèïýí. Áí óõíå ßóåôå íá óôýëíåôå õëïðïéþóåéò ìåôü ôï ôýëïò ôçò ðñïèåóìßáò, ãéá êüèå ìýñá êáèõóôýñçóçò èá ñåþíåóôå âáèìïýò üðùò Ý åé åîçãçèåß áíáëõôéêü óôï ðñþôï ìüèçìá (êáé óôéò áíôßóôïé åò äéáöüíåéåò). ÓÇÌÁÍÔÉÊÏ: Ãéá ôçí ðáñüäïóç ôçò ôåëéêþò ìïñöþò ôçò Üóêçóçò ïöåßëåôå íá óõìðåñéëüâåôå êáé Ýíá óýíôïìï report.pdf 1-2 óåëßäùí, ðïõ íá ðåñéãñüöåé ôç ëïãéêþ ðïõ áêïëïõèþóáôå êáé ðñïâëþìáôá ðïõ áíôéìåôùðßóáôå, õðï ñåùôéêü óå format PDF. ÊáëÞ åðéôõ ßá! 3
#include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() int i; if (fork()) display("\n"); wait(null); else display("\n"); return 0; Listing 1: syn_process_1.c #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() int i; if (fork()) display("ab"); wait(null); else display("\n"); return 0; Listing 2: syn_process_2.c 4
/* DO NOT EDIT THIS FILE!!! */ #ifndef CEID_OS_DISPLAY_H #define CEID_OS_DISPLAY_H void display(char *); #endif Listing 3: display.h /* DO NOT EDIT THIS FILE!!! */ #include <stdio.h> #include <unistd.h> void display(char *str) char *p; for (p=str; *p; p++) write(1, p, 1); usleep(100); Listing 4: display.c 5