KR20120125950A - 플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템 - Google Patents

플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템 Download PDF

Info

Publication number
KR20120125950A
KR20120125950A KR1020120043660A KR20120043660A KR20120125950A KR 20120125950 A KR20120125950 A KR 20120125950A KR 1020120043660 A KR1020120043660 A KR 1020120043660A KR 20120043660 A KR20120043660 A KR 20120043660A KR 20120125950 A KR20120125950 A KR 20120125950A
Authority
KR
South Korea
Prior art keywords
write
block
data
address
size
Prior art date
Application number
KR1020120043660A
Other languages
English (en)
Inventor
히데아끼 오꾸보
게이따 가와무라
도시후미 니시우라
히로아끼 야마조에
Original Assignee
소니 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 소니 주식회사 filed Critical 소니 주식회사
Priority to KR1020120043660A priority Critical patent/KR20120125950A/ko
Publication of KR20120125950A publication Critical patent/KR20120125950A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Abstract

본 발명은 플래시 메모리 장치에 대해서, 가비지 컬렉션(GC)의 발생 빈도를 효과적으로 줄임으로써 기록 속도의 향상을 도모함과 함께, 호스트 장치측에서 기입 데이터 송출용의 버퍼 메모리의 사이즈를 확대하지 않더라도 고속 기록의 실현이 도모되도록 하기 위한 것으로, 블록 사이즈 미만의 데이터가 시퀀스 기입되도록 제어하고, 블록 레벨과 페이지 레벨의 2종의 관리로 데이터 기입을 행하는 종래의 플래시 메모리 장치에서는, 기입 데이터가 블록 사이즈와 일치하는 경우에는 블록 레벨 관리에 의한 기록을 행하고 블록 사이즈 미만인 경우에는 페이지 레벨 관리에 의한 기입을 행하기 때문에, 예를 들면 블록 사이즈 미만의 데이터에 대해서 그들이 논리 어드레스적으로 연속하고 있는 개개의 데이터라고 해도, 그들 데이터는 페이지 레벨 관리에서 기입되게 된다. 이에 반해서 본 기술에 따르면, 블록 사이즈 미만의 데이터에 대해서 시퀀스 기입을 할 수 있고, 결과 GC의 발생 빈도를 저하시켜 기록 속도의 향상이 도모된다. 또한 종래에서는, 호스트 장치측에서 블록 사이즈보다도 작은 사이즈의 버퍼 메모리만 구비되어 있는 경우에는 페이지 레벨 관리에 의한 기입이 선택되게 되지만, 본 기술에 따르면, 호스트 장치측에서 블록 사이즈 미만의 데이터만 송출할 수 있는 경우라도 페이지 레벨 기입을 피해서 시퀀스 기입을 할 수 있고, 이 면에서도 GC 빈도가 저하해서 기록 속도 향상이 도모된다.

Description

플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템{FLASH MEMORY DEVICE, MEMORY CONTROL DEVICE, MEMORY CONTROL METHOD, AND STORAGE SYSTEM}
본 발명은, 플래시 메모리를 구비한 플래시 메모리 장치와, 플래시 메모리에 관한 메모리 제어 장치와 그 방법, 및 스토리지 시스템에 관한 것이다.
예를 들면 동화상이나 정지 화상의 촬영을 행하는 디지털 카메라 장치 등에는, 촬영 데이터의 기록 미디어로서 플래시 메모리를 탑재한 메모리 카드를 이용하는 것이 있다. 특히, 동화상 기록에서 이용되는 메모리 카드에 관해서는, 데이터 기록의 고속화가 요구되고 있다.
플래시 메모리를 탑재한 메모리 카드에서는, 플래시 메모리 상의 데이터를, Block-Level(블록 레벨) 관리와 Page-Level(페이지 레벨) 관리의 2종류의 관리 방법에 의해 관리하게 되어 있다.
주지와 같이, Block-Level 관리에서는, 플래시 메모리의 블록 사이즈에 따른 단위로 데이터를 관리하고, Page-Level 관리에서는 플래시 메모리의 페이지 사이즈에 따른 단위로 데이터의 관리를 행한다. 블록은 복수의 페이지로 구성되고, 따라서 「블록 사이즈>페이지 사이즈」이다.
여기서, Page-Level 관리에서는, Block-Level 관리보다도 작은 데이터 사이즈 단위에서의 관리가 가능하지만, Block-Level 관리와 Page-Level 관리의 각각에서 메모리 카드에 필요한 워킹 메모리를 비교한 경우에는, Page-Level 관리 쪽이, 보다 큰 사이즈의 워킹 메모리를 필요로 하는 것으로 되어 있다. 따라서, 메모리 카드 내부의 플래시 메모리를 모두 Page-Level 관리에서 관리하기 위해서는, 큰 워킹 메모리가 필요하게 되어 버린다. 이 때문에, 플래시 메모리를 구비하는 메모리 카드에서는, 일부의 데이터를 Page-Level 관리에 의해 관리하고, 그 이외의 데이터를 Block-Level 관리에서 관리하게 되어 있다.
구체적으로, 플래시 메모리를 구비한 메모리 카드에서는, 호스트 장치(예를 들면 상기 디지털 카메라 장치) 측으로부터 기입을 요구받은 데이터의 사이즈가 작은 경우에는, 수신한 데이터를 Page-Level 관리에서 관리하고, 데이터 사이즈가 큰 경우에는 Block-Level 관리에서 관리를 행하게 된다.
또한, 호스트 장치로부터 기입된 작은 사이즈의 데이터의 총량이, Page-Level 관리에서 관리 가능한 사이즈를 초과한 경우에는, 일부의 데이터를 Page-Level 관리로부터 Block-Level 관리로 관리 단위를 변경시킨다. 소위, 가비지 컬렉션(Garbage Collection)이다(예를 들면 하기 각 특허 문헌을 참조).
특허 문헌 1 : 일본 특허 출원 공개 제 2007-193883호 공보 특허 문헌 2 : 일본 특허 출원 공개 제 2007-58840호 공보
그러나, 가비지 컬렉션의 발생은, 메모리 카드의 퍼포먼스(기록 속도)를 저하시키는 요인이 된다. 따라서 고속 기록의 실현을 위해서는, 가비지 컬렉션의 발생 빈도를 가능한 한 줄이는 것이 바람직하다.
또 한편, 플래시 메모리의 블록 사이즈는, 플래시 메모리의 세대가 진행할 때마다 확대화하는 경향이 있다. 블록 사이즈를 대로 하면, 그만큼, 보다 고속인 데이터 기입을 실현할 수 있기 때문이다.
단, 이와 같이 블록 사이즈를 대로 해서 보다 고속인 기입을 실현하고자 한 경우에는, 기입 데이터의 송출측인 호스트 장치측에서는, 이것에 대응시켜 데이터 송출용의 버퍼 메모리의 사이즈를 크게 해야 한다. 확대한 블록 사이즈에 상기 버퍼 메모리의 사이즈가 충분하지 못한 경우, 그 호스트 장치와의 조합으로는, 메모리 카드측에서 블록 레벨 관리에 의한 데이터 기입을 행할 수 없어, 페이지 레벨 관리 하에서의 기록이 되어 버리고, 결과로서 고속 기록의 실현이 도모되지 않게 된다.
본 기술은 상기 문제점을 감안하여 이루어진 것으로서, 플래시 메모리를 구비한 메모리 장치(플래시 메모리 장치)에 대해서, 가비지 컬렉션의 발생 빈도를 효과적으로 줄임과 함께 기록의 고속화를 도모함으로써, 호스트 장치측에서 기입 데이터 송출용의 버퍼 메모리의 사이즈를 확대하지 않더라도 고속 기록의 실현이 도모되도록 하는 것을 그 과제로 한다.
본 기술의 플래시 메모리 장치는, 플래시 메모리부를 구비함과 함께, 상기 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 제어부를 구비하는 것이다.
또한, 본 기술의 메모리 제어 장치는, 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 것이다.
또한, 본 기술의 스토리지 시스템은, 플래시 메모리부와, 상기 플래시 메모리부에의 데이터의 기입을 지시하는 지시부와, 상기 기입 지시부에 의해 기입이 지시된, 상기 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 제어부를 구비하는 것이다.
본 기술에 따르면, 블록 레벨(Block-Level) 관리에 의한 기록을 행할 수 없는 블록 사이즈 미만의 데이터에 대해서, 플래시 메모리부에 시퀀스 기입을 행할 수 있다. 여기서, 시퀀스 기입이란, 기입 대상 데이터를 소정의 기입 단위로 대상 물리 블록에 대해서 논리 어드레스순으로 기입하는 것을 의미한다. 블록 레벨 관리와 페이지 레벨(Page-Level) 관리의 2종의 관리에서 데이터 기입을 행하는 종래의 플래시 메모리 장치에서는, 기입해야 할 데이터가 블록 사이즈와 일치하는 경우에는 블록 레벨 관리에 의한 기록을 행하고, 블록 사이즈 미만의 데이터에 대해서는 페이지 레벨 관리에 의한 기입을 행하게 되어 있다. 이 때문에, 예를 들면 블록 사이즈 미만의 데이터에 대해서, 그들이 논리 어드레스적으로 연속하고 있는 개개의 데이터라고 해도, 그들 데이터에 대해서는 페이지 레벨 관리에 의한 기입이 행하여지고 있었다. 이것에 대해서, 시퀀스 기입을 가능하게 한 본 기술에 따르면, 블록 사이즈 미만의 데이터에 대해서 시퀀스 기입을 할 수 있다. 즉, 예를 들면 상기한 바와 같은 케이스에 있어서, 페이지 레벨 관리 하에서의 기입과 같이 개개의 데이터가 서로 다른 물리 블록으로 분산해서 기록되게 되는 것을 효과적으로 방지할 수 있다.
즉, 시퀀스 기입을 가능하게 한 본 기술에 따르면, 블록 사이즈 미만의 데이터에 대해서 페이지 레벨 관리에 의한 기입 밖에는 선택 방법이 없는 종래와 비교하여, 가비지 컬렉션의 발생 빈도를 효과적으로 줄일 수 있다. 결과, 종래보다도 기록 속도의 면에서 퍼포먼스 향상이 도모된다.
또한, 상술한 바와 같이 종래에서는, 호스트 장치측에서 블록 사이즈보다도 작은 사이즈의 버퍼 메모리만 구비되어 있는 경우에는, 호스트 장치측은 블록 사이즈 미만의 데이터만 송출할 수 있다. 따라서 이 경우도, 데이터가 논리 어드레스적으로 연속되고 있어도, 종래의 플래시 메모리 장치에서는 페이지 레벨 관리에 의한 기입이 선택되어 버리게 된다.
이에 반해서, 시퀀스 기입을 가능하게 한 본 기술에 따르면, 호스트 장치측에서 블록 사이즈 미만의 데이터만 송출할 수 있는 경우에도, 그들 데이터를 시퀀스 기입하는, 즉, 소정의 물리 블록에 논리 어드레스순으로 기록할 수 있다. 이것에 따르면, 페이지 레벨 관리에 의한 기록이 행하여지는 경우와는 달리, 가비지 컬렉션의 발생 빈도를 저하시킬 수 있어, 이런 점에서도 퍼포먼스 향상이 도모된다.
이 기술에 따르면, 종래보다도 가비지 컬렉션의 발생을 효과적으로 줄이는 것에 의해 기록 속도의 향상을 도모할 수 있다.
또한, 데이터 전송용의 버퍼 메모리 사이즈가 작은 호스트 장치로부터의 기입이 행하여지는 경우에도, 고속인 데이터 기록을 실현할 수 있다.
도 1은 실시 형태의 스토리지 시스템의 구성을 도시한 도면.
도 2는 플래시 메모리에서 사용하는 물리 어드레스의 개요를 도시한 도면.
도 3은 논리 섹터 어드레스, 논리 페이지 어드레스, 논리 블록 어드레스의 개요를 도시한 도면.
도 4는 Block-Level 관리 블록의 데이터 구조를 도시한 도면.
도 5는 Page-Level 관리 블록의 데이터 구조를 도시한 도면.
도 6은 시퀀스 기입 관리 블록의 데이터 구조를 도시한 도면.
도 7은 관리 정보 블록의 데이터 구조를 도시한 도면.
도 8은 Block-Level 관리 테이블의 데이터 구조를 도시한 도면.
도 9는 Page-Level 관리 테이블의 데이터 구조를 도시한 도면.
도 10은 Page-Level 맵의 데이터 구조를 도시한 도면.
도 11은 시퀀스 기입 블록 관리 테이블의 데이터 구조를 도시한 도면.
도 12는 무효 데이터 블록 관리 테이블의 데이터 구조를 도시한 도면.
도 13은 호스트 장치측으로부터 플래시 메모리 장치측에 행하여지는 기입 지시의 일례를 도시한 도면.
도 14는 Write 커맨드 실행 처리의 플로우차트.
도 15는 도 14에 도시한 논리 블록내 기입 처리(S103)로서 실행해야 할 구체적인 처리 내용을 도시한 플로우차트.
도 16은 블록 레벨 기입을 위한 처리 내용을 도시한 플로우차트.
도 17은 시퀀스 기입 블록의 가비지 컬렉션에 의한 물리 레벨에서의 데이터의 이행의 모습의 예를 모식적으로 도시한 도면.
도 18은 도 17에 도시하는 데이터 이행 전에 있어서의 시퀀스 기입 블록 관리 테이블, Block-Level 관리 테이블, Page-Level 관리 테이블, Page-Level 맵의 내용을 예시한 도면.
도 19는 도 17에 도시하는 데이터 이행 후의 시퀀스 기입 블록 관리 테이블, Block-Level 관리 테이블, Page-Level 관리 테이블, Page-Level 맵의 내용을 예시한 도면.
도 20은 시퀀스 기입과 그 후의 시퀀스 기입 블록 관리 테이블의 내용을 예시한 도면.
도 21은 페이지 레벨 기입을 위한 처리 내용을 도시한 플로우차트.
도 22는 Page-Level 관리 블록의 가비지 컬렉션에 의한 물리 레벨에서의 데이터의 이행의 모습의 예를 모식적으로 도시한 도면.
도 23은 도 22에 도시하는 데이터 이행 전에 있어서의 Block-Level 관리 테이블, Page-Level 관리 테이블, Page-Level 맵의 내용을 예시한 도면.
도 24는 도 22에 도시하는 데이터 이행 후의 Block-Level 관리 테이블, Page-Level 관리 테이블, Page-Level 맵의 내용을 예시한 도면.
도 25는 Page-Level 관리 블록에의 기입으로서 행하여지는 데이터 기입의 예와, 그 후의 Page-Level 맵의 갱신 실행 후의 Page-Level 맵의 예를 도시한 도면.
도 26은 제2 실시 형태에 있어서의 호스트 장치가 플래시 메모리 장치에 시퀀스 기입을 실행시키는 경우에 있어서 행하는 기입 지시의 예를 도시한 도면.
도 27은 시퀀스 기입 개시 커맨드 대응 처리의 내용을 도시한 플로우차트.
도 28은 시퀀스 기입 종료 커맨드 대응 처리의 내용을 도시한 플로우차트.
도 29는 제2 실시 형태의 경우에 있어서의 논리 블록내 기입 처리의 내용을 도시한 플로우차트다.
이하, 본 기술에 따른 실시 형태에 대해서 설명한다.
또한, 설명은 이하의 순서로 행한다.
<1. 제1 실시 형태>
[1-1. 스토리지 시스템의 구성]
[1-2. 데이터 관리 방법에 대해서]
[1-3. 제1 실시 형태로서의 메모리 제어 방법]
<2. 제2 실시 형태>
<3. 변형예>
여기서, 제1 실시 형태는, 호스트측이 플래시 메모리 장치측에 Write 커맨드로 지정한 기입 데이터에 관한 논리 어드레스와 데이터 사이즈를 바탕으로, 플래시 메모리 장치 자신이 데이터의 기입 방법을 바꾸는 실시 형태이며, 제2 실시 형태는, 호스트측이 Write 커맨드로 플래시 메모리 장치에 기입 방법의 절환을 명시적으로 통지하고, 이것에 따라 플래시 메모리 장치가 데이터의 관리 방법을 바꾸는 실시 형태로 된다.
<1. 제1 실시 형태>
[1-1. 스토리지 시스템의 구성]
도 1은, 실시 형태의 스토리지 시스템의 구성을 도시한 도면이다.
실시 형태의 스토리지 시스템은, 플래시 메모리 장치(1)와 호스트 장치(5)를 갖고 구성된다.
호스트 장치(5)는, 플래시 메모리 장치(1)에 대해서 Read 커맨드, Write 커맨드를 송신해서 플래시 메모리 장치(1)에 기록된 데이터의 읽어내기, 데이터의 기입을 실행시키는 장치가 된다.
본 예의 경우, 호스트 장치(5)는 예를 들면 정지 화상이나 동화상을 촬영해서 그들 데이터의 기록/재생을 행하는 디지털 카메라 장치인 것으로 한다.
플래시 메모리 장치(1)는, 도면과 같이 플래시 메모리(4), 외부 인터페이스(2) 및 메모리 컨트롤러(3)를 구비하고 있다.
플래시 메모리(4)는, NAND형의 플래시 메모리로 되고, 메모리 컨트롤러(3)에 의한 제어에 의해 데이터의 기록(기입)/재생(읽어내기)이 행하여진다.
플래시 메모리(4) 내에는, 유저 데이터 기록 영역(4A)과 관리 정보 기록 영역(4B)이 존재한다. 유저 데이터 기록 영역(4A)에서는, 데이터가 기입된 물리 블록으로서, 후술하는 Block-Level(블록 레벨) 관리 블록(30), Page-Level(페이지 레벨) 관리 블록(40), 시퀀스 기입 관리 블록(50)의 3종류의 블록이 존재하게 된다.
또한, 관리 정보 기록 영역(4B)에서는, 이들 Block-Level 관리 블록(30), Page-Level 관리 블록(40), 시퀀스 기입 관리 블록(50)을 관리하기 위한 데이터를 기록하는 관리 정보 블록(60)이 존재하게 된다.
메모리 컨트롤러(3)는, CPU(Central Processing Unit)나 ROM(Read Only Memory), RAM(Random Access Memory)을 구비한 마이크로컴퓨터로 구성되고, 예를 들면 상기 ROM에 저장된 프로그램에 따른 처리를 실행함으로써, 플래시 메모리 장치의 전체 제어를 행한다.
구체적으로는, 외부 인터페이스(2)가 수신한 커맨드의 해석이나, 후술하는 각종 관리 정보를 이용한 논리 어드레스로부터 물리 어드레스로의 변환 처리, 플래시 메모리(4)에 대한 데이터의 기입과 읽어내기, 플래시 메모리(4)에의 데이터 기입 시의 ECC(Error Correction Code) 데이터의 생성?부가, 판독 시의 ECC 에러 정정 처리 등을 행한다.
외부 인터페이스(2)는, 호스트 장치(5)와 메모리 컨트롤러(3) 사이에서 각종 데이터의 송수신을 가능하게 하기 위해서 설치되고, 호스트 장치(5)로부터의 커맨드 수신이나 데이터의 송수신 등을 행한다.
여기서, 호스트 장치(5)는, 플래시 메모리(4)의 데이터 판독 시에는, 메모리 컨트롤러(3)에 대해서, Read 커맨드로서, 읽어내기 데이터가 존재하는 선두 논리 어드레스(적어도 논리 블록 어드레스 및 논리 페이지 어드레스의 조로 특정됨)와 데이터 사이즈를 지정한 커맨드를 송출한다. 이것에 따라 메모리 컨트롤러(3)는, 지정된 논리 어드레스로부터 지정된 사이즈의 데이터를 읽어내고, 이것을 호스트 장치(5)에 대해서 송출한다.
또한, 호스트 장치(5)는, 데이터 기입 시에는, Write 커맨드로서, 데이터의 기입처의 선두 논리 어드레스와 데이터 사이즈를 지정한 커맨드를 송출한다. 이것에 따라 메모리 컨트롤러(3)는, 지정된 논리 어드레스에 지정된 사이즈의 데이터가 기록된 상태로 되도록, 플래시 메모리(4)에 대한 기입을 행한다.
[1-2 .데이터 관리 방법에 대해서]
이하, 플래시 메모리(4)에 기록되는 데이터의 관리 방법에 대해서 설명한다.
우선은, 물리 어드레스와 논리 어드레스에 대해서 설명해 둔다.
플래시 메모리(4)에서는, 플래시 메모리(4) 내부에 기록된 데이터의 위치 정보를 나타내는 어드레스로서, 물리 어드레스가 사용된다.
도 2는, 플래시 메모리(4)에서 사용하는 물리 어드레스의 개요를 나타내고 있다.
플래시 메모리(4)에서는, 물리 어드레스로서, 물리 블록 어드레스, 물리 페이지 어드레스, 물리 섹터 어드레스의 3종류의 어드레스가 사용된다.
도 2에 있어서, 물리 블록(10)은, 플래시 메모리(4)에서 사용되는 NAND 플래시 메모리의 최소 소거 단위인 블록에 대응하고, 플래시 메모리(4)에서 데이터의 Read가 실행된다.
도 2에서는, 데이터의 Read/Program/Erase가 실행되는 블록 수를 b라 하고, 0으로부터 b-1까지의 물리 블록 어드레스를 할당하고 있다.
물리 블록(10)은, 물리 페이지(11)로 분할된다. 물리 페이지(11)는 NAND 플래시 메모리의 최소 프로그램 단위인 페이지에 대응한다. 물리 블록(10) 내의 페이지 각각에, 선두 페이지로부터 올림차순으로 물리 페이지 어드레스가 1개 할당된다.
도 2에서는 물리 블록(10) 내에 존재하는 물리 페이지(11)의 수를 p라 하고, 0으로부터 p-1까지의 물리 페이지 어드레스를 할당하고 있다.
물리 섹터(12)는, 호스트 장치(5)가 사용하는 논리 어드레스에서 지정되는 최소의 영역(섹터)의 사이즈와 일치한다. 물리 페이지(11)는, 복수의 물리 섹터(12)로 분할되고, 각각의 물리 섹터(12)에 물리 섹터 어드레스가 오름차순으로 할당된다.
도 2에서는 물리 페이지(11)가 s개의 물리 섹터(12)로 분할되는 것으로 하고 있고, 이 경우, 0으로부터 s-1까지의 물리 섹터 어드레스가 할당된다.
플래시 메모리 장치(1)에서는, 데이터의 논리 어드레스에 대해서 물리 어드레스를 대응짓는다. 논리 어드레스와 물리 어드레스를 대응짓기 위해서, 논리 어드레스를 논리 섹터 어드레스, 논리 페이지 어드레스, 논리 블록 어드레스의 3종류의 어드레스로 취급한다.
도 3은, 논리 섹터 어드레스, 논리 페이지 어드레스, 논리 블록 어드레스의 개요를 나타내고 있다.
호스트 장치(5)가 플래시 메모리 장치(1)에서 취급할 수 있는 논리 어드레스 공간(20)의 어드레스는 0 내지 as-1인 것으로 한다. 논리 어드레스 각각에 1개의 논리 섹터 어드레스를 할당한다. 도 3에서는 모든 논리 어드레스에, 논리 섹터 어드레스를 0으로부터 s-1까지 할당하고 있다. 여기서, 「s」는 물리 페이지(11) 내에 존재하는 물리 섹터(12)의 수이다.
논리 페이지(22)는 복수의 논리 섹터(21)로 구성된다. 도 3에서는 s개의 논리 섹터(21)로 1개의 논리 페이지(22)가 구성되고, 모든 논리 페이지(22)에 0으로부터 p-1의 논리 페이지 어드레스를 할당하고 있다. 「p」는 1개의 물리 블록(10)에 존재하는 물리 페이지(11)의 수이다.
논리 블록(23)은 복수의 논리 페이지(22)로 구성된다. 도 3에서는 p개의 논리 페이지(22)로 1개의 논리 블록(23)이 구성되고, 모든 논리 블록(23)에 0으로부터 a-1의 논리 블록 어드레스를 할당하고 있다.
계속해서, 플래시 메모리(4)에 기록되는 각종 물리 블록의 구체적인 데이터 구조에 대해서 설명한다.
도 4는, Block-Level 관리 블록(30)의 데이터 구조를 나타내고 있다.
여기서, Block-Level 관리 블록(30)이란, Block-Level 관리에 의한 기입(블록 레벨 기입)이 행하여진 물리 블록을 의미한다.
Block-Level 관리 블록(30)의 모든 물리 페이지에는, 데이터가 기입 완료로 된다(도면 중, 기입 완료 페이지(31)). 블록 레벨 기입에서는, 1개의 물리 블록에 대해서 1블록 분의 사이즈의 데이터를 기입하기 위해서이다.
도면과 같이 1개의 물리 페이지에는, 부가 정보(32), 부가 정보 ECC(32a), 유저 데이터(33), 유저 데이터 ECC(33a)가 기록된다. 부가 정보(32)는, Block-Level 관리 블록(30)인 것을 나타내는 블록 타입(34), Block-Level 관리 블록(30)의 세대 정보를 나타내는 리비전(35), Block-Level 관리 블록(30)에 기입된 데이터의 논리 블록 어드레스(36), 해당 부가 정보(32)가 저장된 물리 페이지에 대응하는 논리 페이지 어드레스(37)의 각 정보로 구성된다.
논리 블록 어드레스(36)는, 동일한 Block-Level 관리 블록(30) 내에서 모두 동일한 값이다.
또한 Block-Level 관리 블록(30)에서는, 논리 페이지 어드레스(37)의 값은, 해당 논리 페이지 어드레스(37)의 데이터가 기입된 물리 페이지의 물리 페이지 어드레스와 일치하게 된다. 구체적으로 도면 중에서는, 물리 페이지 어드레스i와, 해당 물리 페이지 어드레스i에 기입된 데이터의 논리 페이지 어드레스i가 일치하고 있는 것으로서 나타내었다.
또한, 논리 섹터 어드레스와 물리 섹터 어드레스는 일치한다.
이때, 유저 데이터(33)의 사이즈는 물리 섹터의 사이즈와 일치하고, 1개의 물리 페이지에 기록 가능한 유저 데이터(33)의 수는, 물리 페이지 내의 물리 섹터수와 일치한다.
도 5는, Page-Level 관리 블록(40)의 데이터 구조를 나타내고 있다.
Page-Level 관리 블록(40)이란, Page-Level 관리에 의한 기입(페이지 레벨 기입)에서 사용된 물리 블록을 가리킨다.
Page-Level 관리 블록(40)에는, 기입 완료 페이지(41a)와 미기입 페이지(41b)가 포함된다.
도면과 같이, 기입 완료 페이지(41a)로서의 물리 페이지에는, 부가 정보(42), 부가 정보 ECC(42a), 유저 데이터(43), 유저 데이터 ECC(43a)가 기록된다.
부가 정보(42)는, Page-Level 관리 블록(40)인 것을 나타내는 블록 타입(44), Page-Level 관리 블록(40)의 세대 정보를 나타내는 리비전(45), Page-Level 관리 블록(40)에 기입된 데이터의 논리 블록 어드레스(46), 해당 부가 정보(42)가 저장된 물리 페이지에 대응하는 논리 페이지 어드레스(47)의 각 정보로 구성된다.
이 경우도 논리 블록 어드레스(46)는, 동일한 Page-Level 관리 블록(40) 내에서 모두 동일한 값이 된다.
단, Page-Level 관리 블록(40)의 경우, 논리 페이지 어드레스(47)의 값은, 해당 논리 페이지 어드레스(47)의 데이터가 기입된 물리 페이지의 물리 페이지 어드레스와는 반드시 일치하지는 않게 된다. 페이지 레벨 기입에서는, 블록 사이즈에 미치지 않는 작은 사이즈의 데이터를 각각 상이한 물리 블록에 분산해서 기록하는 방식이 행하여지기 때문이다.
또한, Page-Level 관리 블록(40)에 있어서도, 논리 섹터 어드레스에 대해서는, 물리 섹터 어드레스와 일치한다.
이 경우도 유저 데이터(43)의 사이즈는 물리 섹터의 사이즈와 일치하고, 1개의 물리 페이지에 기록 가능한 유저 데이터(43)의 수는 물리 페이지 내의 물리 섹터수와 일치한다.
또한, Page-Level 관리 블록(40)에 있어서, 미기입 페이지(41b) 내에는, 도면과 같이 NAND 플래시 메모리의 초기값인 0xFFFF가 기록된 상태로 된다.
도 6은, 시퀀스 기입 관리 블록(50)의 데이터 구조를 나타내고 있다.
이 시퀀스 기입 관리 블록(50)은, 후술하는 실시 형태로서의 시퀀스 기입에서 사용된 물리 블록이 된다.
시퀀스 기입 관리 블록(50)은, 기입 완료 페이지(51a)와 미기입 페이지(51b)를 포함한다.
기입 완료 페이지(51a)의 물리 페이지에는, 부가 정보(52), 부가 정보 ECC(52a), 유저 데이터(53), 유저 데이터 ECC(53a)가 기록된다. 부가 정보(52)는, 시퀀스 기입 관리 블록(50)인 것을 나타내는 블록 타입(54), 시퀀스 기입 관리 블록(50)의 세대 정보를 나타내는 리비전(55), 시퀀스 기입 관리 블록(50)에 기입된 데이터의 논리 블록 어드레스(56), 해당 부가 정보(52)가 저장된 물리 페이지에 대응하는 논리 페이지 어드레스(57)의 각 정보로 구성된다.
이 경우도 논리 블록 어드레스(56)는 동일한 시퀀스 기입 관리 블록(50) 내에서 모두 동일한 값이 된다.
또한 시퀀스 기입 관리 블록(50)에 있어서는, 도 4에 도시한 Block-Level 관리 블록(30)의 경우와 마찬가지로, 논리 페이지 어드레스(57)의 값은, 해당 논리 페이지 어드레스(57)의 데이터가 기입된 물리 페이지의 물리 페이지 어드레스와 일치한다(도면 중, 부가 정보(52)가 저장된 물리 페이지 어드레스의 값i와 해당 부가 정보(52) 내에 저장되어 있는 논리 페이지 어드레스(57)의 값i가 일치). 이것은, 후술하는 바와 같이 시퀀스 기입에서는, 호스트 장치(5)측으로부터 기입 지시된, 논리 어드레스적으로 연속되는 각 논리 페이지 데이터를, 시퀀스 기입 관리 블록(50)으로서 선택된 물리 블록에 대해서 물리 페이지 어드레스순으로 기록하기 때문이다.
또한, 시퀀스 기입 관리 블록(50)에 있어서도, 논리 섹터 어드레스에 대해서는, 물리 섹터 어드레스와 일치한다.
또한 이 경우도, 유저 데이터(53)의 사이즈는 물리 섹터의 사이즈와 일치하고, 1개의 물리 페이지에 기록 가능한 유저 데이터(53)의 수는 물리 페이지 내의 물리 섹터수와 일치하는 점은 도 4, 도 5의 경우와 마찬가지이다.
또한, 도시하는 바와 같이 미기입 페이지(51b)의 저장값은, 이 경우도 초기값(0xFFFF)이 된다.
도 7은, 관리 정보 블록(60)의 데이터 구조를 나타내고 있다.
이 관리 정보 블록(60)은, 이후의 도 8?도 12 등에 나타내는 각종 관리 정보를 저장하기 위한 물리 블록이다.
도 7에 있어서, 관리 정보 블록(60)에는, 기입 완료 페이지(61a)와 미기입 페이지(61b)가 포함된다.
기입 완료 페이지(61a)의 물리 페이지에는, 부가 정보(62), 부가 정보 ECC(62a), 관리 정보(63), 관리 정보 ECC(63a)가 기록된다. 부가 정보(62)는, 관리 정보 블록(60)인 것을 나타내는 블록 타입(64), 관리 정보 블록(60)의 세대 정보를 나타내는 리비전(65)의 각 정보로 구성된다.
관리 정보(63)로서 기록되는 관리 정보에는, 도 8에 도시하는 Block-Level 관리 테이블(70), 도 9에 도시하는 Page-Level 관리 테이블(75), 도 10에 도시하는 Page-Level 맵(76), 도 11에 도시하는 시퀀스 기입 블록 관리 테이블(77), 및 도 12에 도시하는 무효 데이터 블록 관리 테이블(78)이 있다.
도 8은, Block-Level 관리 테이블(70)의 데이터 구조를 나타내고 있다.
Block-Level 관리 테이블(70)은, Block-Level 관리를 가능하게 하기 위한 관리 정보로서, 도시하는 바와 같이 논리 블록 어드레스와 물리 블록 어드레스가 대응지어진 정보가 된다.
여기서, Block-Level 관리 테이블(70)에서 유지될 수 있는 논리 블록 어드레스의 수는, 호스트 장치(5)가 데이터의 기입/읽어내기가 가능한 논리 블록의 수와 일치한다(도면에서는 a개로 하고 있음).
도면 중, 물리 블록 할당 완료 논리 블록(71a)은, 그 논리 블록 내의 데이터를 어떤 물리 블록에 대해서 기록필로 된 논리 블록을 의미한다.
이러한 논리 블록(71a)의 논리 블록 어드레스에 대해서는, 그 데이터의 기록이 행하여진(할당된) 물리 블록의 어드레스가 대응지어져 유지된다.
한편, Block-Level 관리 테이블(70)에 있어서, 물리 블록이 미할당인 논리 블록(71b)의 논리 블록 어드레스에 대해서는, 무효한 물리 블록 어드레스(0xFFFF)가 대응지어져 유지된다.
Block-Level 관리 테이블(70)에 있어서, 예를 들면 어떤 논리 블록 어드레스의 데이터에 대해서 블록 레벨 기입이 행하여진 경우에는, 그 논리 블록 어드레스에 대응지어져 있는 물리 블록 어드레스의 값(0xFFFF)이, 해당 데이터의 기입이 행하여진 물리 블록의 어드레스 값으로 갱신되게 된다.
도 9는, Page-Level 관리 테이블(75)의 데이터 구조를 나타내고 있다.
Page-Level 관리 테이블(75)은, 도면과 같이 논리 블록 어드레스에 대해서 물리 블록 어드레스가 대응지어져 이루어진다.
Page-Level 관리 테이블(75)은, 논리 블록과, 그 논리 블록 내의 논리 페이지의 데이터의 기록이 행하여진 물리 블록(즉 도 5에 도시한 Page-Level 관리 블록(40))의 대응 관계를 관리하기 위한 관리 정보로서, Page-Level 관리에 의한 기록(페이지 레벨 기입)에서 이용되는 관리 정보가 된다.
Page-level 관리 테이블(75)에서는, 논리 블록 어드레스로서 미리 결정된 d개의 어드레스를 유지할 수 있고, 또한, 물리 블록 어드레스로서는 미리 결정된 f개의 어드레스를 유지할 수 있는 것으로 되어 있다. 이때, f≥d이다.
이와 같이 페이지 레벨 기입에서는, 페이지 레벨 기입에서 사용할 수 있는 논리?물리의 블록 수가 제한되어 있다. 페이지 레벨 기입에서 이용한 물리 블록 수가 상기 f개를 초과할 경우, 가비지 컬렉션을 발생시켜, 사용 가능한 물리 블록을 새롭게 확보하게 된다.
도 9에 있어서, 도면 중에 X1로 나타내는, 물리 블록(Page-Level 관리 블록(40))이 할당된 논리 블록 어드레스에는, 그 물리 블록의 물리 블록 어드레스가 유지된다.
또한 X2로 나타내는, Page-Level 관리 블록이 미할당인 논리 블록 어드레스에는, 무효한 물리 블록 어드레스(0xFFFF)가 유지되어, Page-Level 관리 테이블(75)에 빈 부분이 있는 상태를 나타낸다.
또한, Page-level 관리 테이블(75)에 있어서, 예를 들면 도면 중에서 논리 블록 어드레스 C0에 대해서 물리 블록 어드레스 x0.0과 물리 블록 어드레스 x0.1이 대응지어져 있도록, 1개의 논리 블록 어드레스에 대해서 복수의 물리 블록 어드레스가 대응지어지는 경우가 있다.
즉, 상술한 바와 같이 페이지 레벨 기입에서는, 어떤 논리 블록 내의 데이터가 복수의 물리 블록으로 분산되어 기록되는 방식이 행하여지기 때문이다.
도 10은, Page-Level 맵(76)의 데이터 구조를 나타내고 있다.
Page-Level 맵(76)은, 어떤 논리 블록 내의 논리 페이지 데이터의 기록이 행하여진 물리 페이지의 어드레스(물리 블록 어드레스와 물리 페이지 어드레스의 세트로 특정됨)를 특정하기 위한 관리 정보로서, 도면과 같이, 논리 페이지 어드레스에 대해서, 물리 블록 어드레스와 물리 페이지 어드레스가 대응지어져 이루어진다.
이 Page-Level 맵(76)은, Page-Level 관리 테이블(75)에 있어서 유효한 물리 블록 어드레스가 유지된 논리 블록의 수만큼 존재하게 된다.
또한 도 10은, 도 9에 도시한 논리 블록 어드레스 C1에 관한 Page-Level 맵(76)의 내용을 예시한 것이다.
Page-Level 관리 테이블(75)에서 유지된 물리 블록 어드레스 내에 데이터가 존재하는 경우에는, 도면 중의 X3으로 나타내는 바와 같이, 논리 페이지 어드레스의 데이터가 기입된 물리 블록 어드레스와 물리 페이지 어드레스가 유지된다.
한편, Page-Level 관리 테이블(75)에서 유지된 물리 블록 어드레스 내에 데이터가 존재하지 않는 경우에는, X4로 나타내는 바와 같이, 논리 페이지 어드레스에 대응하는 물리 블록 어드레스와 물리 페이지 어드레스에는 무효한 값(0xFFFF)이 유지되게 된다.
도 11은, 시퀀스 기입 블록 관리 테이블(77)의 데이터 구조를 나타내고 있다.
시퀀스 기입 블록 관리 테이블(77)은, 실시 형태로서의 시퀀스 기입을 실현하기 위해서 새롭게 추가되는 관리 정보가 된다.
도면과 같이 시퀀스 기입 블록 관리 테이블(77)은, 논리 블록 어드레스에 대해서, 물리 블록 어드레스와 최종 기입 논리 페이지 어드레스가 대응지어진 정보가 된다.
시퀀스 기입 블록 관리 테이블(77)에서는, 논리 블록 어드레스로서 미리 결정된 e개의 어드레스를 유지할 수 있다. 바꾸어 말하면, 시퀀스 기입에서 사용 가능한 물리 블록(시퀀스 기입 관리 블록(50))의 수는, e개로 제한된다.
여기서, 시퀀스 기입에 대해서도, 사용하는 물리 블록의 수가 상한값에 도달해 있는 경우에는, 후술하는 시퀀스 기입 블록의 가비지 컬렉션을 발생시켜 사용 가능한 물리 블록을 새롭게 확보하게 된다.
도 11에 있어서, 예를 들면 X5로 나타내는 바와 같이 물리 블록(시퀀스 기입 관리 블록(50))이 할당된 논리 블록 어드레스에 대해서는, 그 할당된 물리 블록의 물리 블록 어드레스가 유지된다. 또한, 시퀀스 기입에 있어서, 해당 논리 블록 내의 도중의 논리 페이지까지의 기입이 행하여진 경우에는, 그 논리 블록의 데이터 중 마지막에 기입이 행하여진 페이지 데이터의 논리 어드레스의 값이, 최종 기입 논리 페이지 어드레스의 값으로서 대응지어진다.
한편, 도면 중의 X6은, 물리 블록이 미할당으로 된 논리 블록 어드레스(시퀀스 기입에서 전체 데이터를 기입 완료로 된 논리 블록의 어드레스)와 이것에 대응지어지는 물리 블록 어드레스 및 최종 기입 논리 페이지 어드레스의 내용을 나타내고 있지만, 이 경우, 그들 논리 블록 어드레스, 물리 블록 어드레스, 최종 기입 논리 페이지 어드레스의 값은, 모두 무효한 데이터(0xFFFF)가 유지된다.
이와 같이, 시퀀스 기입에서 전체 데이터를 기입 완료로 된 논리 블록에 대해서는, 시퀀스 기입 블록 관리 테이블(77)에 의한 관리 하에서 제외되게 된다. 또한 동시에, 상기 무효한 데이터(0xFFFF)가 유지됨으로써, 시퀀스 기입 블록 관리 테이블(77) 상에 사용 가능한 블록이 존재하고 있는 것(즉 시퀀스 기입에서 사용 가능한 블록에 빈 부분이 존재하는 것)이 나타내지게 된다.
도 12는, 무효 데이터 블록 관리 테이블(78)의 데이터 구조를 나타내고 있다.
무효 데이터 블록 관리 테이블(78)은, Block-Level 관리 블록(30), Page-Level 관리 블록(40), 시퀀스 기입 관리 블록(50) 중 어느 하나의 물리 블록으로서 데이터 기입이 행하여진 물리 블록 중, 데이터 소거가 가능한 블록을 특정하기 위한 관리 정보가 된다.
이 무효 데이터 블록 관리 테이블(78)에는, 예를 들면 가비지 컬렉션의 발생 등에 수반하여 데이터 소거가 가능하게 된 물리 블록의 물리 블록 어드레스가 적절히 유지된다. 도면 중의 X7은, 소거 가능한 블록의 물리 블록 어드레스를 지시하고 있다. 한편, 소거 가능하다고 해서, 실제로 데이터 소거가 실행된 물리 블록에 대해서는, X8로 나타내는 바와 같이, 그 블록의 물리 페이지 어드레스가 무효한 값(0xFFFF)으로 갱신된다. 이에 의해, 이미 소거필의 블록(즉 새롭게 데이터 기입이 행하여지고 있을 가능성이 있는 블록)에 대한 오소거의 방지가 도모된다.
[1-3 .제1 실시 형태로서의 메모리 제어 방법]
도 13?도 25를 참조하여, 제1 실시 형태로서의 메모리 제어 방법에 대해서 설명한다.
우선은 도 13에 의해, 호스트 장치(5)측으로부터 플래시 메모리 장치(1)측에 행하여지는 기입 지시의 일례를 나타내 둔다.
이 도 13에서는, 도면 중의 시점 t1, t3, t5, t7의 합계 4회의 Write 커맨드가 발행된 경우를 예시하고 있다. 각 Write 커맨드에 이어서, 시점 t2, t4, t6, t8에서는 플래시 메모리 장치(1)에 기입해야 할 데이터가 송출된다.
이 경우, 각 Write 커맨드에서는, 기입 데이터 사이즈로서 각각 논리 블록 사이즈/4의 데이터 사이즈가 지시되고, 따라서 토탈 1개의 논리 블록 사이즈 분의 기입 지시가 이루어진 것으로 되어 있다. 각 Write 커맨드에서는, 논리 블록 사이즈/4의 기입 데이터 사이즈를 지시하고 있으므로, 각 Write 커맨드와 함께 지시되는 기입 개시의 논리 어드레스의 값은, 시점 t1에서는 0, 시점 t3에서는 논리 블록 사이즈/4, 시점 t5에서는 논리 블록 사이즈/2, 시점 t7에서는 논리 블록 사이즈*3/4이 된다.
또한 확인을 위해 설명해 두면, 이 도 13은 어디까지나 기입 지시의 양태의 일례를 나타낸 것에 불과하며, 실제의 기입 지시로서는, 서로 다른 논리 블록의 데이터에 대해서 개별로 행하여지는 경우도 있지만, 1회의 Write 커맨드로 지시되는 기입 데이터 사이즈도 상기와는 상이한 경우도 있음은 물론이다.
예를 들면 이 도 13에 도시하는 바와 같은 양태에 의한 호스트 장치(5)측으로부터의 기입 지시, 구체적으로는, 어떤 1개의 논리 블록에 속하는 각 데이터에 대해서 논리 어드레스순으로 연속해서 기입 지시가 이루어지고, 또한 각 데이터의 사이즈가 소정 사이즈 이상인 기입 지시가 이루어진 경우, 본 실시 형태의 플래시 메모리 장치(1)에서는, 각 Write 커맨드에 대응하여, 시퀀스 기입으로서의 데이터 기입이 실행되게 된다.
이하, 시퀀스 기입 처리를 포함하는 제1 실시 형태로서의 메모리 제어 방법에 대해서 설명한다.
우선은 도 14에, Write 커맨드 실행 처리의 플로우차트를 나타낸다.
또한, 이 도 14를 비롯해서 이후에 설명하는 도 15, 도 16, 도 21의 플로우차트에 도시하는 처리 동작은, 도 1에 도시한 메모리 컨트롤러(3)가 예를 들면 자신이 구비하는 전술한 ROM 등에 저장된 프로그램에 따라 실행하는 것이다.
도 14에 있어서, 메모리 컨트롤러(3)는, 스텝 S101에 있어서, 호스트 장치(5)측으로부터의 Write 커맨드를 대기하고 있다.
그리고, 호스트 장치(5)측으로부터의 Write 커맨드가 있는 경우에는, 스텝 S102에 있어서, 논리 어드레스의 변환 처리를 행한다. 이 논리 어드레스의 변환 처리에서는, 호스트 장치(5)가 지시한 논리 어드레스, 데이터 사이즈로부터 기입을 실행하는 논리 블록 어드레스, 논리 페이지 어드레스, 논리 섹터 어드레스를 각각 계산한다.
여기서, 플래시 메모리에 있어서, 기입 지시된 데이터 사이즈가 논리 블록 사이즈보다 큰 경우에는, 데이터의 기입 처리는, 기입을 개시하는 논리 블록 어드레스로부터 순서대로 최종 논리 블록 어드레스까지, 순서대로 논리 블록마다 개별로 행하여지게 된다.
상기 스텝 S102에 있어서 논리 어드레스의 변환 처리를 실행한 후에는, 스텝 S103에 있어서, 논리 블록내 기입 처리를 실행한다.
이 논리 블록내 기입 처리에서는, 논리 블록마다의 기입 처리를 실행한다.
이 스텝 S103의 논리 블록내 기입 처리로서 실행해야 할 구체적인 처리 내용에 대해서는, 도 15(및 도 16?도 21)에 의해 후술한다.
스텝 S103의 논리 블록내 기입 처리의 실행 후에는, 스텝 S104에 있어서, 모든 논리 블록내 기입 처리가 종료하였는지 여부를 판별한다. 즉, 스텝 S102의 논리 어드레스의 변환 처리에서 기입 대상으로 한 모든 논리 블록 어드레스에서 기입 처리가 종료하였는지 여부를 판별한다.
스텝 S104에 있어서, 모든 논리 블록 어드레스에서 기입 처리가 아직 종료하지 않고, 모든 논리 블록내 기입 처리가 종료하지는 않았다는 부정 결과가 얻어진 경우에는, 스텝 S103으로 되돌아간다. 즉, 기입 대상으로 된 모든 논리 블록 어드레스에서 기입 처리가 종료할 때까지, 스텝 S103의 기입 처리가 실행되는 것이다.
한편 스텝 S104에 있어서, 모든 논리 블록 어드레스에서 기입 처리가 종료하고, 모든 논리 블록내 기입 처리가 종료했다는 긍정 결과가 얻어진 경우에는, 이 도면에 도시하는 Write 커맨드 실행 처리는 종료된다.
도 15는, 도 14에 도시한 논리 블록내 기입 처리(S103)로서 실행해야 할 구체적인 처리 내용을 도시한 플로우차트이다.
우선, 스텝 S201에서는, 기입 사이즈가 물리 블록 사이즈와 일치하는지 여부를 판별한다. 즉, 해당 스텝 S103으로서의 논리 어드레스내 기입 처리에서 기입 대상으로 되는 데이터의 사이즈가, 물리 블록 사이즈와 일치하는지 여부를 판별하는 것이다.
또한, 해당 스텝 S201의 판별 처리는, 기입 사이즈가 물리 블록 사이즈 미만인지 여부를 판별하는 처리라고도 환언할 수 있다.
스텝 S201에 있어서, 기입 사이즈가 물리 블록 사이즈와 일치한다고 해서 긍정 결과가 얻어진 경우에는, 도 16에 도시하는 스텝 S301로 처리를 진행시킨다. 즉, 블록 레벨 기입을 위한 처리가 실행되는 것이다.
여기서, 도 16에 의해, 블록 레벨 기입을 위한 처리에 대해서 설명한다.
도 16에 있어서, 스텝 S301에서는, 미기입 물리 블록의 취득 처리를 실행한다. 즉, 플래시 메모리(4)에 대해서 미기입 물리 블록으로서 관리되고 있는 물리 블록 어드레스 중에서 임의의 1개의 물리 블록 어드레스를 취득한다.
스텝 S301에 의한 미기입 물리 블록의 취득 처리의 실행 후에는, 스텝 S302에 있어서, Block-Level 관리 블록 기입 처리를 실행한다. 즉, 스텝 S301에서 취득한 어드레스의 물리 블록에 대해서, 호스트 장치(5)측으로부터 수신한 데이터를 기입하는 것이다.
스텝 S302의 기입 처리의 실행 후에는, 스텝 S303에 있어서, 관리 정보의 갱신 처리를 실행한다. 즉,Block-Level 관리 테이블(70)에 있어서의, 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록 어드레스에 할당되어 있는 물리 블록 어드레스의 값으로서, 스텝 S301에서 취득한 물리 블록 어드레스의 값을 기입한다.
스텝 S303의 관리 정보 갱신 처리의 실행 후, 스텝 S103의 논리 블록내 기입 처리는 종료된다.
또한, 논리 블록내 기입 처리에서 실행하고 있는 블록 데이터의 기입이, 논리 레벨에서의 덮어쓰기에 수반하는 경우에는, 상기한 바와 같은 Block-Level 관리 테이블(70)에 관한 갱신 처리뿐만 아니라, Page-Level 관리 테이블(75), Page-Level 맵(76), 무효 데이터 블록 관리 테이블(78) 등의 다른 관리 정보의 갱신도 실행해야 하는 경우가 있다.
예를 들면, 논리 블록내 기입 처리에서 대상으로 되어 있는 논리 블록의 데이터에 관해서, 덮어쓰기 전의 구 데이터가 Block-Level 관리 하의 물리 블록(물리 블록 b0으로 둠)에 기입되어 있던 상태이었던 경우에, 스텝 S302의 기입으로 해당 논리 블록의 데이터가 새롭게 기입된 경우에 있어서는, 상기 구 데이터가 기록되어 있던 물리 블록 b0에 대해서는 소거 가능한 것으로서 취급되도록 해야 한다. 따라서 이 경우에는, 해당 물리 블록 b0의 물리 블록 어드레스를 무효 데이터 블록 관리 테이블(78)에 추가하는 처리도 아울러 실행해야 할 것으로 된다.
혹은, 상기 구 데이터의 일부 또는 전부는 과거에 페이지 레벨 기입에 의해 각각 상이한 물리 블록으로 분산해서 기입되어 있는 경우에는, 그들 데이터에 대해서는, 상기 스텝 S302의 기입(즉 논리 레벨에서의 덮어쓰기를 위한 물리 레벨 기입)의 실행으로써, 무효로 되어야 하게 된다. 따라서 이 경우에는, 그들 무효로 되어야 할 데이터에 대해서, Page-Level 관리 테이블(75), Page-Level 맵(76)에 대해서 무효한 값(0xFFFF)을 기입한다고 하는 갱신 처리를 실행해야 하게 된다.
설명을 도 15로 되돌린다.
이전의 스텝 S201에 있어서, 기입 사이즈가 물리 블록 사이즈와 일치하지 않는다고 해서 부정 결과가 얻어진 경우에는, 스텝 S202로 진행하여, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재하는지 여부를 판별한다. 즉, 시퀀스 기입 블록 관리 테이블(77) 내에, 기입을 실행하고 있는 논리 블록(즉 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록)의 논리 블록 어드레스가 존재하는지 여부를 판별한다.
여기서, 기입을 실행하고 있는 논리 블록의 어드레스 값이 시퀀스 기입 블록 관리 테이블(77) 내에 존재하는 경우에는, 해당 논리 블록에 대해서는, 그 데이터가 시퀀스 기입 도중의 상태에 있게 된다.
한편, 기입을 실행하고 있는 논리 블록의 어드레스 값이 시퀀스 기입 블록 관리 테이블(77) 내에 존재하지 않는 경우에는, 해당 논리 블록에 대해서는, 적어도 시퀀스 기입 도중의 블록이 아닌 것으로 된다.
또한 이 점을 고려해서 알 수 있는 바와 같이, 상기 스텝 S202의 판별 처리는, 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가, 과거에 시퀀스 기입되어 있는지 여부를 판별하는 것이라고도 파악할 수 있다.
스텝 S202에 있어서, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재하지 않는다고 해서 부정 결과가 얻어진 경우에는, 스텝 S203으로 처리를 진행시킨다.
스텝 S203 및 스텝 S204의 처리는, 신규로 시퀀스 기입 관리 블록(50)을 등록하고 거기에 해당 논리 블록내 기입 처리에서 기입 대상으로 되어 있는 데이터를 새롭게 기입해야 할 것인지 여부를 판별하기 위한 각 조건을 판정하는 처리가 된다.
스텝 S203에서는, 기입 사이즈가 (물리 블록 사이즈)/4 이상이며 논리 페이지 사이즈의 배수인지 여부를 판별한다.
바꾸어 말하면, 기입 사이즈가 시퀀스 기입에 적합한 사이즈인지 여부를 판별하는 것이다.
여기서, 시퀀스 기입에 적합한 사이즈의 상한은, 예를 들면 설정되는 블록 사이즈 등에 의해 상이한 것이며, 반드시 「(물리 블록 사이즈)/4 이상」에 한정되어야 할 것은 아니다. 본 예의 경우, 블록 사이즈=32MB(메가 바이트)에 대응하여, 상기한 (물리 블록 사이즈)/4 이상으로 설정하고 있는 것으로 한다.
스텝 S203에 있어서, 기입 사이즈가 (물리 블록 사이즈)/4 이상이며 또한 논리 페이지 사이즈의 배수라는 조건이 충족되지 않고 부정 결과가 얻어진 경우에는, 이후의 도 21에 도시하는 스텝 S401로 처리를 진행시킨다. 즉, 페이지 레벨 기입을 위한 처리로 이행하는 것이다.
한편 스텝 S203에 있어서, 기입 사이즈가 (물리 블록 사이즈)/4 이상이며 또한 논리 페이지 사이즈의 배수라는 긍정 결과가 얻어진 경우에는, 스텝 S204로 진행하여, 기입 개시 논리 페이지 어드레스가 0, 또한 논리 섹터 어드레스가 0인지 여부를 판별한다. 즉, 데이터의 기입 개시 어드레스가, 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록의 선두 어드레스와 일치하고 있는지 여부를 판별하는 것이다.
스텝 S204에 있어서, 기입 개시 논리 페이지 어드레스가 0 또한 논리 섹터 어드레스가 0이라는 조건이 충족되지 않고 부정 결과가 얻어진 경우에는, 도 21에 도시하는 페이지 레벨 기입을 위한 처리로 이행한다.
한편 스텝 S204에 있어서, 기입 개시 논리 페이지 어드레스가 0 또한 논리 섹터 어드레스가 0이라고 해서 긍정 결과가 얻어진 경우에는, 스텝 S205로 진행한다.
스텝 S205에서는, 시퀀스 기입 블록 관리 테이블(77)에 빈 부분이 있는지 여부를 판별한다. 즉, 시퀀스 기입 블록(50)으로서 사용 가능한 블록의 수가 상한에 도달해 있지 않은지 여부를 판별하는 것이다.
스텝 S205에 있어서, 시퀀스 기입 블록 관리 테이블(77)에 빈 부분이 있다고 해서 긍정 결과가 얻어진 경우에는, 스텝 S207로 진행하여, 시퀀스 기입 블록 관리 테이블(77)에 신규 등록을 행한다. 즉, 시퀀스 기입 블록 관리 테이블(77)에 새롭게 논리 블록 어드레스(해당 논리 어드레스내 기입 처리에서 대상으로 하고 있는 논리 블록의 어드레스)와 시퀀스 기입 블록(50)으로서 사용하는 블록의 물리 블록 어드레스를 추가하여, 새로운 시퀀스 기입 블록(50)을 등록한다.
또한, 신규 등록의 경우, 시퀀스 기입 블록 관리 테이블(77)에 있어서의 최종 기입 논리 페이지 어드레스의 값으로서는, 예를 들면 초기값(0xFFFF)을 기입하는 것으로 한다.
한편 스텝 S205에 있어서, 시퀀스 기입 블록 관리 테이블(77)에 빈 부분이 없다고 해서 부정 결과가 얻어진 경우에는, 스텝 S206으로 진행하여, 시퀀스 기입 블록의 가비지 컬렉션을 실행한 후(즉 시퀀스 기입 관리 블록(50)으로서 사용 가능한 물리 블록을 확보한 후), 상기 스텝 S207의 신규 등록 처리를 실행한다.
여기서, 스텝 S206의 「시퀀스 기입 블록의 가비지 컬렉션」의 처리로서는, 우선, 시퀀스 기입 블록 관리 테이블(77)에서 관리되는 논리 블록 중에서 1개의 논리 블록을 선택한다. 이하, 이렇게 선택한 논리 블록의 어드레스를 「ai」로 둔다.
이렇게 선택한 논리 블록 ai에 대해서 가비지 컬렉션을 행해서 해당 논리 블록 ai의 데이터를 Block-Level 관리로 승격시킴으로써, 시퀀스 기입 블록 관리 테이블(77)에 블록의 빈 부분을 확보하는 것이다.
이때, 시퀀스 기입 블록의 가비지 컬렉션으로서는, 상기한 바와 같이 선택한 논리 블록 ai의 기 기록 데이터가,
1)다른 블록에도 분산되어 기록되어 있는 경우(즉 논리 블록 ai의 기 기록 데이터로서 시퀀스 기입 블록 관리 테이블(77)의 관리 하의 데이터뿐만 아니라 Page-Level 관리 하나 Block-Level 관리 하의 데이터가 존재하고 있는 경우)
2) 다른 블록에는 일체 존재하지 않고 있는 경우(논리 블록 ai의 기 기록 데이터가 시퀀스 기입 블록 관리 테이블(77)의 관리 하의 데이터뿐인 경우)
에 서로 다른 처리를 실행하게 된다.
상기 1)의 경우에 대응해서 실행되는 시퀀스 기입 블록의 가비지 컬렉션의 구체적인 예에 대해서, 도 17?도 19를 참조하여 설명한다.
도 17은, 1)의 경우에 있어서의 시퀀스 기입 블록의 가비지 컬렉션에 의한 물리 레벨에서의 데이터의 이행의 모습의 예를 모식적으로 나타내고, 도 18은, 도 17에 도시하는 데이터 이행 전에 있어서의 시퀀스 기입 블록 관리 테이블(77), Block-Level 관리 테이블(70), Page-Level 관리 테이블(75), Page-Level 맵(76)의 내용을 예시하고 있다.
또한 도 19는, 도 17에 도시하는 데이터 이행 후의 시퀀스 기입 블록 관리 테이블(77), Block-Level 관리 테이블(70), Page-Level 관리 테이블(75), Page-Level 맵(76)의 내용을 예시하고 있다.
상술한 바와 같이 시퀀스 기입 블록 관리 테이블(77)로부터 1개의 논리 블록 어드레스(ai)를 선택한 후에는, Block-Level 관리 테이블(70), Page-Level 관리 테이블(75), Page-Level 맵(76)을 참조하여, 도 17에 도시하는 바와 같이, 시퀀스 기입 블록 관리 테이블(77)에서 논리 블록 어드레스 ai에 할당된 물리 블록 어드레스(이 경우는 xi)의 미기입 물리 페이지(51a)에 대해서, 다른 물리 블록에 분산되어 있는 해당 논리 블록 어드레스 ai의 논리 페이지 데이터를 한데 모아서 추기한다.
그리고, 이러한 가비지 컬렉션에 관계되는 물리 레벨에서의 데이터 이행 처리를 실행한 후에는, 도 19에 도시하는 바와 같이 각 관리 정보를 갱신한다.
구체적으로, 시퀀스 기입 블록 관리 테이블(77)에 대해서는, 논리 블록 어드레스 ai가 할당되어 있던 논리 블록 어드레스의 값, 물리 블록 어드레스의 값, 및 최종 기입 논리 페이지 어드레스의 값을 모두 무효한 값(0xFFFF)으로 갱신한다.
또한, Block-Level 관리 테이블(70)에 대해서는, 논리 블록 어드레스 ai에 할당되어 있는 물리 블록 어드레스를 xi로 갱신한다.
또한, Page-Level 관리 테이블(75)에 대해서는, 논리 블록 어드레스 ai가 할당되어 있던 논리 블록 어드레스의 값, 물리 블록 어드레스의 값을 모두 무효한 값(0xFFFF)으로 갱신한다.
또한, 논리 블록 어드레스 ai에 사용되고 있던 Page-Level 맵(76)의 물리 블록 어드레스, 물리 페이지 어드레스의 값에 대해서도 모두 무효한 값(0xFFFF)으로 갱신한다.
이러한 가비지 컬렉션에 의해, 선택한 논리 블록 어드레스 ai에 할당되어 있던 어드레스 xi의 물리 블록에 대해서는 블록 레벨 관리 하에 새롭게 놓이는 것으로 되어, 시퀀스 기입 블록 관리 테이블(77)에는, 사용 가능한 물리 블록의 빈 부분을 1개 늘릴 수 있다.
또한, 도 17 및 도 18에 도시한 예와 같이, 논리 블록 ai의 구 데이터가 어떤 물리 블록(도면의 예에서는 물리 블록 어드레스 b0)에 기입되어 있고 이것이 Block-Level 관리되고 있는 경우에는, 시퀀스 기입 블록의 가비지 컬렉션의 실행에 수반하여, 해당 물리 블록 어드레스 b0의 물리 블록은 소거 가능한 것으로서 취급되어야 할 것으로 된다. 이 때문에, 도 17, 도 18에 도시하는 예의 경우, 상기한 시퀀스 기입 블록의 가비지 컬렉션 시에는, 아울러, 해당 물리 블록 어드레스 b0을 무효 데이터 블록 관리 테이블(78)에 등록하는 처리도 실행하게 된다.
한편, 상기 2)의 경우에 있어서의 시퀀스 기입 블록의 가비지 컬렉션으로서는, 우선, 시퀀스 기입 블록 관리 테이블(77)로부터 1개의 논리 블록 어드레스(ai)를 선택한다고 하는 점은 1)의 경우와 공통이 된다.
상기 2)의 경우, 이렇게 논리 블록 어드레스 ai를 선택한 후에는, 시퀀스 기입 블록 관리 테이블(77)에 있어서 해당 논리 블록 어드레스 ai에 할당되어 있는 물리 블록(xi)의 미기입 물리 페이지(51b)에 대해서, 예를 들면 초기값 등의 더미 데이터를 기입하여 블록 전체를 기입 완료로 한다.
게다가, 시퀀스 기입 블록 관리 테이블(77)에 있어서, 논리 블록 어드레스 ai가 할당되어 있던 논리 블록 어드레스의 값, 물리 블록 어드레스의 값, 최종 기입 논리 페이지 어드레스의 값을 모두 무효한 값(0xFFFF)으로 갱신하고, 또한 Block-Level 관리 테이블(70)에 있어서, 논리 블록 어드레스 ai와, 또한 이것에 대응지어서 물리 블록 어드레스 xi를 새롭게 기입함으로써, 해당 물리 블록 xi가 새롭게 블록 레벨 관리 하에 놓이도록 한다.
이에 의해, 상기 2)의 경우에 대응해서 시퀀스 기입 블록 관리 테이블(77)에 새로운 빈 블록을 생성할 수 있다.
여기서, 상기 설명으로부터도 이해되는 바와 같이, 「시퀀스 기입 블록의 가비지 컬렉션」의 주된 뜻은, 시퀀스 기입 블록 관리 테이블(77)로부터 선택한 어떤 시퀀스 기입 관리 블록(50)을 Block-Level 관리 하에 새롭게 둠으로써, 시퀀스 기입 블록 관리 테이블(77)에 빈 부분을 확보하는 점에 있다.
설명을 도 15로 되돌린다.
도 15에 있어서, 스텝 S207에 의한 시퀀스 기입 블록(77)에의 신규 등록 처리를 실행한 후에는, 스텝 S208에 있어서, 시퀀스 기입 처리를 실행한다. 즉, 스텝 S207에서 신규 등록한 물리 블록에 대해서, 어드레스순으로 기입을 행하는 것이다.
도 20A에, 이 경우의 시퀀스 기입의 개념도를 도시한다.
이와 같이 본 예의 시퀀스 기입에서는, 등록한 물리 블록(도면에서는 어드레스 bj로 하고 있음)에, 호스트 장치(5)로부터 수신한 데이터를, 물리 페이지 어드레스 0,물리 섹터 어드레스 0으로부터 순서대로 기입한다. 이때, 기입의 단위는, 논리 페이지 사이즈이다.
도 15에 있어서, 스텝 S208의 시퀀스 기입 처리의 실행 후에는, 스텝 S213에 있어서, 최종 기입 물리 페이지 어드레스를 시퀀스 기입 블록 관리 테이블(77)에 등록한다. 즉, 시퀀스 기입 블록 관리 테이블(77)에 등록된 논리 블록 어드레스 중, 스텝 S207에서 시퀀스 기입을 실행한 논리 블록 어드레스에 대응지어져 있는 최종 기입 논리 페이지 어드레스의 값으로서, 최종 기입을 실행한 논리 페이지 어드레스의 값을 기입하는 것이다.
도 20B는, 스텝 S213에 의한 등록 처리 후의 시퀀스 기입 블록 관리 테이블(77)의 내용을 예시하고 있다.
예를 들면, 논리 블록 어드레스 aj의 데이터에 대해서 물리 블록 어드레스 bj의 블록에 대해서 논리 페이지 어드레스 Pk까지의 시퀀스 기입이 실행되었다고 하면, 그 경우의 시퀀스 기입 블록 관리 테이블(77)에 있어서는, 도면과 같이, 논리 블록 어드레스 aj 및 물리 블록 어드레스 bj에 대응지어지는 최종 기입 논리 페이지 어드레스로서, 논리 페이지 어드레스 Pk가 기입된다.
도 15에 있어서, 스텝 S213에 의한 등록 처리의 실행 후에는, 논리 블록내 기입 처리(S103)는 종료된다.
계속해서, 이전의 스텝 S202의 판별 처리에 있어서, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재한다고 해서 긍정 결과가 얻어진 경우, 즉, 시퀀스 기입 도중인 경우에 대응해서 실행되어야 할 처리에 대해서 설명한다.
도 15에 있어서, 스텝 S202의 판별 처리에서 긍정 결과가 얻어진 경우에는, 스텝 S209로 처리를 진행시킨다.
스텝 S209에서는, 기입 개시 논리 페이지 어드레스가 시퀀스 논리 페이지 어드레스에 연속인지 여부를 판별한다. 즉, 기입 개시 논리 페이지 어드레스가, 시퀀스 기입 블록 관리 테이블(77)에서 관리되고 있는, 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록 어드레스에 관한 최종 기입 논리 페이지 어드레스에 연속이며, 또한 기입 개시 논리 섹터 어드레스가 0인지 여부를 판별한다.
예를 들면, 도 20B에서 나타내는 시퀀스 기입 블록 관리 테이블(77)의 내용을 이용하여 설명하면, 이 경우, 기입을 실행하고 있는 논리 블록 어드레스 aj에 대해서, 기입 개시 논리 페이지 어드레스의 값이 (pk+1)이며 또한 논리 페이지내 오프셋이 0이면, 기입 개시 논리 페이지 어드레스가 시퀀스 논리 페이지 어드레스에 연속이라는 판별 결과가 얻어지는 것이다.
스텝 S209에 있어서, 기입 개시 논리 페이지 어드레스가 시퀀스 논리 페이지 어드레스에 연속이 아니라고 해서 부정 결과가 얻어진 경우에는, 스텝 S215로 진행하여 시퀀스 기입 종료?데이터 정합 처리를 실행한 후, 도 21에 도시하는 페이지 레벨 기입을 위한 처리(이것에 대해서는 후술함)로 이행한다.
여기서, 스텝 S215의 시퀀스 기입 종료?데이터 정합 처리는, 시퀀스 기입 블록 관리 테이블(77)에서 관리되고 있던, 해당 논리 블록내 기입 처리에서 대상으로 되어 있는 논리 블록으로서의 시퀀스 기입 도중의 블록에 대해서 가비지 컬렉션을 실행함으로써, 해당 논리 블록의 데이터를 Block-Level 관리로 승격시켜 시퀀스 기입을 종료시키는 처리가 된다. 즉, 도 21에 도시하는 페이지 레벨 기입에의 이행 전에, 데이터의 정합성을 확보하기 위한 처리라고 할 수 있다.
스텝 S215의 시퀀스 기입 종료?데이터 정합 처리의 구체적인 처리 내용으로서는, 해당 논리 블록내 기입 처리에서 대상으로 되어 있는 논리 블록(가령 「Ti」로 둠)의 기 기록 데이터가,
3) 다른 블록에도 분산해서 기록되어 있는 경우(즉 논리 블록 Ti의 기 기록 데이터로서 시퀀스 기입 블록 관리 테이블(77)의 관리 하의 데이터뿐만 아니라 Page-Level 관리 하나 Block-Level 관리 하의 데이터가 존재하고 있는 경우)
4) 다른 블록에는 일체 존재하지 않고 있는 경우(논리 블록 Ti의 기 기록 데이터가 시퀀스 기입 블록 관리 테이블(77)의 관리 하의 데이터뿐인 경우)
에 서로 다른 처리를 실행하게 된다.
여기서, 상기 3)의 경우, 논리 블록 Ti를 논리 블록 ai로 치환하고, 이전의 도 17?도 19를 참조하여 설명한 1)의 경우에 대응한 처리와 마찬가지의 처리를 행하여, 논리 블록 Ti의 데이터를 Block-Level 관리로 승격시킨다.
한편, 상기 4)의 경우에는, 마찬가지로 논리 블록 Ti를 논리 블록 ai로 치환하고, 이전의 2)의 경우와 마찬가지의 처리를 실행해서 논리 블록 Ti의 데이터를 Block-Level 관리로 승격시킨다.
한편, 스텝 S209에 있어서, 기입 개시 논리 페이지 어드레스가 시퀀스 논리 페이지 어드레스에 연속이라는 긍정 결과가 얻어진 경우에는, 스텝 S210으로 진행하여, 기입 사이즈가 논리 페이지의 배수인지 여부의 판별을 행한다.
여기서, NAND 플래시 메모리에 있어서, 데이터의 읽기쓰기의 단위는 페이지 사이즈 단위이기 때문에, 기입 사이즈가 페이지 사이즈의 배수가 아닌 경우(즉 페이지 미만의 사이즈 또는 페이지 사이즈 미만의 끝수가 나오는 사이즈인 경우), 그 데이터는 시퀀스 기입에 적합하지 않다.
이 때문에, 스텝 S210에 있어서, 기입 사이즈가 논리 페이지의 배수가 아니라고 해서 부정 결과가 얻어진 경우에는, 상술한 스텝 S215로 진행하여 시퀀스 기입 종료?데이터 정합 처리를 실행한 후, 도 21에 도시하는 페이지 레벨 기입을 위한 처리로 이행한다.
한편 스텝 S210에 있어서, 기입 사이즈가 논리 페이지의 배수라고 해서 긍정 결과가 얻어진 경우에는, 스텝 S211로 진행하여, 시퀀스 기입 중인 물리 블록에 데이터 추기를 행한다. 즉, 시퀀스 기입 블록 관리 테이블(77)로부터 기입이 실행되고 있는 논리 블록에 할당되어 있는 물리 블록 어드레스와 최종 기입 논리 페이지 어드레스의 값을 취득하고, 취득한 어드레스의 물리 블록에 있어서의 미기입 물리 페이지 중 선두의 페이지로부터 순서대로 데이터의 기입을 행한다.
예를 들면 도 20B의 시퀀스 기입 블록 관리 테이블(77)의 내용을 이용하여 설명하면, 이 경우, 기입 개시 논리 페이지 어드레스는 pk+1이며, 해당 논리 페이지 어드레스 pk+1에 대응하는 물리 페이지로부터 순서대로, 지정되어 있던 사이즈의 데이터의 기입을 행한다.
스텝 S211에 의한 데이터 추기 처리의 실행 후에는, 스텝 S212에 있어서, 최종 물리 페이지에 기입을 실행하였는지 여부의 판별을 행한다. 즉, 기입이 실행되고 있는 논리 블록에 할당된 시퀀스 기입 블록(50) 내의 모든 물리 페이지에 데이터가 기입되었는지 여부의 판별이 행하여지는 것에 상당한다.
스텝 S212에 있어서, 최종 물리 페이지에의 기입이 아니라고 해서 부정 결과가 얻어진 경우에는, 앞서 설명한 스텝 S213으로 처리를 진행시켜, 최종 기입 물리 페이지 어드레스를 시퀀스 기입 블록 관리 테이블(77)에 등록한다.
한편 스텝 S212에 있어서, 최종 물리 페이지에의 기입이었다고 해서 긍정 결과가 얻어진 경우에는, 스텝 S214로 진행하여, 블록 등록 처리를 실행한다. 즉, 전체 페이지의 기입이 완료한 블록을, 시퀀스 기입 관리 하로부터 블록 레벨 관리 하에 새롭게 두기 위한 처리이다.
구체적으로, 전체 페이지의 기입이 완료한 논리 블록(즉 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록)의 어드레스를 ai, 시퀀스 기입 블록 관리 테이블(77)에서 해당 논리 블록 ai에 할당되어 있는 물리 블록의 어드레스를 xi로 두면, 스텝 S214의 등록 처리에서는, 시퀀스 기입 블록 관리 테이블(77)에 있어서의 논리 블록 어드레스 ai가 할당되어 있던 논리 블록 어드레스의 값, 물리 블록 어드레스의 값, 및 최종 기입 논리 페이지 어드레스의 값을 모두 무효한 값(0xFFFF)으로 갱신함과 함께, Block-Level 관리 테이블(70)에 있어서, 논리 블록 어드레스 ai와, 또한 이것에 대응지어 물리 블록 어드레스 xi를 새롭게 기입하는 처리를 실행하게 된다.
여기서, 해당 스텝 S214의 블록 등록 처리는,
5) 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록에 대해서, 그 도중까지의 데이터가 기입되어 있던 상태로부터, 금회 신규로 그 계속 부분을 추기한 경우에는, 상기에 의해 설명한 등록 처리만을 실행하면 된다.
단, 6) 금회의 추기로서의 물리 기입이, 논리 레벨에서의 덮어쓰기에 수반하는 것이었던 경우에는, 상기한 등록 처리와 더불어, 논리 덮어쓰기의 대상으로 된 구 데이터가 소거된 것으로서 취급되도록 하기 위한 처리도 실행하게 된다.
구체적으로, 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록의 어드레스를 ai, 시퀀스 기입 블록 관리 테이블(77)에서 해당 논리 블록 ai에 할당되어 있는 물리 블록의 어드레스를 xi로 두면, Page-Level 관리 테이블(75)에 있어서 논리 블록 어드레스 ai가 할당되어 있던 논리 블록 어드레스의 값, 물리 블록 어드레스의 값을 모두 무효한 값(0xFFFF)으로 갱신함과 함께, 논리 블록 어드레스 ai에 사용되고 있던 Page-Level 맵(76)의 물리 블록 어드레스, 물리 페이지 어드레스의 값을 모두 무효한 값(0xFFFF)으로 갱신한다고 하는 처리도 아울러 행한다.
스텝 S214의 등록 처리의 실행 후에는, 논리 블록내 기입 처리(S103)는 종료된다.
계속해서, 도 21에 의해, 페이지 레벨 기입을 위한 처리에 대해서 설명한다.
도 21에 있어서, 우선 스텝 S401에서는, Page-Level 관리 테이블(75)에 논리 블록이 존재하는지 여부를 판별한다. 즉, Page-Level 관리 테이블(75)에 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록 어드레스가 존재하는지 여부를 판별하는 것이다.
스텝 S401에 있어서, 논리 블록이 Page-Level 관리 테이블(75)에 존재한다고 해서 긍정 결과가 얻어진 경우에는, 도시하는 바와 같이 스텝 S406으로 진행하여, Page-Level 관리 블록(40)에의 기입을 실행한다. 즉, Page-Level 관리 테이블(75)에 있어서 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록 어드레스에 할당되어 있는 Page-Level 관리 블록(40)에 대해서, 호스트 장치(5)측으로부터 수신한 데이터 중 기입 가능한 사이즈의 데이터를 기입하는 것이다.
한편 스텝 S401에 있어서, 논리 블록이 Page-Level 관리 테이블(75)에 존재하지 않는다는 부정 결과가 얻어진 경우에는, 스텝 S402로 진행하여, Page-Level 관리 테이블(75)에 빈 부분이 있는지 여부를 판별한다. 구체적으로는, Page-Level 관리 테이블(75)에 등록되어 있는 논리 블록의 수가, 전술한 d개에 도달해 있지 않은지 여부를 판별한다.
스텝 S402에 있어서, Page-Level 관리 테이블(75)에 빈 부분이 있다고 해서 긍정 결과가 얻어진 경우에는, 스텝 S403으로 진행하여, Page-Level 관리 테이블(75)에서 관리하는 물리 블록이 f개보다 적은지 여부를 판별한다. 즉, Page-Level 관리 테이블(75)에서 현재 관리되고 있는 Page-Level 관리 블록(40)로서의 물리 블록의 수가, 그 상한값=f에 도달해 있지 않은지 여부를 판별하는 것이다.
이 스텝 S403에 있어서, Page-Level 관리 테이블(75)에서 관리하는 물리 블록이 f개보다 적지 않다(상한값 f에 도달해 있다)는 부정 결과가 얻어진 경우 및 상기 스텝 S402에 있어서 Page-Level 관리 테이블(75)에 빈 부분이 없다는 부정 결과가 얻어진 경우에는, 모두 스텝 S404로 진행하여, Page-Level 관리 블록의 가비지 컬렉션을 실행한다.
그리고 그 후, 스텝 S405에 있어서, Page-Level 관리 테이블(75)에 신규 등록을 행한다. 즉, 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록 어드레스를 Page-Level 관리 테이블(75)에 새롭게 등록하여, 해당 논리 블록 어드레스에 할당하는 Page-Level 관리 블록(40)(물리 블록)을 새롭게 확보하는 것이다.
또한, 상기 스텝 S403에 있어서, Page-Level 관리 테이블(75)에서 관리 가능한 물리 블록이 f개보다 적다(상한값 f에 도달해 있지 않다)는 긍정 결과가 얻어진 경우에는, 스텝 S404의 가비지 컬렉션은 패스하고, 상기 스텝 S405의 신규 등록 처리를 실행하게 된다.
여기서, 스텝 S404의 「Page-Level 관리 블록의 가비지 컬렉션」에서의 처리의 개요를 도 22?도 24를 참조하여 설명한다. 도 22는, Page-Level 관리 블록의 가비지 컬렉션에 의한 물리 레벨에서의 데이터의 이행의 모습의 예를 모식적으로 나타내고, 도 23은, 도 22에 도시하는 데이터 이행 전에 있어서의 Block-Level 관리 테이블(70), Page-Level 관리 테이블(75), Page-Level 맵(76)의 내용을 예시하고 있다.
또한 도 24는, 도 22에 도시하는 데이터 이행 후의 Block-Level 관리 테이블(70), Page-Level 관리 테이블(75), Page-Level 맵(76)의 내용을 예시하고 있다.
우선, Page-Level 관리 블록의 가비지 컬렉션에서는, Page-Level 관리 테이블(75)에서 관리되는 논리 블록 어드레스 중에서 1개의 논리 블록 어드레스를 선택함과 함께, 미기입 물리 블록 중 1개의 물리 블록 어드레스를 취득한다. 이 경우의 예에서는, 논리 블록 어드레스로서는, 도 23에 있어서의 논리 블록 어드레스 ai가 선택된 것으로 한다. 또한, 선택한 미기입 물리 블록의 물리 블록 어드레스는 xi로 둔다.
이렇게 논리 블록 어드레스 ai 및 미기입 물리 블록 어드레스 xi를 선택한 후에는, Block-Level 관리 테이블(70), Page-Level 관리 테이블(75)、 Page-Level 맵(76)을 참조하여, 도 22에 도시하는 바와 같이, 물리 블록 어드레스 xi의 미기입 물리 페이지에 대해서, 다른 물리 블록에 분산되어 있는 논리 블록 어드레스 ai의 논리 페이지 데이터를 한데 모아서 기입한다.
이러한 물리 레벨에서의 데이터 이행 처리를 실행한 후에는, 도 24에 도시하는 바와 같은 각 관리 정보의 갱신을 행한다.
구체적으로, Block-Level 관리 테이블(70)에 대해서는, 논리 블록 어드레스 ai에 할당되어 있는 물리 블록 어드레스를 xi로 갱신한다. 즉 이에 의해, 논리 블록 ai에 대해서는, 새롭게 블록 레벨 관리 하에 놓이는 것으로 된다.
게다가, Page-Level 관리 테이블(75)에 대해서는, 논리 블록 어드레스 ai가 할당되어 있던 논리 블록 어드레스의 값, 물리 블록 어드레스의 값을 모두 무효한 값(0xFFFF)으로 갱신한다. 또한, 논리 블록 어드레스 ai에 사용되고 있던 Page-Level 맵(76)의 물리 블록 어드레스, 물리 페이지 어드레스의 값에 대해서도 모두 무효한 값(0xFFFF)으로 갱신한다. 이들의 처리에 의해, 논리 블록 ai가 분산되어 있던 구 페이지 데이터가 무효화됨과 함께, Page-Level 관리 테이블(75) 상에 새로운 빈 블록이 확보되게 된다.
또한, 도 22 및 도 23에 도시되는 예와 같이, 논리 블록 ai의 구 데이터가 어떤 물리 블록(도면의 예에서는 물리 블록 어드레스 b0)에 기입되어 있고 이것이 Block-Level 관리되고 있는 경우에는, Page-Level 관리 블록의 가비지 컬렉션의 실행에 수반하여, 해당 물리 블록 어드레스 b0의 물리 블록은 소거 가능한 것으로서 취급되어야 할 것으로 된다. 이 때문에, 도 22, 도 23에 도시하는 예의 경우, 상기한 Page-Level 관리 블록의 가비지 컬렉션 시에는, 아울러, 해당 물리 블록 어드레스 b0을 무효 데이터 블록 관리 테이블(78)에 등록하는 처리도 실행하게 된다.
설명을 도 21로 되돌린다.
스텝 S404에 의한 가비지 컬렉션의 실행 후에는, 전술한 스텝 S405의 Page-Level 관리 테이블(75)에의 신규 등록 처리를 실행하게 된다. 확인을 위해 설명해 두면, 해당 스텝 S405의 등록 처리는, 미기입의 물리 블록 중 1개의 물리 블록 어드레스를 취득하고, 해당 취득한 물리 페이지 어드레스의 값을, 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록 어드레스의 값과 대응지어 Page-Level 관리 테이블(75)에 새롭게 기입하는 처리가 된다.
스텝 S404의 등록 처리의 실행 후에는, 전술한 스텝 S406으로 진행하여, Page-Level 관리 블록(40)에의 기입을 실행한다.
그리고, 스텝 S406의 기입의 실행 후에는, 스텝 S407에 있어서, Page-Level 맵(76)의 갱신을 행한다. 즉, 호스트 장치(5)측으로부터 수신해서 기입을 행한 데이터에 대응하는 Page-Level 맵(76)의 값을 갱신하는 것이다.
도 25에, Page-Level 관리 블록(40)에의 기입(S406)으로서 행하여지는 데이터 기입의 예와, Page-Level 맵(76)의 갱신(S407) 실행 후의 Page-Level 맵(76)의 예를 나타낸다.
예를 들면 스텝 S406의 Page-Level 관리 블록(40)에의 기입에서는, 도면과 같이 물리 블록 어드레스 xj의 물리 페이지 어드레스 pi와 pi+1에 대해서 논리 페이지 어드레스 yi와 yi+1의 데이터를 각각 기입한 것으로 한다.
이때의 Page-Level 맵(76)은, 도면과 같이 논리 페이지 어드레스 yi, yi+1에 대응하는 논리 블록 어드레스의 값과 물리 페이지 어드레스의 값이 갱신된다.
도 21로 되돌아가서, 스텝 S407의 맵 갱신 처리의 실행 후에는, 스텝 S408에 있어서, 모든 데이터 기입이 종료하였는지 여부를 판별한다. 즉, 해당 논리 블록내 기입 처리에서 대상으로 하고 있는 논리 블록 어드레스 내에서, 호스트 장치(5)측으로부터 지정된 사이즈의 데이터를 모두 기입하였는지 여부를 판별하는 것이다.
스텝 S408에 있어서, 모든 데이터의 기입이 아직 종료하지 않았다는 부정 결과가 얻어진 경우에는, 이전의 스텝 S403으로 되돌아가서, 재차, Page-Level 관리 테이블(75)에서 관리하는 물리 블록이 f개보다 적은지 여부를 판별한다.
한편 스텝 S408에 있어서, 모든 데이터의 기입이 종료했다고 해서 긍정 결과가 얻어진 경우에는, 논리 블록내 기입 처리(S103)는 종료된다.
이상에서 설명한 바와 같이, 본 실시 형태에서는, Block-Level 관리에 의한 기록을 행할 수 없는 블록 사이즈 미만의 데이터에 대해서, 시퀀스 기입을 가능하게 하고 있다.
Block-Level 관리와 Page-Level 관리의 2종의 관리에서 데이터 기입을 행하게 되어 있는 종래의 플래시 메모리 장치에서는, 기입해야 할 데이터가 블록 사이즈와 일치하는 경우에는 블록 레벨 관리에 의한 기록을 행하고, 블록 사이즈 미만의 데이터에 대해서는 페이지 레벨 관리에 의한 기입을 행하게 되어 있다. 이 때문에, 예를 들면 블록 사이즈 미만의 데이터에 대해서, 그들이 논리 어드레스적으로 연속하고 있는 개개의 데이터라고 해도, 그들 데이터에 대해서는 반드시 페이지 레벨 관리에 의한 기입이 행하여지고 있었다.
이에 반해서, 본 실시 형태에 따르면, 블록 사이즈 미만의 데이터에 대해서 시퀀스 기입을 행할 수 있다. 즉, 예를 들면 상기한 바와 같은 케이스에 있어서, 페이지 레벨 관리 하에서의 기입과 같이 개개의 데이터가 서로 다른 물리 블록에 분산해서 기록되게 되는 것을 효과적으로 방지할 수 있다.
즉, 시퀀스 기입을 가능하게 한 본 실시 형태에 따르면, 블록 사이즈 미만의 데이터에 대해서 페이지 레벨 관리에 의한 기입만 선택지에 있는 종래와 비교하여, 가비지 컬렉션의 발생 빈도를 효과적으로 줄일 수 있게 된다. 이 결과, 종래보다도 기록 속도의 면에서 퍼포먼스 향상이 도모된다.
또한, 전술도 한 바와 같이 종래에서는, 호스트 장치(5)측에서 블록 사이즈보다도 작은 사이즈의 버퍼 메모리만 구비되어 있는 경우에는, 호스트 장치(5)측은 블록 사이즈 미만의 데이터만 송출할 수 있다(이 경우, 예를 들면 도 13과 같은 송출 형태로 됨). 따라서 이 경우도, 데이터가 논리 어드레스적으로 연속하고 있다고 해도, 종래의 플래시 메모리 장치에서는 페이지 레벨 관리에 의한 기입이 선택되어 버리게 된다.
이에 반해서, 시퀀스 기입을 가능하게 한 본 실시 형태에 따르면, 호스트 장치(5)측으로부터 블록 사이즈 미만의 데이터만 송출할 수 있는 경우에도, 그들 데이터를 시퀀스 기입할 수 있고, 결과, 페이지 레벨 관리에 의한 기록이 행하여지는 경우와는 달리, 가비지 컬렉션의 발생 빈도를 저하시킬 수 있어, 고속 기록을 실현할 수 있다. 즉, 데이터 전송용의 버퍼 메모리 사이즈가 작은 호스트 장치(5)로부터의 기입이 행하여지는 경우에도, 고속인 데이터 기록을 실현할 수 있다.
<2. 제2 실시 형태>
계속해서, 본 기술에 따른 제2 실시 형태에 대해서 설명한다.
상술한 바와 같이 제2 실시 형태는, 호스트 장치(5)가 커맨드로 플래시 메모리 장치(1)측에 기입 방법의 절환을 명시적으로 통지하는 것으로서, 플래시 메모리 장치(1)는, 해당 통지에 따라, 데이터 기입 방법을 변경하는 것이다.
또한, 제2 실시 형태에서는, 상기한 바와 같이 호스트 장치(5)가 시퀀스 기입의 지시를 행하는 것 외에, 플래시 메모리 장치(1)에서 실행되는 메모리 제어 방법에 따른 처리의 내용이 제1 실시 형태의 경우와 상이한 것으로 된다.
제2 실시 형태에서는, 주로 도 1에 도시한 메모리 컨트롤러(3)에 의해 실행되어야 할 프로그램이 제1 실시 형태에서의 프로그램으로부터 변경된 것이며, 플래시 메모리 장치(1)의 내부 구성 자체는 도 1에 도시한 것과 마찬가지로 된다.
도 26은, 제2 실시 형태의 경우에서의 호스트 장치(5)가, 플래시 메모리 장치(1)에 시퀀스 기입을 실행시키는 경우에 있어서 행하는 기입 지시의 예를 나타내고 있다.
이 경우의 호스트 장치(5)는, 플래시 메모리 장치(1)에 시퀀스 기입을 실행시킨다고 했을 때에, 도면 중 시점 t1로 나타내는 바와 같이 시퀀스 기입 개시 커맨드를 플래시 메모리 장치(1)측에 대해서 송출한다. 이 시퀀스 기입 개시 커맨드에 있어서는, 도면과 같이 시퀀스 기입의 대상으로 하는 데이터의 기입 개시 어드레스로서의 논리 어드레스와, 시퀀스 기입을 실행시키고 싶은 데이터의 사이즈(총 사이즈)를 아울러 지시한다. 이 경우, 기입 개시의 논리 어드레스는 도면과 같이 「0」이다.
여기서, 이 도 26에 있어서도, 이전의 도 13의 경우와 마찬가지로, 각 Write 커맨드에서는 기입 데이터 사이즈로서 각각 논리 블록 사이즈/4의 데이터 사이즈가 지시되고, 토탈 1개의 논리 블록 사이즈 분의 기입 지시가 이루어지는 경우를 예시하고 있다.
이 때문에, 이 경우에 있어서의 시점 t1의 시퀀스 기입 개시 커맨드로 지시되는 데이터 사이즈는, 도면과 같이 「논리 블록 사이즈」로 되어 있다.
시점 t1에서의 시퀀스 기입 개시 커맨드의 송출 후에는, 도 13의 경우와 마찬가지로, 호스트 장치(5)는, 논리 어드레스와 기입 사이즈를 지시한 Write 커맨드와 기입 데이터의 송출을 플래시 메모리 장치(1)에 대해서 순차적으로 행한다. 이 경우의 예에서는, 시점 t9에서의 데이터 송출이, 플래시 메모리 장치(1)측에 시퀀스 기입시켜야 할 데이터의 최종 송출이 된다.
최종 기입 데이터의 송출 후, 이 경우의 호스트 장치(5)는, 시퀀스 기입 종료 커맨드를 송출한다(시점 t10). 이 시퀀스 기입 종료 커맨드로서도, 이전의 시퀀스 기입 개시 커맨드와 마찬가지로, 논리 어드레스와 기입 데이터의 사이즈(총 사이즈)를 아울러 지정한 것으로 된다.
여기서, 이 경우의 호스트 장치(5)는, 시퀀스 기입을 실행시키고 싶은 경우에만, 그 취지를 나타내는 기입 개시 커맨드를 송출하는 것으로서, 다른 블록 레벨 기입, 페이지 레벨 기입에 대해서는, 특별히 그 취지를 나타내는 기입 개시 커맨드의 송출은 행하지 않고, 통상과 같이 논리 어드레스와 기입 데이터 사이즈를 지정하는 Write 커맨드의 송출을 행하는 것으로 한다.
계속해서, 이 경우의 플래시 메모리 장치(1)측이 실행하는 처리의 개요에 대해서 설명한다.
제2 실시 형태의 플래시 메모리 장치(1)에서는, 호스트 장치(5)측으로부터의 시퀀스 기입 개시 커맨드에 대응하는 처리로서, 도 27에 도시하는 처리가 실행되게 된다.
또한, 호스트 장치(5)측으로부터의 시퀀스 기입 종료 커맨드에 대응하는 처리로서, 도 28에 도시하는 처리가 실행된다.
또한 제2 실시 형태의 플래시 메모리 장치(1)에 있어서도, Write 커맨드에 대응하는 처리로서, 이전의 도 14에 도시한 처리를 실행하게 된다. 단, 제2 실시 형태의 경우, 스텝 S103의 논리 블록내 기입 처리로서, 도 29에 도시하는 처리가 실행되는 점은 제1 실시 형태의 경우와 상이하다.
도 27, 도 28, 및 도 14에 도시하는 처리는, 각각 병행 처리로서 메모리 컨트롤러(3)에 의해 실행된다.
예를 들면, 호스트 장치(5)측으로부터 시퀀스 기입 개시 커맨드가 수신된 경우에는, 도 27의 스텝 S501에서 긍정 결과가 얻어지고, 호스트 장치(5)측으로부터의 시퀀스 기입 개시 커맨드로 지정된 논리 블록 어드레스에 대해서 이미 시퀀스 기입 관리 블록(50)이 할당 완료였던 경우를 제외하고, 새로운 시퀀스 기입 관리 블록(50)을 확보하기 위한 처리가 실행된다.
그리고, 상기 시퀀스 기입 개시 커맨드의 수신 후에, 호스트 장치(5)측으로부터 Write 커맨드가 수신된 경우에는, 도 14에 도시한 논리 블록내 기입 처리(S103)를 수반하는 일련의 처리가 실행되게 된다. 상술한 바와 같이 제2 실시 형태의 경우, 논리 블록내 기입 처리(S103)는, 도 29에 도시하는 처리가 실행되는 것이다.
또한, 호스트 장치(5)측으로부터 시퀀스 기입 종료 커맨드가 수신된 경우에는, 도 28의 스텝 S601에서 긍정 결과가 얻어지고, 시퀀스 기입에 의해 대상 블록 내의 최종 물리 페이지까지 기입이 행하여졌는지 여부에 따른 처리가 실행된다.
또한, 호스트 장치(5)측으로부터 시퀀스 기입 개시 커맨드를 수반하지 않고 Write 커맨드가 발행된 경우에는, 도 28에 도시하는 처리에 의해, 블록 레벨 기입을 행해야 할지, 혹은 페이지 레벨 기입을 행해야 할지가 판단되게 된다.
이하, 제2 실시 형태의 플래시 메모리 장치(1)가 실행하는 도 27?도 29의 처리에 대해서 구체적으로 설명한다.
우선, 도 27에 도시하는, 시퀀스 기입 개시 커맨드에 대응하는 처리에 대해서 설명한다.
도 27에 있어서, 스텝 S501에서는, 호스트 장치(5)측으로부터의 시퀀스 기입 개시 커맨드가 수신될 때까지 대기한다.
그리고, 시퀀스 기입 개시 커맨드가 수신된 경우에는, 스텝 S502로 처리를 진행시킨다.
스텝 S502에서는, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재하는지 여부를 판별한다. 이 처리의 내용은, 이전의 도 15에서 설명한 스텝 S202의 처리 내용과 마찬가지로 된다.
스텝 S502에 있어서, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재한다고 해서 긍정 결과가 얻어진 경우에는, 이 도면에 도시하는 처리는 종료된다.
한편 스텝 S502에 있어서, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재하지 않는다고 해서 부정 결과가 얻어진 경우에는, 스텝 S503에 있어서, 시퀀스 기입 블록 관리 테이블(77)에 빈 부분이 있는지 여부를 판별한다.
스텝 S503에 있어서, 시퀀스 기입 블록 관리 테이블(77)에 빈 부분이 있다고 해서 긍정 결과가 얻어진 경우에는, 스텝 S505로 진행하여 시퀀스 기입 블록 관리 테이블(77)에 신규 등록을 행한다. 즉, 스텝 S501에서 수신한 시퀀스 기입 개시 커맨드가 지정하고 있는 논리 블록 어드레스를 시퀀스 기입 블록 관리 테이블(77)에 등록하여, 해당 논리 블록 어드레스에 시퀀스 기입 블록(50)이 할당되도록 하는 것이다.
한편 스텝 S503에 있어서, 시퀀스 기입 블록 관리 테이블(77)에 빈 부분이 없다고 해서 부정 결과가 얻어진 경우에는, 스텝 S504로 진행하여, 시퀀스 기입 블록의 가비지 컬렉션을 실행한다. 또한, 해당 스텝 S504의 가비지 컬렉션 처리의 내용은, 앞서 설명한 스텝 S206의 가비지 컬렉션 처리의 경우와 마찬가지로 되므로 재차의 설명은 생략한다.
스텝 S504의 가비지 컬렉션의 실행 후에는, 스텝 S505에 의한 신규 등록 처리를 실행한다.
이 스텝 S505의 신규 등록 처리의 실행 후에는, 이 도면에 도시하는 시퀀스 기입 개시 커맨드 대응 처리는 종료된다.
도 28에 의해, 시퀀스 기입 종료 커맨드에 대응하는 처리에 대해서 설명한다.
도 28에 있어서, 스텝 S601에서는, 호스트 장치(5)측으로부터의 시퀀스 기입 종료 커맨드가 수신될 때까지 대기한다.
시퀀스 기입 종료 커맨드가 수신된 경우에는, 스텝 S602로 처리를 진행시킨다.
스텝 S602에서는, 최종 물리 페이지에 기입을 실행하였는지 여부를 판별한다. 즉, 이전의 스텝 S212의 처리와 마찬가지로, 기입이 실행되고 있는 논리 블록에 할당된 시퀀스 기입 블록(50) 내의 모든 물리 페이지에 데이터가 기입되었는지 여부가 판별되는 것이다.
스텝 S602에 있어서, 최종 물리 페이지에 기입을 실행했다고 해서 긍정 결과가 얻어진 경우에는, 스텝 S603으로 진행하여, 블록 등록 처리를 실행한다. 즉 이에 의해, 최종 물리 페이지까지 기입이 행하여진 시퀀스 기입 블록(50)은, Block-Level 관리 하에 새롭게 놓이게 된다.
또한, 스텝 S603의 블록 등록 처리는, 이전의 스텝 S214의 블록 등록 처리와 마찬가지이며, 따라서 논리 레벨에서의 덮어쓰기가 발생하고 있는 경우에는 덮어쓰기의 대상으로 된 구 데이터가 소거된 것으로서 취급되도록 하기 위한 처리도 실행되게 된다.
한편 스텝 S602에 있어서, 최종 물리 페이지에 기입을 실행하고 있지는 않다는 부정 결과가 얻어진 경우에는, 스텝 S604로 진행하여, 시퀀스 기입 블록의 가비지 컬렉션을 실행한다. 또한, 이 스텝 S604의 가비지 컬렉션 처리로서도, 이전의 스텝 S206의 가비지 컬렉션 처리와 마찬가지의 처리가 된다.
또한, 최종 물리 페이지에의 기입이 행하여진 경우에 대응해서 실행하는 스텝 S604의 처리로서는, 상기한 바와 같은 시퀀스 기입 블록의 가비지 컬렉션 처리가 아니라, 앞서 설명한 스텝 S213과 마찬가지의 「최종 기입 물리 페이지 어드레스를 시퀀스 기입 블록(77)에 등록」의 처리를 실행하는 것도 가능하다.
단 이 경우, 호스트 장치(5)측으로부터는 시퀀스 기입 종료 커맨드가 수신되고 있으므로(이 경우, 호스트 장치(5)측에서 시퀀스 기입해야 할 것으로 하고 있는 데이터가 그 이상 존재하지 않는다고 간주할 수 있음), 이후에 있어서, 해당 시퀀스 기입에서 사용된 시퀀스 기입 블록(50)에 추기가 발생할 가능성은 낮고, 따라서 시퀀스 기입 블록 관리 테이블(77)에 빈 부분을 확보하는 의미에서는, 상기한 바와 같은 시퀀스 기입 블록의 가비지 컬렉션을 실행하는 쪽이 바람직하다고 할 수 있다.
스텝 S603의 블록 등록 처리, 또는 스텝 S604의 가비지 컬렉션 처리의 실행 후에는, 이 도면에 도시하는 시퀀스 기입 종료 커맨드 대응 처리는 종료된다.
도 29에 의해, 제2 실시 형태의 경우에 있어서의 논리 블록내 기입 처리(S103)에 대해서 설명한다.
도 29에 있어서, 스텝 S701에서는, 이전의 스텝 S201과 마찬가지로, 기입 사이즈가 물리 블록 사이즈와 일치하는지 여부의 판별을 행한다.
스텝 S701에 있어서, 기입 사이즈가 물리 블록 사이즈와 일치한다고 해서 긍정 결과가 얻어진 경우에는, 이 경우도 도 16에 도시하는 블록 레벨 기입을 위한 처리로 이행한다.
한편 스텝 S701에 있어서, 기입 사이즈가 물리 블록 사이즈와 일치하지 않는다는 부정 결과가 얻어진 경우에는, 스텝 S702에 있어서, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재하는지 여부를 판별한다. 이 스텝 S702의 판별 처리는, 이전의 스텝 S202의 판별 처리와 마찬가지이다.
스텝 S702에 있어서, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재하지 않는다고 해서 부정 결과가 얻어진 경우에는, 도 21에 도시한 페이지 레벨 기입을 위한 처리로 이행한다.
한편 스텝 S702에 있어서, 논리 블록이 시퀀스 기입 블록 관리 테이블(77)에 존재한다고 해서 긍정 결과가 얻어진 경우에는, 스텝 S703으로 진행하여, 시퀀스 기입을 행한다.
여기서, 호스트 장치(5)측으로부터 시퀀스 기입 개시 커맨드의 수신이 있는 경우에는, 이전의 도 27의 처리에 수반하여 반드시 해당 논리 블록에 관한 시퀀스 기입 블록(50)이 할당 완료로 되어 있으므로, 스텝 S703에 있어서는, 그 할당 완료의 시퀀스 기입 블록(50)에 대해서, 시퀀스 기입을 실행하게 된다.
스텝 S703의 시퀀스 기입의 실행 후에는, 스텝 S704에 있어서, 최종 기입 물리 페이지 어드레스를 시퀀스 기입 블록(77)에 등록하는 처리를 실행한다.
해당 스텝 S703의 등록 처리의 실행 후, 이 경우에 있어서의 논리 블록내 기입 처리(S103)는 종료된다.
상기에 의해 설명한 제2 실시 형태에 있어서도, 플래시 메모리 장치(1)에 있어서 블록 사이즈 미만의 데이터에 대해서 시퀀스 기입이 가능하게 되는 점은 제1 실시 형태와 마찬가지로 되므로, 제1 실시 형태와 마찬가지로, 종래와의 비교에서 기록 속도의 고속화가 도모된다.
또한, 데이터 전송용의 버퍼 메모리 사이즈가 블록 사이즈보다도 작은 사이즈로 되는 호스트 장치(5)로부터의 기입이 행하여지는 경우에도, 고속인 데이터 기록을 실현할 수 있다고 하는 점도, 제1 실시 형태의 경우와 마찬가지이다.
<3. 변형예>
이상, 본 기술에 따른 각 실시 형태에 대해서 설명했지만, 본 기술은 상기에 의해 설명한 구체예에 한정되는 것은 아니다.
예를 들면 스토리지 시스템을 구성하는 호스트 장치(5)는, 디지털 카메라 장치에 한정되는 것이 아니라, 예를 들면 퍼스널 컴퓨터 등의 다른 정보 처리 장치로 할 수도 있다.
또한, 플래시 메모리 장치(1)로서는, 메모리 카드로서의 카드 형상의 메모리 장치에 한정되는 것이 아니라, 예를 들면 SSD(Solid State Drive) 등, 플래시 메모리를 구비한 메모리 장치이면 된다.
또한 본 기술은, 이하의 (1)?(15)에 나타내는 구성으로 하는 것도 가능하다.
(1) 플래시 메모리부와,
상기 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 제어부를 구비하는 플래시 메모리 장치.
(2) 상기 제어부는,
외부 장치로부터 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만인지 여부를 판별하고, 그 결과에 기초하여, 상기 블록 사이즈 미만의 데이터가 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 상기 (1)에 기재된 플래시 메모리 장치.
(3) 상기 제어부는,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n(n은 2 이상의 자연수) 이상인지 여부를 또한 판별하고,
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상인 경우에, 상기 시퀀스 기입이 행하여지도록 제어하는 상기 (2)에 기재된 플래시 메모리 장치.
(4) 상기 제어부는,
상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스 및 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 것인지 여부를 또한 판별하고,
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상이고, 또한, 상기 기입 개시 논리 페이지 어드레스 및 상기 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 경우에, 상기 시퀀스 기입이 행하여지도록 제어하는 상기 (3)에 기재된 플래시 메모리 장치.
(5) 상기 제어부는,
시퀀스 기입 블록으로서 사용 중인 블록 수가 상한값에 도달해 있는지 여부를 판별하고, 상기 시퀀스 기입 블록으로서 사용 중인 블록 수가 상기 상한값에 도달해 있는 경우에는, 사용 중인 상기 시퀀스 기입 블록 중에서 선택한 시퀀스 기입 블록에 대해서, 시퀀스 기입 블록의 가비지 컬렉션을 실행하는 상기 (4)에 기재된 플래시 메모리 장치.
(6) 상기 제어부는,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부를 또한 판별하고,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있고, 기입 도중의 시퀀스 기입 블록이 존재하는 경우에는,
적어도 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것인지 여부를 판별한 결과에 기초하여, 상기 기입 지시된 데이터의 상기 기입 도중의 시퀀스 기입 블록에의 추기가 행하여지도록 제어하는 상기 (2)에 기재된 플래시 메모리 장치.
(7) 상기 제어부는,
상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
상기 기입 도중의 시퀀스 기입 블록이 존재하는 경우이고, 또한, 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것이며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수인 경우에, 상기 기입 지시된 데이터의 상기 기입 도중의 시퀀스 기입 블록에의 추기가 행하여지도록 제어하는 상기 (6)에 기재된 플래시 메모리 장치.
(8) 상기 제어부는,
상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상이고, 또한, 상기 기입 개시 논리 페이지 어드레스 및 상기 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 것이며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수인 경우에, 시퀀스 기입이 행하여지도록 제어하는 상기 (4)에 기재된 플래시 메모리 장치.
(9) 상기 제어부는,
상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 블록 사이즈와 일치하는 경우에는, 상기 기입 지시된 데이터가 블록 레벨 관리 하에서 기입되도록 제어하는 상기 (2)?(8)에 기재된 플래시 메모리 장치.
(10) 상기 제어부는,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n(n은 2 이상의 자연수) 이상인지 여부를 또한 판별하고,
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상이 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는 상기 (2)?(9)에 기재된 플래시 메모리 장치.
(11) 상기 제어부는,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스 및 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 것인지 여부를 또한 판별하고,
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스 및 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리킨다는 조건이 충족되지 않는 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는 상기 (2)?(10)에 기재된 플래시 메모리 장치.
(12) 상기 제어부는,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수가 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는 상기 (2)?(11)에 기재된 플래시 메모리 장치.
(13) 상기 제어부는,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것인지 여부를 또한 판별하고,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있고 기입 도중의 시퀀스 기입 블록이 존재하는 경우이고, 또한, 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것이 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는 상기 (2)?(12)에 기재된 플래시 메모리 장치.
(14) 상기 제어부는,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있고 기입 도중의 시퀀스 기입 블록이 존재하는 경우이고, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수가 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는 상기 (2)?(13)에 기재된 플래시 메모리 장치.
(15) 상기 제어부는,
외부 장치로부터의 시퀀스 기입 지시에 따라, 상기 플래시 메모리부의 블록 사이즈 미만의 데이터가 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 상기 (1)에 기재된 플래시 메모리 장치.
1 : 플래시 메모리 장치
2 : 외부 인터페이스
3 : 메모리 컨트롤러
4 : 플래시 메모리
4A : 유저 데이터 기록 영역
4B : 관리 정보 기록 영역
5 : 호스트 장치
50 : 시퀀스 기입 관리 블록
77 : 시퀀스 기입 블록 관리 테이블.

Claims (18)

  1. 플래시 메모리 장치로서,
    플래시 메모리부와,
    상기 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 제어부를 구비하는, 플래시 메모리 장치.
  2. 제1항에 있어서,
    상기 제어부는,
    외부 장치로부터 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만인지 여부를 판별하고, 그 결과에 기초하여, 상기 블록 사이즈 미만의 데이터가 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는, 플래시 메모리 장치.
  3. 제2항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n(n은 2 이상의 자연수) 이상인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상인 경우에, 상기 시퀀스 기입이 행하여지도록 제어하는, 플래시 메모리 장치.
  4. 제3항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스 및 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 것인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상이고, 또한, 상기 기입 개시 논리 페이지 어드레스 및 상기 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 경우에, 상기 시퀀스 기입이 행하여지도록 제어하는, 플래시 메모리 장치.
  5. 제4항에 있어서,
    상기 제어부는,
    시퀀스 기입 블록으로서 사용 중인 블록 수가 상한값에 도달해 있는지 여부를 판별하고, 상기 시퀀스 기입 블록으로서 사용 중인 블록 수가 상기 상한값에 도달해 있는 경우에는, 사용 중인 상기 시퀀스 기입 블록 중에서 선택한 시퀀스 기입 블록에 대해서, 시퀀스 기입 블록의 가비지 컬렉션을 실행하는, 플래시 메모리 장치.
  6. 제2항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부를 또한 판별하고,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있고, 기입 도중의 시퀀스 기입 블록이 존재하는 경우에는, 적어도 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것인지 여부를 판별한 결과에 기초하여, 상기 기입 지시된 데이터의 상기 기입 도중의 시퀀스 기입 블록에의 추기가 행하여지도록 제어하는, 플래시 메모리 장치.
  7. 제6항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
    상기 기입 도중의 시퀀스 기입 블록이 존재하는 경우이고, 또한, 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것이며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수인 경우에, 상기 기입 지시된 데이터의 상기 기입 도중의 시퀀스 기입 블록에의 추기가 행하여지도록 제어하는, 플래시 메모리 장치.
  8. 제4항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상이고, 또한, 상기 기입 개시 논리 페이지 어드레스 및 상기 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 것이며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수인 경우에, 시퀀스 기입이 행하여지도록 제어하는, 플래시 메모리 장치.
  9. 제2항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 블록 사이즈와 일치하는 경우에는, 상기 기입 지시된 데이터가 블록 레벨 관리 하에서 기입되도록 제어하는, 플래시 메모리 장치.
  10. 제2항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n(n은 2 이상의 자연수) 이상인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈의 1/n 이상이 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는, 플래시 메모리 장치.
  11. 제2항에 있어서,
    상기 제어부는, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
    상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스 및 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리키는 것인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스 및 기입 개시 논리 섹터 어드레스가 모두 선두 어드레스를 가리킨다는 조건이 충족되지 않는 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는, 플래시 메모리 장치.
  12. 제2항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
    상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터의 사이즈가 상기 블록 사이즈 미만이고, 또한, 상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있지 않으며, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수가 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는, 플래시 메모리 장치.
  13. 제2항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
    상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있고 기입 도중의 시퀀스 기입 블록이 존재하는 경우이고, 또한, 상기 기입 지시된 데이터의 기입 개시 논리 페이지 어드레스가 상기 기입 도중의 시퀀스 기입 블록의 최종 기입 논리 페이지 어드레스에 연속하는 것이 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는, 플래시 메모리 장치.
  14. 제2항에 있어서,
    상기 제어부는,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있는지 여부, 및
    상기 기입 지시된 데이터의 사이즈가 상기 플래시 메모리부의 페이지 사이즈의 배수인지 여부를 또한 판별하고,
    상기 기입 지시된 데이터가 속하는 논리 블록 어드레스 내의 데이터가 과거에 시퀀스 기입되어 있고 기입 도중의 시퀀스 기입 블록이 존재하는 경우이고, 또한, 상기 기입 지시된 데이터의 사이즈가 상기 페이지 사이즈의 배수가 아닌 경우에는, 상기 기입 지시된 데이터가 페이지 레벨 관리 하에서 기입되도록 제어하는, 플래시 메모리 장치.
  15. 제1항에 있어서,
    상기 제어부는,
    외부 장치로부터의 시퀀스 기입 지시에 따라, 상기 플래시 메모리부의 블록 사이즈 미만의 데이터가 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는, 플래시 메모리 장치.
  16. 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는, 메모리 제어 장치.
  17. 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는, 메모리 제어 방법.
  18. 플래시 메모리부와,
    상기 플래시 메모리부에의 데이터의 기입을 지시하는 지시부와,
    상기 기입 지시부에 의해 기입이 지시된, 상기 플래시 메모리부의 블록 사이즈 미만의 데이터가, 상기 플래시 메모리부에 시퀀스 기입되도록 제어하는 제어부를 구비하는, 스토리지 시스템.
KR1020120043660A 2011-05-09 2012-04-26 플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템 KR20120125950A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020120043660A KR20120125950A (ko) 2011-05-09 2012-04-26 플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2011-104519 2011-05-09
KR1020120043660A KR20120125950A (ko) 2011-05-09 2012-04-26 플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템

Publications (1)

Publication Number Publication Date
KR20120125950A true KR20120125950A (ko) 2012-11-19

Family

ID=47511426

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120043660A KR20120125950A (ko) 2011-05-09 2012-04-26 플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템

Country Status (1)

Country Link
KR (1) KR20120125950A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11099981B2 (en) 2018-05-08 2021-08-24 SK Hynix Inc. Memory system and operating method thereof

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11099981B2 (en) 2018-05-08 2021-08-24 SK Hynix Inc. Memory system and operating method thereof

Similar Documents

Publication Publication Date Title
JP5708216B2 (ja) フラッシュメモリ装置、メモリ制御装置、メモリ制御方法、ストレージシステム
US8386698B2 (en) Data accessing method for flash memory and storage system and controller using the same
KR101663667B1 (ko) 플래시 메모리의 주소 매핑에 의한 데이터 관리 방법 및 장치
US8516182B2 (en) Controller and memory system for managing data
KR100816761B1 (ko) 낸드 플래시 메모리 및 에스램/노어 플래시 메모리를포함하는 메모리 카드 및 그것의 데이터 저장 방법
US8949515B2 (en) Storage device and memory controller
EP1898312A1 (en) Memory controller, nonvolatile storage device, nonvolatile storage system, and data writing method
US11455112B2 (en) Non-volatile memory device, non-volatile memory control device, and non-volatile memory control method
US20150161039A1 (en) Data erasing method, memory control circuit unit and memory storage apparatus
JP2008009527A (ja) メモリシステム
US10203899B2 (en) Method for writing data into flash memory apparatus, flash memory apparatus, and storage system
KR102349381B1 (ko) 데이터 저장 장치 및 그것의 동작 방법
US10083181B2 (en) Method and system for storing metadata of log-structured file system
US20100318726A1 (en) Memory system and memory system managing method
JP2015191336A (ja) メモリ制御装置、情報処理装置とその制御方法、及びプログラム
CN110389712B (zh) 数据写入方法及其装置、固态硬盘和计算机可读存储介质
US20100180072A1 (en) Memory controller, nonvolatile memory device, file system, nonvolatile memory system, data writing method and data writing program
JP4242245B2 (ja) フラッシュrom制御装置
US9304906B2 (en) Memory system, controller and control method of memory
JP2005115562A (ja) フラッシュrom制御装置
KR20120125950A (ko) 플래시 메모리 장치, 메모리 제어 장치, 메모리 제어 방법, 스토리지 시스템
JP2018185842A (ja) メモリ制御装置及び情報処理システム
JP2008299455A (ja) データ記憶装置及びデータ管理方法
JP4985108B2 (ja) データ記憶装置およびその制御方法
JP2008299513A (ja) データ記憶装置およびその制御方法

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid