플래시 메모리 개론

 

 

요즘 SSD(솔리드 스테이트 디스크) 해서 이슈가 많은 같아서 이와 관계된 이모저모를 소개해본다.

따로 조사한 바는 없고 그냥 일하다가 체득한 짬빱의 나열이므로
.
틀린 부분이 있으면 댓글 바랍니다
.

기획 블로깅이나 정성 블로깅 같은 거는 하지 않는 성격이라 친절한 사진이나 도해, 근사한 짤방 따위는 기대하지 마셔요
.

대충 생각을 해도 PPT 꾸미면 두시간짜리 강의가 같은데.


강의용 기고용으로 불펌을 금합니다.

지식 자체야 뻔히 알려져 있는 것들이니 누가 뭐라 하겠어요
.
신고하고 퍼가십시오
~
사실 것도 없는데 저작권 운운 하겠어요? ㅎㅎㅎ

소등심 사주시면 세미나 판은 해드릴지도 -_-;
(
공대 2학년 1학기용 -_-; 이상은
-_-)





-- 1. NOR / NAND ?

사용된 주요 게이트 때문에 특성지어진 이름
.


-- 2. NOR / NAND  
차이점?


NOR
프로그램이 실행될 있는 어드레스를 가지지만, NAND 단순 스토리지로서의 어드레스만 가진다.
따라서 NOR로는 임베디드 시스템에서 바로 부팅도 있고 프로그램이 적재될 수도 있지만
,
NAND
단순 스토리지 역할만 하게 된다. 플로피 디스크나 USB메모리를 생각하면 된다
.
플로피 디스크나 USB 메모리도 부팅하고 프로그램 실행되지 않는가
?
그렇다. 허나 얘네들은 램으로 이동 적재된 프로그램이 실행된다는 점에서 다르다
.

NOR
비싸다 -_-; NAND 싸다.


NAND 공장 생산된 신제품부터 배드블럭이 포함되어 나올 있다.
그러나 요즘 칩을 두루 살펴본 공정이 발전한 결과인지 배드블럭을 찾아보긴 힘들다
.
보통 CF카드 같은 것은 죄다 NAND라고 보면 된다
.



-- 3. NAND
에서 프로그램을 다이렉트로 실행하는 기술들은?


삼성의 일부 ARM들은 스테핑스톤이라는 특이한 기술을 채용하고 있다.
수준에서 부팅을 위한 4KB정도를 자동으로 NAND에서 읽어서 부팅용 스테핑 스톤으로 적재해준다
.
4KB
코드는 나머지 프로그램 본체를 NAND 부터 읽어서 프로그램을 실행하게 해준다
.

또한 CE .NET 에는 BINFS 라는 특수한 파일 시스템을 이용하여
,
개발자가 일일이 NAND -> RAM 으로 퍼올리는 일을 필요없이 프로그램을 실행 가능하게 해준다
.

일반 PC 경우야 MSC(매스 스토리지 클래스) 라는 기술이 채용되어 있기도 하고
,
이미 아키텍쳐 수준에서 지원하는 부분이라서 사용자들은 고민없이 NAND 부터 프로그램을 실행할 있다
.

+)
추가된 내용

삼성칩의 경우 NAND 전용 H/W 기능을 제공하여 대단히 편한 장점이 있다.
이제 기능 없이 땅부터 파라면 숨부터 같다. 아니지만
-_-;
MSC
우리가  USB 메모리들을 PC 꽂을 "이동식 디스크" 보이게 하는 일련의 기술로 생각하면 된다
.
MSC
하나 얹기 위해 개발자들은 오늘도 삽을 들어야 한다. 누클리어스꺼 모듈로 사주세요; 하고 싶은 그들의 속마음
.


-- 4. NAND
Spare (스페어) 영역이 있다는데?


그렇다. 스페어 영역은 데이터를 저장하는 영역 외에 일부의 작은 영역을 두어 다른 용도로 사용한다.
예를 들면 트랜잭션, FTL 등으로 사용한다
.
프로그래머의 상상력에 따라 다른 용도로도 얼마든지 사용가능하다
.
1page
 512Byte NAND 경우 16Byte 스페어 영역이 존재한다
.



--5.
미공개


