美女扒开腿免费视频_蜜桃传媒一区二区亚洲av_先锋影音av在线_少妇一级淫片免费放播放_日本泡妞xxxx免费视频软件_一色道久久88加勒比一_熟女少妇一区二区三区_老司机免费视频_潘金莲一级黄色片_精品国产精品国产精品_黑人巨大猛交丰满少妇

代寫CSIE3310、代做c++/Python編程

時間:2024-03-21  來源:  作者: 我要糾錯



Machine Problem 1 - Thread Package
CSIE3310 - Operating Systems
National Taiwan University
Total Points: 100
Release Date: March 5
Due Date: March 19, 23:59:00
TA e-mail: ntuos@googlegroups.com
TA hours: Wed. & Thu. 10:00-12:00 before the due date, CSIE Building R428
Contents
1 Summary 1
2 Environment Setup 2
3 Part 1 (60 points) 2
3.1 Function Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3.2 Sample Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4 Part 2 (40 points) 4
4.1 Function Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2 Reminders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.3 Sample Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5 Run Public Test Cases 5
6 Submission and Grading 5
6.1 Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
6.2 Folder Structure after Unzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6.3 Grading Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
7 Appendix 6
1 Summary
In this MP, you’ll try to implement a user-level thread package with the help of setjmp and longjmp. The
threads explicitly yield when they no longer require CPU time. When a thread yields or exits, the next thread
should run. The thread can assign additional tasks to other threads, including itself. There are two parts in
this MP. In the first part, you’ll need to implement the following functions:
• thread add runqueue
• thread yield
• dispatch
• schedule
• thread exit
• thread start threading
In the second part, you’ll need to implement the following functions:
• thread assign task
The following function has been implemented for you:
• thread create
Each thread should be represented by a struct thread that contains, at a minimum, a function pointer to the
thread’s function and a pointer of type void * as the function parameters. The function of the thread will take
the void * as its argument when executed. The struct should include a pointer to its stack and some jmp buf
to store it’s current state when thread yield is called. It should be enough to use only setjmp and longjmp
to save and restore the context of a thread.
2 Environment Setup
1. Download the MP1.zip from NTUCOOL, unzip it, and enter it.
$ unzip MP1.zip
$ cd mp1
2. Pull Docker image from Docker Hub.
$ docker pull ntuos/mp1
3. Use docker run to start the process in a container and allocate a TTY for the container process.
$ docker run -it -v $(pwd)/xv6:/home ntuos/mp1
4. Execute xv6
$ make qemu
5. You will use the skeleton of threads.h and threads.c provided in xv6/user folder. Make sure you are
familiar with the concept of stack frame and stack pointer taught in System Programming. It is also
recommended to checkout the appendix given.
3 Part 1 (60 points)
3.1 Function Description
1. struct thread *thread create(void (*f)(void *), void *arg): This function creates a new thread
and allocates the space in stack to the thread. Note, if you would like to allocate a new stack for the
thread, it is important that the address of the stack pointer should be divisible by 8. The function returns
the initialized structure. If you want to use your own template for creating thread, make sure it works
for the provided test cases.
2. void thread add runqueue(struct thread *t): This function adds an initialized struct thread to
the runqueue. To implement the scheduling functionality, you’ll need to maintain a circular linked list
of struct thread. You should implement that by maintaining the next and previous field in struct
thread which always points to the next to-be-executed thread and the previously executed thread respectively. You should also maintain the static variable struct thread *current thread that always
points to the currently executed thread. Note: Please insert the new thread at the end of the runqueue,
i.e. the newly inserted thread should be current thread->previous.
3. void thread yield(void): This function suspends the current thread by saving its context to the
jmp buf in struct thread using setjmp. The setjmp in xv6 is provided to you, therefore you only need
to add #include "user/setjmp.h" to your code. After saving the context, you should call schedule()
to determine which thread to run next and then call dispatch() to execute the new thread. If the thread
is resumed later, thread yield() should return to the calling place in the function.
4. void dispatch(void): This function executes a thread which decided by schedule(). In case the thread
has never run before, you may need to do some initialization such as moving the stack pointer sp to the
allocated stack of the thread. The stack pointer sp could be accessed and modified using setjmp and
longjmp. Please take a look at setjmp.h to understand where the sp is stored in jmp buf. If the thread
was executed before, restoring the context with longjmp is enough. In case the thread’s function just
returns, the thread needs to be removed from the runqueue and the next one has to be dispatched. The
easiest way to do this is to call thread exit().
5. void schedule(void): This function will decide which thread to run next. It is actually trivial, since you
will just run the next thread in the circular linked list of threads. You can simply change current thread
to the next field of current thread.
6. void thread exit(void): This function removes the calling thread from the runqueue, frees its stack
and the struct thread, updates current thread with the next to-be-executed thread in the runqueue
and calls dispatch().
Furthermore, think about what happens when the last thread exits (should return to the main function
by some means).
7. void thread start threading(void): This function will be called by the main function after some
thread is added to the runqueue. It should return only if all threads have exited.
3.2 Sample Output
The output of mp1-part1-0 should look like the following.
$ mp1-part1-0
mp1-part1-0
thread 1: 100
thread 2: 0
thread 3: 10000
thread 1: 101
thread 2: 1
thread 3: 10001
thread 1: 102
thread 2: 2
thread 3: 10002
thread 1: 103
thread 2: 3
thread 3: 10003
thread 1: 104
thread 2: 4
thread 3: 10004
thread 1: 105
thread 2: 5
thread 1: 106
thread 2: 6
thread 1: 107
thread 2: 7
thread 1: 108
thread 2: 8
thread 1: 109
thread 2: 9
exited
4 Part 2 (40 points)
In this part, you are required to implement an additional function thread assign task. This function enables
each thread to manage multiple tasks, with the most recently assigned task being executed first. Note that,
child threads should not inherit tasks from their parent when they are created.
4.1 Function Description
1. void thread assign task(struct thread *t, void (*f)(void *), void *arg): This function assigns a task to the thread t. The second argument, f, is a pointer to the task function, while the third
argument, arg, represents the argument of f. If t has unfinished tasks, the most recently assigned task
will be executed first when t is resumed later. The execution of the original thread function must wait
until all tasks are finished. Note that, this function only assigns tasks and does not trigger any context
switch.
In order to complete this part, you need to modify the following functions:
1. void thread yield(void): Because this function can also be called in the task function, you should save
the context in different jmp bufs according to whether the thread is executing the task function or not.
Specifically, if this function is called in the thread function, you can save the context just like in part 1.
If this function is called in the task function, you should save the context in another jmp buf to prevent
from discarding the context of the thread function.
2. void dispatch(void): If a task is assigned, this function should execute the most recently assigned task
function. If this function has never run before, you may need to do some initialization. If this function
was executed before, restoring the context with longjmp is sufficient. In case this task function just
returns, the thread should execute the next task function. The process follows the same approach as with
the previous task function. Surely, It is possible for a task to be assigned before the thread executes its
thread function.
Feel free to make more modification, such as adding properties in struct thread, designing new structure
for encapsulating task-related logic, etc. The only requirement is that all defined function should work as
described above.
4.2 Reminders
1. When creating a new thread in thread create, ensure that the new thread has no assigned tasks initially.
2. The parameter struct thread *t in thread assign task must exist and not have exited yet.
3. Tasks are executed in Last-Come-First-Serve (LCFS) order. That is, if a thread returns from a task
function and there are unfinished tasks, the most recently assigned task will be executed next.
4. While you are encouraged to add properties in struct thread, modifying the existing properties is not
allowed.
5. The task function may call thread create, thread add runqueue, thread yield, thread exit, or
thread assign task.
6. The memory space allocated to each thread by thread create is sufficient to execute task functions in
all test cases.
7. In all test cases, a thread may have at most 20 unfinished tasks at any moment.
8. If you intend to use global variables in threads.h, threads.c, or your test files, it is recommended to
add the static keyword to prevent unexpected situations.
4.3 Sample Output
The output of mp1-part2-0 should look like the following.
$ mp1-part2-0
mp1-part2-0
thread 1: 100
task 2: 101
thread 2: 0
thread 1: 101
thread 2: 1
thread 1: 102
task 2: 103
thread 1: 103
thread 2: 2
thread 1: 104
task 2: 105
thread 2: 3
thread 1: 105
thread 2: 4
exited
5 Run Public Test Cases
You can get 35 points (100 points in total) if you pass all public test cases. You can judge the code by running
the following command in the docker container (not in xv6; this should run in the same place as make qemu).
Note that you should only modify xv6/user/thread.c and xv6/user/thread.h. We do not guarantee that
you can get the public points from us if you modify other files to pass all test cases during local testing.
$ make grade
If you successfully pass all the public test cases, the output should be similar to the one below.
== Test thread package with public testcase part1-0 (10%) ==
thread package with public testcase part1-0: OK (16.8s)
== Test thread package with public testcase part1-1 (10%) ==
thread package with public testcase part1-1: OK (1.3s)
== Test thread package with public testcase part2-0 (5%) ==
thread package with public testcase part2-0: OK (0.8s)
== Test thread package with public testcase part2-1 (5%) ==
thread package with public testcase part2-1: OK (0.9s)
== Test thread package with public testcase part2-2 (5%) ==
thread package with public testcase part2-2: OK (1.0s)
Score: 35/35
If you want to know the details about the test cases, please check xv6/grade-mp1, xv6/user/mp1-part1-0.c,
xv6/user/mp1-part1-1.c, xv6/user/mp1-part2-0.c, xv6/user/mp1-part2-1.c and xv6/user/mp1-part2-2.c.
6 Submission and Grading
6.1 Source Code
Run the command below to pack your code into a zip named in your lowercase student ID, for example,
r11922088.zip. Upload the zip file to NTUCOOL.
$ make STUDENT_ID=<student_id> zip # set your ID here
Please ensure that your student ID is in lowercase letters. E.g., it should be r11922088 instead of
R11922088. Besides, make sure your xv6 can be compiled by make qemu.
6.2 Folder Structure after Unzip
We will unzip your submission using unzip command. The unzipped folder structure looks like this.
<student_id>
|
+-- threads.c
|
+-- threads.h
6.3 Grading Policy
• There are 2 public test cases and 4 private test cases in Part 1.
– Public test cases (20%): mp1-part1-0 and mp1-part1-1. 10% each.
– Private test cases (40%): 10% each.
• There are 3 public test cases and 4 private test cases in Part 2.
– Public test cases (15%): mp1-part2-0, mp1-part2-1 and mp1-part2-2. 5% each.
– Private test cases (25%): 5%, 5%, 7.5%, 7.5%.
• You will get 0 if we cannot compile your submission.
• You will be deducted 10 points if we cannot unzip your file through the command line using the unzip
command in Linux.
• You will be deducted 10 points if the folder structure is wrong. Using uppercase in the <student id> is
also a type of wrong folder structure.
• If your submission is late for n days, your score will be max(raw score − 20 × ⌈n⌉, 0) points. Note that
you will not get any points if ⌈n⌉ >= 5.
• Our grading library has a timeout mechanism so that we can handle the submission that will run forever.
Currently, the execution time limit is set to 240 seconds. We may extend the execution time limit if we
find that such a time limit is not sufficient for programs written correctly. That is, you do not have to
worry about the time limit.
• You can submit your work as many times as you want, but only the last submission will be graded.
Previous submissions will be ignored.
• The grading will be done on a Linux server.
請加QQ:99515681  郵箱:99515681@qq.com   WX:codehelp 

