日韩精品一区二区三区高清_久久国产热这里只有精品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設計編程代做
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    出評 開團工具
    出評 開團工具
    挖掘機濾芯提升發動機性能
    挖掘機濾芯提升發動機性能
    海信羅馬假日洗衣機亮相AWE  復古美學與現代科技完美結合
    海信羅馬假日洗衣機亮相AWE 復古美學與現代
    合肥機場巴士4號線
    合肥機場巴士4號線
    合肥機場巴士3號線
    合肥機場巴士3號線
    合肥機場巴士2號線
    合肥機場巴士2號線
    合肥機場巴士1號線
    合肥機場巴士1號線
  • 短信驗證碼 酒店vi設計 deepseek 幣安下載 AI生圖 AI寫作 aippt AI生成PPT 阿里商辦

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

    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>
        国产一区二区主播在线| 国产视频在线一区二区| 亚洲一区国产| 永久久久久久| 国产乱码精品一区二区三区忘忧草| 老司机凹凸av亚洲导航| 欧美日韩午夜在线| 日韩亚洲在线观看| 亚洲精品一二三区| 亚洲精品一区二区三区福利| 久久男人资源视频| 欧美成人一区二区在线| 久久精品男女| 一本色道久久加勒比精品| 久久免费视频一区| 久热re这里精品视频在线6| 国产日韩av在线播放| 一区二区精品国产| 亚洲日韩欧美视频一区| 国产欧美日韩亚洲精品| 亚洲午夜激情免费视频| 欧美一区综合| 久久都是精品| 欧美激情二区三区| 国产视频一区免费看| 欧美色精品在线视频| 国产日韩欧美精品| 欧美日韩在线亚洲一区蜜芽| 久久黄色影院| 夜夜嗨一区二区三区| 久久久.com| 国产精品豆花视频| 久久久噜噜噜| 在线视频免费在线观看一区二区| 欧美一级在线播放| 国产免费成人| 欧美高清影院| 欧美日韩国产小视频在线观看| 韩日午夜在线资源一区二区| 欧美精品在线免费| 欧美噜噜久久久xxx| 国产精品亚洲精品| 欧美中日韩免费视频| 欧美中文字幕在线观看| 国产精自产拍久久久久久蜜| 亚洲一区日韩| 国产色产综合产在线视频| 精品成人在线| 欧美一区不卡| 久久久久免费视频| 国产精品久久久久久久久久免费| 亚洲国产精品www| 亚洲一级在线| 在线视频免费在线观看一区二区| 亚洲一区二区三区四区在线观看| 欧美人与性禽动交情品| 久久精品99无色码中文字幕| 免费h精品视频在线播放| 亚洲精品中文字| 蜜桃av久久久亚洲精品| 欧美精品一区在线| 在线观看日韩av电影| 国产一区二区激情| 欧美日韩国产综合视频在线观看中文| 国产在线观看91精品一区| 国产伦精品一区二区三区| 99精品国产一区二区青青牛奶| 欧美α欧美αv大片| 国产精品国产亚洲精品看不卡15| 欧美天天视频| 狠狠色狠狠色综合日日五| 亚洲精品日韩在线观看| 亚洲日本电影在线| 久久久久欧美| 欧美精品一区二区蜜臀亚洲| 欧美日本高清| 欧美精品一区二区三区视频| 有坂深雪在线一区| 一区二区三区免费在线观看| 国内精品久久久久影院色| 噜噜爱69成人精品| 久久在线91| 欧美日韩中字| 亚洲欧美日韩区| 一区二区三区在线观看欧美| 欧美日韩黄色一区二区| 亚洲一区二区三| 一本色道婷婷久久欧美| 99视频精品全国免费| 国产久一道中文一区| 欧美激情一区二区三区全黄| 免费不卡中文字幕视频| 在线观看中文字幕不卡| 美女网站在线免费欧美精品| 亚洲综合成人在线| 亚洲在线成人精品| 久久婷婷国产麻豆91天堂| 欧美性色aⅴ视频一区日韩精品| 亚洲东热激情| 欧美一区二区视频免费观看| 欧美亚洲免费高清在线观看| 欧美日本韩国一区| 136国产福利精品导航网址| 欧美高清视频www夜色资源网| 亚洲激情中文1区| 亚洲伊人第一页| 国产精品入口麻豆原神| 久久综合99re88久久爱| 国产精品99久久99久久久二8| 国产午夜亚洲精品理论片色戒| 亚洲一区二区三区精品动漫| 久久午夜电影网| 欧美在线视频观看| 国产精品久久久久aaaa| 久久久国产精品一区二区三区| 亚洲夜晚福利在线观看| 欧美精品国产一区| 国产日韩在线看| 欧美网站大全在线观看| 久久综合精品国产一区二区三区| 影音先锋亚洲一区| 欧美一区二区视频在线观看| 国产精品每日更新在线播放网址| 亚洲毛片在线看| 亚洲电影一级黄| 国产模特精品视频久久久久| 国产日韩欧美综合一区| 另类图片综合电影| 久久久亚洲欧洲日产国码αv| 国产精品99久久久久久有的能看| 国产欧美日本一区二区三区| 国产亚洲毛片在线| 一区二区三区在线观看视频| 欧美精品久久一区二区| 中文国产亚洲喷潮| 一区二区成人精品| 国产精品海角社区在线观看| 国内久久视频| 蜜桃久久精品乱码一区二区| 亚洲欧美一区在线| 欧美美女bb生活片| 一区二区三区视频在线看| 尤物网精品视频| 亚洲综合日韩中文字幕v在线| 欧美一区二区日韩| 国产精品日日摸夜夜添夜夜av| 国产欧美欧美| 亚洲另类在线视频| 久久久久国产一区二区三区四区| 激情综合色综合久久| 亚洲欧美韩国| 在线播放国产一区中文字幕剧情欧美| 久久久www成人免费无遮挡大片| 一本色道久久88综合日韩精品| 亚洲欧美日韩在线不卡| 激情久久久久久久久久久久久久久久| 久久久久99| 国产精品国产三级欧美二区| 免费毛片一区二区三区久久久| 亚洲电影天堂av| 黄色一区二区在线| 久久精品国产亚洲aⅴ| 蜜桃av一区| 欧美成人免费网|