플래시 및 RAM : 코드 실행


13

나는 최근에 어셈블리 학습을 시작했고 링커 스크립트와 하드웨어 프로그래밍의 다른 저수준 세부 사항에 대해 알게되었습니다. 나는 또한 나 자신에게 컴퓨터 아키텍처를 가르치고 있고 선을 따라 어딘가에 메모리 모델에 대한 나의 그림이 잘못되었을지도 모른다는 두려움이 생겼다.

내가 현재 이해하는 것에 따르면, 모든 코드와 데이터는 바이너리를 프로세서에 '굽기'한 직후 비 휘발성 메모리에 상주합니다. 휘발성 RAM에는 재설정시 아무것도 포함되지 않습니다. 프로그램이 '실행'을 시작하면 0x0000 주소에서 시작합니다.이 주소는 거의 항상 플래시에서 가장 낮은 주소 (AFAIK)입니다. 따라서 플래시를 CPU 코어에 연결하는 버스에 명령이 래치되며 실제 실행이 이루어지는 곳입니다. 그러나 CPU가 메모리에서 데이터를 검색하거나 저장하는 것에 대해 이야기 할 때 일반적으로 RAM에 대해 이야기합니다. 프로그램 메모리에서도 데이터를 읽고 쓸 수 있음을 알고 있습니다 (AVR 에서이 작업을 보았습니다) 그러나 그것은 평범하지 않습니까? RAM이 ROM보다 빠르기 때문에 데이터를 저장하는 것을 선호합니까?

에 허용 대답 질문은 대부분의 코드 조각 RAM 밖으로 실행할 수 있다고 말한다.

이것은 시작 런타임 코드 (자체적으로 Flash에서 실행 됨)가 모든 프로그램 opcode를 Flash에서 RAM으로 복사해야하고 CPU가 거기에서 opcode를 가져 오도록 Flash의 주소를 RAM을 가리 키도록 매핑해야합니까? 시작시 .data 섹션을 ROM에서 RAM으로 이동하는 프로세스와 비슷합니까?

프로그램과 데이터 메모리가 버스를 공유하는 폰 노이만 아키텍처에서는 이것이 더 단순하다고 생각할 수 있지만 하버드 아키텍처에서는 모든 코드와 데이터가 먼저 CPU 레지스터를 통과해야한다는 의미는 아닙니까?

당신이 아마 짐작할 수 있듯이, 나는이 전체 사업에 약간 혼란 스럽습니다. 항상 더 높은 추상화 수준으로 프로그래밍했기 때문에 이러한 세부 사항에 쉽게 어려움을 겪습니다. 도움을 주시면 감사하겠습니다.


2
단순한 마이크로 컨트롤러에서는 실행하기 위해 프로그램 메모리 (일반적으로 플래시)를 RAM으로 복사 할 필요가 없습니다.
David

RAM이 플래시보다 빠르기 때문입니다. 그러나 전원 손실 후 데이터가 손실되면 비 휘발성 메모리 플래시가 있습니다. 전원이 켜지면 데이터가 플래시에서 RAM으로로드되고 CPU가 작동하기 시작합니다.
Lazar

답변:


13

장치에 따라 다릅니다.

RAM은 플래시보다 빠르게 구축 될 수 있습니다. 이것은 약 100MHz 범위에서 중요해지기 시작합니다.

간단한 마이크로 컨트롤러

작은 느린 마이크로 컨트롤러는 Flash에서 직접 실행됩니다. 이러한 시스템은 일반적으로 SRAM보다 플래시가 더 많습니다.

중급 시스템

장치가 빨라지면 상황이 조금 다릅니다. 미드 레인지 ARM 시스템도이 작업을 수행하거나보다 스마트 한 기능을 수행하는 마스크 ROM 부트 로더를 가질 수 있습니다. 아마도 USB 또는 외부 EEPROM에서 내부 SRAM으로 코드를 다운로드하는 것입니다.

대형 시스템

더 크고 빠른 시스템에는 외부 DRAM과 외부 플래시가 있습니다. 이것은 일반적인 휴대 전화 아키텍처입니다. 이 시점에서 사용 가능한 RAM이 많고 플래시보다 빠르므로 부트 로더가이를 복사하여 실행합니다. 여기에는 CPU 레지스터를 통해 삽질하거나 DMA 장치를 사용할 수있는 경우 DMA 전송이 포함될 수 있습니다.

하버드 아키텍처는 일반적으로 작기 때문에 복사 단계를 방해하지 않습니다. "하이브리드 하버드 (hybrid harvard)"를 사용하는 ARM을 보았습니다. "하이브리드 하버드 (hybrid harvard)"는 다양한 메모리가 있지만 두 개의 다른 페치 단위를 포함하는 단일 주소 공간입니다. 코드와 데이터가 동일한 메모리에 있지 않으면 병렬로 페치 할 수 있습니다. 따라서 Flash 및 SRAM의 데이터 또는 SRAM의 코드 및 DRAM의 데이터 등을 가져올 수 있습니다.


1

RAM은 일반적으로 플래시보다 빠르지 만 80-100MHz 이상의 클럭 속도에 도달 할 때까지는 중요하지 않습니다. 플래시 액세스 시간이 명령을 실행하는 데 걸리는 시간보다 빠르면 중요하지 않습니다.

