Linux/Linux Kernel
-
인터럽트 후반부 처리 / 워크큐Linux/Linux Kernel 2020. 9. 13. 13:29
워크큐 구성요소 워크 워크(워크 핸들러)는 실행단위다. 워커 스레드(워커 스레드 핸들러; woker_thread())가 워크를 실행한다. 워커 스레드 워커 스레드(워커 스레드 핸들러; woker_thread())가 워크(워크 핸들러)를 실행한다. 워커 풀 워크를 큐잉한 워크 리스트를 관리한다. 워커 스레드를 생성하면서 관리한다. 그래서 큐잉된 워크의 개수나 실행 중인 워커 스레드의 개수를 워커 풀로 부터 알 수 있다. 풀워크큐 풀워크큐는 워커 풀을 통해 워크와 워커 스레드를 관리한다. 워크큐 안에 *per_cpu 포인터 구조체 필드인 풀워크큐가 있고 풀워크큐안에 포인터 구조체 필드인 워커풀이 있고 워커풀안에 워크를 관리할 연결리스트 구조체 필드와 워커 스레드를 관리할 연결리스트 구조체 필드가 있다. ※ ..
-
인터럽트 후반부 처리Linux/Linux Kernel 2020. 8. 16. 17:06
디바이스 드라이버에서 등록된 대부분의 함수들은 다른 인터럽트를 금지시킨 상태로 수행하기 때문에 인터럽트 핸들러를 구현할 때는 가급적 빠르게 처리하고 종료하도록 만들어야 한다. 하지만 디바이스 드라이버의 인터럽트 핸들러를 작성하다 보면 복잡한 연산을 수행할 수 밖에 없다. 그럼 어떻게 해야할까? 바로 꼭 필요한 데이터 처리 또는 빨리 실행되어야할 코드는 인터럽트 핸들러에서 처리하도록 하고, 시간이 걸리는 복잡한 연산 또는 실시간으로 빨리 실행하지 않아도 되는 코드은 인터럽트 핸들러가 종료된 이후에 처리하도록 구성하면된다. 이 인터럽트 핸들러가 종료된 이후에 처리하는것이 인터럽트 후반부 처리다. Q. 그럼 어떠한 인터럽트 후반부 처리 방법을 사용해야할까? A. 어떠한 인터럽트 후반부 처리를 사용할지를 결정하..