sách gpt4 ai đã đi

locking - spin_lock 和 mutex_lock 期间的 Linux 内核抢占

In lại 作者:行者123 更新时间:2023-12-04 03:09:33 30 4
mua khóa gpt4 Nike

当内核空间中的进程持有 spin_lock ,由于以下任何一种情况,该进程不能被抢占:

  • 当进程的时间片耗尽时
  • 当高优先级进程变得可运行时
  • 发生中断时

  • 但是,如果进程阻塞、休眠或显式调用 schedule(),则该进程可以让出处理器。 .我的理解正确吗?

    当内核空间中的进程持有 mutex_lock , 是否可以由于上述条件 1、2 和 3 导致进程被抢占。

    1 Câu trả lời

    自旋锁的当前实现使用两种完全独立的机制来确保互斥,一种用于处理处理器间排斥,另一种用于处理本地处理器线程和中断处理程序。

  • spin_lock 本身仅用于在两个或多个处理器内核之间提供互斥锁。任何遇到锁定的自旋锁的处理器基本上都会被卡住,直到另一个处理器释放它。自旋锁在单处理器系统上没有任何用处——除了增加完全死锁的机会——所以通常在内核编译时被删除。
  • 为了提供本地处理器互斥锁,spin_lock() 调用 preempt_disable()(在抢占式调度系统上)以防止任何其他线程在持有锁时运行;类似地,spin_lock_irqsave() 也做等效的 local_irq_save() 来禁用中断以防止在本地处理器上运行任何其他东西。

  • 从上面可以明显看出,使用自旋锁会弄乱整个机器,因此自旋锁应该只使用很短的时间,并且在持有锁时永远不要做任何可能导致重新安排的事情。

    mutex_lock 的情况完全不同——只有尝试访问锁的线程会受到影响,如果线程遇到锁定的互斥锁,则会发生重新调度。因此,不能在中断(或其他原子)上下文中使用 mutex_locks。

    关于locking - spin_lock 和 mutex_lock 期间的 Linux 内核抢占,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6555358/

    30 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com