부분은 특허 조사 공개하도록 하겠다. 당연히 특허가 있는 알고 써재낄라고 했더니 없는 같아요.
이러니까 있어뵈는데 사실 별건 아니에요. 특허 검색 해보고 없으면 특허나 써야겠슴다
.




---6.
트랜잭션이 뭐니?


고급 파일 시스템의 저널링 기능까지는 아니지만,
낸드나 노어에 파일을 저장 중에 전원 불량이나 예기치 않은 일로 인하여
,
데이터 기록작업이 뻗어버렸을 때를 대비한 장치이다
.
가장 흔한 스킬로는 갱신될 블럭을 새로 쓰지 않고 복사본을 쓰면서 모두 써지면 써졌다고 최종적으로 기록하는 방식이다
.
"
써졌다 플래그" ON 되지 않은 데이터는 기록중에 무언가 불량이 났다고 보고 되돌릴 있는 기능을 제공한다
.
CE .NET 4.2
에서는 TFAT이라는 트랜잭션 기능이 추가된 FAT 지원했었다
.
(T
tiny 인걸로 알았다가 알고보니 transaction 이라고.. 기억하고 있는데 틀리다면 지적바랍니다
.)



--- 7.
저널링이 뭐다냐?


자세한 나도 모르고 파일 시스템이 깨졌을 , 단편화가 심해져서 아작 났을 스스로 복구 하는 기능정도로 이해하면 같다.
원래는 XFS 정도가 가장 유명한 모양이다. 잘은 모른다
.
여튼 돌아와서 이쪽 NOR, NAND 위한 저널링 파일 시스템으로는 JFFS, JFFS2등이 가장 유명하고 이미 많이 구현되어 있다
.

저널링을 떠나서 NOR NAND 위한 심플 FS로서 YAFFS등도 있다
.
파일시스템이라는 거창한 이름까지 붙이지 않는다면야 개발자들이 얼렁뚱땅 만든 구조도 많이 돌아다닌다
.
리눅스의 경우 MTD 라는 레이어가 아주아주 되어 있다
.
일전에 일했던 회사에서는 따로 캐릭터 디바이스를 만들어서 cp /dev/flchar > /dev/myapp 식으로 왕창 복사하는 초저수준의 작업을 적도 있긴 하다
. -_-;

파일시스템 여담을 하나 하자면 주고  OS/2 WARP 사서 썼던 경험을 있다
.
녀석 파일 시스템은 HPFS 라고 진보된 FS라고 기억한다
.
바이너리 트리로 구성된 파일 기술 정보를 가지고, 테이블을 플래터의 중앙에 위치시킨다고 같다
.
가장 기억 나는 것은 하드 디스크 소리였다. 하드 디스크 소리가 달라졌던 것이다
.
티티..티티티.. 하는 것이 보통의 FAT 소리라면, HPFS 찌이잉~ 소리로 기억을 한다. (아님 말구
-_-)
아마도 OS 주요 파일 배치가 플래터의 중앙에서 가장 가까운 곳에 적절하게 위치한 것은 아닐까
?
하드의 팅팅 소음은 헤드 이송시에 발생하므로 헤드 이송 구간이 최적화 되었다면 소음이 달라질만도 한다
.
여튼 넘어가자 -_-; (아님 말구
-_-)




--8. IDE
SATA스펙 때문에 NAND등을 이용한 SSD 속도는 발전해봐야 HDD 비슷할 것이다?


아니다.  HDD RPM 올라가고 기술적으로 발전한다 하여도 NAND등을 결코 넘어설 있는 벽이 있는데.
그것은 바로 seek time이다
.
HDD
구조상 헤드가 데이터 위치를 찾아다니며 기계적으로 움직여야 한다
.
요즘 하드야 대부분 조용하지만 동동동동~ 틱틱틱틱하는 소음은 대부분 하드의 헤드가 돌아다니는 소리라고 보면 된다
.
일련의 작업은 대단히 기계적인 작업이어서 전기적인 신호로서 모든 것을 처리하는 NAND등의 스피드를 넘어설 수는 없다
.
NAND
읽기, 쓰기 속도는 아직도 느린편이긴 하지만 seek time만은 하드에게 추월당하는 일은 없을 것으로 예상된다
.


