KR101451482B1 - 데이터 이용가능성의 마운트타임 조정 - Google Patents

데이터 이용가능성의 마운트타임 조정 Download PDF

Info

Publication number
KR101451482B1
KR101451482B1 KR1020120143397A KR20120143397A KR101451482B1 KR 101451482 B1 KR101451482 B1 KR 101451482B1 KR 1020120143397 A KR1020120143397 A KR 1020120143397A KR 20120143397 A KR20120143397 A KR 20120143397A KR 101451482 B1 KR101451482 B1 KR 101451482B1
Authority
KR
South Korea
Prior art keywords
nvm
file system
data
lba
availability
Prior art date
Application number
KR1020120143397A
Other languages
English (en)
Other versions
KR20130066525A (ko
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 애플 인크.
Publication of KR20130066525A publication Critical patent/KR20130066525A/ko
Application granted granted Critical
Publication of KR101451482B1 publication Critical patent/KR101451482B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1435Saving, restoring, recovering or retrying at system level using file system or storage system metadata
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1417Boot up procedures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1847File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Abstract

데이터 이용가능성의 마운트타임 조정을 위한 시스템 및 방법이 개시된다. 시스템 부트업 동안, 비휘발성 메모리(NVM) 드라이버가 열거될 수 있고, NVM 드라이버 맵핑이 획득될 수 있다. NVM 드라이버 맵핑은 NVM 내의 LBA들의 실제 이용가능성을 포함할 수 있다. 다음으로, 파일 시스템이 마운트될 수 있고, 파일 시스템 할당 상태가 생성될 수 있다. 파일 시스템 할당 상태는 LBA들의 이용가능성에 대한 파일 시스템의 뷰를 나타낼 수 있다. 후속하여, 데이터 이용가능성 조정이 수행될 수 있다. 즉, 임의의 모순을 드러내기 위해 파일 시스템 할당 상태 및 NVM 드라이버 맵핑이 서로 오버레이되고 비교될 수 있다.

Description

데이터 이용가능성의 마운트타임 조정{MOUNT-TIME RECONCILIATION OF DATA AVAILABILITY}
대용량 저장을 위하여 NAND 플래시 메모리 및 기타 유형의 비휘발성 메모리(NVM)가 흔하게 이용된다. 예를 들어, 휴대용 미디어 플레이어와 같은 소비자 가전은 음악, 비디오 및 다른 미디어를 저장하기 위해 플래시 메모리를 종종 포함한다.
시스템은 NVM 내에 상이한 유형의 파일들을 저장할 수 있다. 시스템이 에러를 경험할 때, NVM 내에 저장된 파일들에 대한 파일 시스템의 뷰와 NVM 내에 저장된 실제 파일들 간에 모순이 발생할 수 있다. 결국 파일 시스템이 특정 파일에 액세스할 필요가 있을 때, 시스템은 파일이 손상되었거나 NVM 내에 존재하지 않음을 발견할 수 있다. 그리고, 이것은 파일 시스템이 외부 소스로부터 그 파일을 복구하려고 시도하게 할 수 있다. 시스템 동작 동안의 모순 발견 및 후속 복구는 사용자 경험에 지장을 줄 수 있다.
데이터 이용가능성(data availability)의 마운트타임 조정(mount-time reconciliation)을 위한 시스템 및 방법이 개시된다. 시스템 부트업 동안, 비휘발성 메모리(NVM) 드라이버가 열거될(enumerated) 수 있고, NVM 드라이버 맵핑이 획득될 수 있다. NVM 드라이버 맵핑은 NVM 내의 LBA들의 실제 이용가능성을 포함할 수 있다. 다음으로, 파일 시스템이 마운트될 수 있고, 파일 시스템 할당 상태가 생성될 수 있다. 파일 시스템 할당 상태는 LBA들의 이용가능성에 대한 파일 시스템의 뷰를 나타낼 수 있다. 후속하여, 데이터 이용가능성 조정이 수행될 수 있다. 즉, 임의의 모순을 드러내기 위해 파일 시스템 할당 상태 및 NVM 드라이버 맵핑이 서로 오버레이되고 비교될 수 있다.
상기한 것과 그 외의 본 발명의 양태들 및 이점들은 이하의 상세한 설명을 첨부 도면들과 함께 고찰해보면 더 분명해질 것이며, 그 도면들에서 유사한 참조 기호는 전체에 걸쳐서 유사한 부분들을 지칭한다.
도 1 및 도 2는 본 발명의 다양한 실시예들에 따라 구성된 전자 디바이스들의 블록도이다.
도 3은 본 발명의 다양한 실시예들에 따른 시스템 부트업 동안의 데이터 이용가능성 조정을 위한 예시적인 프로세스의 흐름도이다.
도 4는 본 발명의 다양한 실시예들에 따른 파일 시스템 및 비휘발성 메모리 드라이버의 관점들로부터의 이용가능성 상태들의 예시적인 맵핑의 그래픽 도면이다.
도 5는 본 발명의 다양한 실시예들에 따라 데이터를 복구하기 위한 예시적인 프로세스의 흐름도이다.
도 6은 본 발명의 다양한 실시예들에 따라 데이터 이용가능성을 결정하기 위한 예시적인 프로세스의 흐름도이다.
도 7은 본 발명의 다양한 실시예들에 따라 논리-대-물리 맵핑을 제공하기 위해 이용되는 예시적인 트리의 블록도이다.
도 8은 본 발명의 다양한 실시예들에 따라 정정불가능한 데이터를 처리하기 위한 예시적인 프로세스의 흐름도이다.
데이터 이용가능성의 마운트타임 조정(mount-time reconciliation)을 위한 시스템 및 방법이 제공된다. 시스템 부트업 동안 비휘발성 메모리(NVM) 드라이버가 열거될 수 있고, NVM 드라이버 맵핑이 획득될 수 있다. NVM 드라이버 맵핑은 NVM 내의 LBA들의 실제 이용가능성을 포함할 수 있다.
다음으로, 파일 시스템이 마운트될 수 있다. 마운트 프로세스 동안, 파일 시스템 할당 상태가 생성될 수 있고, 이것은 LBA들의 이용가능성에 대한 파일 시스템의 뷰를 나타낼 수 있다. 후속하여, 데이터 이용가능성 조정이 수행될 수 있다. 즉, 임의의 모순을 드러내기 위해 파일 시스템 할당 상태 및 NVM 드라이버 맵핑이 서로 오버레이되고 비교될 수 있다.
구체적으로, 파일 시스템은 파일 시스템 할당 상태 내의 각각의 이용가능한 LBA 범위에 대하여, 시스템의 NVM 인터페이스에 커맨드를 전송할 수 있다. 커맨드를 수신하면, NVM 인터페이스는 NVM 드라이버 맵핑이 일치 상태(consistent state)를 갖는지를 판정할 수 있다.
NVM 인터페이스가 NVM 드라이버 맵핑이 불일치한다(예를 들어, LBA 범위의 적어도 한 부분이 이용불가능함)고 판정하는 경우, NVM 인터페이스는 이러한 불일치를 나타내는 정보를 파일 시스템에 전송할 수 있다. 여기에서 이용될 때, LBA 범위(LBA range)가 알려진 정정불가능(uncorrectable) 또는 맵핑해제(unmapped)일 때, 그 LBA 범위는 "이용불가능"이다. 이 정보를 수신한 때, 파일 시스템은 LBA 범위의 적어도 한 부분에 연관된 데이터를 복구하기 위한 정책을 불러올 수 있다.
도 1은 전자 디바이스(100)의 블록도를 나타낸다. 일부 실시예들에서, 전자 디바이스(100)는 휴대용 미디어 플레이어, 셀룰러 전화, 포켓사이즈 개인용 컴퓨터, PDA(personal digital assistance), 데스크탑 컴퓨터, 랩탑 컴퓨터, 및 임의의 다른 적절한 유형의 전자 디바이스일 수 있거나 그들을 포함할 수 있다.
전자 디바이스(100)는 SoC(system-on-a-chip)(110) 및 비휘발성 메모리(NVM)(120)를 포함할 수 있다. 비휘발성 메모리(120)는 부동 게이트 또는 차지 트랩(charge trapping) 기술에 기초하는 NAND 플래시 메모리, NOR 플래시 메모리, EPROM(erasable programmable read only memory), EEPROM(electrically erasable programmable read only memory), FRAM(Ferroelectric RAM), MRAM(magnetoresistive RAM) 또는 그들의 임의의 조합을 포함할 수 있다.
NVM(120)은 최소 소거가능 단위일 수 있는 "블록"들로 편성될(organized) 수 있으며, 프로그래밍 또는 판독가능한 최소 단위일 수 있는 "페이지"들로 더 편성될 수 있다. 일부 실시예들에서, NVM(120)은 다수의 집적 회로를 포함할 수 있으며, 각각의 집적 회로는 다수의 블록을 가질 수 있다. 대응하는 집적 회로들로부터의 메모리 위치들(예를 들어, 블록들 또는 블록들의 페이지들)이 "수퍼 블록들"을 형성할 수 있다. NVM(120)의 각각의 메모리 위치(예를 들어, 페이지 또는 블록)는 물리 어드레스(예를 들어, 물리 페이지 어드레스 또는 물리 블록 어드레스)를 이용하여 참조될 수 있다.
일부 실시예들에서, NVM(120)의 하나 이상의 지정된 블록이 컨텍스트 정보를 저장할 수 있다. 여기에서 이용될 때, "컨텍스트 정보"는 특정 시점에서의 전체 NVM의 상태에 연관된 정보를 지칭할 수 있다. 예를 들어, 컨텍스트 정보는 특정 시간에서의 NVM(120)의 블록들에 대한 논리-대-물리 맵핑들을 포함할 수 있다. 여기에서 이용될 때, "논리-대-물리 맵핑들"은 데이터 페이지들의 하나 이상의 논리 어드레스들(예를 들어, 논리 섹터)과 물리 페이지 어드레스들 간의 맵핑일 수 있다.
일부 실시예들에서, NVM(120)의 하나 이상의 블록은 블록 컨텐츠 테이블(TOC : table-of-contents)을 포함할 수 있다. 각각의 블록 TOC는 블록의 페이지들을 대응하는 논리 어드레스들에 맵핑하는 정보를 포함할 수 있다. 일부 실시예들에서, 블록 TOC는 블록 내에 프로그래밍되어 있는 각 페이지에 대한 논리 어드레스(예를 들어, 논리 블록 어드레스(LBA) 또는 논리 페이지 번호)만을 포함할 수 있다. 다른 실시예들에서, 블록 TOC는 페이지에 대해 행해진 갱신들의 상대적 연령(예를 들어, 페이지가 다른 페이지들에 비하여 언제 갱신되었는지)도 포함할 수 있다. 그러한 실시예들에서, 블록 TOC는 프로그래밍되는 각 페이지에 대한 논리 어드레스-연령 쌍을 포함할 수 있다.
SoC(110)는 SoC 제어 회로(112), 메모리(114) 및 NVM 인터페이스(118)를 포함할 수 있다. SoC 제어 회로(112)는 SoC(110)의 일반적인 동작 및 기능, 및 SoC(110) 또는 디바이스(100)의 다른 컴포넌트들을 제어할 수 있다. 예를 들어, 사용자 입력 및/또는 애플리케이션 또는 운영 체제의 명령어들에 응답하여, SoC 제어 회로(112)는 NVM(120)으로부터 데이터를 획득하거나 거기에 데이터를 저장하기 위해 NVM 인터페이스(118)에 판독 또는 기입 커맨드를 발행할 수 있다. 명확히 하기 위하여, SoC 제어 회로(112)가 저장 또는 검색을 위해 요청할 수 있는 데이터가 "사용자 데이터"라고 지칭될 수 있지만, 그 데이터는 사용자 또는 사용자 애플리케이션에 직접 연관되지 않을 수도 있다. 오히려, 사용자 데이터는 (예를 들어 애플리케이션 또는 운영 체제를 통해) SoC 제어 회로(112)에 의해 생성 또는 획득되는 디지털 정보의 임의의 적절한 시퀀스일 수 있다.
SoC 제어 회로(112)는 전자 디바이스(100)의 기능성을 운영하도록 동작하는 하드웨어, 소프트웨어 및 펌웨어의 임의의 조합, 및 임의의 컴포넌트들, 회로 또는 로직을 포함할 수 있다. 예를 들어, SoC 제어 회로(112)는 NVM(120) 또는 메모리(114) 내에 저장된 소프트웨어/펌웨어의 제어 하에서 동작하는 하나 이상의 프로세서를 포함할 수 있다.
메모리(114)는 RAM(random access memory)(예를 들어, SRAM(static RAM), DRAM(dynamic random access memory), SDRAM(synchronous dynamic random access memory), DDR(double-data-rate) RAM), 캐시 메모리, ROM(read-only memory), 또는 그들의 임의의 조합과 같은 임의의 적절한 유형의 휘발성 메모리를 포함할 수 있다. 메모리(114)는 비휘발성 메모리(120)에 프로그래밍되거나 그로부터 판독될 사용자 데이터를 임시로 저장할 수 있는 데이터 소스를 포함할 수 있다. 일부 실시예들에서, 메모리(114)는 SoC 제어 회로(112)의 일부로서 구현되는 임의의 프로세서들을 위한 메인 메모리로서 기능할 수 있다.
메모리(114)는 논리-대-물리 맵핑을 저장하기 위한 하나 이상의 데이터 구조를 포함할 수 있다. 예를 들어, 메모리(114)는 LBA 범위들과 NVM(120)의 대응 물리 어드레스들 간의 맵핑을 제공할 수 있는 트리를 포함할 수 있다. 트리들은 이하에서 도 6 및 7을 참조하여 더 상세하게 설명될 것이다.
NVM 인터페이스(118)는 SoC 제어 회로(112)와 NVM(120) 사이에서 인터페이스 또는 드라이버로서 기능하도록 구성된 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 적절한 조합을 포함할 수 있다. NVM 인터페이스(118) 내에 포함된 임의의 소프트웨어 모듈들에 대하여, 대응하는 프로그램 코드는 NVM(120) 또는 메모리(114) 내에 저장될 수 있다.
NVM 인터페이스(118)는 SoC 제어 회로(112)가 NVM(120)에 액세스하고 NVM(120)의 메모리 위치들(예를 들어, 페이지, 블록, 수퍼 블록, 집적 회로) 및 거기에 저장된 데이터(예를 들어, 사용자 데이터)를 관리할 수 있게 해 주는 다양한 기능을 수행할 수 있다. 예를 들어, NVM 인터페이스(118)는 SoC 제어 회로(112)로부터의 판독 또는 기입 요청을 해석하고, 웨어 레벨링(wear leveling)을 수행하고, NVM(120)의 버스 프로토콜과 호환가능한 판독 및 프로그램 명령어들을 생성할 수 있다.
NVM 인터페이스(118) 및 SoC 제어 회로(112)가 별개의 모듈들로서 도시되어 있지만, 이것은 오직 본 발명의 실시예들의 설명을 단순히 하기 위한 것에 지나지 않는다. 이 모듈들은 하드웨어 컴포넌트, 소프트웨어 컴포넌트, 또는 둘 다를 공유할 수 있음을 이해할 것이다. 예를 들어, SoC 제어 회로(112)는 NVM 인터페이스(118)를 위한 소프트웨어 기반 메모리 드라이버를 실행할 수 있다.
일부 실시예들에서, 전자 디바이스(100)는 NVM(120) 및 NVM 인터페이스(118)의 일부 또는 전부(예를 들어, 이하에 논의되는 변환 계층)를 포함하는, 플래시 메모리 드라이브 또는 SD(Secure Digital) 카드와 같은 타겟 디바이스를 포함할 수 있다. 이러한 실시예들에서, SoC(110) 또는 SoC 제어 회로(112)는 타겟 디바이스를 위한 호스트 제어기로서 기능할 수 있다. 예를 들어, 호스트 제어기로서, SoC(110)는 타겟 디바이스에 판독 및 기입 요청을 발행할 수 있다.
도 2는 다양한 실시예들에 따라 전자 디바이스(100)(도 1)의 펌웨어, 소프트웨어 및/또는 하드웨어 컴포넌트의 일부를 더 상세하게 예시할 수 있는, 전자 디바이스(200)의 블록도를 도시한다. 전자 디바이스(200)는 도 1과 관련하여 위에서 설명된 특징들 및 기능성들 중 임의의 것을 가질 수 있고, 그 반대로도 된다. 도시된 바와 같이, 점선들은 층들의 경계를 표시한다. 어느 컴포넌트들이 경계선 안에 들어오는지에 대한 도시는 예시적인 것일 뿐이며, 하나 이상의 컴포넌트가 다른 층과 제휴할 수 있음이 이해된다.
전자 디바이스(200)는 파일 시스템(210), NVM 드라이버(212), NVM 버스 제어기(216) 및 NVM(220)을 포함할 수 있다. 일부 실시예들에서, 파일 시스템(210) 및 NVM 드라이버(212)는 소프트웨어 또는 펌웨어 모듈일 수 있고, NVM 버스 제어기(216) 및 NVM(220)은 하드웨어 모듈일 수 있다. 따라서, 이러한 실시예들에서, NVM 드라이버(212)는 NVM 인터페이스(218)의 소프트웨어 또는 펌웨어 양태를 표현할 수 있고, NVM 버스 제어기(216)는 NVM 인터페이스(218)의 하드웨어 양태를 표현할 수 있다.
파일 시스템(210)은 FAT(File Allocation Table) 파일 시스템 또는 HFS+(Hierarchical File System Plus)와 같은 임의의 적절한 유형의 파일 시스템을 포함할 수 있으며, 전자 디바이스(200)의 운영 체제의 일부(예를 들어, 도 1의 SoC 제어 회로(112)의 일부)일 수 있다. 일부 실시예들에서, 파일 시스템(210)은 페이지들의 논리-대-물리 맵핑을 제공하는 플래시 파일 시스템을 포함할 수 있다. 이러한 실시예들에서, 파일 시스템(210)은 이하에 논의되는 NVM 드라이버(212)의 기능성 중 일부 또는 전부를 수행할 수 있고, 따라서 파일 시스템(210) 및 NVM 드라이버(212)는 별개의 모듈들일 수도 있고 아닐 수도 있다.
파일 시스템(210)은 애플리케이션 및 운영 체제를 위해 파일 및 폴더 구조들을 관리할 수 있다. 파일 시스템(210)은 전자 디바이스(200) 상에서 실행되는 애플리케이션 또는 운영 체제의 제어 하에서 동작할 수 있으며, 애플리케이션 또는 운영 체제가 정보가 NVM(220)으로부터 판독되거나 거기에 저장될 것을 요청할 때 NVM 드라이버(212)에 기입 및 판독 커맨드들을 제공할 수 있다. 파일 시스템(210)은 각각의 판독 또는 기입 커맨드와 함께, 어디에서 사용자 데이터가 판독 또는 기입되어야 하는지를 나타내는 논리 어드레스(예를 들어, 논리 페이지 어드레스 또는 페이지 오프셋을 갖는 LBA)를 제공할 수 있다.
파일 시스템(210)은 NVM(220)과 직접 호환가능하지 않은 판독 및 기입 요청을 NVM 드라이버(212)에 제공할 수 있다. 예를 들어, 논리 어드레스는 하드 드라이브 기반 시스템에 전형적인 규약 또는 프로토콜을 이용할 수 있다. 하드 드라이브 기반 시스템은 플래시 메모리와 달리 블록 소거를 먼저 수행하지 않고서도 메모리 위치에 덮어쓰기할 수 있다. 더욱이, 하드 드라이브는 디바이스의 수명을 증가시키기 위한 웨어 레벨링을 필요로 하지 않을 수 있다. 그러므로, NVM 인터페이스(218)는 NVM(220)에 적합한 방식으로 파일 시스템 요청들을 처리하고 다른 관리 기능들을 수행하기 위해, 메모리 특유, 벤더 특유 또는 둘 다인 임의의 기능을 수행할 수 있다.
NVM 드라이버(212)는 변환 계층(214)을 포함할 수 있다. 일부 실시예들에서, 변환 계층(214)은 FTL(flash translation layer)일 수도 있고 그것을 포함할 수도 있다. 기입 커맨드 시에, 변환 계층(214)은 제공된 논리 어드레스를 NVM(220) 상의 소거되어 비어있는 물리 위치에 맵핑할 수 있다. 판독 커맨드 시에, 변환 계층(214)은 요청된 데이터가 저장되어 있는 물리 어드레스를 결정하기 위해, 제공된 논리 어드레스를 이용할 수 있다. 각각의 NVM은 NVM의 크기 또는 벤더에 따라 상이한 레이아웃을 가질 수 있으므로, 이러한 맵핑 동작은 메모리 및/또는 벤더 특유일 수 있다. 변환 계층(214)은 논리-대-물리 어드레스 맵핑 외에, 임의의 다른 적절한 기능들을 수행할 수 있다. 예를 들어, 변환 계층(214)은 가비지 컬렉션(GC) 및 웨어 레벨링과 같이 플래시 변환 계층들에 전형적일 수 있는 임의의 다른 기능들을 수행할 수 있다.
예를 들어, 변환 계층(214)은 소거를 위해 NVM(220)의 프로그래밍된 블록을 비우기 위해 가비지 컬렉션을 수행할 수 있다. 메모리 위치들은 비워지고 소거되고 나면, 예를 들어 파일 시스템(210)으로부터 수신된 새로운 사용자 데이터를 저장하기 위해 이용될 수 있다. 일부 경우들에서, GC 프로세스는 프로그래밍된 블록으로부터의 유효 데이터를 소거된 메모리 위치를 갖는 다른 블록에 복제하고, 그에 의해 프로그래밍된 블록 내의 유효 데이터를 무효화하는 것을 수반할 수 있다. 프로그래밍된 블록 내의 메모리 위치들이 전부 무효화되고 나면, 변환 계층(214)은 버스 제어기(216)에게 프로그래밍된 블록에 대한 소거 동작을 수행할 것을 지시할 수 있다. 여기에서 이용될 때, "유효 데이터"는 하나 이상의 논리 어드레스(예를 들어, LBA)에 대응하는 가장 최근의 기입 요청에 응답하여 프로그래밍된 사용자 데이터를 지칭할 수 있고, 그러므로 하나 이상의 논리 어드레스에 대한 사용자 데이터의 유효 버전일 수 있다.
NVM 드라이버(212)는 NVM 액세스 커맨드(예를 들어, 프로그래밍, 판독 및 소거 커맨드)를 완료하기 위해 NVM 버스 제어기(216)와 인터페이스할 수 있다. 버스 제어기(216)는 NVM(220)에 대한 하드웨어 인터페이스로서 기능할 수 있고, NVM(220)의 버스 프로토콜, 데이터 레이트 및 다른 사양들을 이용하여 NVM(220)과 통신할 수 있다.
NVM 인터페이스(218)는 여기에서 때때로 "메타데이터"라고 지칭되는 메모리 관리 데이터에 기초하여 NVM(220)을 관리할 수 있다. 메타데이터는 NVM 드라이버(212)에 의해 생성될 수 있거나, NVM 드라이버(212)의 제어 하에서 동작하는 모듈에 의해 생성될 수 있다. 예를 들어, 메타데이터는 논리 어드레스와 물리 어드레스 간의 맵핑, 불량 블록 관리, 웨어 레벨링, 데이터 에러를 검출하거나 정정하기 위해 이용되는 에러 정정 코드(ECC) 데이터, 또는 그들의 임의의 조합을 관리하기 위해 이용되는 임의의 정보를 포함할 수 있다. 메타데이터는 논리 어드레스와 같이, 사용자 데이터와 함께 파일 시스템(210)에 의해 제공되는 데이터를 포함할 수 있다. 따라서, 일반적으로, "메타데이터"는 사용자 데이터에 관한, 또는 사용자 데이터에 관련된, 또는 비휘발성 메모리의 동작 및 메모리 위치를 관리하게 위해 일반적으로 이용되는 임의의 정보를 지칭할 수 있다
NVM 인터페이스(218)는 NVM(220) 내에 메타데이터를 저장하도록 구성될 수 있다. 일부 실시예들에서, NVM 인터페이스(218)는 사용자 데이터에 연관된 메타데이터를, 사용자 데이터가 저장되는 것과 동일한 메모리 위치(예를 들어, 페이지)에 저장할 수 있다. 예를 들어, NVM 인터페이스(218)는 사용자 데이터, 관련 논리 어드레스, 및 사용자 데이터를 위한 ECC 데이터를 NVM(220)의 하나 이상의 메모리 위치에 저장할 수 있다. NVM 인터페이스(218)는 또한 사용자 데이터에 관한 다른 유형의 메타데이터를 동일한 메모리 위치 내에 저장할 수 있다.
NVM 인터페이스(218)는 NVM(220)의 파워업 시에 또는 NVM(220)의 동작 동안, 전자 디바이스(200)가 어느 데이터가 그 위치에 상주하는지를 판정할 수 있도록 논리 어드레스를 저장할 수 있다. 구체적으로, 파일 시스템(210)은 사용자 데이터를 그것의 물리 어드레스가 아니라 논리 어드레스에 따라 참조할 수 있으므로, NVM 인터페이스(218)는 사용자 데이터와 논리 어드레스를 함께 저장하여 그들의 연관을 유지할 수 있다. 이러한 방식으로, 물리-대-논리 맵핑을 유지하는 NVM(220) 내의 인덱스 테이블이 오래되어 쓸모없어지더라도, NVM 인터페이스(218)는 여전히 예를 들어 전자 디바이스(200)의 파워업 또는 재부팅시에 적절한 맵핑을 결정할 수 있다.
종래에, 시스템이 시스템 동작 동안 에러(예를 들어, 복구불가능한 NVM 에러, 파일 시스템 에러 또는 일반적인 시스템 에러)를 경험할 때, NVM에 저장된 파일들에 대한 파일 시스템의 뷰와 NVM 내에 저장된 실제 파일들 간에 모순이 발생할 수 있다. 예를 들어, 부정 재부팅(unclean reboot) 동안, 파일 시스템은 파일에 대해 이미 LBA들을 할당했을 수 있지만(예를 들어, 파일이 다운로드되었음을 반영하도록 메타데이터가 갱신되었음), 파일이 아직 NVM에 프로그래밍되지는 않았다.
그러한 상황들에서, 파일 시스템은 하나 이상의 LBA가 이용가능하다고 가정할 수 있지만(예를 들어, 그 하나 이상의 LBA는 NVM 내에 저장된 정정가능한 사용자 데이터에 연관됨), 그 하나 이상의 LBA는 실제로는 이용불가능할 수 있다. 여기에서 이용될 때, "이용불가능한 LBA"는 할당되지 않은/맵핑해제된 LBA(예를 들어, NVM 내에 저장된 사용자 데이터에 연관되지 않은 LBA), 또는 알려진 정정불가능한 LBA(예를 들어, 그 LBA에 연관된 사용자 데이터의 에러 정정 코드가 기능하고 있지 않음)를 지칭할 수 있다. 나중에, 파일 시스템이 그 하나 이상의 LBA에 액세스할 필요가 있을 때, 시스템은 연관된 사용자 데이터가 상실되었거나 손상되었음을 발견할 수 있다. 그러면, 파일 시스템은 하나 이상의 LBA에 연관된 사용자 데이터를 복구하려고 시도할 수 있다. 그러나, 이러한 프로세스는 사용자 경험에 부정적인 영향을 줄 수 있다.
일부 실시예들에서는, 시스템은 사용자가 모순을 인터셉트하기를 기다리는 대신에, 시스템 동작 동안 완전 NVM 스캔을 개시할 수 있다. 시스템은 LBA의 이용가능성에 대한 파일 시스템의 뷰를 NVM 스캔의 결과와 비교함으로써 모순을 검출할 수 있다. 이것은 시간 소모적인 프로세스일 수 있고, 시스템이 애플리케이션 요청들에 완전하게 응답할 필요가 있기 때문이 시스템 동작 동안 문제를 유발할 수 있다.
따라서, 이러한 성능 쟁점들을 회피하기 위해, 시스템은 조기에, 특히 시스템 부트업 동안 조정 프로세스를 개시할 수 있다. 이것은 조정이 시스템 성능에 최소한의 영향을 주면서 수행되는 것을 허용할 수 있다. 구체적으로, 파일 시스템은 부트업 동안에는 아직 애플리케이션들로부터의 판독 및 기입 요청에 응답할 필요가 없으므로, 시스템은 조정 프로세스를 수행할 충분한 시간을 갖는다. 그러므로, 시스템이 완전하게 동작가능하게 되기 전에, 이용가능한 LBA의 베이스라인이 확립될 수 있고, 시스템이 알려진 양호한 상태(known-good state)에 도달할 때까지 시스템 액세스가 연기될 수 있다. 또한, 조정 프로세스는 휘발성 메모리 내에 저장된 작은 데이터 구조만을 다루므로, 조정 프로세스는 NVM의 완전한 판독 패스를 수행하는 프로세스에 비해 훨씬 더 빠르게 수행될 수 있다.
이제 도 3을 참조하면, 시스템 부트업 동안의 데이터 이용가능성 조정을 위한 프로세스(300)가 도시되어 있다. 프로세스(300)는 단계(302)에서 시작할 수 있고, 단계(304)에서, NVM 드라이버(예를 들어, 도 2의 NVM 드라이버(212))가 열거될 수 있다. 구체적으로, 휘발성 메모리(예를 들어, 도 1의 메모리(114))에 저장될 수 있는 NVM 드라이버 맵핑이 열거 동안 획득될 수 있다. NVM 드라이버 맵핑은 NVM 내의 LBA들의 실제 이용가능성을 포함할 수 있다.
NVM 드라이버의 열거는 NVM(예를 들어, 도 1의 NVM(120) 또는 도 2의 NVM(220))을 스캐닝하는 것에 의해 수행될 수 있다. 예를 들어, NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))는 NVM 내에 저장된 컨텍스트 정보를 판독할 수 있고, 여기에서 컨텍스트 정보는 논리-대-물리 맵핑을 포함한다. 다음으로, NVM 인터페이스는 논리-대-물리 맵핑을 휘발성 메모리 내로 로딩할 수 있다. 일부 경우들에서, NVM 인터페이스는 컨텍스트 정보에 의해 캡처되지 않은 논리-대-물리 맵핑을 갖는 하나 이상의 블록(예를 들어, 더 최근에 갱신되지 않은 블록)을 식별할 수 있다. 그 결과로서, NVM 인터페이스는 휘발성 메모리 내의 논리-대-물리 맵핑을 갱신하기 위해 하나 이상의 블록의 블록 TOC를 스캐닝할 수 있다.
일부 실시예들에서, 갱신된 논리-대-물리 맵핑은 예를 들어 트리 또는 맵핑 테이블과 같은 적절한 데이터 구조 내에 저장될 수 있다. NVM 드라이버 열거(예를 들어, 갱신된 논리-대-물리 맵핑)의 결과에 기초하여, NVM 인터페이스는 NVM 드라이버 맵핑을 획득할 수 있고, 이것은 NVM 내의 LBA들의 이용가능성을 나타낼 수 있다. 트리들 및 NVM 드라이버 맵핑들은 도 6 및 도 7에 관련하여 더 상세하게 논의될 것이다.
다른 실시예들에서, NVM 인터페이스는 NVM을 직접 스캐닝함으로써(예를 들어, NVM 내에 저장된 하나 이상의 플래그의 상태를 조사함으로써) NVM 드라이버 맵핑을 획득할 수 있다. 이 프로세스는 이하에서 도 8을 참조하여 더 상세하게 논의될 것이다.
NVM 드라이버 맵핑은 임의의 적절한 형태를 취할 수 있다. 예를 들어, 이제 도 4를 참조하면, 이용가능성 상태들의 예시적인 맵핑이 파일 시스템 및 NVM 드라이버의 관점으로부터 나타나 있다. 구체적으로, NVM 드라이버 맵핑(402)은 NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))에 의해 결정된 대로의 LBA 범위들(15)의 이용가능성을 나타낼 수 있다. 도시된 바와 같이, 이용가능한 LBA들(예를 들어, NVM 내에 저장된 정정가능한 사용자 데이터에 연관된 LBA들)은 수평선에 의해 나타내어져 있는 반면, 이용불가능한 LBA들(예를 들어, 맵핑해제되거나 정정불가능한 LBA들)은 빈 공간으로 나타내어져 있다. 본 기술분야의 숙련된 자는 NVM 드라이버 맵핑(402)이 임의의 적절한 수의 LBA(예를 들어, 시스템의 LBA들 전부)의 이용가능성을 제공할 수 있음을 알 것이다. 단순하게 하기 위해, 도 4에는 NVM 드라이버 맵핑의 부분집합만이 나타나 있다.
NVM 드라이버 맵핑(402)은 휘발성 메모리(예를 들어, 도 1의 메모리(114)) 내에 임의의 적절한 데이터 구조로서, 예를 들어 비트맵, 맵핑 테이블 또는 범위 리스트(range list)로서 저장될 수 있다. 일부 실시예들에서, NVM 드라이버 맵핑(402)의 각 엔트리는 단일 비트에 대응할 수 있다. 즉, 비트맵의 각 엔트리는 이진값(예를 들어, 0 또는 1)을 저장할 수 있고, 여기에서 각각의 이진 값은 연관된 LBA의 이용가능성 상태(예를 들어, 이용가능함 또는 이용불가능함)에 대응할 수 있다. 대안적으로, 비트맵의 각 엔트리는 다수의 비트에 대응할 수 있고, 따라서 연관된 LBA의 이용가능성 상태에 관한 추가 정보(예를 들어, LBA가 이용가능인지, 이용불가능-맵핑해제인지 또는 이용불가능-정정불가능인지)를 저장할 수 있다. NVM 드라이버 맵핑(402)은 LBA들의 실제의 물리적 위치들이 아니라 LBA들의 이용가능성만을 저장하면 되므로, NVM 드라이버 맵핑(402)은 휘발성 메모리 내의 비교적 작은 공간을 점유할 수 있다.
도 3을 다시 참조하면, 단계(306)에서, 파일 시스템(예를 들어, 도 2의 파일 시스템(210))이 마운트될 수 있다. 마운트 프로세스 동안, 파일 시스템 할당 상태가 파일 시스템 저널로부터 생성될 수 있다. 파일 시스템 할당 상태는 LBA들의 이용가능성에 대한 파일 시스템의 뷰를 나타낼 수 있다. 예를 들어, 도 4를 다시 참조하면, 파일 시스템 할당 상태(404)는 LBA 범위들(1-5)의 이용가능성에 대한 파일 시스템의 뷰를 표현할 수 있다. NVM 드라이버 맵핑(402)과 마찬가지로, 파일 시스템 할당 상태(404)는 예를 들어 비트맵, 맵핑 테이블 또는 범위 리스트와 같은 임의의 적절한 데이터 구조로서 저장될 수 있다. 또한, 파일 시스템 할당 상태(404)의 각 엔트리는 하나 이상의 비트에 대응할 수 있다.
도 3의 단계(308)로 계속하여, 부트타임 맵핑해제가 수행될 수 있다. 구체적으로, 파일 시스템은 현재 맵핑해제된 LBA들의 리스트를 NVM 드라이버에 제공할 수 있다. 다음으로, 프로세스(300)는 단계(310)로 이동할 수 있다.
단계(310)에서, 데이터 이용가능성 조정이 수행될 수 있다. 구체적으로, 파일 시스템과 NVM 인터페이스 사이에 새로운 통신 경로가 확립될 수 있고, 임의의 모순을 드러내기 위해, 파일 시스템 할당 상태 및 NVM 드라이버 맵핑이 오버레이되고 서로 비교될 수 있다. 파일 시스템 할당 상태 및 NVM 드라이버 맵핑은 휘발성 메모리 내에 저장된 비교적 작은 데이터 구조들이므로, 비교 프로세스는 비교적 빠를 수 있다.
이상적인 시나리오에서, 파일 시스템 할당 상태 및 NVM 드라이버 맵핑은 동일해야 한다. 그러나, 파일 시스템 할당 상태와 NVM 드라이버 맵핑 간의 임의의 모순은, 파일 시스템이 하나 이상의 LBA가 이용가능하다고 가정하지만 그 LBA들이 NVM 내에서는 실제로 이용불가능한 상황들을 나타낼 수 있다. 이러한 모순들에 기초하여, 파일 시스템은 하나 이상의 이용불가능한 LBA들에 관련된 데이터를 복구하기 위한 복구 프로세스를 개시할 수 있다.
이제 도 5를 참조하면, 데이터를 복구하기 위한 예시적인 프로세스(500)가 도시되어 있다. 프로세스(500)는 단계(502)에서 시작할 수 있고, 단계(504)에서, 파일 시스템(도 2의 파일 시스템(210))은 시스템 부트업 동안 파일 시스템 할당 상태(예를 들어, 도 4의 파일 시스템 할당 상태(404))를 결정할 수 있다.
다음으로, 단계(506)에서, 파일 시스템 할당 상태 내의 각각의 이용가능한 LBA 범위에 대하여, 파일 시스템은 NVM 드라이버 맵핑(예를 들어, 도 4의 NVM 드라이버 맵핑(402))이 일치 상태를 갖는지를 판정하기 위해 NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))에 커맨드를 전송할 수 있다. 일부 경우들에서, 커맨드는 API(application programming interface) 커맨드의 형태로 되어 있을 수 있다. API는 소프트웨어 프로그램 또는 모듈이 다른 소프트웨어와 상호작용할 수 있게 해 주는 임의의 적절한 인터페이스일 수 있다.
따라서, 파일 시스템이 파일 시스템 할당 상태 내에 할당되어 있다고 가정하는 각각의 LBA 범위(예를 들어, 도 4의 LBA 범위(1-5))에 대하여, 파일 시스템은 API 커맨드를 전송할 수 있다. 일부 실시예들에서, 전송되는 API 커맨드는 이하의 포맷을 가질 수 있다.
IsAllValid(LBA, LBA_end, callback) (1)
여기에서, LBA는 LBA 범위의 시작 LBA에 대응할 수 있고, LBA_end는 LBA 범위의 마지막 LBA에 대응할 수 있으며, callback은 콜백 함수에 대응할 수 있다. 콜백 함수는 NVM 인터페이스가 파일 시스템과 통신할 수 있게 해 주는 함수일 수 있다.
다른 실시예들에서, 전송되는 API 커맨드는 이하의 포맷을 가질 수 있다.
IsAllValid(LBA, LBA_end, list[]) (2)
여기에서, LBA는 LBA 범위의 시작 LBA에 대응할 수 있고, LBA_end는 LBA 범위의 마지막 LBA에 대응할 수 있으며, list[]는 항목들이 추가될 수 있는 리스트에 대응할 수 있다. 본 기술분야의 숙련된 자들은 파일 시스템으로부터 전송된 커맨드들이 임의의 적절한 포맷을 가질 수 있음을 알 것이다. 본 기술분야의 숙련된 자들은 파일 시스템이 커맨드 내에 단일 LBA 범위를 전달하는 대신에, 단일 커맨드 내에 LBA 범위들의 리스트를 전달할 수 있다는 것도 알 것이다.
단계(508)로 계속하여, 파일 시스템은 NVM 인터페이스로부터 하나 이상의 LBA 범위가 불일치 상태를 갖는다는 것을 나타내는 정보를 수신할 수 있다. 즉, NVM 드라이버 맵핑과의 비교에 기초하여, NVM 인터페이스는 하나 이상의 LBA 범위의 적어도 한 부분이 이용불가능하다고(맵핑해제되거나 정정불가능하다고) 판정했을 수 있다.
다음으로, 단계(510)에서, 파일 시스템은 하나 이상의 LBA 범위에 연관된 데이터(예를 들어, 사용자 데이터)를 복구하기 위한 정책을 불러올 수 있다. 특정 LBA 범위에 대하여 불러와지는 정책은 그 LBA 범위에 연관된 파일 경로에 기초할 수 있다. 예를 들어, LBA 범위에 연관된 데이터가 임시 데이터인 경우(예를 들어, 디바이스가 부트업될 때마다 데이터가 삭제된 다음 재생성됨), 파일 시스템은 데이터 복구를 중단할 수 있다. 한편, LBA 범위에 연관된 데이터가 파일 시스템에 연관된 내부 데이터인 경우, 파일 시스템은 데이터를 복구하기 위해 내부 데이터를 이용할 수 있다. 또 다른 예로서, LBA 범위에 연관된 데이터가 애플리케이션에 의해 생성된 데이터인 경우, 파일 시스템은 그 데이터를 외부 또는 백업 소스로부터 복구하기 위해, 대응하는 애플리케이션에 연관된 정책을 불러올 수 있다(예를 들어, 외부 소스에 복구 커맨드를 발행하거나, 애플리케이션 백업을 요청하거나, 사용자에게 디바이스를 컴퓨터에 플러그인할 것을 요청함). 데이터를 복구한 때, 파일 시스템은 데이터를 리마운트할 수 있다. 다음으로, 프로세스(500)는 단계(512)에서 종료할 수 있다.
이제 도 6을 참조하면, 데이터 이용가능성을 결정하기 위한 프로세스(600)가 나타나 있다. 프로세스(600)는 단계(602)에서 시작할 수 있고, 단계(604)에서, NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))는 전자 디바이스가 부트업 중임을 검출할 수 있다.
단계(606)로 계속하여, NVM 인터페이스는 휘발성 메모리(예를 들어, 도 1의 메모리(114)) 내에 저장된 데이터 구조(예를 들어, 트리)로부터 LBA들의 이용가능성 상태를 획득할 수 있다.
예를 들어, 이제 도 7을 참조하면, 트리(700)는 LBA들의 이용가능성 상태들을 획득하기 위해 NVM 인터페이스에 의해 사용될 수 있다. 트리(700)는 다수의 노드를 포함할 수 있고, 각각의 노드는 메모리 할당 목적을 위해 일관된 크기를 가질 수 있다(예를 들어, 각각의 노드가 64바이트의 고정된 크기를 가질 수 있음). 단순히 하기 위해, 트리(700)는 적은 수의 노드를 포함하는 것으로 나타나 있다. 따라서, 트리(700) 내의 점선으로 된 박스들은 어떠한 상세로도 나타나 있지 않은 트리(700)의 다른 노드들을 나타낼 수 있다.
추가로, 트리(700)의 각 노드는 하나 이상의 엔트리를 포함할 수 있다. 예를 들어, 도 7에 도시된 바와 같이, 노드(702)는 두 개의 엔트리(예를 들어, 엔트리들(704 및 706))를 포함할 수 있다. 노드의 각 엔트리는 다수의 필드에 연관될 수 있다. 예를 들어, 트리(700)의 각 엔트리는 LBA 범위(712)(예를 들어 런렝스 인코딩 압축된(run-length encoding compressed)(rle 압축된) 범위) 및 페이지 주소(714)에 연관될 수 있다. 추가로, 트리(700)의 각각의 엔트리는 특정한 토큰값을 가진 포인터 필드(716)를 포함할 수 있다. 본 기술분야의 숙련된 자는 트리(700)의 엔트리들(704, 710) 각각이 도 7에 도시되지 않은 추가의 필드들을 포함할 수 있음을 알 것이다. 그러나, 단순히 하기 위하여, 트리(700) 내의 각 엔트리에 대해 3개의 필드만이 나타나 있다.
일부 실시예들에서, 엔트리의 각각의 포인터 필드는 노드 포인터, NVM 포인터, NVM-맵핑해제된 포인터, 또는 NVM-정정불가능한 포인터에 대응하는 값을 가질 수 있다. 예를 들어, 트리(700)의 엔트리(708)는 노드 포인터(720)(예를 들어, 다른 노드(730)에의 포인터)를 포함하는 것으로 나타나 있다. 다른 예로서, 엔트리(706)는 NVM의 물리 어드레스에 대응할 수 있는 NVM 포인터(722)를 포함하는 것으로 나타나 있다.
또 다른 예로서, 엔트리(704)는 NVM에의 포인터일 수 있는 NVM-맵핑해제된 포인터(724)를 포함할 수 있다. 그러나, NVM-맵핑해제된 포인터(724)는 또한 연관된 엔트리(704)가 맵핑해제된 공간에 대응함을 나타낼 수 있다. 다른 예로서, 엔트리(710)는 역시 NVM에의 포인터일 수 있는 NVM-정정불가능한 포인터(726)를 포함하는 것으로 나타날 수 있다. NVM-정정불가능한 포인터(726)는 연관된 엔트리(710)가 정정불가능한 공간에 대응함을 나타낼 수 있다.
일부 실시예들에서, 가비지 컬렉션(GC) 프로세스 동안 트리(700) 내에서 포인터들이 갱신될 수 있다. 예를 들어, 변환 계층(예를 들어, 도 2의 변환 계층(214))이 NVM의 프로그래밍된 블록에 대하여 GC를 수행하고 있는 동안, 변환 계층은 블록 내의 유효 데이터를 판독한 때 그 데이터가 정정불가능한 것을 발견할 수 있다. 변환 계층은 후속하여 데이터를 폐기할 수 있고, 트리(700) 내의 연관된 포인터를 NVM-정정불가능한 포인터로 갱신할 수 있다.
트리(700) 내에 포인터들에 대해 상이한 토큰값들을 유지함으로써, 트리(700)는 LBA들의 할당 상태들(예를 들어, 맵핑/맵핑해제) 및 정정불가능 상태에 관한 정보를 보유할 수 있다. 결과로서, 트리(700)의 포인터들에 대한 상이한 토큰값들을 검출함으로써, NVM 인터페이스는 NVM 드라이버 맵핑(예를 들어, 도 4의 NVM 드라이버 맵핑(402))을 획득할 수 있다. 구체적으로, NVM 포인터들에 연관된 LBA들은 이용가능한 LBA들로 고려될 수 있는 반면에, NVM-맵핑해제된 포인터들 및 NVM-정정불가능한 포인터들에 연관된 LBA들은 이용불가능한 LBA들로 고려될 수 있다.
도 6을 다시 참조하면, 단계(608)에서, NVM 인터페이스는 파일 시스템(도 2의 파일 시스템(210))으로부터 LBA 범위의 데이터 이용가능성에 관한 요청을 수신할 수 있다. 프로세스(500)(도 5)에 관련하여 앞에서 논의된 바와 같이, 요청은 API 커맨드의 형태를 취할 수 있다.
다음으로, 단계(610)에서, NVM 인터페이스는 LBA들의 이용가능성 상태들에 기초하여(예를 들어, 도 4의 NVM 드라이버 맵핑(402)과 같은 NVM 드라이버 맵핑과의 비교에 기초하여) LBA 범위의 적어도 한 부분이 이용불가능한지(예를 들어, 맵핑해제 또는 정정불가능)를 판정할 수 있다. 단계(610)에서, NVM 인터페이스가 LBA 범위의 적어도 한 부분이 이용가능하다고 판정하는 경우, 프로세스(600)는 단계(612)에서 종료할 수 있다.
단계(610)에서, NVM 인터페이스가 대신하여 LBA 범위의 적어도 한 부분이 이용불가능하다고 판정하는 경우, 프로세스(600)는 단계(614)로 이동할 수 있다. 예를 들어, 도 4의 LBA 범위(4)의 데이터 이용가능성에 관한 파일 시스템으로부터의 요청에 응답하여, NVM 인터페이스는 NVM 드라이버 맵핑(402) 내의 LBA 범위(4)의 일부분(예를 들어, LBA 범위(4a)와 LBA 범위(4b) 사이의 부분)이 이용불가능하다고 판정할 수 있다.
다음으로, 단계(614)에서, NVM 인터페이스는 LBA 범위의 적어도 한 부분이 이용불가능하다는 것을 나타내는 정보를 파일 시스템에 전송할 수 있다. NVM 인터페이스는 이러한 이용불가능성을 파일 시스템에게 임의의 적절한 방식으로 통보할 수 있다. 일부 실시예들에서, NVM 인터페이스는 콜백 함수를 호출할 수 있다(예를 들어, 콜백 함수는 파일 시스템에 의해 발행된 본래의 API 커맨드에 의해 제공될 수 있음). 일부 경우들에서, 콜백 함수는 LBA 범위의 이용불가능한 부분이 검출될 때마다 호출될 수 있다. 대안적으로, 콜백 함수는 LBA 범위 내에서 검출된 이용불가능한 부분들의 개수에 무관하게 단 한번만 호출될 수 있다.
다른 실시예들에서, NVM 인터페이스는 적어도 하나의 LBA 범위를 API 커맨드에 연관된 리스트에 첨부할 수 있다(예를 들어, 리스트는 파일 시스템에 의해 발행된 본래의 API 커맨드에 연관될 수 있음). NVM 인터페이스는 후속하여 리스트를 파일 시스템에 전송할 수 있다. 일부 경우들에서, NVM 인터페이스는 모든 이용불가능한 LBA들이 발견되어 리스트에 첨부된 후에 리스트를 전송할 수 있다. 대안적으로, NVM 인터페이스는 LBA 범위가 리스트에 추가되자마자 리스트를 전송할 수 있다.
NVM 인터페이스는 LBA 이용불가능성에 관한 일반 또는 특수 정보를 파일 시스템에 전송할 수 있다. 예를 들어, NVM 인터페이스는 LBA 범위의 이용불가능성에 관한 일반 정보를 제공할 수 있다. 대안적으로, NVM 인터페이스는 LBA 범위의 어느 부분이 이용불가능한지에 관한 특수 정보를 제공할 수 있다. 정보를 전송한 후, 프로세스(600)는 단계(612)에서 종료할 수 있다.
따라서, 시스템 부트업 동안 데이터 구조로부터 획득된 LBA들의 이용가능성 상태들로 LBA들의 데이터 이용가능성에 관한 파일 시스템의 뷰를 조정함으로써, NVM 인터페이스는 초기에 임의의 불일치들을 파일 시스템에 알릴 수 있다. 이것은 파일 시스템이 완전한 동작 상태로 될 때까지 기다리는 대신에, 시스템 부트업 동안 불일치들을 처리할 수 있게 한다.
일부 실시예들에서, LBA들의 이용가능성(예를 들어, 특정 LBA가 정정불가능한지 여부)에 관한 정보를 획득하기 위해 트리를 이용하는 대신에, NVM 인터페이스는 NVM을 직접적으로 스캐닝함으로써(예를 들어, NVM 내에 저장된 하나 이상의 플래그의 상태를 조사함으로써) NVM 드라이버 맵핑을 획득할 수 있다. 예를 들어, LBA의 정정불가능 상태는 NVM 내에 직접 유지될 수 있다.
이제 도 8을 보면, 정정불가능한 데이터를 처리하기 위한 프로세스(800)가 나타나 있다. 프로세스(800)는 단계(802)에서 시작할 수 있고, 단계(804)에서, NVM 인터페이스(예를 들어, 도 1의 NVM 인터페이스(118) 또는 도 2의 NVM 인터페이스(218))는 NVM(예를 들어, 도 1의 NVM(120) 또는 도 2의 NVM(220))의 제1 블록에 가비지 컬렉션이 행해질 필요가 있다고 판정할 수 있다.
다음으로, 단계(806)에서, NVM 인터페이스는 제1 블록 내에 저장된 유효 데이터의 적어도 한 부분이 정정불가능함을 검출할 수 있다. 다음으로. 프로세스(800)는 단계(808)로 이동할 수 있다.
단계(808)에서, NVM 인터페이스는 유효 데이터를 NVM의 제2 블록으로 이동시키거나 토큰화(tokenize)할 수 있다. 예를 들어, 일부 실시예들에서, NVM 인터페이스는 유효 데이터를 제2 블록으로 이동시킬 수 있다. 다른 실시예들에서, NVM 인터페이스는 정정불가능한 데이터를 토큰화할 수 있다. 즉, NVM 인터페이스는 유효 데이터의 적어도 한 부분의 정정불가능 상태를 논리-대-물리 맵핑 시스템 내의 토큰값으로서 할당할 수 있다.
단계(810)로 계속하여, NVM 인터페이스는 NVM 상에 토큰값을 저장하거나, 제2 블록의 하나 이상의 페이지 및/또는 블록 TOC 내에 하나 이상의 플래그를 설정하여 유효 데이터의 적어도 한 부분이 정정불가능함을 나타낼 수 있다. 다음으로, 프로세스(800)는 단계(812)에서 종료할 수 있다.
따라서, 하나 이상의 LBA의 정정불가능 상태를 NVM 내에 직접 유지함으로써, NVM 인터페이스는 휘발성 메모리 내의 데이터 구조(예를 들어, 트리)를 이 정보로 반드시 갱신하지 않아도 된다. NVM 인터페이스가 NVM 드라이버 맵핑을 획득할 필요가 있을 때, NVM 인터페이스는 NVM의 각 블록에 대해 블록 TOC를 스캐닝할 수 있다. NVM 인터페이스는 블록 TOC들을 스캐닝함으로써, 블록들 내에 저장된 대응 데이터(예를 들어, 사용자 데이터)가 정정가능한지를 나타낼 수 있는 하나 이상의 플래그의 상태를 결정할 수 있다. 이 정보는 NVM 드라이버 맵핑을 갱신하기 위해 NVM 인터페이스에 의해 사용될 수 있다.
다른 실시예들에서, 시스템 부트업 동안 조정 프로세스를 수행하는 대신에, 조정 프로세스는 런타임 동안 수행될 수 있고, 조정 프로세스는 시스템 입력/출력 요청들(예를 들어, 판독 및 기입 커맨드들) 사이에 산재될 수 있다. 즉, 파일 시스템이 마운트되고 부트타임 맵핑해제가 완료되고 난 후, 시스템은 데이터 이용가능성 조정을 수행하지 않고서 런타임으로 진행할 수 있다. 일부 경우들에서, 런타임 동안, 시스템은 아직 조정되지 않은 소정의 LBA 범위들에 대한 판독 커맨드들을 연기할 수 있다. 그러면, 특정 이벤트의 발생 시에(예를 들어, NVM 드라이버가 처음으로 유휴로 된 때, NVM 드라이버가 정정불가능한 데이터를 발견한 때, 및/또는 가비지 컬렉션 동안), 데이터 이용가능성 조정이 수행될 수 있다.
도 3, 5, 6 및 8의 프로세스들(300, 500, 600 및 800)은 시스템(예를 들어, 도 1의 전자 디바이스(100) 또는 도 2의 전자 디바이스(200)) 내의 하나 이상의 컴포넌트에 의해 실행될 수 있음을 이해해야 한다. 예를 들어, 프로세스들 내의 단계들 중 적어도 일부는 제어 회로(예를 들어, 도 1의 SoC 제어 회로(112))에 의해 수행될 수 있다.
도 3, 5, 6 및 8의 프로세스들(300, 500, 600 및 800)은 단순히 예시에 지나지 않음을 이해해야 한다. 본 발명의 범위를 벗어나지 않고서, 단계들 중 임의의 것이 제거, 수정 또는 결합될 수 있으며, 임의의 추가 단계들이 더해질 수 있다.
본 발명의 설명된 실시예들은 제한이 아니라 예시를 목적으로 제시된 것이다.

Claims (22)

  1. 데이터 이용가능성(data availability)을 판정하는 방법으로서,
    비휘발성 메모리("NVM") 드라이버를 열거(enumerate)하기 위해 시스템 부트업 동안 NVM을 스캐닝하는 단계;
    상기 열거된 NVM 드라이버에 기초하여 NVM 드라이버 맵핑을 획득하는 단계;
    파일 시스템을 마운트하는 단계;
    적어도 하나의 논리 블록 어드레스("LBA") 범위의 데이터 이용가능성에 관한 요청을 상기 파일 시스템으로부터 수신하는 단계;
    상기 NVM 드라이버 맵핑에 기초하여 상기 적어도 하나의 LBA 범위의 적어도 한 부분이 이용불가능한지를 판정하는 단계;
    상기 적어도 하나의 LBA 범위의 상기 적어도 한 부분이 이용불가능하다는 판정에 응답하여, 상기 적어도 하나의 LBA 범위의 상기 적어도 한 부분이 이용불가능함을 나타내는 정보를 상기 파일 시스템에 송신하는 단계;
    상기 적어도 하나의 LBA 범위의 상기 적어도 한 부분에 연관된 데이터를 복구하기 위해 상기 시스템 부트업 동안 복구 프로세스를 개시하는 단계; 및
    콜백 함수를 호출함으로써 상기 파일 시스템에 상기 정보를 송신하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 NVM 드라이버 맵핑은 비트맵, 맵핑 테이블 및 범위 리스트(range list) 중 적어도 하나인 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 스캐닝하는 단계는,
    상기 NVM 내에 저장된 컨텍스트 정보를 판독하는 단계 - 상기 컨텍스트 정보는 논리-대-물리 맵핑들을 포함함 -; 및
    상기 논리-대-물리 맵핑들을 휘발성 메모리에 로드하는 단계
    를 더 포함하는 방법.
  4. 제3항에 있어서,
    상기 컨텍스트 정보에 의해 캡처되지 않은 논리-대-물리 맵핑을 갖는 적어도 하나의 블록을 식별하는 단계; 및
    상기 휘발성 메모리 내의 상기 논리-대-물리 맵핑들을 갱신하기 위해 상기 적어도 하나의 블록의 블록 TOC(table-of-content)를 스캐닝하는 단계
    를 더 포함하는 방법.
  5. 제4항에 있어서,
    상기 갱신된 논리-대-물리 맵핑들에 기초하여 상기 NVM 드라이버 맵핑을 획득하는 단계를 더 포함하는 방법.
  6. 제1항 또는 제2항에 있어서,
    상기 NVM은 복수의 블록을 포함하는 방법.
  7. 제6항에 있어서,
    상기 복수의 블록 중의 각 블록에 대해, 플래그들의 상태들을 결정하기 위해 상기 블록의 블록 TOC를 스캐닝하는 단계 - 상기 플래그들의 상태들은, 상기 블록 내에 저장된 대응 데이터가 정정가능한지를 나타냄 -; 및
    상기 플래그들의 상태들에 기초하여 상기 NVM 드라이버 맵핑을 갱신하는 단계
    를 더 포함하는 방법.
  8. 삭제
  9. 제1항 또는 제2항에 있어서,
    상기 적어도 하나의 LBA 범위를 리스트에 첨부하는 단계; 및
    상기 리스트를 상기 파일 시스템에 송신하는 단계
    를 더 포함하는 방법.
  10. 비휘발성 메모리("NVM");
    NVM 드라이버 맵핑을 유지하도록 동작하는 메모리 인터페이스; 및
    파일 시스템
    을 포함하고,
    상기 파일 시스템은,
    시스템 부트업 동안 파일 시스템 할당 상태를 판정하고,
    상기 파일 시스템 할당 상태에서의 각각의 이용가능한 논리 블록 어드레스("LBA") 범위에 대하여, 상기 NVM 드라이버 맵핑이 일치 상태(consistent state)를 갖는지를 판정하기 위해 애플리케이션 프로그래밍 인터페이스("API") 커맨드를 상기 메모리 인터페이스에 송신하고,
    적어도 하나의 LBA 범위가 불일치 상태를 가짐을 나타내는 정보를 상기 메모리 인터페이스로부터 수신하고,
    상기 시스템 부트업 동안 상기 적어도 하나의 LBA 범위에 연관된 데이터를 복구하기 위한 정책을 불러오도록(invoke) 동작하고,
    상기 데이터를 복구하기 위한 정책은 상기 적어도 하나의 LBA 범위에 연관된 파일 경로에 기초하는,
    시스템.
  11. 제10항에 있어서,
    상기 파일 시스템은, 상기 파일 시스템 할당 상태를 비트맵, 맵핑 테이블 및 범위 리스트 중 적어도 하나로서 저장하도록 동작하는 시스템.
  12. 삭제
  13. 제10항에 있어서,
    상기 파일 시스템은,
    상기 적어도 하나의 LBA 범위에 연관된 데이터가 임시 데이터임을 판정하고,
    상기 데이터의 복구를 중단하도록
    동작하는 시스템.
  14. 제10항에 있어서,
    상기 파일 시스템은,
    상기 적어도 하나의 LBA 범위에 연관된 데이터가 상기 파일 시스템에 연관된 내부 데이터임을 판정하고,
    상기 내부 데이터를 이용하여 상기 데이터를 복구하고,
    상기 복구된 데이터를 리마운트(remount)하도록
    동작하는 시스템.
  15. 제10항에 있어서,
    상기 파일 시스템은,
    상기 적어도 하나의 LBA 범위에 연관된 데이터가 애플리케이션에 의해 생성된 데이터임을 판정하고,
    특정 애플리케이션에 연관된 정책을 불러와서 상기 데이터를 복구하고,
    상기 복구된 데이터를 리마운트하도록
    동작하는 시스템.
  16. 디바이스 부트업 동안 데이터 이용가능성 조정을 수행하도록 동작하는 메모리 인터페이스로서,
    제어 회로
    를 포함하고,
    상기 제어 회로는,
    휘발성 메모리 내에 저장된 데이터 구조로부터 논리 블록 어드레스("LBA")들의 이용가능성 상태들을 획득하고,
    전자 디바이스의 부트업 동안, 상기 데이터 구조로부터 획득된 상기 LBA들의 이용가능성 상태들로 상기 LBA들의 데이터 이용가능성에 대한 파일 시스템의 뷰를 조정하고,
    상기 파일 시스템의 뷰와 상기 LBA들의 이용가능성 상태들 간의 불일치들을 상기 파일 시스템에 전달하고, 그에 의해 상기 파일 시스템이 상기 전자 디바이스의 부트업 동안 상기 불일치들을 처리할 수 있게 하도록 동작하고,
    상기 불일치들은 콜백 함수를 이용하여 전달되는,
    메모리 인터페이스.
  17. 제16항에 있어서,
    상기 데이터 구조는 상기 휘발성 메모리 내에 저장된 트리인 메모리 인터페이스.
  18. 제16항 또는 제17항에 있어서,
    상기 제어 회로는, 트리 구조가 NVM에 대한 맵핑해제된 포인터들을 포함하는지를 검출하도록 동작하는 메모리 인터페이스.
  19. 제16항 또는 제17항에 있어서,
    상기 제어 회로는, 트리 구조가 NVM에 대한 정정불가능한 포인터들을 포함하는지를 검출하도록 동작하는 메모리 인터페이스.
  20. 제16항 또는 제17항에 있어서,
    상기 제어 회로는,
    논리 블록 어드레스("LBA") 범위의 데이터 이용가능성에 관한 요청을 상기 파일 시스템으로부터 수신하고,
    상기 LBA들의 이용가능성 상태들에 기초하여 상기 LBA 범위의 적어도 한 부분이 이용불가능한지를 판정하도록
    동작하는 메모리 인터페이스.
  21. 제20항에 있어서,
    상기 제어 회로는,
    상기 LBA 범위의 상기 적어도 한 부분이 이용불가능하다고 판정하고,
    상기 LBA 범위의 상기 적어도 한 부분이 이용불가능함을 나타내는 정보를 상기 파일 시스템에 송신하도록
    동작하는 메모리 인터페이스.
  22. 제20항에 있어서,
    상기 제어 회로는, 상기 LBA 범위의 상기 적어도 한 부분이 맵핑해제 및 정정불가능 중 적어도 하나임을 판정하도록 동작하는 메모리 인터페이스.
KR1020120143397A 2011-12-12 2012-12-11 데이터 이용가능성의 마운트타임 조정 KR101451482B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/323,347 US8756458B2 (en) 2011-12-12 2011-12-12 Mount-time reconciliation of data availability
US13/323,347 2011-12-12

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020130007922A Division KR101930092B1 (ko) 2011-12-12 2013-01-24 데이터 이용가능성의 마운트타임 조정

Publications (2)

Publication Number Publication Date
KR20130066525A KR20130066525A (ko) 2013-06-20
KR101451482B1 true KR101451482B1 (ko) 2014-10-22

Family

ID=47469762

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020120143397A KR101451482B1 (ko) 2011-12-12 2012-12-11 데이터 이용가능성의 마운트타임 조정
KR1020130007922A KR101930092B1 (ko) 2011-12-12 2013-01-24 데이터 이용가능성의 마운트타임 조정

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020130007922A KR101930092B1 (ko) 2011-12-12 2013-01-24 데이터 이용가능성의 마운트타임 조정

Country Status (7)

Country Link
US (2) US8756458B2 (ko)
EP (1) EP2605139A3 (ko)
JP (1) JP5636034B2 (ko)
KR (2) KR101451482B1 (ko)
CN (1) CN103164342B (ko)
TW (2) TWI490694B (ko)
WO (1) WO2013090135A1 (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9727570B2 (en) * 2011-06-03 2017-08-08 Apple Inc. Mount-time unmapping of unused logical addresses in non-volatile memory systems
US8756458B2 (en) 2011-12-12 2014-06-17 Apple Inc. Mount-time reconciliation of data availability
US9547457B1 (en) * 2013-09-27 2017-01-17 Veritas Technologies Llc Detection of file system mounts of storage devices
WO2015130314A1 (en) 2014-02-28 2015-09-03 Hewlett-Packard Development Company, L.P. Mapping mode shift
CN104331446B (zh) * 2014-10-28 2017-07-18 北京临近空间飞行器系统工程研究所 一种基于内存映射的海量数据预处理方法
WO2016159930A1 (en) 2015-03-27 2016-10-06 Hewlett Packard Enterprise Development Lp File migration to persistent memory
WO2016160027A1 (en) 2015-04-02 2016-10-06 Hewlett Packard Enterprise Development Lp Page cache on persistent memory
CN104809037B (zh) * 2015-05-13 2018-04-13 深圳芯邦科技股份有限公司 eMMC基于特殊页的快速启动方法及装置
US9639287B1 (en) 2015-06-29 2017-05-02 Western Digital Technologies, Inc. Write command reporting
KR20180045087A (ko) 2016-10-24 2018-05-04 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
CN108932249B (zh) * 2017-05-24 2021-02-12 华为技术有限公司 一种管理文件系统的方法及装置
KR102276912B1 (ko) * 2017-06-07 2021-07-13 삼성전자주식회사 스토리지 시스템 및 이의 동작 방법
JP7042716B2 (ja) * 2018-07-26 2022-03-28 キオクシア株式会社 記憶装置及び記憶制御方法
US10802734B2 (en) * 2018-09-28 2020-10-13 Western Digital Technologies, Inc. Method for fast boot read
KR20200076531A (ko) * 2018-12-19 2020-06-29 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
US11301369B2 (en) * 2019-01-24 2022-04-12 Western Digital Technologies, Inc. Logical to physical mapping management using low-latency non-volatile memory
KR20200099882A (ko) * 2019-02-15 2020-08-25 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
CN110647476B (zh) * 2019-09-29 2021-10-15 苏州浪潮智能科技有限公司 一种固态硬盘写数据的方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070096429A (ko) * 2006-03-24 2007-10-02 부산대학교 산학협력단 빠른 마운팅을 지원하는 낸드 플래시 메모리에 적용되는파일시스템
JP2008191701A (ja) 2007-01-31 2008-08-21 Toshiba Corp エラー回復処理方法および情報処理装置
KR100895429B1 (ko) * 2007-04-27 2009-05-07 중앙대학교 산학협력단 플래시 메모리 파일 장치 및 그 마운트 방법
US20110106804A1 (en) * 2009-11-04 2011-05-05 Seagate Technology Llc File management system for devices containing solid-state media

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0644144A (ja) 1992-07-23 1994-02-18 Mitsubishi Electric Corp 半導体ディスク装置
US5359570A (en) 1992-11-13 1994-10-25 Silicon Storage Technology, Inc. Solid state peripheral storage device
US6931440B1 (en) * 1999-04-21 2005-08-16 Emc Corporation Method and apparatus for dynamically determining whether access to a resource connected to a computer has changed and determining how to access the resource with a new identifier
US6944742B1 (en) 2000-04-28 2005-09-13 Microsoft Corporation Compressed file system for non-volatile RAM
US7093161B1 (en) * 2002-08-16 2006-08-15 Onspec Electronic, Inc. Software recovery method for flash media with defective formatting
JP3812933B2 (ja) * 2001-04-19 2006-08-23 シャープ株式会社 ファイルシステムおよびその制御方法
US6883114B2 (en) 2001-11-08 2005-04-19 M-Systems Flash Disk Pioneers Ltd. Block device driver enabling a ruggedized file system
US20030135729A1 (en) * 2001-12-14 2003-07-17 I/O Integrity, Inc. Apparatus and meta data caching method for optimizing server startup performance
US6895464B2 (en) 2002-06-03 2005-05-17 Honeywell International Inc. Flash memory management system and method utilizing multiple block list windows
US7036040B2 (en) 2002-11-26 2006-04-25 Microsoft Corporation Reliability of diskless network-bootable computers using non-volatile memory cache
US20040255106A1 (en) * 2003-06-10 2004-12-16 Rothman Michael A. Recovery of operating system configuration data by firmware of computer system
US20050097141A1 (en) * 2003-10-30 2005-05-05 International Business Machines Corporation Autonomic filesystem recovery
US7493424B1 (en) 2004-04-30 2009-02-17 Netapp, Inc. Network storage system with shared software stack for LDMA and RDMA
JP4209820B2 (ja) 2004-07-15 2009-01-14 株式会社ハギワラシスコム メモリカードシステム及び該メモリカードシステムで使用されるライトワンス型メモリカード、ホストシステムと半導体記憶デバイスとからなるシステム
US7873782B2 (en) 2004-11-05 2011-01-18 Data Robotics, Inc. Filesystem-aware block storage system, apparatus, and method
KR100876084B1 (ko) 2007-02-13 2008-12-26 삼성전자주식회사 플래시 저장 장치로 삭제 정보를 전달할 수 있는 컴퓨팅시스템
WO2006067923A1 (ja) * 2004-12-22 2006-06-29 Matsushita Electric Industrial Co., Ltd. メモリコントローラ、不揮発性記憶装置、不揮発性記憶システム及びメモリ制御方法
US8302178B2 (en) 2005-03-07 2012-10-30 Noam Camiel System and method for a dynamic policies enforced file system for a data storage device
JP2007094900A (ja) 2005-09-29 2007-04-12 Eastman Kodak Co アクセス装置
US8301673B2 (en) * 2006-12-29 2012-10-30 Netapp, Inc. System and method for performing distributed consistency verification of a clustered file system
US7730090B2 (en) * 2007-03-09 2010-06-01 Emc Corporation Architecture for performing file system checking on an active file system
US8429352B2 (en) 2007-06-08 2013-04-23 Sandisk Technologies Inc. Method and system for memory block flushing
US7694191B1 (en) * 2007-06-30 2010-04-06 Emc Corporation Self healing file system
JP2009043030A (ja) 2007-08-09 2009-02-26 Hitachi Ltd ストレージシステム
US7975171B2 (en) 2007-09-12 2011-07-05 International Business Machines Corporation Automated file recovery based on subsystem error detection results
US7818610B2 (en) * 2007-09-27 2010-10-19 Microsoft Corporation Rapid crash recovery for flash storage
US8099544B2 (en) 2008-02-29 2012-01-17 Kabushiki Kaisha Toshiba Information processing apparatus and nonvolatile semiconductor memory drive
JP4164118B1 (ja) 2008-03-26 2008-10-08 眞澄 鈴木 フラッシュメモリを用いた記憶装置
US8130554B1 (en) 2008-09-29 2012-03-06 Emc Corporation Securely erasing flash-based memory
JP5458568B2 (ja) 2008-12-25 2014-04-02 ソニー株式会社 不揮発性記憶装置、情報記録システム、及び情報記録方法
US9164700B2 (en) * 2009-03-05 2015-10-20 Sandisk Il Ltd System for optimizing the transfer of stored content in response to a triggering event
WO2010111694A2 (en) 2009-03-27 2010-09-30 Sandforce Inc. Storage system logical block address de-allocation management and data hardening
US8281065B2 (en) 2009-09-01 2012-10-02 Apple Inc. Systems and methods for determining the status of memory locations in a non-volatile memory
US9063886B2 (en) 2009-09-18 2015-06-23 Apple Inc. Metadata redundancy schemes for non-volatile memories
TWI426528B (zh) 2009-09-30 2014-02-11 Phison Electronics Corp 用於快閃記憶體的區塊管理方法、控制器與儲存系統
TWI408551B (zh) 2009-10-28 2013-09-11 Phison Electronics Corp 快閃記憶體儲存系統及其控制器與資料處理方法
WO2011055407A1 (en) * 2009-11-04 2011-05-12 Hitachi, Ltd. Flash memory module
TWI423024B (zh) 2009-11-23 2014-01-11 Phison Electronics Corp 用於快閃記憶體的資料儲存方法及其控制器與儲存系統
US8726126B2 (en) 2010-03-23 2014-05-13 Apple Inc. Non-regular parity distribution detection via metadata tag
US8812816B2 (en) 2010-03-23 2014-08-19 Apple Inc. Garbage collection schemes for index block
US8589730B2 (en) 2010-08-31 2013-11-19 Apple Inc. Handling errors during device bootup from a non-volatile memory
US9727570B2 (en) 2011-06-03 2017-08-08 Apple Inc. Mount-time unmapping of unused logical addresses in non-volatile memory systems
US8756458B2 (en) 2011-12-12 2014-06-17 Apple Inc. Mount-time reconciliation of data availability

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070096429A (ko) * 2006-03-24 2007-10-02 부산대학교 산학협력단 빠른 마운팅을 지원하는 낸드 플래시 메모리에 적용되는파일시스템
JP2008191701A (ja) 2007-01-31 2008-08-21 Toshiba Corp エラー回復処理方法および情報処理装置
KR100895429B1 (ko) * 2007-04-27 2009-05-07 중앙대학교 산학협력단 플래시 메모리 파일 장치 및 그 마운트 방법
US20110106804A1 (en) * 2009-11-04 2011-05-05 Seagate Technology Llc File management system for devices containing solid-state media

Also Published As

Publication number Publication date
CN103164342B (zh) 2016-04-06
US8756458B2 (en) 2014-06-17
EP2605139A2 (en) 2013-06-19
EP2605139A3 (en) 2014-11-26
KR20130066525A (ko) 2013-06-20
CN103164342A (zh) 2013-06-19
JP5636034B2 (ja) 2014-12-03
US9104329B2 (en) 2015-08-11
KR20130066639A (ko) 2013-06-20
TW201337561A (zh) 2013-09-16
KR101930092B1 (ko) 2018-12-17
TWI490694B (zh) 2015-07-01
WO2013090135A1 (en) 2013-06-20
US20130151830A1 (en) 2013-06-13
US20140297935A1 (en) 2014-10-02
TW201337563A (zh) 2013-09-16
JP2013137771A (ja) 2013-07-11
TWI545434B (zh) 2016-08-11

Similar Documents

Publication Publication Date Title
KR101451482B1 (ko) 데이터 이용가능성의 마운트타임 조정
US9477596B2 (en) LBA bitmap usage
US8949512B2 (en) Trim token journaling
US8478796B2 (en) Uncorrectable error handling schemes for non-volatile memories
US8812816B2 (en) Garbage collection schemes for index block
JP5702348B2 (ja) 不揮発性メモリを有するシステムの非正常シャットダウンの取り扱い

Legal Events

Date Code Title Description
A201 Request for examination
A107 Divisional application of patent
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170919

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180918

Year of fee payment: 5