RAM의 물리적 구조 덕분에 매우 빠른 장치를 만들 수 있습니다. 플래시보다 훨씬 빠릅니다. 이 시점에서 실행 전에 코드 블록을 RAM에 복사하는 것이 좋습니다. 또한 런타임에 코드를 수정하는 등 개발자에게 추가적인 이점을 제공합니다.

프로그램과 데이터 메모리가 버스를 공유하는 폰 노이만 아키텍처에서 하버드 아키텍처에서 모든 코드와 데이터가 CPU 레지스터를 먼저 통과해야한다는 의미는 아닙니까?

반드시 그런 것은 아닙니다. 여기가 가상 주소 지정이 시작됩니다. 원시 하드웨어 RAM 주소를 참조하는 프로그램 코드 대신 실제로 가상 주소 공간을 참조합니다. 가상 주소 공간 블록은 RAM, ROM, 플래시 또는 장치 버퍼 일 수있는 물리적 메모리 장치에 매핑됩니다.

예를 들어, 마이크로에서 주소 0x000f0004를 참조하면 플래시에서 주소 0x0004를 읽을 수 있습니다. 가상 주소 0x000f0004이지만, 물리적 주소는 단지에 0x0004입니다 - 전체 0x000fxxxx 주소 공간이 4KB의 물리적 메모리 장치에 매핑됩니다. 이것은 물론 예일 뿐이며 가상 주소 공간을 관리하고 구성하는 방법은 아키텍처마다 크게 다릅니다.

따라서 "프로그램이 플래시에서 거의 항상 가장 낮은 주소 인 0x0000 주소에서 [...] 실행을 시작합니다"라고 말할 때 정확하지 않을 수 있습니다. 실제로 많은 마이크로 컨트롤러가 0x1000에서 시작합니다.


3
필자가 본 대부분의 플래시 디바이스는 그 시점에서 대기 상태를 요구하기 때문에 100Mhz가 아니라 20-40MHz 정도가 관련성이 있다고 말했다. 대부분의 경우 코드 플래시에는 회로가 포함되어있어 각 페치에서 여러 명령 단어를 가져 와서 많은 종류의 코드에서 플래시로 실행하기위한 "벌금"은 약 5-10 %에 불과하지만 다른 종류의 경우 코드 (예 : 점프 횟수가 많은 경우)의 형벌은 훨씬 더 심할 수 있습니다.
supercat

이는 가상 주소 지정이 아니라 메모리 매핑 된 I / O입니다 (메모리 영역은 주변 장치를 사용하여 I / O에 매핑되며 많은 MCU의 이름은 "정적 메모리 컨트롤러"입니다). 물론 I / O는 다른 메모리에 도달하기 때문에 때때로 I / O로 생각하지 않습니다. 그러나 확실히 가상 메모리 매핑이 아닙니다.
Ben Voigt

1

당신이 말하는 것은 완전히 진실되거나 거짓이 아닙니다. 이에 대한 다른 시나리오가 있습니다.

이는 원시 하드웨어에서 프로그래밍하는지 또는 OS와 함께 설치된 하드웨어에서 프로그래밍하는지에 따라 다릅니다.

범용 컴퓨터에서 실행되는 운영 체제는 HDD에서 코드를 가져와 더 빠른 액세스를 위해 RAM에 저장합니다. 프로세서가 지속적으로 HDD에서 직접 가져 오려고하면 둘 사이의 속도 불일치로 인해 작업 속도가 훨씬 느려집니다. 따라서 더 빠른 액세스를 위해 반복 코드 조각이 저장된 곳에서 RAM이 작동합니다. 또한 프로세서 캐시 메모리에서 훨씬 더 빠른 속도로 사용할 수 있습니다.

이제 마이크로 컨트롤러에서 작업 할 때 칩에서 데이터를 찾는 위치에 따라 달라집니다. 데이터가 정적 인 경우 코드 메모리에 배치하여 RAM보다 코드 메모리보다 훨씬 작은 RAM을 절약 할 수 있습니다. 정적 또는 일부 컴파일러에서 const를 사용하여 데이터 유형을 초기화하면 C 언어로 const 접두어 데이터가 코드 메모리에 저장되거나 RAM에 저장됩니다. 어셈블리에서는 DB (Basic 8051의 경우 바이트 정의)를 사용하여 특정 위치에서 데이터를 초기화합니다. 이제 PIC ARM과 같은 일부 컨트롤러에서도 런타임에 ROM을 쓸 수 있지만 데이터를 가져 오는 데 많은 시간이 걸립니다.

또한 중간 수준의 정교한 컨트롤러에는 부팅 로더 하드웨어가 있으며 컨트롤러 나 프로세서에 시작 코드를 실행할 위치를 알려주거나 실제로 메모리로 분할되는 시작 코드이므로 많은 발전 가능성이 있습니다. 오히려 기존의 RAM ROM 및 메모리의 전체 개념을 어지럽히는 업계의 하이브리드 발전을 말하고 싶습니다. 따라서 기본적으로 혼란이 유효합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.