8.1 인터럽트
8.1.1 인터럽트 핸들러
CPU가 커널 코드를 실행 중일 때는 프로세스 문맥이나 인터럽트 문맥으로 구분된다.
프로세스 문맥
프로세스와 관련된 커널 동작임. 프로세스 문맥인 경우는,
1) 유저 영역에서 실행 중인 프로세스 또는 스레드가 시스템콜에 의해 커널에 진입한 경우.
2) 커널 스레드를 실행 중인 경우.
인터럽트 문맥
인터럽트 발생 시 실행되는 커널 동작임.
인터럽트 문맥의 특징은,
1) sleep 불가. 따라서 wait(), kmalloc(), 세마포어, 뮤텍스 등 sleep이 가능한 함수를 사용할 수 없다.
2) 스케줄링 불가. 따라서 schedule() 등 함수를 사용할 수 없다. (타이머 인터럽트 비활성화 상태이기 떄문)
3) 인터럽트 핸들러와 공유되는 자원은 원자 변수나 스핀락으로 보호되어야 한다. (동기화문제)
4) 유저 공간과 데이터 교환 불가.
5) 빠른 처리 필요. 시간이 오래 걸리는 연산은 thread, tasklet, workqueue를 쓰자.
# cat /proc/interrupts
인터럽트 정보를 확인하자.
'한국으로 > 임베디드 리눅스' 카테고리의 다른 글
9.3 커널 동기화 (0) | 2018.07.06 |
---|---|
9.2 지연 작업 (0) | 2018.07.06 |
9.1 시간처리 (0) | 2018.07.06 |
7.3 문자 드라이버 (0) | 2018.07.01 |
7.2 모듈 (0) | 2018.07.01 |
7.1 디바이스 드라이버 (0) | 2018.07.01 |
5.4 파일시스템 (0) | 2018.07.01 |
5.3 메모리 관리 (0) | 2018.06.29 |