首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xv6系统调用

Xv6系统调用
EN

Stack Overflow用户
提问于 2021-12-08 15:34:39
回答 1查看 289关注 0票数 0

我目前正在为大学做作业,我不得不为Xv6创建的几个系统调用出现了一些问题。

这些系统调用的目的是从用户程序中提取0x13模式。

我的问题是:

  • 有一个系统调用,它接收一些坐标以保存另一个系统调用使用。如何和在哪里实际存储这些坐标(两个int值)。
  • 在系统调用中实际绘制一条线,我需要将像素的值设置为颜色,调用系统调用来设置第一个系统调用中的像素没有任何作用,可以从另一个系统调用进行系统调用吗?

如果尝试只在syspro.c文件上创建两个int全局变量,但我不确定它们是否被存储。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-20 08:23:29

有一个系统调用,它接收一些坐标以保存另一个系统调用使用。如何和在哪里实际存储这些坐标(两个int值)。

您可以创建一个新的静态变量,您可以在内核中找到这类变量的一些示例,例如struct superblock sb;中的fs.cproc.c中的int nextpid = 1;

所以在你的情况下,你可以有这样的东西:

代码语言:javascript
运行
复制
int draw_xy[2];

在系统调用上实际上画了一条线,我需要将像素的值设置为颜色,调用系统调用来设置第一个系统调用中的像素没有任何作用,可以从另一个系统调用进行系统调用吗?

我认为你不应该,但你可以有一个解决办法。

让我们想象一下,您的代码中有一个名为draw_pixel(x, y, color);的系统调用,您将得到如下内容:

代码语言:javascript
运行
复制
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实现的,您可以为其他系统调用它。

在这种情况下,您可以拥有如下内容:

代码语言:javascript
运行
复制
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;

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70277637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档