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

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

platform01님의 프로필 이미지

작성한 질문수

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

5.4.1 동작 모드별로 스택을 저장 - 설명

리눅스 커널 동작 모드별 스택 포인터 초기화

작성

·

95

0

동작 모드를 변경하는 어셈블리 명령어 부분에서

sp를 모드 별로 초기화 해 주는 데요,

이게 부트 로딩 과정에서 모드 별로 실제 physical memory

를 모드별 스택으로 나누는 과정인가요?

그리고 모드별로 아예 physical memory를 따로 쓰게 되는 것인가요?

그리고 모드별로 #0 #12 .. 이렇게 작게 스택을 지정하는 것 같은데.. 너무 작지 않나 하는 생각이 듭니다.

뭔가 잘못 이해하고 있는 것 같습니다. 정정 부탁드립니다

답변 2

0

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

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

이후에 리눅스 커널에서 보이는 모든 주소는 가상 주소입니다. 따라서 동작 모드 별로 사용되는 스택은 모두 가상 메모리를 사용해서 설정합니다.

각 동작 모드 별(IRQ, Abort, Undefined mode)로 스택 사이즈가 작은 이유는, 언급된 동작 모드는 리눅스 커널에서는 사용하지 않기 때문입니다. 추가적인 설명은, 아래 강의 영상을 추가로 제작해서 설명드렸으니, 강의 영상을 참고해주세요.

  • '165번째 강의 -리눅스 커널 동작 모드별 스택 포인터 초기화'

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

0

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

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

리눅스 커널에서의 동작 모드와 스택 포인터 초기화에 관한 질문을 해주셨네요. 이 부분은 임베디드 시스템에서 매우 중요하고 복잡할 수 있는 주제입니다. 아래에 관련된 몇 가지 설명과 함께 비슷한 질문이 논의된 게시물을 안내드리겠습니다.

모드별 스택 포인터 초기화

  1. 동작 모드와 스택 분할:

    • ARM 아키텍처는 다양한 CPU 모드를 지원하며, 각 모드는 독립된 스택을 가질 수 있습니다. 이는 시스템이 예외 상태에 들어가거나 서브루틴 호출 시 격리된 메모리 공간을 사용하여 안전하게 복귀할 수 있게 합니다.
    • 각 모드별로 스택을 분할한다는 것은 물리적 메모리 공간을 각 모드의 스택 용도로 예약하여 스택 오버플로우와 같은 문제를 방지하려는 설정입니다.
  2. 스택 크기:

    • ARM 시스템에서의 스택 크기는 시스템의 요구 사항에 따라 다르며, 예를 들어 인터럽트 모드는 적은 스택만 필요할 수 있습니다. 스택 크기를 작게 설정하는 부분은 주의 깊은 메모리 관리의 일환으로 볼 수 있습니다.
    • 설정된 스택 크기는 시스템의 성격에 따라 안전하게 조정되어야 하며, 최소한의 필요만 충족시키는 것이 최적입니다.
  3. 물리적 메모리 사용:

    • 항상 별도의 물리적 메모리를 사용하지는 않으며, 일부 경우 스택을 위해 메모리를 공유할 수도 있습니다. 그러나 시스템 안정성과 분리된 작동을 위해 가능하다면 물리적 메모리를 독립적으로 사용하는 것이 좋습니다.

관련 게시물

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.