--9.
내구한도 ?


노어 낸드 둘다 일정 영역에 대하여 쓰기/지우기를 반복하면 피로파괴가 일어난다.
따라서 이에 대한 신뢰성 걱정이 많다
.
초기 노어는 셀에 대하여 10만회의 개런티를 했다
.
요즘 노어는 셀에 대하여 1만회밖에 하기는 녀석도 있다. 그렇다면 문제가 크짆아
?
허나 FTL 기술의 발전과 함께 최근 IT 제품의 싸이클이 매우 짧은 관계로 무리없이 용인되는 수준이라고도 여겨진다
.
실제로도 데이터 쉬트에서 밝히는 일부 노어의 데이터 보존 개런티는 10년정도이다
.
10년은 아무짓도 해도 10년만 간다는 뜻이다
.
하지만 역시 정말정말정말 최악의 경우를 뜻한다고 보면 같다
.

그냥 추정인데, 삼성전자에서 최근 발표하기를 부도체에 전하를 저장하는 방식을 통하여 집적도를 끌어올린 중대 사건이 있었는데
,
기술을 통하면 전하들이 인접셀로 이동하면서 데이터가 붕괴되는 일이 적을 같은 생각이 들기도 한다
.
이런 기술로 인하여 데이터 보존 기간이 비약적으로 있지 않을까? (이건 정말 그냥 추정이다
)


---10.
내구한도 회피 방법론.


이와 관련한 대부분의 특허는 이스라엘의 M-System 사에서 많이 가지고 있으며.
삼성전자에서도 많이 가지고 있다
.
주로 통칭 FTL(Flash Translation Layer)이라고 불리며 이러한 내구한도를 극복하는 기술을 담고 있다
.
리눅스 소스에는 FTL, NFTL 이라 하여 이미 소스가 공개되어 있다
.
비지니스 모델이 특이한데 M-System 경우 소스는 공개, 이용도 자유, 만들어진 물리적인 제품은 로얄티로 알고 있다. (확인 사항 아님
)
삼성전자의 경우 포켓스토어 시리즈로 불리다가 최근에 II 버전이 XSR 이라는 이름으로 발표되었다
.
구조와 어댑테이션 레이어를 조금 살펴본 결과에 따르면 매우 우수하다
.
만들어져있다. 설계이념도 훌륭하다. 여러 OS 여러 디바이스에서 여러 상황에서 유연하게 사용가능하도록 되어있다
.


--11. FTL
도대체 무슨 일을 하는가?


대부분 비슷하다. NAND 어드레스를 뜻하는 블럭 넘버를 0-1023 있다고 치자. FTL 적용되면 블럭들을 모두 돌려서 쓴다.
섞어 쓰기도 하고 순차적으로 돌려쓰기도 한다
.
예를 들어 FAT 시스템이라면 파일 정보를 기록되는 FAT 0 블럭쯤에 기록될 것이다
.
이러한 시스템에서 특정 파일 1바이트만 바뀌어도 0 블럭의 FAT 수정되어야 하며 0 블럭은 짧은 시간내에 파괴 것이다
.
FTL
적용되면 이러한 블럭을 마구 돌려쓴다
.
가장 쉬운 알고리즘이라면 0 블럭의 FAT 다음 파일 수정시 1 블럭으로 이동되는 메커니즘을 가질 것이다
.
내부는 이보다는 복잡해지겠지만 기본 이념은 같다
.
여기서 FTL 발짝 나아가서 특정 블럭이 파괴되었을 경우 해당 블럭을 대체해주는 기술까지 가지고 있다
.
전체 영역의 일부분을 보조 영역으로 잡아놓고 배드 블럭이 발생한 경우 보조 영역에서 대체하여 사용하게 해준다
.
이런 일련의 기법들을 wear leveling  이라고 하는 모양이다. 별로 쓰는 단어.


참고로 ECC 좋아함. ECC까지 가면 이미 막장아닌가연? -_-;





---12.
노어, 낸드, EEPROM에서 지우는 것은 무엇을 의미하는가?


