日韩精品一区二区三区高清_久久国产热这里只有精品8_天天做爽夜夜做爽_一本岛在免费一二三区

合肥生活安徽新聞合肥交通合肥房產生活服務合肥教育合肥招聘合肥旅游文化藝術合肥美食合肥地圖合肥社保合肥醫院企業服務合肥法律

CS-350代寫、C++編程語言代做
CS-350代寫、C++編程語言代做

時間:2024-12-09  來源:合肥網hfw.cc  作者:hfw.cc 我要糾錯



CS-350 - Fundamentals of Computing Systems
Homework Assignment #8 - BUILD
Due on November 14, 2024 — Late deadline: November 16, 2024 EoD at 11:59 pm
Prof. Renato Mancuso
Renato Mancuso
1CS-350 - Fundamentals of Computing Systems::Homework Assignment #8 - BUILD Problem 1
BUILD Problem 1
We now have a server capable of performing non-trivial operations on images! All we have to do now is to
make the server multi-threaded. And yes, we already have the infrastructure to spawn multiple threads. So
what’s missing exactly?
Output File: server_mimg.c
Overview. As mentioned above, the main idea is to allow multple workers to perform operations on images
in parallel. Everything you have developed in BUILD 6 will be reused, but we must make sure that when
multiple worker threads are spawned, the correctness of the operations on the images is still guaranteed.
But what could be jeopardizing the correctness of these operations? Let us consider a concrete case. Imaging
the following sequence of requests queued at the server: (1) Retrieve image A, (2) blur image A, (3) detect
the vertical edges of image A, and (4) send back the result of the operations performed on image A.
With only one worker, the operations are carried out in this sequence and the result sent back to the client is
an image with the cumulative operations (2) and (3) correctly applied to the source image. With 2 workers
(unless we ffx our implementation) we could have worker #1 and #2 working in parallel on operations (1)
and (2) with the result of the operations being some weird mix of the two operations.
In this assignment, the goal is to allow safe multi-threading where the semantics of sequential operations on
the images is preserved even if multiple threads are spawned and operate in parallel. For this task, we will
use semaphores to perform inter-thread synchronization.
Design. One of the main problem that we have to solve is un-arbitrated access to shared data structures.
To verify that there is a problem unless we insert synchronization primitives accordingly, start with your (or
my) solution for HW6, rename it appropriately, and enable spawning more than 1 worker threads.
Then, run the following simple experiment. First, run the client to generate the sequence of operations listed
above with 1 worker thread and look carefully at the output report generated by the client:
./server_mimg -q 100 -w 1 2222 & ./client -I images/ -L 1:R:1:0,0:b:1:0,0:v:1:0,0:T:1:0 2222
You will notice that the ffrst hash reported by the client (9f3363f0249c15163d52e60fd9544c31) is simply
the hash of the original test1.bmp image. The second (and last) hash reported by the client is the hash
(00e4fc4b9c7c71ee2ca3946053f78793) of the blur+vertical edge detection operations applied in sequence
to the image. However, if we increase the number of worker to 2, the ffnal hash will be different! For instance,
when running:
./server_mimg -q 100 -w 2 2222 & ./client -I images/ -L 1:R:1:0,0:b:1:0,0:v:1:0,0:T:1:0 2222
The last hash obtained on the reference machine changes to b59**c2bcb0a64121def911286c706e2, but
might be something else entirely on a different machine. Also in some cases, the server crashes entirely.
To solve the problem, the cleanest way is to introduce semaphore-based synchronization between threads.
In order to deffne a semaphore, you should use the type sem_t deffned in semaphore.h. Before a semaphore
can be used, it must be initialized.
This can be done with the sem_init(sem_t * semaphore, int pshared, unsigned int init_value).
Here, semaphore is pointer to the semaphore to be initialized, pshared can be set to 0, and init_value is
a non-negative initialization value of the semaphore, following the semantics we have covered in class.
Once your semaphore has been correctly initialized (make sure to check for the error value of the sem_init(...)
call!), the wait and signal operations can be performed over it, following the semantics we have discussed
Problem 1 continued on next page. . . 2CS-350 - Fundamentals of Computing Systems::Homework Assignment #8 - BUILD Problem 1 (continued)
in class. To wait on a semaphore, you must use the sem_wait(sem_t * semaphore) call; to signal on a
semaphore, you must use the sem_post(sem_t * semaphore).
Shared Data Structures. Of course, the main question is what data structures must be protected?. Here
is a list of things that can be problematic, but your own implementation could be different, so try to map
the statement below to your own code.
(1) Image Objects: One obvious place to start is to protect the image objects that are registered with
the server and upon which operations are requested by the client. We want to prevent different worker
to simultaneously change the content of an image, so a good idea is to introduce one semaphore per each
registered image! These must be created and/or initialized dynamically at image registration time.
(2) Image Registration Array: Another shared data structure is the global array of registered images.
Concurrent operations over that array is not a good idea, so all the threads will need to synchronize when
trying to access that shared data structure.
(3) Connection Socket: What? The connection socket has always been shared, so why is that a problem
now? The truth is that it has always been a problem, but we did not care because the responses from
the workers to the client were always a one-shot send(...) operation. But now, there are cases where the
server follows a two-step approach in the protocol it follows with the client. For instance, when handling an
IMG_RETRIEVE operation, a worker ffrst provides a positive acknowledgment of completed request and then
the payload of the image being retrieved. What if another worker starts sending other data while a retrieve
operation is in progress? Careful: the same goes for the parent when handling IMG_REGISTER operations.
(4) Request Queue and STDOUT Console: We already know that the shared request queue and the
shared STDOUT console require the use of semaphores to ensure correctness. Perhaps take inspiration from
the use of semaphores in those cases to handle the other shared data structures listed above.
Desired Output. The expected server output is pretty much what you already constructed in HW6. Here
is it summarized again for reference. You should print queue status dumps, rejection and completion notices.
Queue status dumps and rejection notice are identical in format to HW5 and HW6. Once again, the queue
dump status is printed when any of the worker threads completes processing of any of the requests.
Just like HW6, when a request successfully completes service, the thread ID of the worker thread that has
completed the request will need to be added at the beginning of the line following the format below. You can
assign thread ID = (number of workers + 1) to the parent thread. If multiple worker threads are available to
process a pending request, any one of them (but only at most one!) can begin processing the next request.
T<thread ID> R<req. ID>:<sent ts>,<img_op>,<overwrite>,<client img_id>,<server img_id>,<receipt ts>,
<start ts>,<compl. ts>
Here, <img_op> is a string representing the requested operation over an image. For instance, if the operation
was IMG_REGISTER, then the server should output the string “IMG REGISTER” (no quotes) for this ffeld.
<overwrite> should just be 0 or 1, depending on what the client requested. <client img_id> should be
the image ID for which the client has requested an operation. If the server is ignoring any of these values
in the response, set these ffelds to 0. Finally, <server img_id> should report the image ID on which the
server has performed the operation requested by the client. Recall that this might be different from what
sent by the client if overwrite = 0 in the client’s request, but it must be the same if overwrite = 1.
Additional Help. You might have noticed, from the commands recommended above, that the client (v4.2)
now allows you to deffne a script of image operation requests. This is useful to test the correctness of your
server under a controlled workload.
To use this feature, you should still provide the path to the folder containing the test images using the
-I <path to images folder> parameter. Next, you should also provide the -L <images request script>
parameter, where the <images request script> is a comma-separated list of image operations with the
following format:
Problem 1 continued on next page. . . 3CS-350 - Fundamentals of Computing Systems::Homework Assignment #8 - BUILD Problem 1 (continued)
<time to next operation>:<opcode char>:<overwrite>:<image ID>.
Here, <time to next operation> is a number of seconds that will elapse between this and the next operation
 in the script.
