Inflearn brand logo image

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

jdyj님의 프로필 이미지
jdyj

작성한 질문수

한국에서 제일 쉬운 리눅스 커널 강의

찬란한 프로세스의 삶-5

arm 아키텍처는 4를 빼는 이유가 무엇일까요

해결된 질문

작성

·

96

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 자주 묻는 질문에 혹시 답이 있을 수 있어요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요 찬란한 프로세스의 삶-5 를 듣던 도중 5분 56초 경 arm 아키텍처는 파이프라인을 적용해서 4바이트를 빼야한다고 하셨는데 해당 이유가 궁금합니다.

 

강의 잘 듣고 있습니다

감사합니다.

답변 3

1

ojtube5님의 프로필 이미지
ojtube5
지식공유자

안녕하세요.
아주 심플하게 말슴드릴게요.
파이프라인 때문에 PC는 실행 중인 명령보다 앞선 주소를 담고 있다.

  • 그래서 함수 호출·예외 처리·PC-상대 주소 계산에서 4 바이트(Thumb)보정이 필요하다.
    objdump -D(또는 -d) 출력에서 보이는 주소는 메모리에 실제 적재된 명령어의 주소고,
    런타임에 레지스터로 읽는 PC 값은 파이프라인 때문에 항상 그보다 앞서 있음.

    답변이 늦어서 죄송합니다. ㅠ_ㅠ

0

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

파이프라인 적용을 했다는 것 자체가(?) 이해가 안됐었는데 앞서 AI 답변을 통해 알아들은 바로는 하드웨어의 구조이기 때문에 적용이 되는 것이었고 해당 파이프라인으로 인해 4바이트가 앞서 있다는 부분을 이해했습니다

답변해주셔서 감사합니다 (_ _)

0

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

ARM 아키텍처에서 파이프라인을 적용하여 4바이트를 빼야 하는 이유는 ARM의 명령어 구조와 파이프라인의 동작 특성 때문입니다. 파이프라인은 명령어의 실행 속도를 높이기 위해 여러 명령어를 동시에 처리할 수 있도록 설계되어 있으며, ARM 아키텍처의 경우 명령어 전환 시 오프셋 조정을 통해 올바른 명령어 주소를 설정해야 합니다.

  1. 명령어 길이와 주소 계산: ARM 아키텍처는 대부분의 명령어가 4바이트(32비트)로 고정되어 있습니다. 명령어의 주소를 계산할 때, 현재 실행중인 명령어의 다음 명령어 주소를 지적하기 위해 PC(Program Counter)는 종종 실제 실행 위치보다 4바이트 앞서 있도록 설정합니다.

  2. 하드웨어 파이프라인 구조: 하드웨어 파이프라인의 일부 구현에서는 명령어가 메모리에서 인출된 후 파이프라인에 전달되기 때문에, 실제 명령어가 실행되는 시점에 PC의 값이 수정됩니다. 이를 보상하기 위해 ARM 아키텍처는 명령어 인출 시 4바이트를 뺀 주소로 보정합니다.

이 같은 오프셋 보정은 ARM 프로세서의 효율적인 명령어 실행 흐름을 유지하기 위한 설계상의 특징입니다.

유사한 주제에 대한 추가 설명과 예시는 ARM 아키텍처: 파이프라인과 PC 오프셋에서 확인하실 수 있습니다.

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

jdyj님의 프로필 이미지
jdyj

작성한 질문수

질문하기