상식적이라면 보통 0x00 으로 바뀌는 것을 지운다고 생각할 터이지만 이쪽 계통은 반대이다.
특별한 스펙의 경우도 있을지 모르겠지만 보통은 삭제 작업을 하고 나면 0xFF 된다
.





--13.
노어, 낸드는 특정 사이즈만큼 지우고 써야 한다는데?


그렇다.

노어와 낸드는 기본적으로 지우고 써야 한다. 0x01 써있던 셀에 0xf0 바로 쓰면 어떻게 될까
?
아마도 에러를 내거나 0x00 것이다
.
이는 노어와 낸드의 기본적인 속성이 1->0 으로는 가능하나 0->1로는 불가능하기 때문이다
.
여튼 노어와 낸드는 삭제 단위를 가지고 있다
.
인텔의 노어들은 주로 128KB, 256KB단위로 지우고 있다
.
낸드들은 블럭단위가 지우는 사이즈이다. 사실 페이지 단위로 지워지기도 하고 데이터쉬트에 따라 여러가지 방법이 있다
.
부트블럭 플래시라고 단위를 세분화하여 지울 수도 있다
.
이런 쪽은 개발자들이 닥쳤을 참고하면 된다
.
여튼 지우는 단위가 저러하니 1바이트만 고쳐도 128KB바이트를 통째로 지우고 다시 써야 하는 일이 생기는
,
상당한 비효율이 아닐 없다. 허나 이런 비효율을 회피하는 스킬은 있다
.


---14. 0XFF -> 0XFE -> 0X0E
가능한가연?


가능하다. 위에서 항상 지우고 써야 한다고 했으나 비트를 이렇게 까나가는 경우에 한하여
많은 플래시들이 위의 작업이 가능하다. 기본적으로 플래시가 1->0 가능하기 때문에 그러하다.
하지만 어떤 데이터 쉬트를 보자면 이런 행위는 내구한도를 대단히 저해하므로 절대 사용하지 말라고 써있기도 하고
.
왠지 꽁수 같으니 무슨 일이 일어날지 모르는 양산형 제품에서는 사용하지 말도록 하자
-_-;


---15.
기타 롬의 종류는?


참고로 EEPROM 100만회 정도까지도 쓰고 지우기를 보장한다고 한다.
자외선을 쏘여서 지우는 과거의 EPROM 있었으나 최근에는 사용하지 않는 하다
.

이더넷 카드에 맥어드레스등 소용량의 데이터를 저장하는데에는 시리얼 EEPROM 사용한다
.
주로 인터페이스는 I2C 사용하고 정말 작은 사이즈를 가진다
.

PC
롬바이오스등에 사용하는 EEPROM 일반적인 어드레스 핀을 가지는 EEPROM이다
.
개인적인 경험에 따르면 EEPROM ESD, 그러니까 정전기나 전기적 쇼크에 특히 취약한 느낌이다
.

마이크로마우스 대회등에서 대회만 나가면 프로그램이 죽어요 하는 징크스들은 특히 그런 경우가 많았다
.
쇠로 핀셋을 사용하다 사소한 전기적 쇼크들로 인하여 지워진 경우들을 목격한 적이 있다
.

공장에서 찍어나오는 롬은 마스크 롬이라고 한다. 공장에서 모든 내용이 기록되어 나온채 끝이다
.
OTP
라고 하여 (원타임프로그래밍? 정도의 약자) 한번만 있는 롬도 있다
.
보통 저가형 마이컴 내부에 삽입되어 번만 프로그램을 기록할 있다
.
제품을 위한 펌웨어가 완성되면 OTP 기록하여 출하하는 방식이다
.
(
참고 : 보안업계에서 OTP 원타임패스워드를 뜻한다. 가장 흔한 OTP 은행용 보안카드이다. 비밀번호가 쓰면 변경되는 방식이다
)

사소한 경험 하나를 추가하면 EEPROM 읽는 방법은 짬밥이 양반들은 이투피롬이라고 읽는 같다
.
경험 없는 개발자들이 이이피롬이라고 읽는 느낌이다
.
I2C
짬밥과 관계없이 아이투씨, 아이스퀘어씨, 하여 읽는 방법이 혼재된 느낌이지만
. -_-;


---16. DOM
뭐니?


