상기 목적을 달성하기 위하여, 본 발명의 실시예에 따른 비휘발성 메모리가 캐쉬로 사용되는 저장 장치는, 주 저장 매체, 상기 주 저장 매체의 캐쉬로 사용되며, 데이터의 고정 여부에 따라 고정 영역 및 비고정 영역을 포함하는 비휘발성 메모리, 및 상기 비휘발성 메모리에 할당되는 물리 블록을 가상 주소를 통해 관리하는 블록 관리부를 포함한다.
또한, 상기 목적을 달성하기 위하여, 본 발명의 실시예에 따른 비휘발성 메모리가 캐쉬로 사용되는 저장 장치의 관리 방법은, 주 저장 매체의 캐쉬로 사용되는 비휘발성 메모리의 영역을 데이터의 고정 여부에 따라 고정 영역 및 비고정 영역으로 구분하는 단계, 및 상기 고정 영역 및 상기 비고정 영역에 할당되는 물리 블록을 각 물리 블록에 할당되는 가상 주소를 통해 관리하는 단계를 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범수를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
이하, 본 발명의 실시예들에 의하여 비휘발성 메모리가 캐쉬로 사용되는 저장 장치 및 그 관리 방법을 설명하기 위한 블록도 또는 처리 흐름도에 대한 도면들을 참고하여 본 발명에 대해 설명하도록 한다. 이 때, 처리 흐름도 도면들의 각 블록과 흐름도 도면들의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수 있음을 이해할 수 있을 것이다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 흐름도 블록(들)에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 흐름도 블록(들)에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다. 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑제되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 흐름도 블록(들)에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록은 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실행예들에서는 블록들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
도 2는 본 발명의 실시예에 따른 비휘발성 메모리가 캐쉬로 사용되는 저장 장치가 도시된 도면이다.
도시된 바와 같이, 본 발명의 실시예에 따른 비휘발성 메모리가 캐쉬로 사용되는 저장 장치(100)는, 주 저장 매체(110), 주 저장 매체(110)의 캐쉬로 사용되는 비휘발성 메모리(120) 및 비휘발성 메모리(120)의 물리 블록(Physical Block, 이하 PB라 함)을 가상 주소를 통해 관리하는 블록 관리부(130)를 포함할 수 있다.
본 발명의 실시예에서 주 저장 매체(110)는 하드 디스크 드라이브(Hard Disk Drive) 등의 대용량 저장 매체로 이해될 수 있으며, 비휘발성 메모리(120)는 전원이 차단된 경우에도 데이터가 사라지지 않는 플래시 메모리 등으로 이해될 수 있다. 한편, 본 발명의 실시예에 따른 비휘발성 메모리가 캐쉬로 사용되는 저장 장치(100)는 사용자의 명령에 따라 주 저장 매체(110)와 데이터를 송수신하는 호스트(140)와 연결될 수 있으며, 본 발명의 실시예에서 호스트(140)는 블록 관리부(130) 와 연결될 수 있다.
비휘발성 메모리(120)는 데이터가 고정되는 고정 영역 및 데이터가 빈번하게 변경되는 비고정 영역으로 구분될 수 있다. 고정 영역은 주 저장 매체(110)의 캐쉬로 사용되는 비휘발성 메모리(120)에 항상 상주해야하는 데이터가 저장되는 영역을 의미하고, 비고정 영역은 주 저장 매체(110)와 데이터의 이동이 빈번하게 일어나는 영역을 의미한다.
블록 관리부(130)는 비휘발성 메모리(120)에 PB를 할당하는 블록 할당부(131), 할당된 PB를 회수하는 블록 회수부(132), 배드 블록을 관리하는 배드 블록 관리부(133), 전원 차단시 정전 복구를 위한 정전 복구부(134), 비휘발성 메모리(120)의 물리 블록 번호(Physical Block Number, 이하 PBN이라 함)와 가상 블록 번호(Virtual Block Number, 이하 VBN이라 함)의 맵핑 관계를 관리하는 블록 맵핑 테이블 관리부(135), 할당 블록 리스트 및 자유 블록 리스트를 저장하는 리스트 저장부(136)를 포함할 수 있다.
블록 할당부(131)는 리스트 저장부(136)에 저장된 자유 블록 리스트에 따라 비휘발성 메모리(120)의 고정 영역 및 비고정 영역에 PB를 할당할 수 있다. 이때, 자유 블록 리스트는 데이터가 존재하지 않는 빈 PB를 포함하며, 자유 블록 리스트는 각 PB의 사용 빈도(Wear Level)순에 따른 PBN순으로 정렬될 수 있다. 다시 말해서, 자유 블록 리스트는 가장 적게 사용된 PBN이 가장 앞에 위치하게 되며, 가장 많이 사용된 PBN이 가장 뒤에 위치하게 되는 것이다. 이러한 자유 블록 리스트는 일반적으로 비휘발성 메모리(120)의 스패어(Spare) 영역에 저장되어 있으며, 후술 할 정전 복구부(134)는 갑작스런 전원 차단 후 재부팅시에는 스패어 영역에 저장된 값을 통해 자유 블록 리스트를 재구성할 수 있다.
도 3은 본 발명의 실시예에 따른 가상 블록 주소 공간이 도시된 도면이다.
블록 할당부(131)는 비휘발성 메모리(120)의 고정 영역 및 비고정 영역에 PB를 할당할 경우, 해당 PBN에 도 3과 같은 가상 블록 주소 공간의 VBN을 할당할 수 있다. 이러한 가상 블록 주소 공간의 VBN은 고정 영역 및 비고정 영역을 구분하기 위해 서로 반대 방향으로부터 순차적으로 비휘발성 메모리(120)의 PBN과 맵핑될 수 있다. 또한, 가상 블록 주소 공간에서 각 VBN은 다수의 페이지로 이루어질 수 있으며, 가상 블록 주소 공간은 물리 주소 공간에 비하여 큰 크기를 가질 수 있다.
이후, 블록 할당부(131)는 자유 블록 리스트에서 가장 앞에 위치한 PB를 고정 영역 또는 비고정 영역에 할당하게 되며, 할당된 PB의 PBN과 VBN의 맵핑 관계를 기록한 블록 맵핑 테이블을 전술한 블록 맵핑 테이블 관리부(135)에 저장할 수 있다. 이러한 블록 맵핑 테이블 또한 전술한 가상 블록 주소 공간과 마찬가지로 고정 영역 및 비고정 영역에 따라 서로 반대 방향으로 순차적으로 할당될 수 있다. 이때, 블록 할당부(131)는 자유 블록 리스트에서 소정 PB를 고정 영역 또는 비고정 영역에 할당한 후, 리스트 저장부(136)에 저장된 할당 블록 리스트 및 자유 블록 리스트를 갱신하게 된다. 구체적으로, 블록 할당부(131)는 고정 영역 또는 비고정 영역에 할당된 PB는 자유 블록 리스트에서 제거하게 되며, 할당된 PB는 할당 블록 리스트의 마지막에 추가하게 된다.
도 4는 본 발명의 실시예에 따른 할당 블록 리스트 및 자유 블록 리스트가 도시된 도면이다.
도시된 바와 같이, 본 발명의 실시예에 따른 할당 블록 리스트(210)는 PB(230)의 사용 빈도(231)가 가장 적은 PBN부터 순차적으로 할당된 것을 알 수 있다. 또한, 자유 블록 리스트(220)는 PB(230)에서 할당되지 않은 PBN이 사용 빈도(231)순에 따라 정렬된 것을 알 수 있다.
도 5는 전술한 도 4의 할당 블록 리스트의 물리 블록 번호와 가상 블록 번호를 맵핑한 블록 맵핑 테이블이 도시된 도면이다.
도시된 바와 같이, 본 발명의 실시예에 따른 블록 맵핑 테이블(240)은, VBN에 PBN을 맵핑하며, 고정 영역 및 비고정 영역에 따라 서로 반대방향으로부터 순차적으로 맵핑되는 것을 알 수 있다.
한편, 비휘발성 메모리(120)에 데이터가 기록될때에는 데이터와 더불어 스패어 영역에 다양한 메타 데이터가 함께 저장될 수 있다. 본 발명의 실시예에서 메타 데이터는 비휘발성 메모리(120)의 메타 데이터 저장부(121)에 저장될 수 있다. 이때, 메타 데이터 저장부(121)에 저장되는 메타 데이터로는, 논리 블록 주소(Logical Block Address, 이하 LBA라 함), 고정 영역 및 비고정 영역 데이터 지시자, 블록의 사용 빈도, 복구 마크 등을 포함할 수 있다.
이때, LBA는 할당 블록 리스트와 각 PB에 맵핑된 LBA를 통해 갑작스런 전원 차단시 정전 복구를 위해 사용될 수 있으며, 고정 영역 및 비고정 영역 데이터 지시자는 고정 영역 및 비고정 영역을 구분하고 정전 복구를 위해 사용될 수 있고, 사용 빈도는 사용 빈도 순으로 자유 블록 리스트 생성을 위해 사용될 있으며, 복구 마크는 정전 복구를 위한 것으로 할당 블록 리스트와 자유 블록 리스트가 연결되어 함께 비휘발성 메모리(120)에 저장될 경우, 자유 블록 리스트의 처음에 복구 마크를 기록하여 할당 블록 리스트와 자유 블록 리스를 구분하기 위해 사용될 수 있다. 이때, 할당 블록 리스트와 자유 블록 리스트가 연결되어 저장된다는 것은, 실제 할당 블록 리스트와 자유 블록 리스트는 하나의 리스트로 이루어진 것으로 이해될 수 있으며, 복구 마크를 자유 블록 리스트의 처음에 기록하여 할당 블록 리스트와 자유 블록 리스트를 구분하게 된다.
블록 회수부(132)는 할당 블록 리스트내 각 PB에서 유효한 페이지의 수를 산출한다. 이때, 블록 회수부(132)는 유효한 페이지의 수가 가장 적은 PB부터 블록 회수를 수행할 수 있다. 다시 말해서, 블록 회수부(132)는 소정 PB내에 유효한 페이지의 수가 가장 적다라고 하는 것은, 유효한 데이터가 적다는 것으로 판단할 수 있고, 이로 인해 블록 회수부(132)는 유효한 페이지가 가장 적은 PB부터 블록 회수를 수행하게 된다.
블록 회수부(132)는 자유 블록 리스트에서 가장 앞에 위치한 PB을 할당하여 할당 블록 리스트의 마지막에 위치시키고, 블록 회수를 수행하려는 PB내의 유효한 페이지를 자유 블록 리스트를 할당 블록 리스트의 마지막에 위치된 블록으로 이동시키게 된다. 또한, 블록 회수부(132)는 할당 블록 리스트의 마지막에 위치된 PB으로 유효한 페이지를 모두 이동된 후, 블록 회수가 수행된 PB는 사용 빈도순에 따라 다시 자유 블록 리스트에 추가하게 된다.
이때, 블록 할당부(131)는 블록 회수를 위해 할당 블록 리스트에 마지막에 위치된 PB의 PBN에 가상 블록 주소 공간의 VBN를 할당하여 가상 블록 주소 공간을 갱신하게 된다.
도 6은 본 발명의 실시예에 따른 블록 회수 이전의 물리 블록이 도시된 도면이다.
도시된 바와 같이, 할당 블록 리스트(310)는 PBN5, PBN0, PBN7, PBN2를 포함하고, 각 PBN의 유효 페이지 수(311)는 5, 4, 6, 3인 것을 알 수 있다. 또한, 자유 블록 리스트(320)는 PBN3, PBN6, PBN1, PBN4를 포함하고, 블록 맵핑 테이블(330)은 각 VBN에 고정 영역 및 비고정 영역에 따라 서로 반대방향으로부터 할당 블록 리스트(310)의 PBN들이 맵핑된 것을 알 수 있다.
도 7은 본 발명의 실시예에 따라 블록 회수 이후의 물리 블록이 도시된 도면이다. 이때, 도 7은 전술한 도 6에서 PBN0의 유효 페이지는 PBN6으로 이동되고, PBN2 및 PBN5의 유효 페이지는 PBN3으로 이동되어 블록 회수가 수행된 경우를 예를 들어 설명하기로 한다.
도시된 바와 같이, 할당 블록 리스트(310)에서는 전술한 도 6에서 PBN0, PBN2 및 PBN6이 블록 회수가 수행되었기 때문에 PBN0, PBN2 및 PBN6이 제거된 것을 알 수 있으며, 자유 블록 리스트(320)에는 블록 회수가 수행된 PBN0, PBN2 및 PBN6이 사용 빈도에 따라 추가된 것을 알 수 있다.
또한, 블록 맵핑 테이블(330)은 블록 회수가 수행되지 않은 PBN7은 그대로 유지되는 반면, 블록 회수가 수행되어 자유 블록 리스트(320)로부터 할당 블록 리스트(310)에 추가된 PBN3 및 PBN6은 새로운 VBN과 맵핑되었음을 알 수 있다.
배드 블록 관리부(133)는 할당 블록 리스트내의 소정 PB에서 배드 블록이 발생하게 되면, 해당 PB를 할당 블록 리스트에서 제거하게 되며, 제거되는 PB에 기록된 데이터들은 자유 블록 리스트로부터 새로운 PB를 할당받아 이동시키게 된다. 이때, 배드 블록 관리부(133)는 배드 블록에 기록된 데이터를 옮기기 위해 자유 블록 리스트로부터 할당받은 PB를 제거되는 배드 블록의 위치에 삽입하게 된다.
도 8은 본 발명의 실시예에 따라 발생된 배드 블록이 도시된 도면이다.
도시된 바와 같이, 배드 블록 관리부(133)는 할당 블록 리스트(410)의 PBN5에서 배드 블록이 발생한 경우, 자유 블록 리스트(420)으로부터 PB를 새로 할당받게 되며, 새로 할당된 PB로 배드 블록에 기록된 데이터를 이동시키게 된다. 이때, 배드 블록이 제거되기 전에는 블록 맵핑 테이블(430)에는 PBN5가 VBN7과 맵핑되어 있으나, 배드 블록이 제거되면서 새로 할당된 PB에 대한 PBN이 VBN7과 맵핑된다.
도 9는 본 발명의 실시예에 따라 제거된 배드 블록이 도시된 도면이다.
도시된 바와 같이, 배드 블록 관리부(133)는 전술한 도 8에서 할당 블록 리스트(410)에서 배드 블록이 발생한 PBN5에 기록된 데이터를 자유 블록 리스트(420)에서 새로 할당받은 PBN6으로 이동시키고, PBN6을 배드 블록이 발생한 PBN5의 위치에 삽입하게 된다. 이때, 배드 블록이 발생한 PBN5는 자유 블록 리스트(420)에 추가되지 않고 더 이상 할당되지 않게 된다. 또한, 블록 맵핑 테이블(430)에서도 배드 블록인 PBN5와 맵핑된 VBN7을 새로 할당된 PBN6과 다시 맵핑하게 된다.
정전 복구부(134)는 갑작스런 전원 차단시 할당 블록 리스트와 자유 블록 리스트를 통해 정전 복구를 수행할 수 있다. 이러한 정전 복구를 수행하기 위해서는 할당 블록 리스트 및 자유 블록 리스트의 순서를 변경시키는 요인인 블록 회수시와 주 저장 매체(110)로의 데이터 이동시에 변경된 할당 블록 리스트 및 자유 블록 리스트를 비휘발성 메모리(120)의 스패어 영역에 저장하게 된다. 다시 말해서, 할당 블록 리스트와 자유 블록 리스트는 일단 저장되고 나면, 갑작스런 전원 차단시에 그 순서에 동일하게 유지되기 때문에 PB가 할당된 순서를 알 수 있으며, 스패어 영역의 LBA를 바탕으로 가장 최근에 데이터만을 추출하게 된다. 따라서, 블록 회수시 및 주 저장 매체(110)로의 데이터 이동시에만 할당 블록 리스트 및 자유 블록 리스트를 저장하여 용이하게 정전 복구를 수행할 수 있다. 또한, 블록 회수시에 복구 마크를 기록하고, 다시 할당할때는 복구 마크를 지우기 때문에 할당 블록 리스트와 자유 블록 리스트로 구분할 수 있다. 이때, 블록 맵핑 테이블 또한 할당 블록 리스트를 통해 복구할 수 있게 된다.
도 10은 본 발명의 실시예에 따른 블록 할당 방법이 도시된 도면이다.
도시된 바와 같이, 본 발명의 실시예에 따른 블록 할당 방법은, 먼저 블록 할당부(131)가 자유 블록 리스트로부터 고정 영역 또는 비고정 영역에 새로 할당할 PB를 선택하게 된다(S110). 이때, 블록 할당부(131)는 자유 블록 리스트에서 가장 앞에 위치한 PB를 새로 할당하게 된다. 이는 자유 블록 리스트가 사용 빈도순에 따라 정렬되어 있기 때문에 자유 블록 리스트에서 가장 앞에 위치한 PB가 사용 빈도가 가장 적기 때문이다.
블록 할당부(131)는 선택된 PBN에 VBN을 할당하게 된다(S120). 이때, VBN은 고정 영역 및 비고정 영역에 따라 가상 블록 주소 공간에서 서로 반대방향으로부터 순차적으로 할당된다.
또한, 블록 할당부(131)는 PBN과 VBN의 맵핑 관계를 나타내는 블록 맵핑 테이블을 갱신한다(S130).
이후, 블록 할당부(131)는 선택된 PBN을 할당 블록 리스트의 마지막에 추가하고(S140), 자유 블록 리스트에서 선택된 PBN을 제거하게 된다(S150). 이때, 새로 할당되는 PBN을 할당 블록 리스트의 마지막에 추가하는 것은 비휘발성 메모리(120)의 경우 데이터 업데이트시 이전에 쓰여진 데이터를 수정하지 않고 새로 PB을 할당받아 추가하는 방식을 사용하게 된다. 따라서, 새로운 PB가 할당될때마다 할당 블록 리스트의 마지막에 해당 PBN을 추가하는 경우 나중에 쓰여진 데이터가 유효한 데이터로 판단될 수 있기 때문이다. 이는 전술한 정전 복구부(134)에 의해 정전 복구가 수행될 경우 적용될 수 있다.
도 11은 본 발명의 실시예에 따른 블록 회수 방법이 도시된 도면이다.
도시된 바와 같이, 본 발명의 실시예에 따른 블록 회수 방법은, 먼저 블록 회수부(132)가 할당 블록 리스트내의 각 PB에 포함된 유효 페이지 수를 산출한다(S210). 다시 말해서, 소정 PB에 포함된 유효 페이지 수가 적을수록 해당 PB에는 유효하지 않은 페이지가 많은 것이므로 PB을 회수하여 새로 할당시 사용하게 된다.
블록 회수부(132)는 산출된 유효 페이지 수에 따라 블록 회수를 수행할 PB의 순서를 결정한다(S220). 본 발명의 실시예에서는 블록 회수부(132)가 유효 페이지 수가 가장 적은 PB부터 블록 회수를 수행하는 경우를 예를 들어 설명하기로 한다. 또한, 본 발명의 실시예에서는 블록 회수부(132)가 소정 PB내에 포함된 유효 페이 지의 수가 소정 개수 이하이거나 빈 PB가 소정 개수 이하인 경우에 블록 회수를 수행하는 경우를 예를 들어 설명하기로 한다.
블록 회수부(132)는 결정된 순서에 따라 유효 페이지 수가 가장 적은 PB의 블록 회수를 위해 자유 블록 리스트에서 가장 앞에 위치한 PBN을 할당 블록 리스트의 마지막에 위치시킨다(S230).
블록 회수부(132)는 할당 블록 리스트의 마지막에 위치된 PB로 블록 회수를 수행하는 PB의 유효 페이지를 이동시키고(S240), 유효 페이지가 이동되어 빈 PB를 자유 블록 리스트에 사용 빈도에 따라 추가한다(S250). 또한, 블록 회수부(132)는 할당 블록 리스트에 새로 추가된 PBN에 VBN을 할당하여 블록 맵핑 테이블을 갱신하게 된다(S260).
블록 회수부(132)는 블록 회수 대상이 되는 PB의 블록 회수가 모두 완료되었는지의 여부를 판단하고(S270), 블록 회수 대상이 되는 PB의 블록 회수가 완료되지 않은 경우에는 블록 회수 대상이 되는 PB의 불록 회수가 모두 완료될때까지 그 다음 순서의 PB에 대한 블록 회수를 수행하기 위해 자유 블록 리스트의 가장 앞에 위치한 PB를 할당 블록 리스트의 마지막에 위치시키고(S280), 할당 블록 리스트의 마지막에 위치된 PB로 블록 회수를 수행하는 PB의 유효 페이지를 이동시킨 다음 유효 페이지가 이동되어 빈 PB를 자유 블록 리스트에 사용 빈도에 따라 추가한 후, 할당 블록 리스트에 새로 추가된 PBN에 VBN을 할당하여 블록 맵핑 테이블을 갱신하는 과정(S240 내지 S260)을 반복적으로 수행하게 된다.
도 12는 본 발명의 실시예에 따른 배드 블록 처리 방법이 도시된 도면이다.
도시된 바와 같이, 본 발명의 실시예에 따른 배드 블록 처리 방법은, 먼저 배드 블록 관리부(133)가 할당 블록 리스트내에 배드 블록이 발생한 PB가 존재하는지의 여부를 판단한다(S310).
배드 블록 관리부(133)는 블록 할당부(131)를 통해 자유 블록 리스트에서 새로 PB를 할당받게 된다(S320). 이때, 새로 할당되는 PB는 해당 PB의 사용 빈도를 고려하여 자유 블록 리스트의 가장 앞에 위치하는 PB가 된다. 본 발명의 실시예에서는 자유 블록 리스트이 가장 앞에 위치하는 PB를 할당받는 경우를 예를 들어 설명하고 있으나, 전술한 바와 같이 복구 마크가 기록되는 자유 블록 리스트의 가장 앞에 위치하는 PB가 빈번하게 변경되는 것을 방지하기 위해 가장 앞에 위치한 PB의 바로 뒤에 위치한 PB가 할당될수도 있다.
새로 PB가 할당되면, 배드 블록 관리부(133)는 새로 할당받은 PB로 배드 블록이 발생한 PB의 데이터를 이동시킨다(S330).
데이터 이동이 완료되면, 배드 블록 관리부(133)는 데이터가 이동된 PB를 배드 블록이 발생한 PB의 위치에 삽입한다(340).
또한, 배드 블록 관리부(133)는 배드 블록이 발생한 PBN에 할당된 VBN을 배드 블록이 발생한 PB의 위치로 삽입된 PBN으로 변경하게 된다(S350).
도 13은 본 발명의 실시예에 따른 정전 복구 방법이 도시된 도면이다.
도시된 바와 같이, 본 발명의 실시예에 따른 정전 복구 방법은, 먼저 정전 복구부(134)가 갑작스런 전원 차단이 발생한 경우, 비휘발성 메모리(120)의 스패어 영역에 저장된 할당 블록 리스트 및 자유 블록 리스트를 추출한다(S410).
정전 복구부(134)는 추출된 할당 블록 리스트를 통해 각 PB가 할당된 순서를 복구한다(S420). 이때, 정전 복구부(134)는 동일한 LBA를 가지는 PB의 경우에는 가장 나중에 쓰여진 PB가 유효한 것을 판단하게 된다.
또한, 정전 복구부(143)는 할당 블록 리스트를 통해 블록 맵핑 테이블을 복구하게 된다(S430).
상기 '부'는 소프트웨어 또는 Field Programmable Gate Array(FPGA) 또는 주문형 반도체(Application Specific Integrated Circuit, ASIC)과 같은 하드웨어 구성요소를 의미하며, 부는 어떤 역할들을 수행한다. 그렇지만 부는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. 부는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 실행시키도록 구성될 수도 있다. 따라서, 일 예로서 부는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다. 구성요소들과 부들에서 제공되는 기능은 더 작은 수의 구성요소들 및 부들로 결합되거나 추가적인 구성요소들과 부들로 더 분리될 수 있다.
이상과 같이 본 발명에 따른 비휘발성 메모리가 캐쉬로 사용되는 저장 장치 및 그 동작 방법을 예시된 도면을 참조로 하여 설명하였으나, 본 명세서에 개시된 실시예와 도면에 의해 본 발명은 한정되지 않으며 그 발명의 기술사상 범위내에서 당업자에 의해 다양한 변형이 이루어질 수 있음은 물론이다.