Computer Assignment 4.pdf

‫ﺩﺭﺱ ﺳﻴﺴﺘﻢﻫﺎﯼ ﻋﺎﻣﻞ‬
‫)ﺩﻛﺘﺮ ﺟﻠﻴﻠﻲ(‬
‫ﺯﻣﺴﺘﺎﻥ ‪۱۳۸۶‬‬
‫ﺗﻤﺮﻳﻦ ﮐﺎﻣﭙﻴﻮﺗﺮﯼ ‪۴‬‬
‫ﺗﺎﺭﻳﺦ ﺗﺤﻮﻳﻞ ‪ :‬ﺷﻨﺒﻪ ‪۱۳۸۶/۱۱/۶‬‬
‫ﻧﮑﺎﺕ ﻗﺎﺑﻞ ﺗﻮﺟﻪ‬
‫‪ .۱‬ﺗﻤﺮﻳﻦﻫﺎﯼ ﮐﺎﻣﭙﻴﻮﺗﺮﯼ ﺑﺎﻳﺪ ﺩﺭ ﮔﺮﻭﻩﻫﺎﯼ ﺩﻭ ﻧﻔﺮﻩ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪.‬‬
‫‪ .۲‬ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺎﻳﺪ ﺩﺭ ﻣﺤﻴﻂ ﻟﻴﻨﻮﮐﺲ ﻭ ﺑﺎ ﺯﺑﺎﻥ ‪ C/C++‬ﻧﻮﺷﺘﻪ ﺷﻮﻧﺪ‪.‬‬
‫‪ .۳‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ Makefile‬ﺑﺮﺍﯼ ﺳﺎﺧﺖ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺍﻟﺰﺍﻣﯽ ﺍﺳﺖ‪ .‬ﺍﻃﻼﻋﺎﺕ ﻣﺮﺑﻮﻁ ﺑﻪ ﻧﻮﺷﺘﻦ ‪ Makefile‬ﺩﺭ ﺑﺨﺶ‬
‫ﻣﻨﺎﺑﻊ ﻭﺏﺳﺎﻳﺖ ﺩﺭﺱ ﻣﻮﺟﻮﺩ ﺍﺳﺖ‪.‬‬
‫‪ .۴‬ﺗﻤﺎﺭﻳﻦ ﺑﺎﻳﺪ ﺗﺎ ﭘﺎﻳﺎﻥ ﻭﻗـﺖ ﺗﻌﻴـﻴﻦ ﺷـﺪﻩ‪ ،‬ﺑـﻪ ﺁﺩﺭﺱ ‪ [email protected]‬ﻓﺮﺳـﺘﺎﺩﻩ‬
‫ﺷﻮﻧﺪ‪.‬‬
‫‬
‫ﻋﻨﻮﺍﻥ ﻣﻴﻞ ‪CA4 :‬‬
‫‬
‫ﺫﮐﺮ ﻧﺎﻡ ﻭ ﻧﺎﻡ ﺧﺎﻧﻮﺍﺩﮔﯽ ﻭ ﺷﻤﺎﺭﻩ ﺩﺍﻧﺸﺠﻮﻳﻲ ﺩﺭ ﻣﺘﻦ ﻧﺎﻣﻪ ﺍﻟﺰﺍﻣﯽ ﺍﺳﺖ‪.‬‬
‫‬
‫ﻣﺘﻦ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺻﻮﺭﺕ ‪ zip‬ﺷﺪﻩ ﻭ ﻓﺮﻣﺖ )‪ (family1_family2.zip‬ﭘﻴﻮﺳﺖ ﺷﻮﺩ‪.‬‬
‫‪ .۵‬ﺗﻨﻬــﺎ ﺩﺭ ﺻــﻮﺭﺕ ﺑــﺮﻭﺯ ﻣــﺸﻜﻞ ﺩﺭ ﻓﺮﺳــﺘﺎﺩﻥ ﺗﻤــﺎﺭﻳﻦ ﺑــﻪ ﺁﺩﺭﺱ ﻓــﻮﻕ‪ ،‬ﻣــﻲﺗﻮﺍﻧﻴــﺪ ﺁﻥ ﺭﺍ ﺑــﻪ ﺁﺩﺭﺱ‬
‫‪ [email protected]‬ﺑﻔﺮﺳﺘﻴﺪ‪.‬‬
‫‪ .۱‬ﺍﻟﮕﻮﺭﻳﺘﻢ ‪Bakery‬‬
‫ﺑﺮﻧﺎﻣﻪﺍﻱ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺍﻟﮕﻮﺭﻳﺘﻢ ‪) Bakery‬ﺑﺮﺍﻱ ﻣﺴﺄﻟﻪﻱ ﻫﻤﮕﺎﻡﺳﺎﺯﻱ ﺑﻴﺸﺘﺮ ﺍﺯ ‪ ۲‬ﺗﺮﺩ( ﺩﺭ ﻛﺘﺎﺏ ﺩﺭﺳﻲ ﺭﺍ ﭘﻴﺎﺩﻩﺳـﺎﺯﻱ‬
‫ﻛﻨﺪ‪ .‬ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﻚ ﺑﺮﻧﺎﻣﻪﻱ ﭼﻨﺪﺭﺷﺘﻪﺍﻱ )‪ (multi-thread‬ﺳﺎﺩﻩ ﺑﺮﺍﻱ ﺗﺴﺖ ﺑﺮﻧﺎﻣـﻪﻱ ﺍﺻـﻠﻲ ﺧـﻮﺩ ﺑﻨﻮﻳـﺴﻴﺪ‪ .‬ﺑـﺮﺍﻱ‬
‫ﻣﺜﺎﻝ‪ ،‬ﻫﺮ ﺭﺷﺘﻪ‪ ،‬ﻳﻚ ﻓﻴﻠﺪ ﻣﺸﺘﺮﻙ ﺭﺍ ﺩﺍﺧﻞ ﻳﻚ ‪ while‬ﺑﻲﻧﻬﺎﻳﺖ ‪ Increment‬ﻣﻲﻛﻨﺪ ﻭ ﺭﻭﻱ ﺻﻔﺤﻪﻱ ﻧﻤﺎﻳﺶ ﭼﺎﭖ‬
‫ﻣﻲﻛﻨﺪ‪ .‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺧﻮﺩ ﻣﺘﺪﻫﺎﻱ ﻫﻤﮕﺎﻡﺳﺎﺯﻱ ‪ C/C++‬ﻣﺠﺎﺯ ﻧﻤﻲﺑﺎﺷﺪ‪.‬‬
‫‪ .۲‬ﺍﻟﮕﻮﺭﻳﺘﻢ ‪Bankers‬‬
‫ﻫﺪﻑ ﺍﻳﻦ ﻗﺴﻤﺖ‪ ،‬ﺷﺒﻴﻪﺳﺎﺯﻱ ﺍﻟﮕﻮﺭﻳﺘﻢ ‪ Bankers‬ﺑﺮﺍﻱ ﻣﺴﺄﻟﻪﻱ ﺑﻦﺑﺴﺖ ﻣﻲﺑﺎﺷﺪ‪ .‬ﭘـﺲ ﺍﺯ ﺍﺟـﺮﺍﻱ ﺑﺮﻧﺎﻣـﻪ‪ ،‬ﺍﻃﻼﻋـﺎﺕ‬
‫ﻣﻨﺎﺑﻊ ﻭ ﭘﺮﺩﺍﺯﻩﻫﺎ ﺍﺯ ﻳﻚ ﻓﺎﻳﻞ ﻭﺭﻭﺩﻱ ﺧﻮﺍﻧﺪﻩ ﻣﻲﺷﻮﺩ‪ .‬ﻓﺮﻣﺖ ﻓﺎﻳﻞ ﻭﺭﻭﺩﻱ ﺑﻪ ﻫﻤﺮﺍﻩ ﻳﻚ ﻣﺜﺎﻝ ﺩﺭ ﺯﻳﺮ ﺁﻭﺭﺩﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬
‫‪-١-‬‬
‫‪Input File Format:‬‬
‫‪ProcessesNum ResourcesTypeNum‬‬
‫‪Resources:‬‬
‫… ‪resource1Num resource2Num resource3Num‬‬
‫‪Max:‬‬
‫‪Max matrix‬‬
‫‪Allocated:‬‬
‫‪Allocated matrix‬‬
‫‪Sample Input File:‬‬
‫‪3 3‬‬
‫‪Resource:‬‬
‫‪9 9 12‬‬
‫‪Max:‬‬
‫‪5 7 10‬‬
‫‪7 3 2‬‬
‫‪3 3 3‬‬
‫‪Allocated:‬‬
‫‪3 6 9‬‬
‫‪4 1 0‬‬
‫‪1 1 2‬‬
‫ﺗﻮﺟﻪ ﺷﻮﺩ ﻛﻪ ‪PID‬ﻫﺎ ﺍﺯ ‪ ۱‬ﺷﺮﻭﻉ ﻣﻲﺷﻮﻧﺪ )ﺩﺭ ﻣﺜﺎﻝ ﻓﻮﻕ‪۱ :‬ﻭ‪۲‬ﻭ‪.(۳‬‬
‫ﺩﺳﺘﻮﺭﺍﺕ‬
‫ﺃ‪-‬‬
‫‪ - kill‬ﻣﻨﺎﺑﻊ ﻳﻚ ﭘﺮﺩﺍﺯﻩ ﺭﺍ ﺁﺯﺍﺩ ﻣﻲﻛﻨﺪ ﻭ ﭘﺮﺩﺍﺯﻩ ﺭﺍ ﺧﺎﺗﻤﻪ ﻣﻲﺩﻫﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪kill:‬‬
‫‪/>kill processID‬‬
‫‪Resources were released:‬‬
‫‪R1 R2 R3‬‬
‫‪3 6 9‬‬
‫>‪/‬‬
‫ﺏ‪ - req -‬ﺑﺎ ﺍﻳﻦ ﺩﺳﺘﻮﺭ‪ ،‬ﻫﺮ ﭘﺮﺩﺍﺯﻩ ﻣﻲﺗﻮﺍﻧﺪ ﻳﻚ ﺳﺮﻱ ﻣﻨﺎﺑﻊ ﺭﺍ ﺩﺭﺧﻮﺍﺳﺖ ﺩﻫﺪ ﻭ ﻳـﺎ ﺁﺯﺍﺩ ﻛﻨـﺪ‪) .‬ﻋﻼﻣـﺖ‬
‫ﻣﺜﺒﺖ ﺑﻪ ﻣﻌﻨﺎﻱ ﺩﺭﺧﻮﺍﺳﺖ ﻭ ﻋﻼﻣﺖ ﻣﻨﻔﻲ ﺑﻪ ﻣﻌﻨﺎﻱ ﺁﺯﺍﺩ ﻛـﺮﺩﻥ ﻣﻨـﺎﺑﻊ ﺍﺳـﺖ(‪ .‬ﺍﻳـﻦ ﺩﺳـﺘﻮﺭ‪ ،‬ﭘـﺲ ﺍﺯ‬
‫ﮔﺮﻓﺘﻦ ‪ PID‬ﭘﺮﺩﺍﺯﻩ‪ ،‬ﺗﻌﺪﺍﺩ ﻣﻨﺎﺑﻊ ﺩﺭﺧﻮﺍﺳﺘﻲ ﻳـﺎ ﺁﺯﺍﺩﺷـﺪﻩ ﺑـﻪ ﺍﺯﺍﻱ ﺁﻥ ‪ PID‬ﺭﺍ ﺍﺯ ﻭﺭﻭﺩﻱ ﻣـﻲﮔﻴـﺮﺩ ﻭ‬
‫ﺧﺮﻭﺟﻲﻫﺎﻱ ﻣﺨﺘﻠﻔﻲ ﻣﻤﻜﻦ ﺍﺳﺖ ﺗﻮﻟﻴﺪ ﻛﻨﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪-٢-‬‬
‫‪req:‬‬
‫‪/>req 2‬‬
‫‪request: 2 0 2‬‬
‫‪System has not enough resources for this‬‬
‫‪request.‬‬
‫‪/>req 2‬‬
‫‪request: 2 0 1‬‬
‫‪This request could cause a deadlock.‬‬
‫‪/>req 3‬‬
‫‪request: 1 0 1‬‬
‫‪The request was accepted.‬‬
‫‪/>req 1‬‬
‫‪request: -2 -2 -2‬‬
‫‪The request was accepted.‬‬
‫ﺑﺮﺍﻱ ﻧﻤﻮﻧﻪ‪ ،‬ﻣﻮﺭﺩ ﺁﺧﺮ ﺑﻪ ﺍﻳﻦ ﻣﻌﻨﺎﺳﺖ ﻛﻪ ﭘﺮﺩﺍﺯﻩﻱ ‪ ۲ ،۱‬ﻭﺍﺣﺪ ﺍﺯ ﻫﺮ ﻣﻨﺒﻊ ﺍﺧﺘﺼﺎﺹﻳﺎﻓﺘﻪ ﺭﺍ ﺁﺯﺍﺩ ﻣﻲﻛﻨﺪ‪.‬‬
‫ﺕ‪ - safeseq -‬ﻳﻚ ﺣﺎﻟﺖ ﺍﻣﻦ‪ ،‬ﺑﺮﺍﻱ ﺍﺟﺮﺍﻱ ﻛﺎﻣﻞ ﺗﻤﺎﻡ ﭘﺮﺩﺍﺯﻩﻫﺎ ﻧﻤﺎﻳﺶ ﻣﻲﺩﻫﺪ )ﺩﺭ ﺻﻮﺭﺕ ﻭﺟﻮﺩ(‪.‬‬
‫ﺙ‪ - showmaxneed -‬ﻣﺎﺗﺮﻳﺲ ﺣﺪﺍﻛﺜﺮ ﻧﻴﺎﺯ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲﺩﻫﺪ‪.‬‬
‫ﺝ‪-‬‬
‫‪ - showallocation‬ﻣﺎﺗﺮﻳﺲ ﻣﻨﺎﺑﻊ ﺍﺧﺘﺼﺎﺹﻳﺎﻓﺘﻪ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﺭﺍ ﻧﺸﺎﻥ ﻣﻲﺩﻫﺪ‪.‬‬
‫ﺡ‪-‬‬
‫‪ - quit‬ﺍﺯ ﺑﺮﻧﺎﻣﻪ ﺧﺎﺭﺝ ﻣﻲﺷﻮﺩ‪.‬‬
‫‪-٣-‬‬