예전에 M-System, 국내 업체 한빛, 맥산등에서 찍어내던 IDE슬롯등에 바로 삽입가능한 NOR메모리였다.
실제로도 하드로 잡히고 하드로서 동작하는 수메가 바이트 짜리의 초소형 유사 하드라고 보면  된다
.

요즘의 SSD 버퍼 자체적인 알로리즘과 칩을 탑재하여 고속, 고신뢰성을 구현하는 같다. (최신 뉴스는 모르겠다
)
예전의 제품들은 NOR 사용하여 용량도 작았고, SSD수준의 버퍼나 처리 ASIC 없었으므로 쓰기 작업이 상당히 느렸던 같다
.
어플라이언스 장비나 키오스크용으로 타게팅 되어
,
지오드, 트랜스메타등의 산업용 펜티엄3급의 일체형 보드와 함께 사용되었 같은데 이후 어떻게 되었는지는 모르겠다
.

. 그리고 당시 배터리 + SDRAM 조합의 하드디스크 대체용 장치들도 국내에 출시 기사가 있었는데
.
제품 실물 구경은 못해봤다
-_-;



---17. NAND
메모리를 양산으로 돌리는 기법은?


낸드는 칩마다 지문인양 배드블럭을 서로 다르게 가지고 있으므로 양산시에 1:1 덤프 뜨는 방식으로는 대량 복제가 불가능하다.
따라서 전용의 알고리즘과 장비가 필요하게 된다
.
요즘 낸드들은 대부분 배드블럭이 0 가깝지만, 아직 완전히 개런티 하지는 않으므로
,
양산 대응의 뭔가가 있어야 한다. (배드블럭 0 개런티 하는 칩도 있다고 하며 모델넘버 자체가 다르다고 하는데 모르겠다
)
이와 대응해서는 eetools 라는 회사와 DATA IO라는 회사가 유명하다
.
eetools
국내에서 컴패스21 이라는 곳에서 서비스. DATA IO 까먹었다
.
삼성전자의 XSR 알고리즘을 서비스 해주기도 한다
.
전자전에서 일제 장비도 봤는데 회사에 비해서 좋은 점은 모르겠고 설명도 받았다
-_-;
회사는 서비스 해주는 같고, 장비를 구입해본 회사와 좋다고 여겨지는 회사가 있으나 여기서 소개는 생략한다
.


---18. SSD
미래는?


요즘 SSD기술의 안쪽을 모르니 단언하여 말하기는 어려우나.
이미 알려져 있는 기술의 조합만으로도 미래는 대충 예상해 볼만 하다
.

첫번재는 전용 컨트롤러 ASIC 이미 많이 등장했으리라고 여겨진다
.
FTL
이나 등등 일련의 알고리즘은 ASIC에서 H/W 수준에서 초고속으로 해결해줄 것이다
.
느린 속도 문제는 대용량 버퍼를 두어 해결 것이다
.
여전히 지우기/쓰기 속도는 HDD보다 현저히 느리므로 버퍼단에서 처리를 예정인데 여기에도 문제는 있다
.
버퍼가 128MB라고 할때 129MB짜리 파일을 쓰고 지우면 느려질까
?
아니다 실제로는 버퍼가 차는 동안에도 작업은 수행되므로 보다는 여유가 있긴 하다
.
허나 버퍼로만 때우려는 노력은 무모하고 다른 스킬들이 있다
.
NAND
병렬로 달아서 순차적으로 처리하고, 버스트 모드에 시퀀설 기록 모드에 엎어치고 메치고 하는
,
대용량 SSD 있어서 속도와 신뢰성 문제를 극복하는 아이디어는 이미 많이 나와 있다
.
(
제품 레벨에서 구현되었는지는 써보고 이쪽 자료를 찾아본 적이 없어서 모르겠다
.)

그러고 보니 예전에는 인텔 NOR 16비트 묶어서 32비트로 사용하던 것이 관행인 시절도 있었다
.
NOR
하니까 생각나는데 이쪽 계통은 상태읽기 작업동안 메모리 전체가 레지스터화 되는 불편함이 있었다
.
보통 S/W 리셋시에 먹통이 되는 고약한 버그를 양산..

 

반응형
Posted by austin
,