【问题标题】:How to protect a shared resource from both user processes and kernel processes simultaneously?如何同时保护共享资源不受用户进程和内核进程的影响?
【发布时间】:2012-07-17 20:05:26
【问题描述】:

如何同时保护共享资源不受用户进程和内核进程的影响?这是罕见且非常极端的情况。我在一次采访中被问到这个问题。 TIA

【问题讨论】:

  • 你不能保护任何东西不受内核的影响。它可以控制一切。
  • 您可以尝试将资源(假设它是内存资源)的页面标记为不可访问。我想这必须在内核中完成,因为用户空间权限可能不会影响内核。
  • @Linuxios,这是一般性声明。但总的来说,我们使用了几种锁定机制(当然,仅在合作环境下),如自旋锁、信号量、互斥锁,可能正在使用一些条件信号等。我的查询仅与此上下文相关(受限) .谢谢
  • 我认为这种面试题适合“我不明白,你能确切地解释一下你想达到什么目标吗?”。正如 Linuxios 所说,你不能真正从内核“保护”(或隐藏)任何东西。除非内核在 VM 中运行并且您可以控制主机,否则这种努力有点愚蠢(在这种情况下,“内核”更像是用户进程而不是内核)。另一方面,“保护”的含义可能是关于正确(原子地)同时访问诸如端口或块设备之类的资源。你只需要知道他们真正想要什么。
  • @kannah:我提到如果内核不与你合作,它仍然可以访问它想要的任何东西。这就是我所说的。

标签: linux operating-system locking


【解决方案1】:

嗯,可以通过多种方式完成。 一种这样的方法是

系统调用
创建两个系统调用,一个获取锁,一个释放锁。如果用户进程想要访问共享资源,它会调用acquire-lock系统调用。如果系统调用成功返回,用户进程就可以访问共享资源。当用户进程完成时,它会通过调用 release 系统调用来释放锁。系统调用自己获取释放spinlock_t 或mutex_t(或任何其他锁定机制)。想要访问共享资源的内核进程必须使用spin_lock/spin_unlock 或mutex_lock/mutex_unlock 获取相同的锁。

正如@Damon 所指出的,这是非常笼统的问题,您应该在面试中提出具体问题才能给出具体答案。

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2017-08-07
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多