標簽:

掃一掃在手機打開當前頁
  • 上一篇:代寫CPS 1032、Java/Python程序代做
  • 下一篇:代做Lab 2: Time Series Prediction with GP
  • 無相關信息
    昆明生活資訊

    昆明圖文信息
    蝴蝶泉(4A)-大理旅游
    蝴蝶泉(4A)-大理旅游
    油炸竹蟲
    油炸竹蟲
    酸筍煮魚(雞)
    酸筍煮魚(雞)
    竹筒飯
    竹筒飯
    香茅草烤魚
    香茅草烤魚
    檸檬烤魚
    檸檬烤魚
    昆明西山國家級風景名勝區
    昆明西山國家級風景名勝區
    昆明旅游索道攻略
    昆明旅游索道攻略
  • 短信驗證碼平臺 理財 WPS下載

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

    Copyright © 2025 kmw.cc Inc. All Rights Reserved. 昆明網 版權所有
    ICP備06013414號-3 公安備 42010502001045

    美女扒开腿免费视频_蜜桃传媒一区二区亚洲av_先锋影音av在线_少妇一级淫片免费放播放_日本泡妞xxxx免费视频软件_一色道久久88加勒比一_熟女少妇一区二区三区_老司机免费视频_潘金莲一级黄色片_精品国产精品国产精品_黑人巨大猛交丰满少妇
    国产精品果冻传媒| 久久久久中文字幕亚洲精品| 欧美另类69xxxx| 手机在线免费看片| 波多野结衣先锋影音| 成年人午夜剧场| 摸摸摸bbb毛毛毛片| 精品无码在线视频| 日韩片在线观看| 日批在线观看视频| 精品人妻伦一二三区久| 一级片一级片一级片| 美女洗澡无遮挡| 五月婷六月丁香| 亚洲aaa视频| 国产真实乱在线更新| 老湿机69福利| 色诱av手机版| 精品黑人一区二区三区观看时间| 亚洲成av人片在线观看无| 婷婷五月精品中文字幕| 久久无码专区国产精品s| 激情综合激情五月| 日本少妇高潮喷水xxxxxxx| 亚洲精品视频久久久| 欧美人与禽zoz0善交| 日本一级特级毛片视频| 99热这里只有精品2| 欧美一区二区三区成人精品| caoporn91| 国产精品无码一区二区三| 中文字幕第4页| 性生活在线视频| 亚洲成人av免费在线观看| 亚洲а∨天堂久久精品2021| www.99re7| 天天躁日日躁aaaa视频| 亚洲AV成人无码精电影在线| 欧美黑人性猛交xxx| 亚洲av综合一区二区| 秋霞欧美一区二区三区视频免费| 日本少妇xxxx软件| 日本污视频网站| 欧亚乱熟女一区二区在线| 毛片久久久久久| 蜜臀av粉嫩av懂色av| 丰满少妇在线观看资源站| 无码黑人精品一区二区| 伊人网伊人影院| 台湾佬美性中文| 情侣偷拍对白清晰饥渴难耐| 五月开心播播网| 亚洲最大的黄色网址| 欧美另类z0zx974| 偷偷色噜狠狠狠狠的777米奇| 成人一级片免费看| 法国伦理少妇愉情| 黄色av网址在线观看| 日韩大尺度视频| 香蕉成人在线视频| www.自拍偷拍| 国产白袜脚足j棉袜在线观看| 99久久久免费精品| 久久久久久久久福利| 国产美女精品久久| 精品一区二区视频在线观看| 亚洲天堂网av在线| 美女视频久久久| 三级在线观看免费大全| 手机av在线不卡| 最新中文字幕av| 美女av免费看| 日本黄色片免费观看| 高h视频免费观看| 色哟哟免费视频| 中文字幕第3页| 朝桐光av一区二区三区| 亚洲成人av免费在线观看| 国产精品九九视频| 男人天堂av电影| 欧美一区二区三区观看| 国产精品嫩草影院俄罗斯| 色婷婷在线视频观看| 欧美一级片在线免费观看| 少妇被狂c下部羞羞漫画| 人妻大战黑人白浆狂泄| 天堂在线中文视频| 日韩少妇一区二区| 天天躁夜夜躁狠狠是什么心态 | 国产麻豆xxxvideo实拍| 日本wwwwwww| 丰满少妇一区二区三区| 亚洲无人区码一码二码三码的含义| 亚洲黄色网址大全| 久久黄色一级视频| 手机看片日韩av| 伊人影院在线观看视频| 强伦人妻一区二区三区| 国产极品国产极品| 欧美激情亚洲色图| 中文字幕黄色网址| 佐佐木明希电影| 影音先锋男人资源在线观看| 国产亚洲精品成人a| 成人做爰69片免费| 黄色精品视频在线观看| 丰满大乳奶做爰ⅹxx视频| 日本不卡一二区| 黄色国产在线观看| 欧美极品jizzhd欧美仙踪林| 亚洲激情图片网| 黄色国产在线观看| 四虎成人免费视频| 下面一进一出好爽视频| 国产在线免费av| 中文幕无线码中文字蜜桃| 久久久久久久久久影视| 亚洲国产精品一区二区久久hs| 精品夜夜澡人妻无码av| 男人女人拔萝卜视频| 国产麻豆a毛片| 人与嘼交av免费| 亚洲综合网在线观看| 国产国语性生话播放| 2018国产精品| 性感美女一区二区三区| 日本成人在线免费| 极品白嫩少妇无套内谢| 无码人妻一区二区三区精品视频 | 亚洲熟妇一区二区| 永久免费看片视频教学| 极品色av影院| 欧美偷拍第一页| 69av视频在线| 国产精品偷伦视频免费观看了| 少妇愉情理伦片bd| 免费人成视频在线播放| 粗大的内捧猛烈进出视频| 欧美体内she精高潮| 无码人妻一区二区三区精品视频 | 亚洲人成人无码网www国产| 中文字幕无码人妻少妇免费| 动漫av在线免费观看| 中国一级特黄录像播放| 亚洲 小说 欧美 激情 另类| аⅴ天堂中文在线网| 人与动物性xxxx| 日本女人性视频| av无码av天天av天天爽| 特黄一区二区三区| 色欲欲www成人网站| 精品人妻一区二区三区香蕉 | 国产一级二级在线观看| 一区二区不卡免费视频| 免费黄色在线网址| 国产伦理在线观看| 夫妇交换中文字幕| 中文字幕18页| 国产一区二区三区精品在线| 日本亚洲一区二区三区| 国产精品理论在线| 国产一二三四视频| 日本精品一二三区| 99自拍偷拍视频| 国产精品无码在线| 亚洲天堂一级片| 黑人巨大精品欧美| 国产高清在线免费观看| 谁有免费的黄色网址| 亚洲 自拍 另类 欧美 丝袜| 51妺嘿嘿午夜福利| 人体私拍套图hdxxxx| 亚洲国产精品久| 中字幕一区二区三区乱码| 国产精品久久久久久亚洲av| av黄色免费在线观看| 无码人妻精品一区二区三区温州| 黄色裸体一级片| 在线观看xxx| 中文字幕在线播放一区| 福利视频第一页| 欧美一级片黄色| 亚洲妇女无套内射精| 91嫩草丨国产丨精品| 久久婷婷五月综合| 白嫩情侣偷拍呻吟刺激| 久久久久久久久久网站| x88av在线| 国产成人无码精品久久二区三| 亚洲欧美高清在线| 伊人久久久久久久久| 任你躁av一区二区三区| 亚洲成人激情小说| 香蕉视频免费网站| 69xxx免费视频| 男人网站在线观看| 亚洲久久久久久| 人妻aⅴ无码一区二区三区| 中文字幕在线观看的网站| 精品久久久久久中文字幕人妻最新|