OS-HW1.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪا‬
‫داﻧﺸﻜﺪه ﻣﻬﻨﺪﺳﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ ‪ ‬‬
‫درس ﺳﻴﺴﺘﻢﻫﺎي ﻋﺎﻣﻞ – ﻧﻴﻤﺴﺎل دوم ‪ 89-90‬‬
‫ﺗﻤﺮﻳﻦ اول‬
‫ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ ‪ 9‬اردﻳﺒﻬﺸﺖ‬
‫‪ -1‬اﻟﮕﻮرﻳﺘﻢ ‪ Quick Sort‬را ﺑﺎ اﺳﺘﻔﺎده از ﻧﺦ و ﻛﺘﺎﺑﺨﺎﻧﻪ ‪ pthread‬ﻟﻴﻨﻮﻛﺲ ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ‪.‬‬
‫‪ -2‬ﺑﻪ ﻛﻤﻚ ﻛﺘﺎﺑﺨﺎﻧﻪ ‪ pthread ‬ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ در آن دو ﻧﺦ ﺑﻪ ﺻﻮرت ﻫﻤﺰﻣﺎن ﺗﺎﺑﻊ ‪ f‬را اﺟﺮا ﻛﻨﻨﺪ‪ .‬ﺧﺮوﺟﻲ ﺣﺎﺻﻞ را‬
‫ﮔﺰارش ﻛﺮده و ﺗﺤﻠﻴﻞ ﻛﻨﻴﺪ‪.‬‬
‫‪global int counter = 0‬‬
‫{)(‪function f‬‬
‫‪for i=0 to 2 do‬‬
‫‪counter = counter +1‬‬
‫‪Print counter‬‬
‫‪end for‬‬
‫}‬
‫‪ -3‬در اﻳﻦ ﺗﻤﺮﻳﻦ ﺑﺎﻳﺪ ﻳﻚ ‪ SR latch‬را ﺑﺎ اﺳﺘﻔﺎده از ﻛﺘﺎﺑﺨﺎﻧﻪ ‪ pthread‬ﭘﻴﺎدهﺳﺎزي ﻛﻨﻴﺪ‪ .‬ﺷﻜﻞ اﻳﻦ ‪ latch‬را در زﻳﺮ‬
‫ﻣﺸﺎﻫﺪه ﻣﻲﻛﻨﻴﺪ‪:‬‬
‫اﺑﺘﺪا ﺑﺎﻳﺪ ﺑﻪ ازاي ﻫﺮ ﺳﻴﻢ )ﻳﺎ ﺳﻴﻢﻫﺎﻳﻲ ﻛﻪ ﺑﻪ ﻫﻢ ﻣﺘﺼﻞاﻧﺪ( ﻳﻚ ﻣﺘﻐﻴﺮ )از ﺟﻨﺲ دﻟﺨﻮاه‪ ،‬ﻣﺜﻼً ‪ int‬ﻳﺎ ‪ (bool‬ﺗﻌﺮﻳﻒ‬
‫ﻛﻨﻴﺪ‪ .‬ﻫﻤﭽﻨﻴﻦ ﺧﺮوﺟﻲ دو ‪ and‬را ‪ RE‬و ‪ SE‬و ﺧﺮوﺟﻲﻫﺎي ﻣﺪار را ﻧﻴﺰ ‪ Q‬و ‪ QB‬ﻣﻲﻧﺎﻣﻴﻢ‪ .‬ﻣﻘﺎدﻳﺮ اوﻟﻴﻪ اﻳﻦ ﻣﺘﻐﻴﺮﻫﺎ‬
‫ﻋﺒﺎرت اﺳﺖ از‪:‬‬
‫‪R = RE = Q = 0‬‬
‫و ‪S = E = SE = QB = 1‬‬
‫ﺣﺎل در ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﻪ ازاي ﻫﺮ دروازه ﻣﻨﻄﻘﻲ ﺑﺎﻳﺪ ﻳﻚ ﻧﺦ وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ﻛﻪ در اﺑﺘﺪاي ﺑﺮﻧﺎﻣﻪ ﺳﺎﺧﺘﻪ ﻣﻲﺷﻮد و ﺑﺪون‬
‫وﻗﻔﻪ‪ ،‬از اﺑﺘﺪا ﺗﺎ اﻧﺘﻬﺎي ﺑﺮﻧﺎﻣﻪ ﻫﺮﮔﺎه ﻳﻜﻲ از وروديﻫﺎﻳﺶ ﺗﻐﻴﻴﺮ ﻛﺮد‪ ،‬ﺧﺮوﺟﻲ ﻣﺤﺎﺳﺒﻪ ﺷﺪه را ﭼﺎپ ﻛﻨﺪ‪ .‬اﮔﺮ ﺧﺮوﺟﻲ‬
‫ﺟﺪﻳﺪ ﻧﺴﺒﺖ ﺑﻪ ﻗﺒﻠﻲ ﺗﻐﻴﻴﺮي ﻧﻜﺮده ﺑﻮد‪ ،‬ﺑﺎﻳﺪ ﭼﺎپ ﺷﻮد و ﻣﻌﻴﺎر ﺑﺮاي ﭼﺎپ ﻛﺮدن‪ ،‬ﺗﻐﻴﻴﺮ ﻛﺮدن ورودي اﺳﺖ‪ .‬ﻗﺎﻟﺐ ﻛﻠﻲ‬
‫ﺗﺎﺑﻌﻲ ﻛﻪ ﺑﺮاي ﻧﺦﻫﺎ اﺳﺘﻔﺎده ﻣﻲﻛﻨﻴﺪ ﺑﺎﻳﺪ ﺑﻪ ﺷﻜﻞ زﻳﺮ ﺑﺎﺷﺪ )اﺳﺘﻔﺎده از ﺣﻠﻘﻪ ﺑﻴﻨﻬﺎﻳﺖ اﺟﺒﺎري اﺳﺖ‪ ،‬اﻣﺎ درون ﺣﻠﻘﻪ را‬
‫ﻣﻲﺗﻮاﻧﻴﺪ ﺑﻪ ﺷﻜﻞ دﻟﺨﻮاه ﭘﻴﺎدهﺳﺎزي ﻛﻨﻴﺪ(‪:‬‬
‫{ )‪void* thread_routine(void* arg‬‬
‫‪// initialization ...‬‬
‫{ )‪while(1‬‬
‫‪// evaluation‬‬
‫‪// print output, if inputs have changed‬‬
‫‪// buffer the inputs‬‬
‫}‬
‫}‬
‫از آﻧﺠﺎ ﻛﻪ ﻫﺮ ﻧﺦ ﺑﺎﻳﺪ ﺑﻪ ﻃﻮر ﭘﻴﻮﺳﺘﻪ ﺑﻪ ﻣﺘﻐﻴﺮﻫﺎ دﺳﺘﺮﺳﻲ داﺷﺘﻪ ﺑﺎﺷﺪ و ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﻜﻪ ﺗﻨﻬﺎ ﻳﻚ ﺑﺎر ﺳﺎﺧﺘﻪ ﻣﻲﺷﻮد دو‬
‫روش ﻗﺎﺑﻞ اﺳﺘﻔﺎده اﺳﺖ‪ :‬ﺗﻌﺮﻳﻒ ﻛﺮدن ﻣﺘﻐﻴﻴﺮﻫﺎ ﺑﻪ ﺻﻮرت ‪ global‬و ﻳﺎ اﺳﺘﻔﺎده از اﺷﺎرهﮔﺮ‪.‬‬
‫ﻓﺮﻣﺖ ورودي و ﺧﺮوﺟﻲ‪:‬‬
‫اﺑﺘﺪا در ورودي اﺳﺘﺎﻧﺪارد‪ ،‬در اوﻟﻴﻦ ﺧﻂ ‪ N‬ﻣﻲآﻳﺪ‪ .‬ﺳﭙﺲ‪ ،‬در ‪ N‬ﺧﻂ ﺑﻌﺪي‪ ،‬در ﻫﺮ ﺧﻂ ﺑﻪ ﺗﺮﺗﻴﺐ از ﭼﭗ ﺑﻪ راﺳﺖ‪،‬‬
‫ﻣﻘﺎدﻳﺮ ‪ R, S, E‬ﻣﻲآﻳﻨﺪ‪ .‬ﺳﭙﺲ در ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﺑﺎﻳﺪ ﺧﺮوﺟﻲ دروازهﻫﺎﻳﻲ ﻛﻪ ورودي آنﻫﺎ ﻋﻮض ﺷﺪه ﺑﺎ ﻓﺮﻣﺖ ‪X b‬‬
‫ﺑﻴﺎﻳﺪ ﻛﻪ ‪ X‬ﻧﺎم ﺳﻴﻢ ﺧﺮوﺟﻲ )ﻣﺎﻧﻨﺪ ‪ (R, RE, Q‬و ‪ b‬ﻣﻘﺪار ﻣﺤﺎﺳﺒﻪ ﺷﺪه آن )ﺻﻔﺮ ﻳﺎ ﻳﻚ( ﻣﻲﺑﺎﺷﺪ‪ .‬ﻳﻚ اﺟﺮاي ﻧﻤﻮﻧﻪ را‬
‫در زﻳﺮ ﻣﻲﺑﻴﻨﻴﺪ )ﺧﺮوﺟﻲﻫﺎي ﻧﻮﺷﺘﻪ ﺷﺪه ﺗﻨﻬﺎ ﺧﺮوﺟﻲ ﻣﻤﻜﻦ ﻧﻴﺴﺘﻨﺪ(‪:‬‬
‫‪Input:‬‬
‫‪2‬‬
‫‪1 0 1‬‬
‫‪1 0 0‬‬
‫‪Output:‬‬
‫‪RE 1‬‬
‫‪Q 0‬‬
‫‪QB 1‬‬
‫‪SE 0‬‬
‫‪RE 0‬‬
‫‪SE 0‬‬
‫‪QB 1‬‬
‫‪Q 0‬‬
‫ﺳﻮال‪ :‬ﺗﺤﺖ ﭼﻪ ﺷﺮاﻳﻄﻲ ﺧﺮوﺟﻲ ﻧﻬﺎﻳﻲ ﻳﻌﻨﻲ ‪ Q, QB‬ﺑﻪ ﺗﺮﺗﻴﺐ اﺟﺮا ﺷﺪن ﻧﺨﻬﺎ ﺑﺴﺘﮕﻲ ﻧﺪارد؟‬
‫ﺗﻮﺿﻴﺤﺎت‪:‬‬
‫ﻛﺪﻫﺎي ﺑﺮﻧﺎﻣﻪ ﻫﺎ را در ﻳﻚ ﻓﺎﻳﻞ زﻳﭗ ﺑﺎ ﻧﺎم ‪) xxxxxxxx-HW1-programs‬ﻛﻪ ‪ xxxxxx‬ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ اﺳﺖ( و ﺑﺨﺶﻫﺎي‬
‫ﺗﻮﺿﻴﺤﻲ و ﺗﺤﻠﻴﻠﻲ را در ﻓﺎﻳﻞ ‪ xxxxxxxx-HW1-docs‬ﺣﺪاﻛﺜﺮ ﺗﺎ ﺗﺎرﻳﺦ ‪ 90/2/9‬ﺑﻪ آدرس ‪ [email protected]‬ﺑﻔﺮﺳﺘﻴﺪ‪.‬‬
‫‪ ‬‬