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!! + + + + + + + + + + + + + 107 OS homework 3 實作Kernel Service - HackMD + + + + + + + + + + + + + + + + + +

107 OS homework 3 實作Kernel Service

+

組員:B10515014 喻凱揚
+組員:B10515022 林君達
+組員:B10515030 林弘翔
+github: https://github.com/SeanLin0603/xv6-public

+

🤔 功能說明

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#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); +} + +

shutdown.c

+ + + + + + + + +
#include "types.h" +#include "user.h" +#include "stat.h" + +int main() +{ + printf(1, "Shutting Down:\n"); + shutdown(); + return 0; +} +

taskmgr.c

+ + + + + + + + + + + + + + + + + + + + + +
#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(); +} +

sysproc.c

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+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(); +} +

proc.c

+ + + + + + +
int +taskmgr(void) +{ + + cprintf("This is a taskmgr program\n"); + + return 0; +} +

😎 結論


📅 組員分工



+ + + + + + + + + diff --git a/B10515022/index.html b/B10515022/index.html index 0160b12..75d5f50 100644 --- a/B10515022/index.html +++ b/B10515022/index.html @@ -1 +1,651 @@ -homework not found!! + + + + + + + + + + + + + 107 OS homework 3 實作Kernel Service - HackMD + + + + + + + + + + + + + + + + + +

107 OS homework 3 實作Kernel Service

+

組員:B10515014 喻凱揚
+組員:B10515022 林君達
+組員:B10515030 林弘翔
+github: https://github.com/SeanLin0603/xv6-public

+

🤔 功能說明

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#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); +} + +

shutdown.c

+ + + + + + + + +
#include "types.h" +#include "user.h" +#include "stat.h" + +int main() +{ + printf(1, "Shutting Down:\n"); + shutdown(); + return 0; +} +

taskmgr.c

+ + + + + + + + + + + + + + + + + + + + + +
#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(); +} +

sysproc.c

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+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(); +} +

proc.c

+ + + + + + +
int +taskmgr(void) +{ + + cprintf("This is a taskmgr program\n"); + + return 0; +} +

😎 結論


📅 組員分工



+ + + + + + + + + diff --git a/B10515030/index.html b/B10515030/index.html index 0160b12..75d5f50 100644 --- a/B10515030/index.html +++ b/B10515030/index.html @@ -1 +1,651 @@ -homework not found!! + + + + + + + + + + + + + 107 OS homework 3 實作Kernel Service - HackMD + + + + + + + + + + + + + + + + + +

107 OS homework 3 實作Kernel Service

+

組員:B10515014 喻凱揚
+組員:B10515022 林君達
+組員:B10515030 林弘翔
+github: https://github.com/SeanLin0603/xv6-public

+

🤔 功能說明

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#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); +} + +

shutdown.c

+ + + + + + + + +
#include "types.h" +#include "user.h" +#include "stat.h" + +int main() +{ + printf(1, "Shutting Down:\n"); + shutdown(); + return 0; +} +

taskmgr.c

+ + + + + + + + + + + + + + + + + + + + + +
#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(); +} +

sysproc.c

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+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(); +} +

proc.c

+ + + + + + +
int +taskmgr(void) +{ + + cprintf("This is a taskmgr program\n"); + + return 0; +} +

😎 結論


📅 組員分工



+ + + + + + + + +