본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/17장: 메모리 모델

(11)
[Arm 아키텍처] DSB 배리어(Barrier) (Arm 강의) Arm 아키텍처에서 제공하는 배리어 중에서 DSB 배리어도 중요합니다. DSB 는 DMB와 ISB의 기능을 합쳐 놓은 배리어입니다. 더 자세한 내용은 아래 강의에서 확인할 수 있어요.
[Arm 프로세서] ISB 배리어 (Arm 강의) Arm 아키텍처에서 제공하는 배리어에서 ISB 배리어도 많이 사용됩니다. ISB 배리어를 사용하면 메모리에 접근하는 STR, LDR 명령어 이외의 다른 명령어 간의 순서를 보장합니다. 더 자세한 내용은 아래 강의에서 확인할 수 있어요.
[Arm 아키텍처] DMB 배리어(Barrier) (Arm 강의) Arm 아키텍처에서 제공하는 배리어 중의 기본은 DMB 배리어입니다. DMB 배리어를 사용하면 메모리에 접근하는 STR, LDR 명령어 간의 순서를 보장합니다. 더 자세한 내용은 아래 강의에서 확인할 수 있어요.
[Arm 아키텍처] 배리어(Barrier) 소개 (Arm 강의) 메모리 리오더링을 방지하려면 메모리에 접근하는 명령어의 순서를 보장해야 합니다. 메모리 리오더링으로 소프트웨어의 버그가 발생할 수 있기 때문입니다. 이번 강의에서는 배리어(Barrier)를 소개합니다.
[Arm 아키텍처] 메모리 모델과 배리어는 왜 알아야 할까 (Arm 강의) 메모리 모델과 배리어는 시스템 소프트웨어 개발자가 알아야 할 고급 지식입니다. 아래 링크에서는 메모리 모델과 배리어를 왜 알아야 하는지 설명합니다:
[Arm프로세서] 메모리 리오더링 예시 이번에는 다음과 같은 예시 명령어를 보면서 메모리 리오더링에 대해 더 자세히 알아봅시다. 그림 17.4 메모리 리오더링의 예 01 ~ 04번째 줄은 모두 스토어 명령어입니다. 01 ~ 04번째 줄 명령어가 실행될 때, X1 레지스터의 값이 0x10000이라고 가정합시다. 또한 명령어가 실행될 때 워드의 단위는 8바이트입니다. 먼저 01번째 줄을 분석하겠습니다. X1 레지스터가 0x10000이니 0x10000 주소에 X0 레지스터의 값(8바이트 크기)을 저장합니다. 01번째 줄이 실행되면 각 바이트는 '1'로 업데이트됩니다. 이는 '1'로 표기된 박스에 해당합니다. 이어서 02번째 줄을 봅시다. 같은 0x10000 주소에 2바이트 사이즈의 데이터를 저장합니다. 여기서 01번째 줄에서 실행된 0x10000 ..
[Arm프로세서] 어드레스 의존성이란? Arm 프로세서 내부에서 성능을 최적화하기 위해 종종 어셈블리 명령어의 순서를 바꿔 실행한다고 설명했습니다. 이런 동작을 수행하기 전에 먼저 각 명령어 간에 의존성이 있는지 체크합니다. 명령어 간 의존성이 있다면 명령어의 순서를 지켜 실행합니다. 다음 어셈블리 명령어를 보면서 어드레스 의존성에 대해 배워 봅시다.  그림 17.2 의존성이 있는 로드(LDR) 명령어의 예시 위 코드는 2개의 로드 명령어로 구성돼 있습니다.  먼저 01번째 줄을 봅시다. X1 레지스터가 0x30000을 담고 있고 0x30000 주소에 0x10000이 있다고 가정합시다. 01번째 줄은 X1 레지스터가 담고 있는 주소에 있는 데이터를 X0 레지스터에 로딩하는 동작입니다. 이어서 02번째 줄은 X0 레지스터의 값에서 8을 더한 결..
[Arm프로세서] 메모리 리오더링 소개 대부분 시스템 소프트웨어 개발자는 C 언어로 프로그래밍합니다. C 언어로 작성된 코드는 컴파일러에 의해 기계어로 변환되는데, 이 과정에서 컴파일러는 성능을 최적화하기 위해 코드를 나름대로 재해석합니다. 컴파일러에 의해 최적화된 코드를 보면 "참 컴파일러는 똑똑하구나, 어떻게 코드를 알아서 생성했을까!"란 생각이 듭니다.  C 코드를 컴파일할 때 컴파일러 최적화 옵션을 적용하는데, 최적화 레벨이 높을수록 컴파일러는 더 높은 수준의 최적화를 수행합니다. 하지만 컴파일러는 프로그래머가 작성한 코드를 최적화하는 과정에서 종종 사고를 치기도 합니다. 코드를 최적화하다 보니 선을 넘어 프로그래머가 의도하지 않은 코드를 생성하기 때문입니다. 예를 들어, 함수를 인라인으로 처리하면서 심벌이 제거되기도 합니다.  컴파일..