Next, <opcode char> is a single case-sensitive (!!) letter that identiffes which operation to be performed
(see list below).
• R: IMG_REGISTER
• r: IMG_ROT**CLKW
• b: IMG_BLUR
• s: IMG_SHARPEN
• v: IMG_VERTEDGES
• h: IMG_HORIZEDGES
• T: IMG_RETRIEVE
The <overwrite> ffeld should always be set to 1 (for simplicity we do not handle cases with overwrite = 0).
Finally, the <image ID> should be the ID on which the operation should be performed. This ffeld has a
special meaning in the case of IMG_REGISTER operations. Only in this case, it tells the client which one of
the ffles scanned in the images folder should be registered with the server. In all the other cases, an ID = n
tells the client to request the operation on the n
th
image that it has registered with the server.
When a script is requested at the client, the client will conveniently report how it has understood the script.
For instance, when using the script:
1:R:1:2,2:b:1:0,0:T:1:0
the client will report:
[#CLIENT#] INFO: Reading BMP 0: test1.bmp | HASH = 9f3363f0249c15163d52e60fd9544c31
[#CLIENT#] INFO: Reading BMP 1: test2.bmp | HASH = b6770726558da9722136ce84f12bfac8
[#CLIENT#] INFO: Reading BMP 2: test3.bmp | HASH = f2ac174**6fb2be614e8ab1ae10e82f0
[#CLIENT#] INFO: Reading BMP 3: test4.bmp | HASH = 0caaef67aee1775ffca8eda02bd85f25
[#CLIENT#] INFO: Reading BMP 4: test5.bmp | HASH = 5597b44eaee51bd81292d711c86a3380
[#CLIENT#] INFO: Reading BMP 5: test6.bmp | HASH = 11552ac97535bd4433891b63ed1dd45d
[#CLIENT#] Next Req.: +1.000000000 - OP = IMG_REGISTER, OW = 1, ID = 0
[#CLIENT#] Next Req.: +2.000000000 - OP = IMG_BLUR, OW = 1, ID = 0
[#CLIENT#] Next Req.: +0.000000000 - OP = IMG_RETRIEVE, OW = 1, ID = 0
4CS-350 - Fundamentals of Computing Systems::Homework Assignment #8 - BUILD Problem 2
Submission Instructions: in order to submit the code produced as part of the solution for this homework
assignment, please follow the instructions below.
You should submit your solution in the form of C source code. To submit your code, place all the .c
and .h ffles inside a compressed folder named hw8.zip. Make sure they compile and run correctly according
 to the provided instructions. The ffrst round of grading will be done by running your code.
Use CodeBuddy to submit the entire hw8.zip archive at https://cs-people.bu.edu/rmancuso/courses/
cs350-fa24/codebuddy.php?hw=hw8. You can submit your homework multiple times until the deadline.
Only your most recently updated version will be graded. You will be given instructions on Piazza on how
to interpret the feedback on the correctness of your code before the deadline.


請加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp


 

掃一掃在手機打開當前頁
  • 上一篇:CSE2425代寫、C++編程語言代做
  • 下一篇:代寫XJEL1703、MATLAB設計編程代做
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    2025年10月份更新拼多多改銷助手小象助手多多出評軟件
    2025年10月份更新拼多多改銷助手小象助手多
    有限元分析 CAE仿真分析服務-企業/產品研發/客戶要求/設計優化
    有限元分析 CAE仿真分析服務-企業/產品研發
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    出評 開團工具
    出評 開團工具
    挖掘機濾芯提升發動機性能
    挖掘機濾芯提升發動機性能
    海信羅馬假日洗衣機亮相AWE  復古美學與現代科技完美結合
    海信羅馬假日洗衣機亮相AWE 復古美學與現代
    合肥機場巴士4號線
    合肥機場巴士4號線
    合肥機場巴士3號線
    合肥機場巴士3號線
  • 短信驗證碼 trae 豆包網頁版入口 目錄網 排行網

    關于我們 | 打賞支持 | 廣告服務 | 聯系我們 | 網站地圖 | 免責聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網 版權所有
    ICP備06013414號-3 公安備 42010502001045

    日韩精品一区二区三区高清_久久国产热这里只有精品8_天天做爽夜夜做爽_一本岛在免费一二三区

      <em id="rw4ev"></em>

        <tr id="rw4ev"></tr>

        <nav id="rw4ev"></nav>
        <strike id="rw4ev"><pre id="rw4ev"></pre></strike>
        亚洲欧美精品在线| 久久综合色影院| 影音先锋国产精品| 欧美激情五月| 日韩系列欧美系列| 一区二区电影免费在线观看| 欧美一级视频精品观看| 亚洲亚洲精品三区日韩精品在线视频| 久久精品国产欧美激情| 99国产精品99久久久久久粉嫩| 亚洲欧美国产一区二区三区| 久久不射电影网| 欧美日韩亚洲激情| 国产一区二区三区四区老人| 国产欧美韩国高清| 韩日在线一区| 久久精品中文| 免费精品视频| 国产精品免费网站在线观看| 亚洲永久在线观看| 欧美久久婷婷综合色| 国产综合在线视频| 欧美va亚洲va日韩∨a综合色| 久久久999| 亚洲欧美日韩国产一区二区| 国产精品日韩精品欧美精品| 美女爽到呻吟久久久久| 亚洲高清电影| 亚洲风情亚aⅴ在线发布| 激情文学综合丁香| 亚洲无限乱码一二三四麻| 国产日韩免费| 免费影视亚洲| 欧美午夜理伦三级在线观看| 国产精品一区二区a| 久久av一区二区三区亚洲| 亚洲欧美成人一区二区三区| 先锋a资源在线看亚洲| 亚洲国产精品成人va在线观看| 欧美日韩四区| 亚洲国产精品女人久久久| 亚洲女同在线| 国产精品资源在线观看| 欧美日韩亚洲一区二区三区在线观看| 国产精品美女久久久久aⅴ国产馆| 国内一区二区三区在线视频| 欧美高清在线视频观看不卡| 国产欧美韩国高清| 国产精品久久久亚洲一区| 国产亚洲一区二区三区| 亚洲网站视频| 久久久久久亚洲精品杨幂换脸| **网站欧美大片在线观看| 国产精品激情电影| 在线视频你懂得一区二区三区| 欧美国产视频在线| 91久久在线视频| 亚洲激情六月丁香| 激情成人综合网| 欧美在线视频导航| 欧美怡红院视频一区二区三区| 午夜精品美女自拍福到在线| 黄色综合网站| 国模私拍视频一区| 国产精品国产三级国产普通话蜜臀| 国产一区二区三区直播精品电影| 亚洲春色另类小说| 亚洲免费一在线| 亚洲淫片在线视频| 亚洲人被黑人高潮完整版| 一本色道久久精品| 黄色资源网久久资源365| 黄色成人av网| 国产女精品视频网站免费| 伊人伊人伊人久久| 久久久噜噜噜| 欧美精品一区三区| 欧美大片va欧美在线播放| 亚洲午夜精品17c| 国产精品久久国产愉拍| 国产精品大片免费观看| 亚洲自拍都市欧美小说| 亚洲高清不卡av| 免费亚洲视频| 中文一区二区在线观看| 国产精品久久久久高潮| 久久久久这里只有精品| 亚洲视频综合| 亚洲国产成人av好男人在线观看| 欧美国产第二页| 国产精品天天摸av网| 亚洲小少妇裸体bbw| 欧美精品一区二区三区蜜臀| 亚洲一区二区视频在线观看| 国产欧美日韩不卡| 国产一区二区成人| 欧美调教vk| 午夜久久黄色| 久久精品国产清高在天天线| 久久大香伊蕉在人线观看热2| 一区二区三区在线视频免费观看| 国产专区一区| 午夜性色一区二区三区免费视频| 欧美日一区二区三区在线观看国产免| 久久久久久久综合日本| 一区二区在线视频观看| 欧美精品亚洲一区二区在线播放| 亚洲天堂成人在线观看| 国产精品一区免费视频| 欧美日韩伦理在线免费| 欧美在线影院| 一本一本久久a久久精品综合麻豆| 国产乱码精品| 中文精品在线| 久久av红桃一区二区小说| 蜜臀久久久99精品久久久久久| 欧美日韩成人综合| 久久久噜噜噜久久久| 欧美精品一区二区三区蜜桃| 性视频1819p久久| 国产亚洲综合性久久久影院| 亚洲国产精品久久久久| 欧美一区二区视频97| 欧美日韩国产三区| 在线观看中文字幕亚洲| 久久综合伊人77777麻豆| 久久久精品午夜少妇| 亚洲国产你懂的| 欧美日韩在线大尺度| 久久综合久久美利坚合众国| 欧美一区二区三区在线观看视频| 午夜在线视频观看日韩17c| 欧美成人午夜77777| 国内成+人亚洲+欧美+综合在线| 亚洲二区三区四区| 亚洲欧美日韩高清| 亚洲欧美日韩国产一区二区三区| 亚洲欧美在线观看| 欧美在线观看你懂的| 国产伦一区二区三区色一情| 亚洲欧美日韩天堂一区二区| 亚洲日本无吗高清不卡| 一区二区三区视频在线播放| 美日韩精品免费观看视频| 国产欧美精品一区二区三区介绍| 欧美国产一区二区三区激情无套| 亚洲视屏在线播放| 欧美日韩日本视频| 国产精品三级久久久久久电影| 亚洲欧洲一区二区三区| 国产日韩欧美麻豆| 欧美亚洲色图校园春色| 欧美中在线观看| 亚洲国产黄色| 亚洲欧美99| 亚洲欧美日韩国产成人精品影院| 精品999在线观看| 欧美激情国产日韩| 欧美日韩视频免费播放| 欧美日韩亚洲视频一区| 欧美mv日韩mv国产网站| 亚洲一区二区黄| 蜜桃av综合| 亚洲美女精品久久|