인터럽트 중첩 관련

무명 2019.04.05 16:55 조회 수 : 813

인터럽트 중첩 관련해서 몇가지 질문이 있습니다.

 

 

(1) 프로세스가 실행 중에 인터럽트가 발생하면

현재 CPU 레지스터들을, 지금까지 실행중이던 프로세스에 할당되어 있는 커널 스택(혹은 인터럽트 스택)에 저장하고

인터럽트 핸들러를 실행하잖아요.

 

서로 다른 인터럽트가 계속 떠서 인터럽트가 중첩되면

인터럽트 핸들러가 실행중일 때 레지스터들도 또 백업해놓아야 할 것 같은데

(처음에 실행중이었던) 인터럽트된 그 프로세스에 할당되어 있는 커널 스택에 계속 저장되나요?

 

프로세스가 실행중이던 상태(레지스터)를 백업해놓는 곳은 그 프로세스에 할당되어 있는 커널 스택인데

인터럽트가 실행중이던 상태(레지스터)를 백업해놓는 곳도 (인터럽트된) 프로세스에 할당되어 있는 커널 스택인가요?

 

다시 말하면,

A 프로세스 -> I 인터럽트 -> J 인터럽트 -> K 인터럽트

이렇게 중첩되었다면

A 프로세스가 중단될 시점의 레지스터 백업 데이터와

I 프로세스가 중단될 시점의 레지스터 백업 데이터와

J 프로세스가 중단될 시점의 레지스터 백업 데이터가

모두 A 프로세스에 할당되어 있는 커널 스택에 저장되는지 입니다.

 

커널 스택이 아니라 인터럽트 스택을 사용하는 경우와 사용하지 않는 경우가 다르면

구분해서 설명 부탁드립니다.

 

커널 스택은 프로세"스"마다 할당되어 있고 인터럽트 스택은 프로세"서"마다 할당되어 있는 거죠?

 

 

(2) 프로세스가 리스케줄링 되는 대표적인 경우는

프로세스가 이벤트를 기다리기 위해 프로세스 스스로 대기 상태로 진입하는 경우와

타이머 인터럽트 핸들러에서 스케줄링하는 경우죠?

 

그러면

A 프로세스가 실행 중일 때 I 인터럽트가 발생했고

I 인터럽트 핸들러가 실행 중일 때 타이머 인터럽트가 발생해서

I 인터럽트 핸들러가 실행을 중단하고 타이머 인터럽트 핸들러로 넘어갔습니다.

이 때, 스케줄링이 일어날 수 있나요?

스케줄링이 일어나서 다른 프로세스가 A 프로세스를 선점해버리면 안될 것 같은데

스케줄링이 일어나지 않도록 되어 있나요?

 

같은 맥락에서,

I 인터럽트 핸들러가 실행을 마치고 복귀할 때,

반드시 처음 인터럽트 되었던 A 프로세스로만 복귀하나요?
다른 프로세스로 복귀되는 경우가 없을까요?

 

감사합니다.

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22249
518 arm a53 아키텍처는 cache size를 configuration 할 수 없나요? [1] mnth 2023.12.03 279
517 리눅스 스케줄링에서 SCHED_FIFO에 대해 문의드립니다. [1] Neo2013 2023.02.09 802
516 러스트 언어나 리눅스커널+러스트 어떻게 생각하세요? 해볼만 할까요? [2] 김기오 2022.11.28 930
515 __no_granule_support에서의 wfe, wfi 중복 사용 [2] min 2022.10.03 176
514 TLBi operation 질문 [5] 컴퓨터 2022.09.18 400
513 Nested Interrupt on ARM64 [7] 아띨라 2022.07.24 680
512 ARM64 CPU Context Switch [2] 아띨라 2022.07.24 509
511 mmap후 파일 올리기 [3] 읏짜 2022.01.13 854
510 [질문-해결됨] compaction 후 기존 PTE 매핑에 뜬금 스왑 엔트리가 나와요! [12] 이파란 2021.05.17 1913
509 iamroot선배님들의 조언 부탁드립니다 [2] 이파란 2021.04.15 776
508 오드로이드에 관해 akqk13012 2021.03.26 445
507 critical section에 대한 커널 코드 검증 방법 문의 [7] file mnth 2021.01.09 1470
506 인터럽트 발생 관련해서 질문 드리고 싶습니다. [6] 코딩의노예 2020.07.07 946
505 RCU 관련해서 질문 하나 드려봅니다. [2] 코딩의노예 2020.07.03 652
504 멀티스레드 시간측정 질문 file 뇨뇸 2020.05.03 522
503 리눅스 소스 분석 관련 질문 [4] AlanWalker 2020.04.22 742
502 16기 리눅스 커널 스터디 39주차 질문입니다. [6] rnsscman 2020.03.22 721
501 ___reserved_mem_reserve_reg 관련 질문 [4] DEWH 2020.03.09 12857
500 16기 리눅스 커널 스터디 33주차 질문입니다. [5] rnsscman 2020.02.08 358
499 setup_machine_fdt() -> fixmap_remap_fdt() 질문입니다. [2] daeroro 2019.12.24 316
XE Login