[英]Xv6 System Calls
我目前正在為大學做作業,並且我在為 Xv6 創建的幾個系統調用方面遇到了一些問題。
這些系統調用的目的是從用戶程序中以 0x13 模式進行繪制。
我的問題是:
如果試圖在 sysproc.c 文件上創建兩個 int 全局變量,但我不確定它們是否被存儲。
有一個系統調用接收一些坐標以保存以供另一個系統調用使用。 我如何以及在何處實際存儲這些坐標(兩個 int 值)。
您可以創建一對新的 static 變量,您可以在 kernel 中找到一些這樣的示例,例如struct superblock sb;
在fs.c
中,或int nextpid = 1;
在過程中proc.c
所以在你的情況下,你可以有類似的東西:
int draw_xy[2];
在實際繪制一條線的系統調用中,我需要將像素的值設置為顏色,調用系統調用以從第一個系統調用設置像素不會做任何事情,是否可以從另一個系統調用?
我認為你不應該,但你可以有一個解決方案。
讓我們想象一下,您有一個名為draw_pixel(x, y, color);
在您的代碼中,您將擁有如下內容:
sys_draw_pixel(void) {
int x, y, color;
// read params
if(argint(0, &x) < 0 || argint(1, &y) < 0 || argint(2, &color) < 0)
return -1;
// call implementation
return _draw_pixel_color(x, y, color);
}
如果draw_pixel_color
是通過_draw_pixel_color
實現的,您可以調用它來進行其他系統調用。
在這種情況下,你可以有類似的東西:
sys_draw_line(void) {
int x0, x1, y0, y1, color;
// read params
if(argint(0, &x0) < 0 || argint(1, &x1) < 0 ..... )
return -1;
int i, j;
for(i = x0; i < y1; ++i)
for(j = y0; j < y1; ++j)
_draw_pixel_color(x, y, color);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.