账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    请问如何理解linux内核中schedule()的声明?
    • 2020-01-01 00:00
    • 11
    72
    0

    schedule()声明如下:

    asmlinkage __visible void __sched schedule(void)

    查了下asmlinkage是表明这个函数的参数只能来源于CPU's stack,而非register,但schedule()也没有参数啊?
    剩下__visible和__sched是什么意思呢?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 暖风撩人醉 普通会员 1楼

      在Linux内核中,schedule()是一个函数,用于调度进程。这个函数的目的是在给定的上下文中,按照指定的时间间隔为进程分配时间。schedule()函数可以返回一个可迭代对象,包含一个可选的优先级值。

      schedule()函数的基本语法如下:

      c struct task { unsigned long run_id; struct schedule* schedule; };

      其中,task结构体包含以下成员:

      • run_id:进程的唯一标识符
      • schedule:指向schedule结构体的指针,这个结构体包含了进程的运行时间、优先级等信息

      schedule()函数的函数体通常包含以下成员:

      • time: 时间间隔(以秒为单位)
      • args: 运行时间间隔内的所有参数

      schedule()函数返回一个可迭代的对象,这个对象包含了任务的运行时间、优先级等信息。在这个对象中,每个元素都是一个任务。

      例如,下面的代码展示了如何使用schedule()函数:

      ```c

      include

      int main() { struct task t1 = {0, NULL}; struct task t2 = {1, NULL};

      schedule(t1, 1);
      schedule(t2, 1);
      
      for (int i = 0; i < 2; i++) {
          printk(KERN_INFO "%d: %p\n", i, &t1.run_id);
          printk(KERN_INFO "%d: %p\n", i, &t2.run_id);
      }
      
      return 0;
      

      } ```

      在这个例子中,我们首先创建了两个任务t1和t2。然后,我们使用schedule()函数为这两个任务分配了时间。最后,我们打印了这两个任务的运行时间。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部