【问题标题】:invoke system calls from multiple processes从多个进程调用系统调用
【发布时间】:2014-12-13 23:33:50
【问题描述】:

我在 Linux 中实现了一个新的系统调用:

void do_test(unsigned char *input, unsigned char *output){
    unsigned char *pt;     
    // do something complex with pt; 
}

do_test 系统调用由 Linux 中运行的许多进程调用。

我是否应该担心多个进程对共享变量*pt 存在竞争条件(即处于不一致状态)?还是每个进程都有自己的内核代码版本,所以进程 A 中使用的*pt 与进程 B 中的不一样?

如果有竞态条件,我应该如何锁定它?

【问题讨论】:

  • 修改代码以将指针传递给函数。事实上, *pt 没有被设置为任何东西。建议: void do_test( unsigned char *pt) {... }
  • 出于好奇,新系统要求什么?
  • 我编辑了问题以显示系统调用将用户提供的输入与一些内部内核状态相结合。例如,它使用其私钥对用户输入进行签名。
  • pt 指向什么?
  • "对于共享变量" - 我没有看到任何共享变量。我看到了一个局部变量。

标签: c linux-kernel operating-system kernel


【解决方案1】:

unsigned char *pt; 是一个局部变量,它不是共享的,因为每个进程都有自己的系统调用堆栈。它们共享相同的代码,但运行在不同的堆栈上。

所以不,如果你坚持使用局部变量,你就不需要任何锁,也不会冒任何数据竞争的风险。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2015-03-14
    • 2011-12-15
    • 2022-01-24
    相关资源
    最近更新 更多