요즘 배드 블럭 , 배드블록 의 말씀들을 많이 하시는데요.
그리고 배드블록이 생기는 이유가 무엇인지도 질문을 하시는 분들이 종종 있으신데요.
시간관계상 자세한 내용은 시간날때 다시 언급하도록 하고, 간단하하고 이해하기 쉽게 정리좀 해보겠습니다.
1. 일반적인 플래시메모리의 성질
(1) 먼저 지우고난 후에 쓰기
- PC나 기존 서버 및 스토리지에서 사용해왔던 HDD는 데이타를 기록할 때 곧바로 기록하지만, 플래시 메모리의 경우는 데이타를 새로 쓰기 위해서는 반드시 해당 데이타를 기록하기 위한 주소와 영역이 지워저 있아야 합니다. 이를 데이타 쓰기 연산이라고 합니다.
(2) 배드 섹터 , 배드 블록
- 이러한 플래시메모리는 제품이 생산되어 출시될때나 이러한 데이타 쓰기 연산을 수행할때 배드섹터가 발생할 수 있습니다.
- 따라서 특정 섹터에 데이타 쓰기 연산이 일정한 횟수를 넘어서게 되면, 해당 섹터의 데이타는 손상될수 있습니다.
- 섹터(Sector)는 읽고, 쓰는 기본연산단위이고, 블록(block)은 삭제를 수행하는 기본연산단위이며, 섹터로 이루어져 있습니다.
- 섹터 > 블럭 > 플래시메모리, 이렇게해서 플래시메모리가 이루어져 있습니다.
-> 종합해보면, 플래시 메모리는 여러개의 블럭으로 구성되어져 있고, 한개의 블록은 여러개의 섹터로 구성되어 있으며, 물리적인 섹터의 주소에 데이타가 기록되어 있고, 그 섹터주소에 세로운 데이타가 기록되기 위해서는 그 물리적인 섹터를 포함한 블록이 사전에 지워져야 합니다.
2. NAND 메모리의 경우
상기 일반적인 플래시메모리의 성질을 말씀드렸는데, NAND메모리의 경우 Block를 이루고 있는 단위들을 page라고합니다.
즉,
page > block > NAND 메모리
이렇게 구성이 됩니다.
(1) page
512Byte ~ 8KByte 크기
NAND 메모리의 읽기, 쓰기의 기본단위
어러개의 page들이 하나의 block을 구성함
(2) block
64KByte ~ 512KByte 크기를 가짐
NAND 메모리는 여러개의 block로 구성됨
NAND 메모리의 데이타를 지울때는 block단위로만 삭제됨
이와 같이 일반적인 플래시 메모리의 성질과 NAND메모리의 구조를 보시면, block단위로 데이타를 삭제하게 되어 있는데,
이때 플래시메모리(NAND플래시메모리)의 기본적인 성질에 의해, 새로운 데이타를 기록하기 위해서는 물리적인 page를 포함한 block이 사전에 지워져야하고 이러한 현상이 일정한 횟수를 넘게되면 자연스럽게 배드블록이 발생할수 있습니다.
위에서 말씀드리렸다시피 배드블록은 NAND메모리가 만들어질 때 발생하기도 하고, 사용하다가도 발생할수 있습니다.
한번 배드블럭이 발생하면 그 블록에 읽기, 쓰기를 할수 없습니다.
따라서 그 블록은 사전에 읽거나, 쓰거나 하지 않도록 CPU에 알려줍니다.
기타 Bac block과 관련된 용어들과 개념들이 조금 더 있지만, 여기까지만 말씀드리겠습니다.
더욱 구체적으로 아시고자 하시는 분은,
OOB ( Out of Band)
ECC ( Error Correction Code)
BBT ( Bad Block Table)
NAND controller
kernel과 boot loader 사이에 BBT생성 규칙 및 구조
등을 인터넷에서 검색하시면 보다 좋은 내용들을 접하실 수 있을겁니다/
아래 위키도 참조하세요.
http://wiki.openmoko.org/wiki/NAND_bad_blocks