flash 에서 sd 메모리로 복사하는 이유는 무엇인가요??
글쓴이: fat81 / 작성시간: 목, 2008/01/31 - 4:56오후
안녕하세요~
궁금한 것이 많은 공학도 입니다.
흔히 부트로더에서 nor flash 메모리에 저장된 커널을 sd 메모리의 시작 번지에 복사하고, 나중에 pc 값을 sd 메모리의 시작 주소로 바꾸는 데요.
굳이 커널 코드를 sd 메모리에 저장하지 않고, flash 에서 바로 실행하는 방법을 사용하면 안되는지 궁금합니다. 이런 방법을 XIP 라고 하던데요.
제가 나름대로 생각해볼때는, 커널이 수행도중에 코드나 변수 값이 바뀌거나 했을 때, flash 안에 커널이 있다면, flash r/w 를 해야하지만, sd 메모리에 있다면 간단하게 어셈 명령어(mov 등)를 이용해서 간단하게 바꿀수 있기 때문인 것 같은데요.
이건 어디까지나, 저의 생각이구요.
정확한 이유는 모르겠습니다.
아시는 분들의 답변 부탁드립니다.
Forums:
당연히 됩니다.
말씀하시는 대로 의 이유도 있지만 그때그때 다릅니다.
부트로더 자신도 프로그램이고 Flash에 가깝다고 해야 할까요^^
ROM인 경우도 있고 Flash인 경우도 있으니... 어떻든
전원이 꺼져도 지워지지 않으니 맞지요.
같은 이유로 해서 프로그램 코드는 램에는 넣지 못합니다.
기본적으로 프로그램 (data)을 읽어서. 실행 가능 영역에 넣고.
실행하게 됩니다(PC 옮김)
PC에서도 OS가 Ram에 있지 못하고 HDD,FDD,CD등에 존재하고 RAM으로 불러들여와 수행합니다.
처음 부팅할때엔 ROM BIOS에 있는 프로그램이 수행되고 이넘이 OS가져오고 하는 행동을 한후에
PC를 RAM으로 옮기고 자신은 뒤로 사라지죠. ^^
말씀하신 부트로더 입장에서는 Flash를 하드디스크 처럼 보조기억 장치로 본겁니다.
램이 빠르다고 말씀하시는 분도 있겠고.
연속된 번지라고 말씀하시는 분도 있을겁니다.
프로그램을 지우고 다른 프로그램을 로드해서 하기 편해서 라고 하시는 분도 있겠군요.
마이컴에서는 아예 FLASH를 코드영역으로 RAM을 변수 영역으로 영역 구분하여 쓰기도 합니다.
결론은 개발자 맘입니다.
명령만 제대로 읽을 수 있다면 어디던 상관 없으니...
그때 환경에 최대한 맞게 돈 덜 들어가고, 속도 빠르면 되는 것이죠 :-)
답변이 되었는지 모르겠네요.
dram이 어느 정도
dram이 어느 정도 용량이 되는 규모가 있는 시스템이라면 속도 문제가 맞다고 봅니다.
nor flash도 프로그램 실행은 가능하지만 dram에 비해서는 느립니다.
조금이라도 빠르게 동작하기를 바라는 시스템에서는 dram에 복사해서 실행하는 것이 맞죠.
sd 메모리라고 해서 SD
sd 메모리라고 해서 SD flash 메모리인줄 알았는데 그게 아니라 SDRAM 을 말하는 것이 었군요..
플래시(EEPROM)은 DRAM에
플래시(EEPROM)은 DRAM에 비해 대역폭이 딸립니다.
요즘나오는 pc용 DRAM은 대역폭이 수기가 정도 되지만 플래시는 수십메가 정도죠.
그리고 플래시는 쓰기 횟수 제한 있습니다. 메모리만큼 쓰기가 많이 이루어진다면 문제가 생길 소지가 있죠.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
말씀하신 XIP라는
말씀하신 XIP라는 기능은 NOR flash에서만 가능합니다.
NOR flash의 경우 byte단위로 read가 가능하기 때문에 NOR flash에 있는 instruction들을 직접 fetch해서 사용하는 것이 가능합니다.
하지만 NAND flash의 경우 XIP를 쓸 수 없습니다. NAND flash는 Block 단위로 액세스를 해야 하기 때문에 flash에서 instruction 단위로 데이터를 가져올 수 없고 instruction을 포함하고 있는 block 단위로 메모리를 가져와야 하기 때문입니다. 이 때 직접 실행하는 instruction외에 다른 instruction은 RAM에 저장을 해 두어야겠죠.. 하드웨어 적으로 구현이야 할 수 있겠지만 구지 그럴 필요도 없습니다.
그리고. NOR flash에 커널을 올리고 실행을 한다고 해서 변수들도 flash에 저장되는 것은 아닙니다. 물론 const로 선언된 변수와 같이 BSS영역에 올라가는 경우 변경될 필요가 없기 때문에 Flash memory에 직접 저장하는 경우도 있지만 Stack이나 일반적인 전역변수의 경우 Flash에 저장하지 않고 RAM을 이용하여 IO를 하게 됩니다. ELF 파일을 읽어서 Memory map을 보시면 확인하실 수 있을껍니다.
여기까지만 얘기하면 NAND flash보다는 NOR flash가 훨씬 좋다라고만 생각할 수 있는데, NAND의 장점도 있습니다. 결론부터 말씀드리자면 NAND flash의 경우 대용량 데이터 처리에는 훨씬 유리합니다. 대용량이라는 말의 기준이 애매하기는 하지만 순수하게 Storage만으로만 봤을 때 일정 크기 이상의 I/O에는 NAND가 훨씬 유리합니다. 큰 데이터를 처리할 때, NOR flash는 작은 단위로 여러번 write를 해야하지만 NAND flash는 linear한 데이터를 한번에 쓸 수 있기 때문입니다.(이 점은 좀 가물가물하네요..) 이 점에 대해서는 NAND flash controller와 NOR flash controller의 BUS가 어떻게 다른지 조금 찾아보시면 나올껍니다.
도움이 되셨길..
댓글 달기