이전에 등록한 다른 프로세스를 예약하기 위해 인터럽트 처리기에서 컨텍스트 전환을 수행 할 수 있습니까? 그렇다면 어떻게해야합니까?인터럽트 처리기에서 컨텍스트 전환을 만드는 방법은 무엇입니까?
답변
정확하게 질문을 이해할 수 있는지 확실하지 않지만 지연 작업을 언급하고 있습니까?
이 당신이 사용자 프로세스를 예약 할 경우, 하나의 방법은 펜던에 (커널 내부) 세마포어의 사용자 스레드 것
등 태스크 릿을 사용하여 ISR의에서 작업을 연기 할 수있는 방법을 설립 찌를된다 ISR의 세마포어
사용자 모드 프로세스에 사용자 모드 irq 핸들러를 등록했습니다. 따라서 인터럽트가 발생하면 직접 핸들러로 이동할 수 있습니다. 나는 현재 프로세스를 내가 등록한 프로세스로 만들고 싶다. – goodjesse
먼저 Ok, 인터럽트 섹션 즉, 상반부에서 컨텍스트를 전환 할 수 없습니다.
그러나 인터럽트 컨텍스트 또는 프로세스 컨텍스트에서 실행되도록 다른 기능을 예약 할 수 있습니다. 이것을 달성하는 방법은 인터럽트 처리기의 하반부입니다.
1 : 등록 된 함수가 인터럽트 컨텍스트에서 실행되도록 예약하려면 Tasklet을 사용하십시오.
DECLARE_TASKLET (my_tasklet, functionname, 0);
irqreturn_t my_tl_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
tasklet_schedule(&my_tasklet);
return IRQ_HANDLED;
}
2 : 프로세스 컨텍스트에서 실행되도록 등록 된 기능을 예약하려면 작업 대기열을 사용하십시오.
INIT_WORK (& my_wq, (void *) (void *)) functionname, NULL);
irqreturn_t my_tl_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
schedule_work(&short_wq);
return IRQ_HANDLED;
}
아니요 당신은 인터럽트 컨텍스트에서 컨텍스트 전환을 할 수 없습니다. 인터럽트 컨텍스트에서 실행중인 작업은 스케줄러가 비활성화되어 있기 때문에 선점 할 수 없습니다.
하반부의 경우 softirq 및 tasklet이 모두 인터럽트 컨텍스트에서 실행되므로 절전 호출과 같은 컨텍스트 전환이 허용되지 않습니다. 그러나 작업 대기열 하단 절반 컨텍스트 전환이 가능합니다. 프로세스 컨텍스트 ksoftirqd에서 실행되기 때문에이 가능합니다.
- 1. 인터럽트 처리기의 컨텍스트 스위치
- 2. x86의 인터럽트 처리기에서 인터럽트 번호를 얻는 방법은 무엇입니까?
- 3. 인터럽트 처리기에서 프로그램을 실행하는 개념 이해
- 4. 체인 전환을 만드는 방법은 무엇입니까?
- 5. 인터럽트 처리기에서 이상한 동작이 발생했습니다.
- 6. 시스템 호출과 인터럽트 컨텍스트
- 7. 인터럽트 처리기에서 사용자 응용 프로그램으로 데이터를 전송하는 방법은 무엇입니까?
- 8. 타이머 인터럽트 대기 프로세스를 만드는 방법은 무엇입니까?
- 9. 게임에서 인터럽트 화면을 만드는 방법은 무엇입니까?
- 10. 임베디드 시스템에서 "인터럽트 컨텍스트 저장"이란 무엇입니까?
- 11. jQuery에서 블록 전환을 만드는 방법
- 12. MapView에서 컨텍스트 메뉴를 만드는 방법은 무엇입니까?
- 13. 아이폰 컨텍스트 배경을 투명하게 만드는 방법은 무엇입니까?
- 14. Twitter에서 컨텍스트 메뉴를 만드는 방법은 무엇입니까?
- 15. 플로팅 컨텍스트 메뉴를 만드는 방법은 무엇입니까?
- 16. Spring 3.0 예외 처리기에서 컨텍스트 정보 얻기
- 17. JavaScript 전환을 만드는 방법
- 18. 처리기에서 활동을 마무리하는 방법은 무엇입니까?
- 19. 부드러운 CSS 전환을 만드는 방법
- 20. div - center를 결국 커버하는 배경색 전환을 만드는 방법은 무엇입니까?
- 21. 코어 애니메이션 : 전환을 뒤집는 페이지를 만드는 방법은 무엇입니까?
- 22. HTML/CSS/JS iOS 스타일 슬라이드 전환을 만드는 방법은 무엇입니까?
- 23. 슬라이더 전환을 변경하는 방법은 무엇입니까?
- 24. Linux에서 사용자 영역의 컨텍스트 전환을 강제 하시겠습니까?
- 25. 인터럽트 컨텍스트 하반부 (Softirq 또는 작업 릿릿)
- 26. Linux의 "현재"태스크에 대한 참조 인터럽트 컨텍스트
- 27. 이벤트 처리기에서 자신을 삭제하는 방법은 무엇입니까?
- 28. 전환을 만드는 중 메시지로드 중
- 29. 이미지간에 전환을 부드럽게 만드는 방법
- 30. 인터럽트 불가능한 스레드를 죽이는 방법은 무엇입니까?
구체적으로 사용자 모드 프로세스에 사용자 모드 irq 처리기를 등록했습니다. 따라서 인터럽트가 발생하면 즉시 사용자 모드 처리기로 건너 뛰고 싶습니다. do_IRQ의 현재 프로세스가 이전에 등록한 프로세스가 아닌 경우 등록 된 프로세스를 실행하기 위해 컨텍스트 스위치를 만들고 싶습니다. – goodjesse