精品深夜AV无码一区二区_伊人久久无码中文字幕_午夜无码伦费影视在线观看_伊人久久无码精品中文字幕

代寫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无码一区二区_伊人久久无码中文字幕_午夜无码伦费影视在线观看_伊人久久无码精品中文字幕
    <samp id="e4iaa"><tbody id="e4iaa"></tbody></samp>
    <ul id="e4iaa"></ul>
    <blockquote id="e4iaa"><tfoot id="e4iaa"></tfoot></blockquote>
    • <samp id="e4iaa"><tbody id="e4iaa"></tbody></samp>
      <ul id="e4iaa"></ul>
      <samp id="e4iaa"><tbody id="e4iaa"></tbody></samp><ul id="e4iaa"></ul>
      <ul id="e4iaa"></ul>
      <th id="e4iaa"><menu id="e4iaa"></menu></th>
      亚洲欧洲国产专区| 欧美日韩亚洲综合在线| 亚洲午夜在线观看视频在线| 91精品国产品国语在线不卡| 99精品国产91久久久久久| 麻豆91在线播放免费| 久久综合狠狠综合| 欧美一区二区三区免费大片 | 91丨porny丨中文| 国产精品一区在线| 国内精品视频666| 六月丁香婷婷色狠狠久久| 亚洲成年人影院| 亚洲激情av在线| 亚洲免费看黄网站| 亚洲精品国产品国语在线app| 久久免费的精品国产v∧| 精品欧美黑人一区二区三区| 在线观看91av| 日韩精品一区二区三区视频 | 午夜精品福利一区二区三区av| 国产精品国产a| 亚洲视频一二三区| 亚洲免费av高清| 亚洲成人你懂的| 亚洲电影一区二区| 日韩成人精品在线| 美女在线一区二区| 国产麻豆精品一区二区| 国产盗摄女厕一区二区三区| 高清免费成人av| 色综合天天综合色综合av| 色婷婷香蕉在线一区二区| 欧美在线一区二区三区| 日韩精品综合一本久道在线视频| 久久久久久**毛片大全| 亚洲午夜久久久久久久久电影院 | 国产精品国产自产拍高清av王其| 亚洲一区二区三区视频在线播放 | 一区二区三区成人| 国产一区二区三区精品欧美日韩一区二区三区 | av福利精品导航| 日韩午夜在线观看视频| 最近中文字幕一区二区三区| 日韩不卡免费视频| 日本韩国欧美在线| 国产校园另类小说区| 午夜精品久久久久久| a在线播放不卡| 久久综合久久鬼色中文字| 性感美女极品91精品| 成人av集中营| 国产三级精品视频| 看国产成人h片视频| 欧美色中文字幕| 亚洲女厕所小便bbb| 国产成人精品三级| 欧美xxxxx牲另类人与| 香蕉影视欧美成人| 欧美综合久久久| 1区2区3区国产精品| 国产成人鲁色资源国产91色综| 欧美大黄免费观看| 日本视频免费一区| 欧美日韩国产精选| 午夜av区久久| 51午夜精品国产| 天天影视色香欲综合网老头| 欧美在线一二三| 亚洲一二三专区| 在线观看91视频| 亚洲一区二区在线免费看| 91免费视频大全| 亚洲欧美视频一区| 91黄色激情网站| 亚洲国产欧美日韩另类综合| 91国产丝袜在线播放| 亚洲精品中文字幕乱码三区| 色94色欧美sute亚洲线路二| 亚洲精品国产精华液| 欧美在线短视频| 香蕉加勒比综合久久| 69堂成人精品免费视频| 日本成人中文字幕| 久久影视一区二区| 成熟亚洲日本毛茸茸凸凹| 国产精品嫩草影院av蜜臀| av高清久久久| 亚洲国产视频一区| 6080国产精品一区二区| 精品一区精品二区高清| 国产欧美精品一区二区三区四区| 成人中文字幕在线| 亚洲一区二区三区自拍| 日韩一区二区三区精品视频| 国内精品自线一区二区三区视频| 国产欧美日韩综合| 色噜噜夜夜夜综合网| 首页国产欧美久久| 久久久综合精品| 一道本成人在线| 久久精品国产亚洲a| 欧美国产1区2区| 精品视频1区2区| 精品制服美女丁香| 自拍偷拍国产亚洲| 91精品国产综合久久久久久漫画| 国产美女精品一区二区三区| 亚洲人成在线播放网站岛国| 欧美日本国产一区| av一二三不卡影片| 男男视频亚洲欧美| 国产精品毛片久久久久久| 欧美三级三级三级爽爽爽| 国产精品66部| 亚洲图片一区二区| 欧美国产一区在线| 欧美福利一区二区| 91丝袜国产在线播放| 久久精品国产久精国产| 日韩伦理免费电影| 久久久五月婷婷| 欧美一区二区视频免费观看| 91视视频在线观看入口直接观看www| 日产欧产美韩系列久久99| 亚洲欧洲一区二区在线播放| 精品理论电影在线| 欧美中文字幕一区二区三区亚洲| 国产精品一区二区无线| 三级欧美在线一区| 洋洋av久久久久久久一区| 国产视频在线观看一区二区三区| 6080日韩午夜伦伦午夜伦| 一本色道a无线码一区v| 成人在线视频首页| 国产精品白丝av| 久久99最新地址| 免费在线成人网| 天天色 色综合| 亚洲成人激情综合网| 一区二区三区欧美视频| 亚洲日本在线视频观看| 国产精品三级av| 国产日韩欧美高清| 国产农村妇女精品| 国产性做久久久久久| 久久理论电影网| 国产丝袜在线精品| 国产日韩欧美精品电影三级在线| 久久尤物电影视频在线观看| 欧美videossexotv100| 日韩精品一区二区三区老鸭窝| 这里只有精品免费| 91精品国产入口在线| 日韩欧美一二区| www久久精品| 国产亚洲婷婷免费| 中文字幕不卡在线观看| 中文成人av在线| 亚洲欧美日韩中文字幕一区二区三区| 中文欧美字幕免费| 亚洲另类色综合网站| 亚洲一区二区三区免费视频| 五月天一区二区| 久久99国产精品尤物| 国产成人精品亚洲日本在线桃色| 大胆亚洲人体视频| 欧美综合亚洲图片综合区| 正在播放一区二区| 久久久久久一级片| 综合久久国产九一剧情麻豆| 亚洲香肠在线观看| 久久精品国产在热久久| 国产九色精品成人porny| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产一区二区在线观看视频| 国产福利一区二区| 91福利视频久久久久| 欧美一二三四区在线| 国产偷v国产偷v亚洲高清| 亚洲乱码国产乱码精品精小说 | 亚洲综合色在线| 日韩电影一区二区三区| 国产剧情一区在线| 欧美在线免费观看视频| 精品国产乱码久久久久久影片| 亚洲欧洲无码一区二区三区| 日韩国产欧美在线视频| 国产馆精品极品| 欧美日韩一卡二卡| 久久亚洲春色中文字幕久久久| 亚洲欧美一区二区久久| 久久草av在线| 在线免费观看不卡av| 久久精品亚洲一区二区三区浴池| 一区二区三区资源| 国产a视频精品免费观看| 欧美日韩国产高清一区二区三区| 国产精品久久午夜夜伦鲁鲁| 日本不卡视频一二三区|