Linux
-
인터럽트 후반부 처리Linux/Linux Kernel 2020. 8. 16. 17:06
디바이스 드라이버에서 등록된 대부분의 함수들은 다른 인터럽트를 금지시킨 상태로 수행하기 때문에 인터럽트 핸들러를 구현할 때는 가급적 빠르게 처리하고 종료하도록 만들어야 한다. 하지만 디바이스 드라이버의 인터럽트 핸들러를 작성하다 보면 복잡한 연산을 수행할 수 밖에 없다. 그럼 어떻게 해야할까? 바로 꼭 필요한 데이터 처리 또는 빨리 실행되어야할 코드는 인터럽트 핸들러에서 처리하도록 하고, 시간이 걸리는 복잡한 연산 또는 실시간으로 빨리 실행하지 않아도 되는 코드은 인터럽트 핸들러가 종료된 이후에 처리하도록 구성하면된다. 이 인터럽트 핸들러가 종료된 이후에 처리하는것이 인터럽트 후반부 처리다. Q. 그럼 어떠한 인터럽트 후반부 처리 방법을 사용해야할까? A. 어떠한 인터럽트 후반부 처리를 사용할지를 결정하..
-
커널 동기화Linux/Linux Kernel 2020. 8. 16. 17:03
스핀락 스핀락 특징 preempt_enable() 함수와 preempt_disable() 함수가 존재해 스핀락 획득시 선점을 할 수 없다. CPU 아키텍처별로 스핀락의 구현부가 다르다. 임계영역에서 인터럽트를 허용한다면 spin_lock() 함수와 spin_unlock() 함수를 사용한다. 임계영역에서 인터럽트를 허용하고 싶지 않다면 spin_lock_irq() 함수와 spin_unlock_irq() 함수를 사용한다. 임계영역에서 인터럽트 상태를 확인하기 하고 싶다면 spin_lock_irqsave() 함수와 spin_unlock_restore() 함수를 사용한다. spin_lock_irq() 함수와 spin_unlock_irq() 함수를 사용하는 경우(임계영역에서 인터럽트를 허용하고 싶지 않을 경우) ..