작성
·
70
0
안녕하세요. 1강, 2강, 3강 모두 잘 들었습니다. 문득 3강을 듣다가 궁금한 점이 생겨서 이렇게 질문 드립니다.
만약 EL2, EL3에서 동작할 Software Entity를 구현하지 않은 시스템에서 hvc, smc와 같은 명령어를 실행시키면 어떻게 되는지 궁금합니다. EL2, EL3를 구현하지 않았다면 VBAR_EL2, 3 레지스터를 초기화하지 않았을 것 이므로, Exception 발생 시 PC가 이상한 주소를 가리켜 MMU가 Fault를 유발할 것 같다고 생각하고 있는데, 해당 흐름이 맞는지 궁금합니다. 만약 틀렸다면 올바른 흐름은 어떻게 되나요?
SMP와 같은 멀티 코어 프로세서에서 모든 코어에서 실행중인 User App이 각각 Exception을 발생시키면, 모든 코어에서 동시에 Kernel Code가 동작하게 되는 것 인가요?
Kernel, Hypervisor, Secure Monitor는 결국, Exception이 발생하고 이에 대해 HW가 대응되는 동작(SPSR_ELn, ELR_ELn, PSTATE, PC 값 수정)을 수행한 뒤에 Exception Handler의 서브루틴이 실행되는 단순한 소프트웨어 덩어리로 이해해도 괜찮을까요? 즉, User App과 같은 경우는 Linux에서 task_struct라는 구조체로 관리가 되는데 반해, Kernel, Hypervisor, Secure Monitor와 같은 소프트웨어들은 이러한 구조체로 관리되지 않을 것 같아서 문득 궁금해졌습니다.
답변 주시면 감사하겠습니다!
답변 1
0
질문 주신 내용에 대해 우선 아래와 같이 답신 드립니다:
1. 만약 EL2, EL3에서 동작할 Software Entity를 구현하지 않은 시스템에서 hvc, smc와 같은 명령어를 실행시:
=> Arm 코어는 Synchronous Exception을 유발합니다.
2. 모든 코어에서 실행중인 User App이 각각 Exception을 발생시키면:
=> 이해하신 내용이 많습니다. 위의 가정에서 모든 코어에서 (병렬적으로) Kernel Code가 동작합니다.
3. 익셉션 핸들러에 대해서:
3.1 익셉션이 유발되면 처리되는 익셉션 핸들러는 RTOS나 리눅스 커널에 내에 포함되어 있습니다. 익셉션 핸들러는 RTOS나 리눅스 커널를 구성하는 소프트웨어의 기능 중 하나입니다. 하지만, 익셉션 핸들러는 독립적으로 실행(stand alone)되는 소프트웨어 덩어리는 아닙니다.
3.2 리눅스 커널에서는 프로세스를 task_struct라는 구조체로 관리합니다. 마찬가지로 Hypervisor, Secure Monitor에서는 각자 나름대로 구현한 자료구조를 사용해 프로세스를 관리합니다.
혹시 제가 답변드린 내용 중에 궁금한 점이 있으면 다시 질문 주세요. 최대한 자세하게 설명드리겠습니다.
감사합니다.