인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

platformpjt02님의 프로필 이미지

작성한 질문수

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)

Undefined instruction exception - Part2: 익셉션 유발 명령어 실행, 익셉션 핸들러 분석

arm mode

작성

·

69

0

안녕하세요

ARM 에서 sys mode 나 undef 모드나 이런 것들은
virtual memory 를 사용하지 못할 것 같은데,

(kernel 이 virtual memory를 지원할 것 같아서요)

그러면 다른 모드는 physical memory 기반 assembly code 로 작성이 되나요?

감사합니다

답변 2

1

김동현 (Austin Kim)님의 프로필 이미지
김동현 (Austin Kim)
지식공유자

Arm 동작 모드 별로 따로 물리 주소 공간을 활용해서 스택을 설정하지는 않습니다.

다만 리눅스 커널이 부팅하는 과정에서 가상 메모리를 설정하는 어셈블리 명령어를 실행합니다.

이후에 리눅스 커널에서 보이는 모든 주소는 가상 주소입니다.

주신 질문에 대해서는 아래 강의 영상을 추가로 제작해서 설명드렸으니, 강의 영상을 참고해주세요.

  • '129번째 강의 - Arm 동작 모드 별로 어떤 주소를 사용하는 것일까'

  • 섹션: Q/A - 수강생 분들 질문

platformpjt02님의 프로필 이미지
platformpjt02
질문자

감사합니다.

몇 가지 추가 질문이 생겨서 올립니다.

강의를 듣다보니 모드별로 스택이 구별되어 있지 않는 것 같네요..?

  1. 그런데, 이 때 프로세스 스택이라는 개념은 인터럽트나 익셉션이 유발되었을 때 현재 돌고 있던 프로세스 인가요? 커널 프로세스로 컨텍스트 스위칭을 한다음에 익셉션이 유발되고 그 스택이 커널 프로세스 공간에 할당되는 방식은 아니겠죠..?

  1. 그리고 현재 프로세스에서 계속 인터럽트나 익셉션이 발생하면 프로그램을 잘 짜도 프로세스 단에서 스택 오버 플로우가 일어날 수 있는 구조 같아 보이는데, 이상한 생각인가요?

  2. 또, 후에 stack 공간 부족 방안에 대해 강의에서 IRQ stack 을 언급하셔서 찾아봤는데 구글링 해도 잘 안보여서요.. 요 개념은 뭔가요? 스택을 모드 별로 운영하지 않는다고 한다면 성립이 안되는 것 아닌가요??

  3. 추가로, EL1h 같은 경우 스택을 따로 쓴다고 언급 하셨는데, 이건 hardware 스펙이 아니라 그러면 커널 단에서 메모리 모델 자체가 따로 떨어져 있어야 되지 않나요?

     ( TRACE32 보니깐 뭔가 자동으로 sp가 바뀌는 것 같더라구요..? 어느 레벨에서 처리가 되는지..?)

  4. Armv7 같은 경우는 스택을 하나로 쓰게 되나요?

  5. 어차피 한 프로세스에서 스택이 계속 쌓이는데 익셉션 레벨별로 스택 포인터가 다르게 존재하는 이유를 잘 모르겠습니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

ARM 아키텍처에서 시스템 모드(sys mode)나 정의되지 않은 명령어 모드(undef mode) 등 여러 가지 모드가 존재하는 이유는 다양한 운영 체제 요구사항에 대응하기 위함입니다. 특히, ARM 프로세서에서는 다양한 변환 레벨과 모드를 통해 효율적으로 메모리를 관리하고, 프로세스 간의 격리를 제공합니다.

ARM 모드와 메모리

  • Sys mode 및 Undef mode: 이러한 특권 모드들은 주로 실행 중인 코드의 특성에 따라 프로세서가 특정 인터럽트나 예외를 처리할 때 진입하게 됩니다. 예를 들어, 시스템 모드는 운영체제의 커널이 실행될 때 사용되며, 이때 주로 물리 주소 공간에 접근할 수 있습니다. 그러므로 sys 모드나 undef 모드는 직접적으로 메모리 주소 변환이나 가상 메모리를 사용하지 않는 경우가 많습니다.

  • 물리 메모리 접근: 일반적으로 커널 모드에서 운영체제는 물리 메모리에 직접 접근할 수 있습니다. 이는 직접 메모리 맵핑을 통해 특정 하드웨어 레지스터를 다루거나, 초기화 시점에 필요한 경우가 많습니다. 반면 사용자 모드에서는 가상 메모리 및 주소 변환을 통해 메모리에 접근합니다.

이러한 특성 때문에 특정 운영 모드에서 메모리를 어떻게 다루느냐가 중요하게 작용합니다. 특히, 시스템 보안 및 안정성 측면에서 커널과 사용자 모드를 분리하여 관리하는 것이 일반적입니다.

플랫폼님께서는 ARM 아키텍처의 메모리 관리와 모드의 특성에 대해 더 깊이 이해하기 위해 ARM의 MMU(Memory Management Unit)와 시스템 모드에 대한 자료를 참고하시면 좋을 것 같습니다.

관련하여 도움될 수 있는 기존 질문 및 답변을 아래에서 참고해 보시면 좋습니다:
- ARMv7 범용레지스터
- 여러 가지 질문

이 답변이 질문자님의 이해를 돕길 바랍니다. 추가적인 질문 사항이 있으면 언제든지 알려주세요. 곧 강사님께서 상세하게 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.