【问题标题】:What is the best why to synchronize access to net_device structures?同步访问 net_device 结构的最佳原因是什么?
【发布时间】:2015-08-14 16:25:16
【问题描述】:

我正在使用 linux 内核版本 2.6。 我想同步对 single net_device 结构的访问。 在内核代码中寻找答案时,我遇到了与此问题相关的两种同步机制:

  1. dev_base_lock 锁。

  2. rtnl_lock() 函数。

我的问题是:

  1. 两者有什么区别?

  2. 是否有任何使用上述方法的经验法则?

  3. 我应该使用哪一个来同步访问单个 net_device 结构?

谢谢!

【问题讨论】:

    标签: linux-kernel network-programming linux-device-driver


    【解决方案1】:

    可以参考>

    中的“8.15.Locking”章节

    dev_base 列表和两个哈希表dev_name_headdev_name_indexdev_base_lock 保护。但是,该锁仅用于序列化对列表和表的访问,而不用于序列化对 net_device 数据结构内容的更改。 net_device 内容更改由 Routing Netlink 信号量 (rtnl_sem) 处理,该信号量分别通过 rtnl_lockrtnl_unlock 获取和发布。[*] 此信号量用于序列化对 net_device 实例的更改:

    • 运行时事件

      例如,当链接状态发生变化时(例如,插入或拔出网线),内核 需要通过修改dev->flags来改变设备状态。

    • 配置更改

      当用户通过 net-tools 包中的 ifconfig 和 route 或 IPROUTE2 包中的 ip 等命令应用配置更改时,内核将分别通过 ioctl 命令和 Netlink 套接字通知。通过这些接口调用的例程必须使用锁。

    [*] 其他例程也可用于获取和释放信号量。有关详细信息,请参阅 include/linux/rtnetlink.h。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      相关资源
      最近更新 更多