아래의 블로그를 참고하여 글을 작성하였습니다. 제가 공부할 때 참조한 커널 버전은 v2.6.39.4입니다.
http://rousalome.egloos.com/10012152
인터럽트 핸들러
인터럽트 벡터
인터럽트 디스크립터
인터럽트 컨텍스트
앞에서 인터럽트 디스크립터에 대해 간단히 공부해 보았으니, 이제 인터럽트 컨텍스트에 대해서 공부해 보겠습니다.
인터럽트 컨텍스트에 대해 공부하기 전, 컨텍스트란 무엇인가에 대해 먼저 알아보시면 좋을 것 같습니다.
보통 컨텍스트라고 하면 프로세스 컨텍스트를 많이 떠올리게 됩니다. 하지만 컨텍스트에는 크게 두 가지로 구분이 되어있습니다.
● process context
● interrupt context
프로세스 컨텍스트?
프로세스의 중요한 부분 중 하나는 실행 중인 프로그램 코드입니다. 실행 파일에서 이 코드를 읽어 들이고, 프로그램의 주소 공간에서 코드를 실행합니다. 일반적으로 프로그램은 사용자 공간에서 실행됩니다. 프로그램이 시스템 호출을 사용하거나, 예외처리가 발생한 경우, 프로그램은 커널 공간으로 진입합니다. 이런 상황을 “커널이 프로세스를 대신해 실행 중”이라고 하거나 “커널이 프로세스 컨텍스트에 있다” 라고 합니다. 프로세스 컨텍스트에 있을 때에는 current 매크로를 사용할 수 있습니다. 커널이 작업을 끝내면 프로세스는 사용자 공간에서 실행을 계속합니다. 그 사이에 우선순위가 높은 프로세스가 실행 가능한 상태가 되어 스케줄러가 그 프로세스를 먼저 실행하지 않는다면 말입니다.
즉, 프로세스 컨텍스트는 커널 동작 상태 중 하나로, 시스템 호출을 실행하거나 커널 스레드를 실행할 때와 같이 프로세스 대신에 커널이 실행되는 상태입니다. 커널이 프로세스 컨텍스트에 있을 때, current 매크로는 관련 태스크를 가리킵니다. 거기에 프로세스 컨텍스트에 있는 커널과 프로세스가 묶여 있어서 프로세스 컨텍스트는 휴면상태가 되거나, 스케줄러를 호출할 수 있습니다.
인터럽트 컨텍스트?
프로세스 컨텍스트와 비슷하지만, 인터럽트 컨텍스트는 위와는 달리 특정 프로세스와 묶여 있지 않습니다. current 매크로는(인터럽트가 중단시킨 프로세스를 가리키고 있기는 하지만) 특별한 의미가 없습니다. 뒤에 버티고 있는 프로세스가 없어서 인터럽트 컨텍스트는 휴면상태가 될 수 없습니다. 또한 다시 스케줄링이 될 수도 없습니다. 따라서 특정 함수는 인터럽트 컨텍스트에서는 호출할 수 없습니다. 예를 들면, 함수가 실행 중 휴면상태가 될수 있는 함수가 있습니다. 따라서 인터럽트 핸들러에서 사용할 수 있는 함수는 제한됩니다.
・참조
http://www.embeddedlinux.org.cn/essentiallinuxdevicedrivers/final/ch04lev1sec2.html#ch04lev1sec2
https://topic.alibabacloud.com/a/summary-of-process-context-and-interrupt-context_8_8_30142056.html
http://www.embeddedlinux.org.cn/essentiallinuxdevicedrivers/final/ch02lev1sec3.html
https://blog.naver.com/loveall0926/220038217140
http://books.gigatux.nl/mirror/kerneldevelopment/0672327201/ch06lev1sec5.html
'Linux(Centos or RHEL) > RHEL 기초' 카테고리의 다른 글
타이머...? (0) | 2020.05.08 |
---|---|
인터럽트에서의 전반부 처리(Top Half)와 후반부 처리(Bottom Half)? (0) | 2020.04.27 |
컨텍스트 스위칭과 컨텍스트...? (0) | 2020.04.24 |
인터럽트 디스크립터...? (0) | 2020.04.24 |
인터럽트 벡터? (0) | 2020.04.23 |