ﺗﻤﺮﻳﻦ هﺎﯼ درس ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﺳﺮﯼ ١ -1ﭼﻬﺎر ﺷﺮط ﺑﺮاي وﻗﻮع deadlockﻻزم اﺳﺖ) mutual exclusion:ﻣﻤﺎﻧﻌﺖ دو ﺟﺎﻧﺒﻪ (، ) hold and waitﺗﻮﻗﻒ واﻧﺘﻈﺎر( )No preemption،ﻋﺪم ﭘﻴﺸﺪﺳﺘﻲ ( و Circular ) waitاﻧﺘﻈﺎر داﻳﺮه اي ( .ﺗﻮﺳﻂ ﻣﻜﺎﻧﻴﺰم ﺟﻠﻮﮔﻴﺮي از deadlock ) deadlock ،( preventionﺑﺎ ﺟﻠﻮﮔﻴﺮي از رخ دادن ﻳﻜﻲ از ﺷﺮاﻳﻂ ﮔﻔﺘﻪ ﺷﺪه ﺳﻴﺴﺘﻢ اﻃﻤﻴﻨﺎن ﭘﻴﺪا ﻣﻲ ﻛﻨﺪ ﻛﻪ deadlockرخ ﻧﺨﻮاﻫﺪ داد .ﻣﺸﺨﺺ ﻛﻨﻴﺪ ﻛﻪ ﻫﺮ ﻛﺪام از ﺗﻜﻨﻴﻚ ﻫﺎي زﻳﺮ از ﻛﺪام ﺷﺮاﻳﻂ deadlockﺟﻠﻮﮔﻴﺮي ﻣﻲ ﻛﻨﺪ : a . Mutual exclusion b . Hold and wait c . No preemption d . Circulat wait • ﺑﺮاي اﺳﺘﻔﺎده از ﻣﻨﺎﺑﻊ ﺗﺮﺗﻴﺐ ﻗﺎﺋﻞ ﻣﻲ ﺷﻮد • ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻳﻚ ﭘﺮدازه ﺗﻘﺎﺿﺎي ﻳﻚ ﻣﻨﺒﻊ ﻣﻲ ﻛﻨﺪ ﻛﻪ در اﺧﺘﻴﺎر دﻳﮕﺮي اﺳﺖ ،آن ﭘﺮدازه ﻣﺠﺒﻮر ﻣﻲ ﺷﻮد ﺗﺎ ﻣﻨﺒﻊ را آزاد ﻛﻨﺪ. • ﻓﻘﻂ ﻫﻨﮕﺎﻣﻲ ﻳﻚ ﭘﺮدازه ﻣﻲ ﺗﻮاﻧﺪ ﺗﻘﺎﺿﺎي ﻣﻨﺒﻌﻲ ﻛﻨﺪ ﻛﻪ ﻫﻴﭻ ﻣﻨﺒﻌﻲ در اﺧﺘﻴﺎر ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ. • ﺑﻪ ﻫﻤﻪ ي ﭘﺮدازه ﻫﺎ اﺟﺎزه ي دﺳﺘﺮﺳﻲ ﻫﻤﺰﻣﺎن ﺑﻪ ﻣﻨﺎﺑﻊ داده ﻣﻲ ﺷﻮد. • ﺑﻪ ﻳﻚ ﭘﺮدازه اﺟﺎزه داده ﻣﻲ ﺷﻮد ﺗﺎ ﻫﻤﻪ ي ﻣﻨﺎﺑﻊ ﻣﻮرد ﻧﻴﺎز ﺧﻮد را ﺑﻪ ﻳﻜﺒﺎره در اﺧﺘﻴﺎر ﺑﮕﻴﺮد. -2ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﻛﺎرﻫﺎي زﻳﺮ ﻗﺮار اﺳﺖ ﺗﻮﺳﻂ ﻳﻚ ﭘﺮدازﻧﺪه اﺟﺮا ﺷﻮد.ﺑﺮاي اﻟﮕﻮرﻳﺘﻢ ﻫﺎ ي FCFS و SJFزﻣﺎن اﻧﺘﻈﺎر ﻫﺮ ﻛﺎر را ﻣﺤﺎﺳﺒﻪ ﻛﻨﻴﺪ. 1 Job Arrival Time CPU time 5 0 A 4 2 B 5 4 C 2 6 D -3ﮔﺮاف ﺗﺨﺼﻴﺺ ﻣﻨﺎﺑﻊ ﺑﺎﻻ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ .دﻧﺒﺎﻟﻪ اي از دﺳﺘﻮراﻟﻌﻤﻞ ﻫﺎ ي )(lock.acquire ﻛﻪ ﺗﻮﺳﻂ ﭘﺮدازه ﻫﺎي p1,p2,p3ﺑﺮاي ﻣﻨﺎﺑﻊ R1,R2,R3اﺟﺮا ﻣﻲ ﺷﻮﻧﺪ ﺑﮕﻮﻳﻴﺪ ﻛﻪ ﻣﻨﺠﺮ ﺑﻪ ﺣﺎﻟﺖ زﻳﺮ در ﮔﺮاف ﺷﻮد. -4ﻳﻚ ﺣﺠﻢ ﻛﺎري ﺷﺎﻣﻞ 5ﻛﺎر ﻛﻪ ﻫﺮ ﻛﺪام زﻣﺎن ﻣﺴﺎوي xرا ﻧﻴﺎز دارﻧﺪ و ﻋﻤﻠﻴﺎت I/Oاﻧﺠﺎم ﻧﻤﻴﺪﻫﻨﺪ را در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ .ﺑﺮاي ﺣﺪاﻗﻞ ﻛﺮدن ﻣﺘﻮﺳﻂ زﻣﺎن اﻧﺘﻈﺎر ﻛﺎرﻫﺎ آﻳﺎ ﺑﻬﺘﺮ اﺳﺖ ﻛﻪ از اﻟﮕﻮرﻳﺘﻢ زﻣﺎن ﺑﻨﺪ FCFSو ﻳﺎ RRاﺳﺘﻔﺎده ﻛﻨﻴﻢ ؟ -5ﻛﺪﻫﺎ ي ﻧﻤﻮﻧﻪ ي زﻳﺮ ﻛﻪ در ﺟﺎوا ﻧﻮﺷﺘﻪ ﺷﺪه اﻧﺪ ﻛﻼس Lockرا ﺑﻪ دو ﻣﺘﺪ )( acquireو )( releaseﻧﺸﺎن ﻣﻲ دﻫﻨﺪ .ﻣﻲ ﺗﻮاﻧﻴﺪ ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﻫﺮ ﺑﺮﻧﺎﻣﻪ ﻗﺒﻞ از ورود ﺑﻪ ﻧﺎﺣﻴﻪ ي ﺑﺤﺮاﻧﻲ )( lock.acquireو ﺑﻌﺮ از ﺧﺎرج ﺷﺪن از آن )( lock.releaseرا ﺻﺪا ﻣﻲ ﻛﻨﺪ.ﺑﺮاي ﭘﻴﺎده ﺳﺎزي اي ﻛﻪ اﺣﺘﻴﺎج ﺑﻪ ( thread id) tidدارد ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ tidﺻﻔﺮ ﻳﺎ ﻳﻚ اﺳﺖ. ﺑﺮاي ﻫﺮ ﻛﺪ ﺑﻪ ﺳﻮال ﻫﺎي زﻳﺮ ﭘﺎﺳﺦ دﻫﻴﺪ: 2 آﻳﺎ ﻛﺪ ﻣﻤﺎﻧﻌﺖ دو ﺟﺎﻧﺒﻪ را ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ؟-1 آﻳﺎ ﻛﺪ ﭘﻴﺸﺮﻓﺖ را ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﺪ؟-2 )ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﻋﺪم ﻛﺎرا ﺑﻮدن و. ﻣﺤﺪودﻳﺖ ﻫﺎ ي دﻳﮕﺮي ﻛﻪ وﺟﻮد دارﻧﺪ را ﻣﺸﺨﺺ ﻛﻨﻴﺪ-3 ( ﻳﺎ ﻋﺪم وﺟﻮد ﻋﺪاﻟﺖ 1- class Lock { private int turn = 0; public void acquire(int tid) { while (turn == (1 - tid)); } public void release(int tid) { turn = (1 - tid); } } 2- class Lock { public void acquire() { disableInterrupts(); } public void release() { enableInterrupts(); } } 3- class Lock { private int turn = 0; private boolean lock[2] = {false, false}; public void acquire(int tid) { lock[tid] = true; turn = 1 - tid; while (lock[1-tid] && turn == (1 - tid)); } public void release(int tid) { lock[tid] = false; } } 4- class Lock { private boolean lock = true; public void acquire() { 3 ;)while (TestAndSet(lock, true } { )(public void release ;lock = false } } -6ﻣﺰاﻳﺎ و ﻣﻌﺎﻳﺐ ﻃﺮاﺣﻲ ﻻﻳﻪ اي ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ ﻛﺪاﻣﻨﺪ؟ و ﺳﺮوﻳﺲ ﻫﺎي اﺻﻠﻲ ﻛﻪ ﺗﻮﺳﻂ ﻳﻚ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞ اراﺋﻪ ﻣﻲ ﺷﻮﻧﺪ را ﺑﻪ اﺧﺘﺼﺎر ﺗﻮﺿﻴﺢ دﻫﻴﺪ. -7ﻳﻚ ﺳﻴﺴﺘﻢ ﭼﻨﺪ ﭘﺮدازﻧﺪه اي ﺑﺎ ﻣﺪل threadﭼﻨﺪ ﺑﻪ ﭼﻨﺪ و ﻳﻚ ﺑﺮﻧﺎﻣﻪ ي ﭼﻨﺪ threadي را ﻓﺮض ﻛﻨﻴﺪ ﻛﻪ ﺗﻌﺪاد threadﻫﺎي ﺳﻄﺢ ﻛﺎرﺑﺮ از ﺗﻌﺪاد ﭘﺮدازه ﻫﺎ ﺑﻴﺸﺘﺮ ﺑﺎﺷﺪ .در ﻣﻮرد ﻛﺎراﻳﻲ ﺳﻴﺴﺘﻢ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﻫﺮ ﻳﻚ از ﺳﻨﺎرﻳﻮ ﻫﺎي زﻳﺮ ﺑﺤﺚ ﻛﻨﻴﺪ: • ﺗﻌﺪاد threadﻫﺎي ﻫﺴﺘﻪ اﺧﺘﺼﺎص داد ﺷﺪه ﺑﻪ ﺑﺮﻧﺎﻣﻪ از ﺗﻌﺪاد ﭘﺮدازﻧﺪه ﻫﺎ ﻛﻤﺘﺮ اﺳﺖ. • ﺗﻌﺪاد threadﻫﺎ ي ﻫﺴﺘﻪ اﺧﺘﺼﺎص داده ﺷﺪه ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺮاﺑﺮ ﺑﺎ ﺗﻌﺪاد ﭘﺮدازﻧﺪه ﻫﺎﺳﺖ. • ﺗﻌﺪاد threadﻫﺎي ﻫﺴﺘﻪ اﺧﺘﺼﺎص داده ﺷﺪه ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺑﻴﺸﺘﺮ از ﺗﻌﺪاد ﭘﺮدازﻧﺪه ﻫﺎ وﻟﻲ ﻛﻤﺘﺮ از ﺗﻌﺪاد threadﻫﺎي ﺳﻄﺢ ﻛﺎرﺑﺮ ﻣﻲ ﺑﺎﺷﺪ. 5.4 -7و 5.5و 5.13و 6.1و 6.2و . 6.9 -8ﻓﺮض ﻛﻨﻴﺪ ﻛﺎرﺑﺮ ﻓﺮﻣﺎن زﻳﺮ را در shellوارد ﻛﺮده اﺳﺖ : cat file | tr -s -c '[:alpha:]' '[\n*]' | tr '[:upper:]' '[:lower:]' | sort -u | wc -l ﻣﻔﺴﺮ ﻓﺮﻣﺎن ﻫﺮ ﻓﺮﻣﺎن را ﺗﻮﺳﻂ ﭘﺮدازه ي ﺟﺪاﮔﺎﻧﻪ اي اﺟﺮا ﻣﻲ ﻛﻨﺪ -1ﺟﻨﺪ ﺑﺎ ر ﻓﺮاﺧﻮاﻧﻲ ﺑﻪ )(pipe() ,forkو)( ,execﺑﺎﻳﺪ ﺻﻮرت ﮔﻴﺮد؟ 4 -2ﻳﻜﻲ از راه ﻫﺎي اﺟﺮاي ﻓﺮﻣﺎن ﻫﺎ ﺗﻮﺳﻂ ﻣﻔﺴﺮ اﻳﻦ اﺳﺖ ﻛﻪ ﻣﻔﺴﺮ ﻳﻚ ﭘﺮدازه ي ﺟﺪﻳـﺪ forkﻛﺮده و ﻓﺮﻣﺎن ﻧﺨﺴﺖ را execﻛﻨﺪ .ﺳﭙﺲ ﭘﺮدازه ي دﻳﮕﺮي forkﻛـﺮده و ﻓﺮﻣﺎن ﺑﻌﺪ را اﺟﺮا ﻛﻨﺪ و ﺑﻪ ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ .ﻳﻚ دﻳﺎﮔﺮام ﺷـﺎﻣﻞ ﻫﻤـﻪ ي ﭘـﺮدازه ﻫـﺎ از ﺟﻤﻠﻪ shellرﺳﻢ ﻛﻨﻴﺪ ﻛﻪ در آن ﻫﺮ ﭘﺮدازه ﺑﺎ ﻳﻚ ﻳﺎل ﺑﻪ ﭘﺪر ﺧﻮد اﺷﺎره ﻛﻨﺪ. -3در ﻗﺴﻤﺖ ﻗﺒﻞ ﭼﻪ ﭼﻴﺰ ﻣﻔﺴﺮ را از ﭘﺮداﺧﺘﻦ ﺑﻪ ﻓﺮﻣﺎن ﺑﻌﺪ ﭘـﻴﺶ از ﺗﻤـﺎم ﺷـﺪن ﺗﻤـﺎم ﻓﺮﻣﺎن ﻫﺎ ﺑﺎز ﻣﻲ دارد؟ -4ﻳﻚ راه دﻳﮕﺮ ﺑﺮاي اﺣﺮاي ﻓﺮﻣﺎن ﻫﺎ اﻳﻦ اﺳﺖ ﻛﻪ ﻣﻔﺴﺮ ﻳـﻚ ﭘـﺮدازه را forkﻛﻨـﺪ و اﻳﻦ ﭘﺮدازه و اﻳﻦ ﭘﺮدازه ﻓﺮﻣﺎن ﻧﺨﺴﺖ را اﺟﺮا ﻛﻨﺪ .ﺳـﭙﺲ ﻣﻔـﺴﺮ ﭘـﺮدازه ي دﻳﮕـﺮي را forkﻣــﻲ ﻛﻨــﺪ و اﻳــﻦ ﭘــﺮدازه ي ﺟﺪﻳــﺪ shellﺟﺪﻳــﺪي execﻣــﻲ ﻛﻨــﺪ و آرﮔﻮﻣﺎﻧﻲ در ﺧﻂ ﻓﺮﻣﺎن ﺑﻪ آن رد ﻣﻲ ﻛﻨﺪ ﻛﻪ ﻣﺎﺑﻘﻲ ﻓﺮﻣﺎن ﻛﺎرﺑﺮ)ﺑﻪ ﺟﺰ (catرا اﺟـﺮا ﻛﻨﺪ .و ﺑﻪ ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ .ﻳﻚ دﻳﺎﮔﺮام ﺷﺎﻣﻞ ﻫﻤﻪ ي ﭘﺮدازه ﻫﺎ از ﺟﻤﻠﻪ shellرﺳـﻢ ﻛﻨﻴﺪ ﻛﻪ در آن ﻫﺮ ﭘﺮدازه ﺑﺎ ﻳﻚ ﻳﺎل ﺑﻪ ﭘﺪر ﺧﻮد اﺷﺎره ﻛﻨﺪ. -5در ﻗﺴﻤﺖ ﭼﻪ ﭼﻴﺰ ﻣﻔﺴﺮ را از ﭘﺮداﺧﺘﻦ ﺑﻪ ﻓﺮﻣﺎن ﺑﻌﺪ ﭘﻴﺶ از ﺗﻤﺎم ﺷﺪن ﺗﻤﺎم ﻓﺮﻣـﺎن ﻫﺎ ﺑﺎز ﻣﻲ دارد؟ -6اﮔﺮ ﺷﻤﺎ ﻧﻮﻳﺴﻨﺪه ي ﻣﻔﺴﺮ ﺑﻮدﻳﺪ ﻛﺪام ﻳﻚ از ﻣﺸﻲ ﻫﺎي ﺑـﺎﻻ را اﻧﺘﺨـﺎب ﻣـﻲ ﻛﺮدﻳـﺪ؟ ﺗﻮﺿﻴﺢ دﻫﻴﺪ. -7اﻳﻦ ﻓﺮﻣﺎن ﭼﻪ ﻛﺎري اﻧﺠﺎم ﻣﻲ دﻫﺪ؟ ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ . 85/2/7 ﺗﻤــﺮﻳﻦ ﻫــﺎ ي ﺧــﻮد را ﺑــﻪ آدرس kamousi@ce.sharif.eduوﻳــﺎ mirzaee@ce.sharif.edu ﺑﻔﺮﺳﺘﻴﺪ. 5
© Copyright 2025 Paperzz