簡體   English   中英

Xv6 系統調用

[英]Xv6 System Calls

我目前正在為大學做作業,並且我在為 Xv6 創建的幾個系統調用方面遇到了一些問題。

這些系統調用的目的是從用戶程序中以 0x13 模式進行繪制。

我的問題是:

  • 有一個系統調用接收一些坐標以保存以供另一個系統調用使用。 我如何以及在何處實際存儲這些坐標(兩個 int 值)。
  • 在實際繪制一條線的系統調用中,我需要將像素的值設置為顏色,調用系統調用以從第一個系統調用設置像素不會做任何事情,是否可以從另一個系統調用?

如果試圖在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM