diff --git a/B10515014/index.html b/B10515014/index.html index 0160b12..75d5f50 100644 --- a/B10515014/index.html +++ b/B10515014/index.html @@ -1 +1,651 @@ -homework not found!! + + + + +
+ + + + + + ++組員:B10515014 喻凱揚
+
+組員:B10515022 林君達
+組員:B10515030 林弘翔
+github: https://github.com/SeanLin0603/xv6-public
可以dump出所有Procees的名稱、狀態、優先權的清單。
可以立即指定一個Process的Priority。
一個回傳Process Pid的System call。
新增測試用的Process。
查看目前日期時間或輸入時區
關閉xv6 system
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "types.h"
+#include "user.h"
+#include "date.h"
+
+int main(int argc, char *argv[])
+{
+ struct rtcdate r;
+ if(date(&r))
+ {
+ printf(2, "date failed\n");
+ exit();
+ }
+
+ if(argc == 2)
+ {
+ if(atoi(argv[1]) > 12 || atoi(argv[1]) <-12)
+ {
+ printf(2, "TimeArea Error\n");
+ exit();
+ }
+
+ int newHour = r.hour + atoi(argv[1]);
+
+ if(newHour >= 24)
+ {
+ r.hour = newHour - 24;
+ r.day += 1;
+ }
+ else if(newHour < 0)
+ {
+ r.hour = r.hour + 24 - atoi(argv[1]);
+ r.day -= 1;
+ }
+ else
+ {
+ r.hour = newHour;
+ }
+ }
+ else
+ {
+ r.hour += 8;
+ if(r.hour >= 24)
+ {
+ r.hour -= 24;
+ r.day += 1;
+ }
+ }
+ printf(1, "The time is: ");
+ pulseZero(r.year, "/");
+ pulseZero(r.month, "/");
+ pulseZero(r.day, " ");
+ pulseZero(r.hour, ":");
+ pulseZero(r.minute, ":");
+ pulseZero(r.second, " ");
+ printf(1, "\n");
+
+ exit();
+}
+
+void pulseZero(int num, char* c)
+{
+
+ if(num < 10)
+ printf(1,"0%d", num);
+ else
+ printf(1,"%d", num);
+
+ printf(1, "%s", c);
+}
+
+
+
+
+
+
+
+
+
+
+#include "types.h"
+#include "user.h"
+#include "stat.h"
+
+int main()
+{
+ printf(1, "Shutting Down:\n");
+ shutdown();
+ return 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "types.h"
+#include "user.h"
+#include "stat.h"
+#include "fcntl.h"
+#include "date.h"
+int
+main(int argc, char *argv[])
+{
+
+ /*if(argc < 3){
+ printf(2, "Usage: cp pid priority");
+ exit();
+ }*/
+ printf(2,"this is in taskmgr.c\n");
+ //printf(0,"%c",*argv[0]);
+ printf(2,"%d\n",argc);
+ printf(2,"%d %d\n",argv[1],argv[2]);
+ //taskmgr();
+ cps();
+
+
+ exit();
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+int
+sys_cps(void)
+{
+ return cps();
+}
+
+int
+sys_cp(void)
+{
+ int pid, priority;
+ if(argint(0, &pid) < 0)
+ return -1;
+ if(argint(1, &priority) < 0)
+ return -1;
+
+ return changePriority(pid, priority);
+}
+
+
+int
+sys_find(void)
+{
+ int pid;
+ if(argint(0, &pid) < 0)
+ return -1;
+ return findpid(pid);
+}
+
+int
+sys_date(struct rtcdate *r)
+{
+ if (argptr(0, (void *)&r, sizeof(*r)) < 0)
+ return -1;
+
+ cmostime(r);
+ return 0;
+}
+
+int
+sys_shutdown(void)
+{
+ cprintf("shutdown signal sent\n");
+ outw(0xB004, 0x0|0x2000);
+ return 0;
+}
+
+int
+sys_taskmgr(void)
+{
+ return taskmgr();
+}
+
+
+
+
+
+
+
+int
+taskmgr(void)
+{
+
+ cprintf("This is a taskmgr program\n");
+
+ return 0;
+}
+
原本 xv6 是使用 Round Robin Scheduling 的方式對 Process 做排程,因此每個 Process 的使用時間都是固定的,在這次實作中,我們將其改為 Priority Scheduling 並允許讓使用者能夠更改特定的 Proceess 的 Priority,並動態地對 ptable 中的 process修改 priority 來避免 Starvation 的發生。
+我們將changepriority,date,child,find,printproccess整合成一個以指令輸入,類似系統管理員的服務,能夠讓使用者更簡單的執行指令,或是查看現在每個程序的狀態。
+date的指令是用系統呼叫xv6內的系統時間,只要輸入date指令便可以看到終端機我們在 date.c 中寫好的時間格式輸出UTC时間。
+shutdown的功能是透過shutdown指令安插一個syscall在kernel中,當要進行系統關機時僅需輸入shutdown指令便可以排程在一分鐘之後進行關機,而這一分鐘之內都可以透過shutdown-c指令來取消關機計畫
+這次的作業,讓我們對於 System 的排程方式,以及如何讓 CPU 執行 procces 的流程與方式有更深的理解,也讓我們知道 Scheduling 雖然在實作上並不會說太複雜,但是其實對 OS 的影響很大也很重要。
+B10515014 喻凱揚
+proc.c > findpid()
+find.c
+child.c
+date.c
+taskmgr.c
B10515022 林君達
+proc.c > cps
+proc.c > allocproc()
+shutdown.c
+printprocess.c
B10515030 林弘翔
+proc.c > changePriority()
+proc.c > scheduler()
+proc.c > taskmgr()
+cp.c
+Makefile
+組員:B10515014 喻凱揚
+
+組員:B10515022 林君達
+組員:B10515030 林弘翔
+github: https://github.com/SeanLin0603/xv6-public
可以dump出所有Procees的名稱、狀態、優先權的清單。
可以立即指定一個Process的Priority。
一個回傳Process Pid的System call。
新增測試用的Process。
查看目前日期時間或輸入時區
關閉xv6 system
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "types.h"
+#include "user.h"
+#include "date.h"
+
+int main(int argc, char *argv[])
+{
+ struct rtcdate r;
+ if(date(&r))
+ {
+ printf(2, "date failed\n");
+ exit();
+ }
+
+ if(argc == 2)
+ {
+ if(atoi(argv[1]) > 12 || atoi(argv[1]) <-12)
+ {
+ printf(2, "TimeArea Error\n");
+ exit();
+ }
+
+ int newHour = r.hour + atoi(argv[1]);
+
+ if(newHour >= 24)
+ {
+ r.hour = newHour - 24;
+ r.day += 1;
+ }
+ else if(newHour < 0)
+ {
+ r.hour = r.hour + 24 - atoi(argv[1]);
+ r.day -= 1;
+ }
+ else
+ {
+ r.hour = newHour;
+ }
+ }
+ else
+ {
+ r.hour += 8;
+ if(r.hour >= 24)
+ {
+ r.hour -= 24;
+ r.day += 1;
+ }
+ }
+ printf(1, "The time is: ");
+ pulseZero(r.year, "/");
+ pulseZero(r.month, "/");
+ pulseZero(r.day, " ");
+ pulseZero(r.hour, ":");
+ pulseZero(r.minute, ":");
+ pulseZero(r.second, " ");
+ printf(1, "\n");
+
+ exit();
+}
+
+void pulseZero(int num, char* c)
+{
+
+ if(num < 10)
+ printf(1,"0%d", num);
+ else
+ printf(1,"%d", num);
+
+ printf(1, "%s", c);
+}
+
+
+
+
+
+
+
+
+
+
+#include "types.h"
+#include "user.h"
+#include "stat.h"
+
+int main()
+{
+ printf(1, "Shutting Down:\n");
+ shutdown();
+ return 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#include "types.h"
+#include "user.h"
+#include "stat.h"
+#include "fcntl.h"
+#include "date.h"
+int
+main(int argc, char *argv[])
+{
+
+ /*if(argc < 3){
+ printf(2, "Usage: cp pid priority");
+ exit();
+ }*/
+ printf(2,"this is in taskmgr.c\n");
+ //printf(0,"%c",*argv[0]);
+ printf(2,"%d\n",argc);
+ printf(2,"%d %d\n",argv[1],argv[2]);
+ //taskmgr();
+ cps();
+
+
+ exit();
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+int
+sys_cps(void)
+{
+ return cps();
+}
+
+int
+sys_cp(void)
+{
+ int pid, priority;
+ if(argint(0, &pid) < 0)
+ return -1;
+ if(argint(1, &priority) < 0)
+ return -1;
+
+ return changePriority(pid, priority);
+}
+
+
+int
+sys_find(void)
+{
+ int pid;
+ if(argint(0, &pid) < 0)
+ return -1;
+ return findpid(pid);
+}
+
+int
+sys_date(struct rtcdate *r)
+{
+ if (argptr(0, (void *)&r, sizeof(*r)) < 0)
+ return -1;
+
+ cmostime(r);
+ return 0;
+}
+
+int
+sys_shutdown(void)
+{
+ cprintf("shutdown signal sent\n");
+ outw(0xB004, 0x0|0x2000);
+ return 0;
+}
+
+int
+sys_taskmgr(void)
+{
+ return taskmgr();
+}
+
+
+
+
+
+
+
+int
+taskmgr(void)
+{
+
+ cprintf("This is a taskmgr program\n");
+
+ return 0;
+}
+
原本 xv6 是使用 Round Robin Scheduling 的方式對 Process 做排程,因此每個 Process 的使用時間都是固定的,在這次實作中,我們將其改為 Priority Scheduling 並允許讓使用者能夠更改特定的 Proceess 的 Priority,並動態地對 ptable 中的 process修改 priority 來避免 Starvation 的發生。
+我們將changepriority,date,child,find,printproccess整合成一個以指令輸入,類似系統管理員的服務,能夠讓使用者更簡單的執行指令,或是查看現在每個程序的狀態。
+date的指令是用系統呼叫xv6內的系統時間,只要輸入date指令便可以看到終端機我們在 date.c 中寫好的時間格式輸出UTC时間。
+shutdown的功能是透過shutdown指令安插一個syscall在kernel中,當要進行系統關機時僅需輸入shutdown指令便可以排程在一分鐘之後進行關機,而這一分鐘之內都可以透過shutdown-c指令來取消關機計畫
+這次的作業,讓我們對於 System 的排程方式,以及如何讓 CPU 執行 procces 的流程與方式有更深的理解,也讓我們知道 Scheduling 雖然在實作上並不會說太複雜,但是其實對 OS 的影響很大也很重要。
+B10515014 喻凱揚
+proc.c > findpid()
+find.c
+child.c
+date.c
+taskmgr.c
B10515022 林君達
+proc.c > cps
+proc.c > allocproc()
+shutdown.c
+printprocess.c
B10515030 林弘翔
+proc.c > changePriority()
+proc.c > scheduler()
+proc.c > taskmgr()
+cp.c
+Makefile
107 OS homework 3 實作Kernel Service
🤔 功能說明
PrintProcess
可以dump出所有Procees的名稱、狀態、優先權的清單。
ChangePriority
可以立即指定一個Process的Priority。
Find
一個回傳Process Pid的System call。
Child
新增測試用的Process。
date
查看目前日期時間或輸入時區
shutdown
關閉xv6 system
🙂 使用情境說明(包含流程圖)
使用者輸入 date <TimeArea> 查看日期
😇 Demo畫面
printprocess 列出目前的process
child 新增測試用的process
cp 改變指定pid的priority
將ready(runnable) process 的priority提高,因此優先執行
find 查看指定pid的相關資訊
date 查看系統當前日期及時間
shutdown進行xv6 system排程關機
taskmgr 類工作管理員程式 (尚未完成)
我們預期的目標是實做出一個選單,用來選取上述已經完成的syscall,儘管我們已經嘗試多次,仍無法正確完成,下圖為半成品截圖
🏃 實作過程(修改哪些檔案[含圖片])
date.c
shutdown.c
taskmgr.c
sysproc.c
proc.c
😎 結論
+-
+
+-
+
+-
+
+-
+
+-
+
+
原本 xv6 是使用 Round Robin Scheduling 的方式對 Process 做排程,因此每個 Process 的使用時間都是固定的,在這次實作中,我們將其改為 Priority Scheduling 並允許讓使用者能夠更改特定的 Proceess 的 Priority,並動態地對 ptable 中的 process修改 priority 來避免 Starvation 的發生。
+我們將changepriority,date,child,find,printproccess整合成一個以指令輸入,類似系統管理員的服務,能夠讓使用者更簡單的執行指令,或是查看現在每個程序的狀態。
+date的指令是用系統呼叫xv6內的系統時間,只要輸入date指令便可以看到終端機我們在 date.c 中寫好的時間格式輸出UTC时間。
+shutdown的功能是透過shutdown指令安插一個syscall在kernel中,當要進行系統關機時僅需輸入shutdown指令便可以排程在一分鐘之後進行關機,而這一分鐘之內都可以透過shutdown-c指令來取消關機計畫
+這次的作業,讓我們對於 System 的排程方式,以及如何讓 CPU 執行 procces 的流程與方式有更深的理解,也讓我們知道 Scheduling 雖然在實作上並不會說太複雜,但是其實對 OS 的影響很大也很重要。
+📅 組員分工
+-
+
+-
+
+-
+
+
B10515014 喻凱揚
++proc.c > findpid()
+find.c
+child.c
+date.c
+taskmgr.c
B10515022 林君達
++proc.c > cps
+proc.c > allocproc()
+shutdown.c
+printprocess.c
B10515030 林弘翔
++proc.c > changePriority()
+proc.c > scheduler()
+proc.c > taskmgr()
+cp.c
+Makefile