KR100929371B1 - 페이지-디퍼런셜을 이용하여 dbms에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법 - Google Patents
페이지-디퍼런셜을 이용하여 dbms에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법 Download PDFInfo
- Publication number
- KR100929371B1 KR100929371B1 KR1020090035341A KR20090035341A KR100929371B1 KR 100929371 B1 KR100929371 B1 KR 100929371B1 KR 1020090035341 A KR1020090035341 A KR 1020090035341A KR 20090035341 A KR20090035341 A KR 20090035341A KR 100929371 B1 KR100929371 B1 KR 100929371B1
- Authority
- KR
- South Korea
- Prior art keywords
- page
- differential
- flash memory
- logical
- difference
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1847—File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
본 발명에서는 플래시 기반 저장 시스템을 위한 페이지-디퍼런셜 로깅(page-differential logging)이라 불리는 효과적이면서도 효율적인 데이터 저장 방법을 제안한다. 본 발명의 주요한 특징은 (1) 플래시 메모리 내의 원본 페이지와 메모리 내의 최신 페이지간의 차이점(difference)인 페이지-디퍼런셜(page-differential)만을 기록한다는 것과 (2) 페이지-디퍼런셜은 페이지가 메모리 상에서 갱신될 때마다 계산되어 기록되는 것이 아니라 갱신된 페이지가 플래시 메모리에 반영될 필요가 있을 때에만 계산되어 기록된다는 점이다. 이러한 특징들은 본 발명을 데이터의 변경된 부분과 변경되지 않은 부분 모두를 포함하는 페이지 전체를 기록하는 기존 페이지 기반 방법들 또는 페이지 내의 변경사항들(changes)의 기록을 모두 유지하는 기존 로그 기반 방법들과 구별 지어 준다. 제안한 방법은 단지 플래시 메모리 드라이버(driver)만을 고침으로써 기존 디스크 기반 DBMS들이 플래시 기반 DBMS들로 재사용될 수 있도록 해주기 때문에 DBMS-independent하며, 쓰기 연산의 횟수를 줄임으로써 플래시 메모리의 수명을 향상 시킨다는 장점을 가진다. 또한, 제안된 방법은 몇 가지 특별한 경우를 제외하고는 기존 페이지 기반 방법들과 로그 기반 방법들에 비해 더 뛰어난 입출력 성능을 보였다.
플래시 메모리, 데이터 저장 방법, 페이지-디퍼런셜, DBMS-independent
Description
본 발명은 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법에 관한 것이다.
플래시 메모리는 메모리 셀의 구조에 따라 NAND와 NOR의 두 타입이 있다. NAND 타입은 데이터를 저장하는데 적합하며, NOR 타입은 코드(code)를 저장하는데 적합하다. 본 발명에서 '플래시 메모리' 라는 용어는 플래시 기반 저장 시스템에서 널리 사용되는 NAND 타입의 플래시 메모리를 가리킨다.
도1은 플래시 메모리의 구조를 도시한다. 플래시 메모리는 Nblock 개의 블록들(blocks)로 구성되며, 각 블록은 Npage 개의 페이지들(pages)로 구성된다. 페이지는 데이터를 읽고 쓰는 연산이 수행되는 최소 단위이며, 블록은 데이터를 삭제하는 연산이 수행되는 최소 단위이다. 각 페이지는 데이터를 저장하기 위한 데이터 영역과 유효함(valid) 및 쓸모없음(obsolete) 상태 비트, 불량 블록 식별(bad block identification), 에러 체크(error correction check)와 같은 보조 정보를 저장하기 위한 스페어 영역으로 구성된다.
플래시 메모리 내의 데이터를 읽거나 쓰기 위하여 읽기(read), 쓰기(write), 삭제(erase)의 세 가지 연산이 존재한다.
- 읽기(read) 연산: 특정 페이지 내의 모든 비트 값들을 반환함
- 쓰기(write) 연산: 특정 페이지 내의 선택된 비트들의 값을 1에서 0으로 바꿈
- 삭제(erase) 연산: 특정 블록 내의 모든 비트 값들을 1로 설정함
플래시 메모리에 대한 연산들은 마그네틱 디스크에 대한 연산들과 다르다. 먼저, 플래시 메모리 내의 모든 비트들은 초기에 1로 설정된다. 따라서, 플래시 메모리에 대한 쓰기 연산은 특정 페이지 내의 일부 비트 값들을 1에서 0으로 바꾸는 것을 의미한다. 다음으로, 플래시 메모리에 대한 삭제 연산은 특정 블록 내의 모든 비트 값들을 1로 되돌릴 수 있다. 각 블록에 대해서 대략 100,000번 정도로 제한된 횟수의 삭제 연산만이 수행될 수 있으며, 그 이상 수행될 경우 데이터를 신뢰할 수 없게 된다.
쓰기와 삭제 연산들의 제약으로 인하여 페이지를 덮어쓰기 위해서는 일반적으로 삭제 연산이 쓰기 연산에 선행되어 수행된다. 삭제 연산을 수행하여 블록 내의 모든 비트 값들을 1로 변화시킨 후, 쓰기 연산을 수행하여 페이지 내의 일부 비트 값들을 0으로 변화시킨다. 또한, 삭제 연산은 쓰기 연산보다 훨씬 더 큰 단위에 대해서 수행된다. 즉, 쓰기 연산은 페이지에 대해서 수행되는 반면에, 삭제 연산은 블록에 대해서 수행된다. 페이지를 덮어쓰기 위한 구체적인 방법들은 사용하고 있는 페이지 갱신 방법에 의해 결정된다.
플래시 메모리는 메모리 셀의 용량(capacity)에 따라 단일 레벨 셀(Single Level Cell, SLC)과 다중 레벨 셀(Multi Level Cell, MLC)의 두 타입이 있다. 전자는 셀마다 하나의 데이터 비트 값만을 저장할 수 있는데 반해, 후자는 셀마다 두 개의 (또는 그 이상의) 데이터 비트 값들을 저장할 수 있다. 따라서, MLC 타입의 플래시 메모리는 SLC 타입에 비해 용량이 더 크고, 대용량의 플래시 저장 장치에 널리 사용될 것으로 예상된다. 표1은 MLC 타입의 플래시 메모리의 파라미터들과 그 값들을 요약한다. 페이지 크기는 2,048 바이트이며, 블록은 64개의 페이지들로 구성된다. 또한, 연산들의 액세스 시간은 읽기, 쓰기, 삭제 순으로 증가한다. 읽기 연산은 쓰기 연산에 비해 7.9배 더 빠르며, 쓰기 연산은 삭제 연산에 비해 1.6배 더 빠르다.
기호 | 정의 | 값 |
N block | 블록 개수 | 32,768 |
N page | 블록 내의 페이지 개수 | 64 |
S block | 블록 크기 (bytes) (= N page x S page ) | 135,168 (64 x 2,112) |
S page | 페이지 크기 (bytes) (= S data + S spare ) | 2,112 (= 2,048 + 64) |
S data | 페이지 내의 데이터 영역의 크기 (bytes) | 2,048 |
S spare | 페이지 내의 스페어 영역의 크기 (bytes) | 64 |
T read | 페이지에 대한 읽기 연산에 소요되는 시간 (μs) | 120 |
T write | 페이지에 대한 쓰기 연산에 소요되는 시간 (μs) | 950 |
T erase | 블록에 대한 삭제 연산에 소요되는 시간 (μs) | 1500 |
이후부터, 본 발명에서의 불명확함을 줄이기 위하여, 물리적 페이지(physical page)와 논리적 페이지(logical page)를 구별한다. 메모리 내의 페이지들을 논리적 페이지들이라 부르고, 플래시 메모리 내의 페이지들을 물리적 페이지들이라 부른다. 또한, 설명의 편의를 위하여 논리적 페이지의 크기가 물리적 페이지의 크기와 동일하다고 가정한다.
지금까지 플래시 기반 저장 시스템을 위하여 갱신된 페이지를 플래시 메모리에 저장하는 방법에 대한 많은 연구들이 수행 되었다. 본 발명에서는 이러한 방법들을 페이지 갱신 방법이라 부르도록 한다. 페이지 갱신 방법들은 페이지 기반(page-based)과 로그 기반(log-based)의 두 개의 카테고리로 나누어진다.
페이지 기반 방법들에서는 하나의 논리적 페이지가 하나의 물리적 페이지에 저장된다. 갱신된 페이지가 플래시 메모리에 반영될 필요가 있을 경우(예를 들면, 갱신된 페이지가 DBMS 버퍼에서 데이터베이스로 스왑 아웃되는 경우), 하나의 논리적 페이지 전체가 하나의 물리적 페이지에 기록된다. 논리적 페이지가 플래시 메모리로부터 재생성(recreating)되는 경우(예를 들면, 페이지를 DBMS 버퍼로 읽어 들이는 경우), 논리적 페이지는 하나의 물리적 페이지로부터 읽혀진다. 이 방법들은 플래시 변환 계층(Flash Translation Layer, FTL)이라 불리는 중간 계층에 구현되기 때문에 저장 시스템과 느슨하게 결합된다. 이때, FTL은 도2에서와 같이 논리적 페이지들과 물리적 페이지들 간의 논리적 주소와 물리적 주소의 맵핑(mapping)을 관리한다. FTL은 반도체 디스크(solid state disks, SSD) 내에 존재하는 컨트롤러에 펌웨어 형태로 구현될 수도 있고, 임베디드 보드를 위한 운영체제 내에 소프트웨어 형태로 구현될 수도 있다.
페이지 기반 방법들은 논리적 페이지가 항상 동일한 물리적 페이지에 기록되는가의 여부에 따라 같은 자리 갱신 방법(in-place update)과 다른 자리 갱신 방법(out-place update)의 두 개의 방법으로 나누어진다. 논리적 페이지가 플래시 메모리에 반영될 필요가 있을 경우, 같은 자리 갱신 방법(in-place update)은 논리적 페이지를 이전에 읽은 특정 물리적 페이지에 덮어쓰고, 다른 자리 갱신 방법(out-place update)은 논리적 페이지를 새로운 물리적 페이지에 기록한다.
플래시 메모리에서의 쓰기 연산은 페이지 내의 비트 값들을 1로 바꿀 수 없기 때문에, 블록 b1 내의 물리적 페이지 p1 으로부터 읽어 들인 논리적 페이지 l1 을 동일한 물리적 페이지 p1 에 덮어쓰는 경우, 같은 자리 갱신 방법(in-place update)은 다음의 네 가지 단계를 수행한다.
첫째, p 1 을 제외한 블록 b 1 내의 모든 페이지들을 읽는다.
둘째, 블록 b 1 에 대해 삭제 연산을 수행한다.
셋째, 논리적 페이지 l 1 을 물리적 페이지 p 1 에 기록한다.
넷째, l 1 을 제외한 단계 1에서 읽은 모든 페이지들을 블록 b 1 내의 해당 페이지에 기록한다.
따라서, 같은 자리 갱신 방법(in-place update)은 논리적 페이지를 플래시 메모리에 반영해야 할 때마다 한 번의 삭제 연산과 여러 번의 읽기 및 쓰기 연산을 발생시키기 때문에 심각한 성능 저하 문제를 가지며, 플래시 기반 저장 시스템에서 거의 사용되지 않는다.
같은 자리 갱신 방법(In-place update)의 단점을 극복하기 위하여, 다른 자리 갱신 방법(out-place update)은 논리적 페이지 l1 을 플래시 메모리에 반영해야 할 경우, 논리적 페이지 l1 을 새로운 물리적 페이지 p2 에 기록한 후, 물리적 페이지 p1 을 쓸모없음(obsolete) 상태로 설정한다. 플래시 메모리 내의 free 상태의 페이지들이 부족할 경우, 쓸모없음(obsolete) 상태의 페이지들은 garbage collection에 의하여 free 상태의 페이지들로 변환되어 재사용된다.
다른 자리 갱신 방법(Out-place update)은 논리적 페이지를 플래시 메모리에 반영해야 할 때마다 삭제 연산을 발생시키지 않기 때문에 플래시 기반 저장 시스템에서 널리 사용된다. 이에 대해서 도3a와 도3b는 다른 자리 갱신 방법(out-place update)을 도시한다. 도3a는 블록 b1 내의 물리적 페이지 p1 으로부터 읽은 논리적 페이지 l1 을 나타내며, 도3b는 갱신된 논리적 페이지 l1 과 이를 물리적 페이지 p2 에 기록하는 과정을 나타낸다. 여기서, p1 은 예전에 읽은 원본 페이지이고, p2 는 새로 기록된 페이지이다.
로그 기반 방법들에서는 하나의 논리적 페이지가 일반적으로 여러 개의 물리적 페이지들에 저장된다. 논리적 페이지가 갱신될 때마다 여러 논리적 페이지들의 갱신 로그들이 먼저 메모리 상의 쓰기 버퍼에 모아진다. 여기서, 갱신 로그(update log)는 하나의 갱신 명령으로 인하여 발생하는 페이지 내의 변경사항들(changes)이다. 그리고, 만약 버퍼가 다 차면 이를 하나의 물리적 페이지에 기록한다. 따라서, 논리적 페이지가 빈번하게 갱신되는 경우, 그에 대한 갱신 로그들이 여러 개의 물리적 페이지들에 저장되므로 하나의 논리적 페이지를 재생성할 경우, 여러 개의 물리적 페이지들이 읽혀져야 하고, 병합되어야 한다. 뿐만 아니라, 로그 기반 방법들은 저장 시스템이 논리적 페이지의 갱신 로그들을 식별할 수 있도록 고쳐져야 하기 때문에 시스템에 밀결합(tightly-coupled)된다.
로그 기반 방법들에는 Log-structured File system(LFS), Journaling Flash File System(JFFS), Yet Another Flash File System(YAFFS), 그리고 In-Page Logging(IPL)이 있다. LFS, JFFS, 그리고 YAFFS에서는 논리적 페이지의 갱신 로그들이 플래시 메모리 내의 임의의 로그 페이지들에 기록될 수 있는 반면에 IPL에서는 갱신 로그들이 특정 로그 페이지들에 기록된다. IPL은 각 블록 내의 페이지들을 고정된 개수의 원본 페이지들(original pages)과 로그 페이지들(log pages)로 나눈다. 이 방법은 논리적 페이지의 갱신 로그들을 그 논리적 페이지의 원본 페이지를 포함하고 있는 블록 내의 로그 페이지들에만 기록한다. 따라서, IPL은 논리적 페이지를 재생성하는 경우, 블록 내의 원본 페이지와 로그 페이지들만을 읽는다. IPL은 블록 내에 free 상태의 로그 페이지가 없을 경우, 블록 내의 원본 페이지들과 로그 페이지들을 병합한 후, 병합된 페이지들을 새로운 블록 내의 페이지들에 기록한다(이 과정은 합병(merging)이라 불린다).
결과적으로, 다른 로그 기반 방법들과 비교했을 때, IPL은 합병으로 인하여 로그 페이지들이 무한히 증가하지 않기 때문에 논리적 페이지를 재생성할 경우에 플래시 메모리로부터 읽어야 하는 로그 페이지들의 개수를 줄임으로써 읽기 성능을 향상시킨다. IPL은 합병의 효과를 제외하고는 로그 기반 방법들의 장단점을 물려받기 때문에 다른 로그 기반 방법들과 성능이 유사하다.
도4a에서 도4e까지는 로그 기반 방법들의 전형적인 예를 도시한다.
도4a는 메모리 상의 논리적 페이지들 l 1 , l 2 를 나타낸다.
도4b는 논리적 페이지들 l 1 , l 2 의 갱신 로그들 q 1 , q 2 와 이들을 플래시 메모리에 기록하는 과정을 나타낸다. 여기서, 갱신 로그들 q 1 , q 2 는 먼저 쓰기 버퍼에 기록된 후, 버퍼의 내용이 로그 페이지 p 3 에 기록된다. 따라서, 갱신 로그들 q 1 , q 2 는 동일한 로그 페이지 p 3 에 모아진다.
도4c는 논리적 페이지들 l 1 , l 2 의 갱신 로그들 q 3 , q 4 와 이들을 플래시 메모리에 기록하는 과정을 나타낸다. 여기서, 갱신 로그들 q 3 , q 4 는 먼저 쓰기 버퍼에 기록된 후, 버퍼의 내용이 로그 페이지 p 4 에 기록된다. 따라서, 갱신 로그들 q 3 , q 4 는 동일한 로그 페이지 p 4 에 모아진다.
도4d는 플래시 메모리로부터 재생성된 논리적 페이지 l 1 을 도시한다.
도4e는 도4d에서 재생성된 논리적 페이지 l 1 의 생성과정을 도시한다. 여기서, 논리적 페이지 l 1 은 원본 페이지 p 1 과 로그 페이지들 p 3 , p 4 각각으로부터 읽은 갱신 로그들 q 1 , q 2 를 병합함으로써 재생성 된다.
페이지 기반 방법들과 로그 기반 방법들을 비교하면, 논리적 페이지를 갱신하기 위하여 페이지 기반 방법들은 페이지 내의 변경된 부분들뿐만 아니라 변경되지 않은 부분들까지도 기록하는데 반하여, 로그 기반 방법들은 오직 갱신 로그들만을 기록한다. 따라서, 갱신이 빈번하게 발생하지 않을 경우, 페이지 기반 방법들이 로그 기반 방법들에 비해 더 나쁜 쓰기 성능을 가진다. 페이지 기반 방법들은 갱신된 페이지가 플래시 메모리에 반영될 필요가 있을 경우에만 갱신된 페이지를 플래시 메모리에 기록한다. 그러나, 로그 기반 방법들은 논리적 페이지를 갱신할 때마다 갱신 로그를 쓰기 버퍼에 기록한다. 이때, 쓰기 버퍼가 다 차면 이를 플래시 메모리에 기록한다. 따라서, 갱신이 빈번하게 발생할 경우, 논리적 페이지가 여러 번 갱신되어 페이지 하나의 갱신 로그들의 총 양이 페이지 하나의 크기보다 더 커질 수 있다. 이 경우에는 페이지 기반 방법들이 로그 기반 방법들에 비해 더 좋은 쓰기 성능을 가진다.
다음으로, 플래시 메모리로부터 논리적 페이지를 재생성하는 경우, 페이지 기반 방법들은 논리적 페이지가 하나의 물리적 페이지에 저장되어 있기 때문에 오직 한 번의 읽기 연산만을 필요로 한다. 반면에, 로그 기반 방법들은 논리적 페이지가 여러 개의 물리적 페이지에 저장되어 있기 때문에 여러 번의 읽기 연산을 필요로 한다. 결과적으로, 페이지 기반 방법들은 로그 기반 방법들에 비해 더 좋은 읽기 성능을 가진다.
마지막으로, 페이지 기반 방법들은 DBMS-independent한 반면에, 로그 기반 방법들은 DBMS-dependent하다.
페이지 기반 방법들 | 로그 기반 방법들 | |
플래시 메모리에 기록되는 데이터 | 페이지 전체 (변경된 부분들과 변경되지 않은 부분들 모두) | 갱신 로그 (오직 변경된 부분들만) |
데이터를 플래시 메모리에 기록하는 시점 | 페이지가 플래시 메모리에 반영될 필요가 있을 경우 | 쓰기 버퍼가 다 찬 경우 |
하나의 논리적 페이지를 재성성하기 위하여 읽어야 하는 물리적 페이지들의 개수 | 하나의 페이지 | 여러 페이지들 |
아키텍처 | 시스템에 느슨하게 결합됨 (DBMS-independent) | 시스템에 밀결합됨 (DBMS-dependent) |
본 발명에서는 읽기 및 쓰기 연산 모두에 대해서 좋은 성능을 가짐으로써 플래시 메모리 기반 저장 시스템의 성능을 현저하게 향상시키는 페이지-디퍼런셜 로깅(page-differential logging)이라 불리는 페이지 갱신 방법을 제안한다. 페이지-디퍼런셜(간단히 차이 또는 차이(differential)이라 부름)은 플래시 메모리 내의 원본 페이지와 메모리 내의 최신 페이지 간의 차이점이다. 이 방법은 데이터를 플래시 메모리에 저장하기 위한 새로운 어프로치이며, 다음과 같은 점들에서 페이지 기반 방법들 또는 로그 기반 방법들과 매우 다르다.
(1) 제안된 방법은 갱신된 페이지의 차이(differential)만을 기록한다. 이러한 특징은 데이터의 변경된 부분 및 변경되지 않은 부분을 포함하는 페이지 전체를 기록하는 기존 페이지 기반 방법들 또는 페이지 내의 변경 사항들(즉, 여러 개의 갱신 로그들)의 기록을 모두 유지하는 기존 로그 기반 방법들과 대비된다. 뿐만 아니라, 차이(differential)는 페이지가 메모리 상에서 갱신될 때마다 계산되어 기록되는 것이 아니라 갱신된 페이지가 플래시 메모리에 반영될 필요가 있을 때에만 계산되어 기록된다. 본 방법은 플래시 메모리로부터 논리적 페이지의 원본페이지(original page)를 읽은 후, 갱신된 논리적 페이지와의 차이점을 계산함으로써 갱신된 페이지에 대한 차이(differential)를 생성한다. 플래시 메모리에서는 읽기 연산의 속도가 쓰기 또는 삭제 연산의 속도에 비해 매우 빠르기 때문에 차이(differential)를 생성하기 위한 오버헤드는 상대적으로 작다.
(2) 플래시 메모리로부터 페이지를 재생성할 경우, 제안된 방법은 최대 두 개의 페이지들(원본 페이지와 차이(differential)를 포함하고 있는 하나의 페이지)만을 읽기 때문에 로그 기반 방법들에 비해 더 적은 횟수의 읽기 연산을 필요로 한다.
(3) 갱신된 페이지를 플래시 메모리에 반영해야 할 필요가 있을 경우, 제안된 방법은 차이(differential)를 기록하기 때문에 로그 기반 또는 페이지 기반 방법들에 비해 더 적은 횟수의 쓰기 연산들을 필요로 한다.
(4) 로그 기반 방법들은 저장 시스템에 밀결합(tightly-coupled)되는 반면에, 제안된 방법은 시스템에 느슨하게 결합(loosely-coupled)된다. 로그 기반 방법들은 페이지가 갱신될 때마다 페이지 내의 변경사항들을 식별해야 하기 때문에 DBMS의 저장 장치 관리 모듈을 고쳐야 한다. 변경사항들은 시스템에 의해서 내부적으로 관리되기 때문에 오직 저장 장치 모듈 내부에서만 식별될 수 있다. 반면에, 제안된 방법은 저장 장치 관리 모듈 외부에서 플래시 메모리에 반영될 필요가 있는 페이지를 플래시 메모리 내의 원본 페이지와 비교함으로써 차이(differential)를 계산하기 때문에 DBMS의 모듈을 고칠 필요가 없다.
상기한 과제를 해결하기 위한 본 발명의 특징에 따른 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법은 논리적 페이지를 플래시 메모리의 기준 페이지(base page)와 차이 페이지(differential page)로 나누어 기록하는 기록단계 및 기준 페이지(base page)와 차이 페이지(differential page)를 읽은 후, 기준 페이지(base page)와 차이 페이지(differential page) 내의 차이(differential)를 병합하여 논리적 페이지를 생성하는 재생성단계를 포함한다.
또한, 상기 기록단계는 논리적 페이지와 기준 페이지(base page)를 비교하여 차이(differential)를 생성하는 차이(differential) 생성단계와, 상기 차이(differential) 생성단계 후 생성된 차이(differential)를 쓰기 버퍼에 기록하는 차이(differential) 기록단계 및 상기 쓰기 버퍼가 다 차면 이를 플래시 메모리에 기록하는 버퍼 기록단계를 포함하는 것을 특징으로 한다.
또한, 상기 기준 페이지(base page)는 논리적 페이지 전체를 포함하는 것을 특징으로 한다.
또한, 상기 차이 페이지(differential page)는 하나 이상의 논리적 페이지들의 차이(differential)들을 포함할 수 있는 것을 특징으로 한다.
또한, 상기 차이(differential)는 상기 기준 페이지(base page)와 상기 논리적 페이지간의 차이점인 것을 특징으로 한다.
또한, 상기 기록단계는 논리적 페이지가 메모리 상에서 갱신될 때마다 수행되는 것이 아니라 갱신된 논리적 페이지가 플래시 메모리에 반영될 필요가 있을 경우에만 수행되는 것을 특징으로 한다.
또한, 상기 기록단계는 플래시 메모리로부터 논리적 페이지에 대한 기준 페이지(base page)를 읽는 제1단계와, 상기 제1단계에서 읽은 기준 페이지(base page)와 논리적 페이지를 비교함으로써 논리적 페이지에 대한 차이(differential)를 생성하는 제2단계 및 상기 제2단계 후 차이(differential)를 쓰기 버퍼에 기록하는 제3단계로 이루어지는 것을 특징으로 한다.
또한, 상기 제3단계는 상기 차이(differential)의 크기가 상기 쓰기 버퍼의 여유 공간과 같거나 작은 경우 상기 차이(differential)를 쓰기 버퍼에 기록하는 단계인 것을 특징으로 한다.
또한, 상기 제3단계는 상기 차이(differential)의 크기가 상기 쓰기 버퍼의 여유 공간보다는 크지만 물리적 페이지 하나의 크기와는 같거나 작은 경우 상기 쓰기 버퍼의 내용을 플래시 메모리에 기록한 후, 상기 쓰기 버퍼를 비우고, 상기 차이(differential)를 상기 쓰기 버퍼에 기록하는 단계인 것을 특징으로 한다.
또한, 상기 제3단계는 상기 차이(differential)의 크기가 물리적 페이지 하나의 크기보다 더 큰 경우 상기 차이(differential)를 버리고 논리적 페이지 자체를 플래시 메모리에 새로운 기준 페이지(base page)로 기록하는 단계인 것을 특징으로 한다.
또한, 상기 재생성단계는 상기 플래시 메모리로부터 상기 논리적 페이지에 대한 상기 기준 페이지(base page)를 읽는 제1과정과, 상기 논리적 페이지에 대한 차이(differential)를 찾는 제2과정 및 상기 제1과정에서 읽은 기준 페이지(base page)와 상기 제2과정에서 찾은 차이(differential)를 병합하여 논리적 페이지를 생성하는 제3과정으로 이루어짐을 특징으로 한다.
또한, 상기 제2과정은 상기 차이(differential)가 상기 쓰기 버퍼에 존재하는 경우에는 상기 쓰기 버퍼로부터 논리적 페이지에 대한 차이(differential)를 찾는 것을 특징으로 한다.
또한, 상기 제2과정은 상기 차이(differential)가 상기 쓰기 버퍼에 존재하지 않는 경우에는 논리적 페이지에 대한 차이 페이지(differential page)를 플래시 메모리로부터 읽고 난 후, 읽은 차이 페이지(differential page)로부터 차이(differential)를 찾는 것을 특징으로 한다.
상기한 바와 같이 본 발명에 의한 페이지-디퍼런셜 로깅 방법은 플래시 기반 저장 시스템의 성능을 현저하게 향상시키는 효과적이고 효율적인 페이지 갱신 방법이고, 갱신된 페이지의 차이(differential)만이 기록된다는 것과 차이(differential)는 페이지가 메모리 상에서 갱신될 때마다 계산되어 기록되는 것이 아니라 갱신된 페이지가 플래시 메모리에 반영될 필요가 있을 때에만 계산되어 기록된다는 것이며, 플래시 메모리로부터 페이지를 재생성할 경우 로그 기반 방법들에 비해 더 적은 횟수의 읽기 연산을 필요로 하며, 갱신된 페이지를 플래시 메모리에 반영해야 할 필요가 있을 경우 로그 기반 및 페이지 기반 방법들에 비해 더 적은 횟수의 쓰기 연산을 필요로 하며, 단지 플래시 메모리 드라이버(driver)만을 고침으로써 기존 디스크 기반 DBMS들을 플래시 기반 DBMS들로 재사용되도록 해 주므로, 경제적이고 더욱 빠르며 성능이 더욱 향상된다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예를 상세히 설명한다.
본 발명은 플래시 기반 저장 시스템을 위한 페이지-디퍼런셜 로깅(page-differential logging) 방법을 제안한다.
읽기 연산과 쓰기 연산 모두에 대해서 좋은 성능을 얻기 위하여 페이지-디퍼런셜 로깅을 위한 세 가지 원칙들을 제시한다.
첫 번째 원칙은 writing difference only로써, 논리적 페이지가 플래시 메모리에 반영될 필요가 있을 경우 오직 차이점(difference)만을 기록한다.
두 번째 원칙은 at-most-one-page writing으로써, 논리적 페이지가 플래시 메모리에 반영될 필요가 있을 경우 페이지가 메모리 상에서 설사 여러 번 갱신되었다 하더라도 최대 한 개의(at most one) 물리적 페이지만을 기록한다.
세 번째 원칙은 at-most-two-page reading으로써, 플래시 메모리로부터 논리적 페이지를 재생성하는 경우 최대 두 개의(at most two) 물리적 페이지들만을 읽는다.
본 발명은 위에서 언급한 세 가지 원칙들을 따르는 페이지-디퍼런셜 로깅 방법을 제안한다.
페이지-디퍼런셜 로깅에서는 하나의 논리적 페이지가 두 개의 물리적 페이지들인 기준 페이지(base page)와 차이 페이지(differential page)(differential page)에 저장된다. 여기서, 기준 페이지(base page)는 논리적 페이지 전체를 포함하며, 차이 페이지(differential page)는 기준 페이지(base page)와 최신의 논리적 페이지간의 다른점인 차이(differential)를 포함한다. 차이 페이지(differential page)는 빈 공간이 낭비되는 것을 막기 위하여 여러 개의 논리적 페이지들의 차이(differential)들을 포함할 수 있다.
차이(differential)는 로그 기반 방법들에서의 갱신 로그들의 집합에 비해 다음의 두 가지 장점들을 가진다. (1) 차이(differential)는 논리적 페이지의 갱신 로그들을 모두 유지하지 않고서도 계산될 수 있다. 다시 말하면, 차이(differential)는 갱신된 논리적 페이지가 플래시 메모리에 반영될 필요가 있을 경우에 갱신된 논리적 페이지와 기준 페이지(base page)를 비교함으로써 계산될 수 있다. (2) 차이(differential)는 논리적 페이지 내의 여러 번 갱신된 부분들에 대해서 원본 페이지와 최신 논리적 페이지와의 차이점만을 포함한다. 논리적 페이지 내의 특정 부분이 메모리 상에서 여러 번 갱신되는 경우 갱신 로그들의 집합은 변경사항들을 모두 포함하는데 반해 차이(differential)는 오직 원본 데이터와 최신 데이터와의 차이점만을 포함한다. 예를 들어, 논리적 페이지가 [..aaaaaa.. -> ..bbbbba.. -> ..bcccba..]와 같이 두 번 갱신되었다고 가정하자. 여기서, 갱신 로그들의 집합은 변경사항들인 'bbbbb'와 'ccc' 모두 포함하는 반면에 차이(differential)는 차이점인 'bcccb' 만을 포함한다.
갱신된 논리적 페이지를 플래시 메모리에 반영할 필요가 있을 경우, 페이지 디퍼런셜 로깅은 논리적 페이지와 플래시 메모리 내의 기준 페이지(base page)를 비교함으로써 차이(differential)를 생성한 후, 이 차이(differential)를 하나의 페이지로 구성된 쓰기 버퍼에 기록한다. 그리고, 버퍼가 다 차면 이를 플래시 메모리에 기록한다. 따라서, 본 방법은 writing difference only 원칙을 만족한다.
본 방법은 논리적 페이지가 갱신되는 경우, 별도의 로그를 기록하지 않은 채 단지 메모리 상의 논리적 페이지만을 갱신한다. 차이(differential)를 생성하여 기록하는 것은 갱신된 논리적 페이지가 플래시 메모리에 반영될 필요가 있을 때까지 연기된다. 따라서, 본 방법은 at-most-one-page writing 원칙을 만족한다.
이론적으로, 차이(differential)의 크기는 페이지 하나의 크기보다 더 커질 수 없다. 그러나, 실제적으로는 차이(differential)는 페이지 내의 변경된 데이터뿐만 아니라 오프셋(offset)과 길이(length)와 같은 메타데이터를 포함하기 때문에 만약 페이지의 커다란 부분이 변경된 경우에는 차이(differential)의 크기가 페이지 하나의 크기보다 더 커질 수 있다. 이 경우에는 at-most-one-page writing 원칙을 만족하기 위하여 생성된 차이(differential)를 버리고, 갱신된 논리적 페이지 자체를 새로운 기준 페이지(base page)로 플래시 메모리에 기록한다(이 특별한 경우에는 페이지-디퍼런셜 로깅은 페이지 기반 방법과 같아지게 된다).
플래시 메모리로부터 논리적 페이지를 재생성하는 경우, 페이지-디퍼런셜 로깅은 기준 페이지(base page)와 그것의 차이 페이지(differential page)를 읽은 후, 기준 페이지(base page)와 차이 페이지(differential page) 내의 차이(differential)를 병합함으로써 논리적 페이지를 생성한다. 이때, 만약 기준 페이지(base page)가 갱신되지 않았을 경우(즉, 차이 페이지(differential page)가 없는 경우)에는 오직 하나의 물리적 페이지만을 읽는다. 따라서, 본 방법은 최대 두 개의 물리적 페이지만을 읽기 때문에 at-most-two-page reading 원칙을 만족한다.
도5a부터 도5e는 페이지-디퍼런셜 로깅 방법을 도시한다. 여기서, base_page(p), differential_page(p), 그리고 differential(p)는 각각 논리적 페이지 p에 대한 기준 페이지(base page), 차이 페이지(differential page), 그리고 차이(differential)를 나타낸다.
도5a는 메모리 상의 논리적 페이지들 l 1 , l 2 를 도시한다.
도5b는 갱신된 논리적 페이지들 l 1 , l 2 와 이들을 플래시 메모리에 기록하는 과정을 도시한다.
도5c는 갱신된 논리적 페이지들 l1 , l2 와 이들 각각의 기준 페이지(base page)들와의 비교에 의한 차이(differential)들의 생성을 도시한다.
도5b에서 갱신된 논리적 페이지들 l 1 , l 2 가 플래시 메모리에 반영될 필요가 있을 경우, 페이지-디퍼런셜 로깅 방법은 다음의 세 단계를 수행한다.
(1) 플래시 메모리로부터 기준 페이지(base page)들 p1 , p2 를 읽는다.
(2) 갱신된 논리적 페이지들 l1 , l2 와 기준 페이지(base page)들 p1 , p2 를 각각 비교함으로써 differential(l1 ), differential(l2 )를 생성한다.
(3) differential(l 1 ), differential(l 2 )를 쓰기 버퍼에 기록한다. 만약 버퍼가 다 차면 이를 물리적 페이지 p 3 에 기록한다.
따라서, 갱신된 논리적 페이지들 l1 , l2 의 차이(differential)들은 동일한 차이 페이지(differential page) p3 에 기록된다.
도5d는 플래시 메모리로부터 재생성된 논리적 페이지 l 1 을 도시한다.
도5e는 도5d에서 플래시 메모리로부터 재생성된 논리적 페이지 l1 의 생성방법을 도시한다. 여기서, 논리적 페이지 l1 은 기준 페이지(base page) p1 과 차이 페이지(differential page) p3 내의 differential(l1 )을 병합함으로써 생성된다.
플래시 메모리 내에서 사용되는 자료 구조들에는 기준 페이지(base page)들, 차이 페이지(differential page)들, 그리고 차이(differential)들이 있다. 기준 페이지(base page)는 데이터 영역 내에 논리적 페이지를 저장하고, 스페어 영역 내에 물리적 페이지 식별자를 저장한다. 물리적 페이지 식별자는 데이터베이스 내의 페이지들의 유일한 식별자를 나타낸다. 차이 페이지(differential page)는 논리적 페이지들의 차이(differential)들을 저장한다. 차이(differential)가 속하는 기준 페이지(base page)를 식별하기 위하여 물리적 페이지 식별자가 차이(differential) 내에 저장된다. 따라서, 차이(differential)의 구조는 < 물리적 페이지 식별자, [ 오프셋, 길이, 변경된 데이터]+>와 같은 형태를 가진다.
메모리 내에서 사용되는 자료 구조들에는 물리적 페이지 맵핑 테이블(physical page mapping table), 유효한 디퍼런셜 카운트 테이블(valid differential count table), 그리고 디퍼런셜 쓰기 버퍼(differential write buffer)가 있다. 물리적 페이지 맵핑 테이블은 물리적 페이지 식별자를 <기준 페이지(base page) 주소, 차이 페이지(differential page) 주소>로 맵핑한다. 플래시 메모리에서는 다른 자리 갱신 방법(out-place scheme)에 의해 페이지 내의 위치가 바뀔 수 있기 때문에 이 테이블은 플래시 메모리 내의 기준 페이지(base page)와 차이 페이지(differential page)의 쌍을 간접적으로 참조하는데 사용된다.
유효한 디퍼런셜 카운트 테이블은 유효한 차이(differential)(즉, 쓸모없음(obsolete) 이 아닌 차이(differential))의 개수를 카운트한다. 이때, 카운트의 값이 0이 되면, 그 차이 페이지(differential page)는 쓸모없음(obsolete) 상태로 설정되며, garbage collection에 의해 재사용된다.
디퍼런셜 쓰기 버퍼는 논리적 페이지들의 차이(differential)를 메모리 상에서 모은 후, 버퍼가 다 차면 이들을 플래시 메모리 내의 차이 페이지(differential page)에 기록하기 위해서 사용된다. 디퍼런셜 쓰기 버퍼는 하나의 페이지로 이루어지기 때문에 메모리 사용량이 매우 작다. 도6은 상기에서 설명된 페이지 디퍼런셜 로깅 방법의 자료 구조들을 도시한다.
논리적 페이지를 플래시 메모리에 기록하기 위한 알고리즘과 플래시 메모리로부터 논리적 페이지를 재생성하기 위한 알고리즘을 소개한다.
이들 알고리즘들을 각각 PageDifferentialLogging_Writing와 PageDifferentialLogging_Reading이라 부른다.
도7a는 논리적 페이지를 플래시 메모리에 기록하는 데에 사용되는 PageDifferentialLogging_Writing 알고리즘을 도시한다.
PageDifferentialLogging_Writing의 입력은 논리적 페이지 p와 헤더 영역에 저장된 물리적 페이지 식별자 pid 이다. 이 알고리즘은 다음의 세 단계로 이루어진다.
단계1에서는 플래시 메모리로부터 base_page(pid)를 읽는다.
단계2에서는 단계1에서 읽은 base_page(pid)와 입력으로 주어진 논리적 페이지 p를 비교함으로써 differential(pid)를 생성한다.
단계3에서는 단계2에서 생성한 differential(pid)를 디퍼런셜 쓰기 버퍼에 기록한다. 여기서, differential(pid)의 크기에 따라서 세 가지 경우가 존재한다. 이때, 논리적 페이지 p의 예전 차이(differential)가 버퍼에 존재하는 경우에는 예전 차이(differential)를 버퍼에서 먼저 삭제한 후, 아래 과정을 수행한다.
첫째, differential(pid)의 크기가 디퍼런셜 쓰기 버퍼의 여유 공간과 같거나 더 작은 경우(경우1)에는 단순히 differential(pid)를 디퍼런셜 쓰기 버퍼에 기록한다.
둘째, differential(pid)의 크기가 디퍼런셜 쓰기 버퍼의 여유 공간보다는 더 크지만, 물리적 페이지 하나의 크기보다는 같거나 더 작은 경우(경우2)에는 writingDifferentialWriteBuffer() 함수를 호출한 후, 버퍼를 비우고, differential(pid)를 버퍼에 기록한다. 도7b는 writingDifferentialWriteBuffer함수의 내용을 도시한다. 이 함수는 버퍼의 내용을 차이 페이지(differential page)로 플래시 메모리에 기록한 후, 버퍼 내의 각각의 차이(differential)에 대해 물리적 페이지 맵핑 테이블과 유효한 디퍼런셜 카운트 테이블을 갱신한다. 이때, 카운트의 값이 0이 되면, 그 차이 페이지(differential page)는 쓸모없음(obsolete)으로 설정되며, garbage collection에 의해 재사용된다.
마지막으로, differential(pid)의 크기가 물리적 페이지 하나의 크기보다 더 큰 경우(경우3)에는 생성한 differential(pid)을 버리고, writingNewBasePage() 함수를 호출한다. 도7c는 writingNewBasePage함수의 내용을 도시한다. 이 함수는 논리적 페이지 p 자체를 새로운 기준 페이지(base page)로 플래시 메모리에 기록한 후, 물리적 페이지 맵핑 테이블과 유효한 디퍼런셜 카운트 테이블을 갱신하고, 예전 기준 페이지(base page)를 쓸모없음(obsolete) 상태로 설정한다.
도9는 플래시 메모리로부터 논리적 페이지를 재생성하기 위해서 사용되는 PageDifferentialLogging_Reading 알고리즘을 나타낸다.
PageDifferentialLogging_Reading의 입력은 읽고자하는 논리적 페이지의 물리적 페이지 식별자 pid 이다. 이 알고리즘은 다음의 세 단계로 이루어진다.
단계1에서는 플래시 메모리로부터 base_page(pid)를 읽는다.
단계2에서는 base_page(pid)의 differential(pid)를 찾는다. 여기서, differential(pid)가 어디에 존재하는가에 따라서 두 가지 경우가 존재한다.
첫째, differential(pid)가 디퍼런셜 쓰기 버퍼 내에 존재하는 경우, 즉, 버 퍼가 아직까지 플래시 메모리에 기록되지 않은 경우에는 디퍼런셜 쓰기 버퍼에서 differential(pid)를 찾는다.
둘째, differential(pid)가 디퍼런셜 쓰기 버퍼 내에 존재하지 않는 경우, 플래시 메모리로부터 differential_page(pid)를 읽어서 differential(pid)를 찾는다. 이때, 만약 differential_page(pid)가 플래시 메모리에 존재하지 않는 경우에는(physical page mapping tabel에서 알 수 있음) 단계 1에서 읽은 base_page(pid)를 결과로 반환한다.
단계 3에서는 단계 1에서 읽은 base_page(pid)와 단계 2에서 찾은 differential(pid)를 병합함으로써 논리적 페이지 p를 재생성한 후, 이를 결과로 반환한다.
이상과 같이 본 발명에 따른 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 새로운 어프로치인 페이지 디퍼런셜 로깅을 예시한 도면을 참조로 하여 설명하였으나, 본 명세서에 개시된 실시예와 도면에 의해 본 발명이 한정되는 것은 아니며, 본 발명의 기술사상 범위내에서 당업자에 의해 다양한 변형이 이루어질 수 있음은 물론이다.
도1은 플래시 메모리의 구조를 나타낸 도면이다.
도2는 페이지 기반 어프로치의 아키텍처를 나타낸 도면이다.
도3a는 다른 자리 갱신 방법(out-place update) 과정 중 블록 b1 내의 물리적 페이지 p1 으로부터 읽은 논리적 페이지 l1 을 나타낸 도면이다.
도3b는 다른 자리 갱신 방법(out-place update) 과정 중 갱신된 논리적 페이지 l1 과 이를 물리적 페이지 p2 에 기록하는 과정을 나타낸 도면이다.
도4a는 로그 기반 어프로치를 설명하기 위해 과정 시작 전의 메모리 상태를 나타낸 도면이다.
도4b는 로그 기반 어프로치 과정 중 논리적 페이지들 l 1 , l 2 와 각각의 갱신 로그들 q 1 , q 2 가 플래시 메모리에 기록되는 과정을 나타낸 도면이다.
도4c는 로그 기반 어프로치 과정 중 논리적 페이지들 l 1 , l 2 와 각각의 갱신 로그들 q 3 , q 4 가 플래시 메모리에 기록되는 과정을 나타내는 도면이다.
도4d는 로그 기반 어프로치 과정 중 플래시 메모리로부터 재생성된 논리적 페이지 l 1 을 나타낸 도면이다.
도4e는 로그 기반 어프로치 과정 중 도4d에서 재생성된 논리적 페이지 l 1 의 생성방법을 나타낸 도면이다.
도5a는 차이(differential) 기반 어프로치를 설명하기 위해 과정 시작 전의 메모리 상태를 나타낸 도면이다.
도5b는 차이(differential) 기반 어프로치 과정 중 갱신된 논리적 페이지들 l1 , l2 와 이들이 플래시 메모리에 기록되는 과정을 나타낸 도면이다.
도5c는 차이(differential) 기반 어프로치 과정 중 갱신된 논리적 페이지들 l1 , l2 와 이들 각각의 기준 페이지(base page)들와의 비교에 의한 차이(differential)들의 생성을 도시한다.
도5d는 차이(differential) 기반 어프로치 과정 중 플래시 메모리로부터 재생성된 논리적 페이지 l1 을 나타내는 도면이다.
도5e는 차이(differential) 기반 어프로치 과정 중 플래시 메모리로부터 재생성된 논리적 페이지 l1 의 생성방법을 나타낸 도면이다.
도6은 페이지-디퍼런셜 로깅 방법의 자료 구조를 나타낸 도면이다.
도7a는 논리적 페이지를 플래시 메모리에 기록하는 알고리즘을 나타낸 도면이다.
도7b는 도7a에 기재된 알고리즘에서 사용되는 writingDifferentialWriteBuffer 함수를 나타낸 도면이다.
도7c는 도7a에 기재된 알고리즘에서 사용되는 writingNewBasePage 함수를 나타낸 도면이다.
도8a는 논리적 페이지를 플래시 메모리에 기록하는 알고리즘인 도7을 단계로써 도시한 도면이다.
도8b는 도7a과 도8a중 차이(differential)의 크기에 따른 논리적 페이지의 기록 단계를 도시한 도면이다.
도8c는 도8b중 차이(differential)의 크기가 쓰기 버퍼의 여유 크기보다는 크지만 물리적 페이지 하나의 크기와는 작거나 같은 경우인 도7b에서 도시된 함수인 writingDifferentialWriteBuffer 단계를 도시한 도면이다.
도8d는 도8b중 차이(differential)의 크기가 물리적 페이지 하나의 크기보다는 큰 경우인 도7c의 단계인 해당 차이(differential)를 버린 후 실행되는 writingNewBasePage 단계를 도시한 도면이다.
도9는 플래시 메모리로부터 논리적 페이지를 재생성하는 알고리즘을 나타낸 도면이다.
도10은 플래시 메모리로부터 논리적 페이지를 재생성하는 알고리즘인 도9를 단계로써 도시한 도면이다.
Claims (19)
- 논리적 페이지를 플래시 메모리 내에 기준 페이지(base page)와 차이 페이지(differential page)로 나누어 기록하는 기록단계; 및기준 페이지(base page)와 차이 페이지(differential page)를 읽은 후, 기준 페이지(base page)와 차이 페이지(differential page) 내의 차이(differential)를 병합하여 논리적 페이지를 생성하는 재생성단계를 포함하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 1항에 있어서,상기 기록단계는 논리적 페이지와 플래시 메모리 내의 기준 페이지(base page)를 비교하여 차이(differential)를 생성하는 차이(differential) 생성단계;상기 차이(differential) 생성단계 후 생성된 차이(differential)를 쓰기 버퍼에 기록하는 차이(differential) 기록단계; 및상기 쓰기 버퍼가 다 차면 이를 플래시 메모리에 저장하는 버퍼 기록단계를 포함하는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 1항 또는 2항에 있어서,상기 기준 페이지(base page)는 논리적 페이지 전체를 포함하는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 1항 또는 2항에 있어서,상기 차이 페이지(differential page)는 하나 이상의 논리적 페이지들의 차이(differential)들을 포함할 수 있는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 1항 또는 2항에 있어서,상기 차이(differential)는 상기 기준 페이지(base page)와 상기 논리적 페이지간의 차이점인 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 1항 또는 2항에 있어서,상기 기록단계는 갱신된 논리적 페이지가 플래시 메모리에 반영될 필요가 있 을 경우에만 수행되는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 1항 또는 2항에 있어서,상기 기록단계는 플래시 메모리로부터 논리적 페이지에 대한 기준 페이지(base page)를 읽는 제1단계;상기 제1단계에서 읽은 기준 페이지(base page)와 논리적 페이지를 비교함으로써 논리적 페이지에 대한 차이(differential)를 생성하는 제2단계 및상기 제2단계 후, 쓰기 버퍼에 예전 차이(differential)가 존재하는 경우에는 이를 먼저 삭제한 후, 차이(differential)를 쓰기 버퍼에 기록하는 제3단계로 이루어지는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 7항에 있어서,상기 제3단계는 상기 차이(differential)의 크기가 상기 쓰기 버퍼의 여유 공간과 같거나 작은 경우 상기 차이(differential)를 쓰기 버퍼에 기록하는 단계인 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 7항에 있어서,상기 제3단계는 상기 차이(differential)의 크기가 상기 쓰기 버퍼의 여유 공간보다는 크지만 물리적 페이지 하나의 크기와는 같거나 작은 경우 상기 쓰기 버퍼의 내용을 플래시 메모리에 기록하는 단계, 상기 쓰기 버퍼를 비우는 단계 및 상기 차이(differential)를 상기 쓰기 버퍼에 기록하는 단계로 구성되는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 9항에 있어서,상기 플래시 메모리에 기록하는 단계는쓰기 버퍼의 내용을 플래시 메모리로부터 할당받은 새로운 물리적 페이지에 기록하는 단계 및물리적 페이지 맵핑 테이블과 유효 디퍼런셜 카운트 테이블을 갱신하는 테이블 갱신 단계로 구성되는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 10항에 있어서,상기 테이블 갱신 단계는상기 쓰기 버퍼내의 각 차이(differential)에 대해서상기 각 차이(differential)가 속하는 논리적 페이지의 차이 페이지(differential page)가 상기 물리적 페이지가 되도록 물리적 페이지 매핑 테이블을 갱신하는 단계;상기 각 차이(differential)가 속하는 논리적 페이지의 예전 차이 페이지(differential page)가 none이 아닌 경우 유효 디퍼런셜 카운트 테이블에서 예전 차이 페이지(differential page)의 카운트 값을 1 감소시키는 단계 및유효 디퍼런셜 카운트 테이블에서 새로운 차이 페이지(differential page)의 카운트 값을 1 증가 시키는 단계로 이루어지는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 7항에 있어서,상기 제3단계는 상기 차이(differential)의 크기가 물리적 페이지 하나의 크기보다 더 큰 경우 상기 차이(differential)를 버리는 단계 및 기준 페이지(base page)를 기록하는 단계로 구성되는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 12항에 있어서,상기 기준 페이지(base page)를 기록하는 단계는상기 기준 페이지(base page)를 플래시 메모리로부터 할당받은 새로운 물리적 페이지에 기록하는 단계 및물리적 페이지 맵핑 테이블과 유효 디퍼런셜 카운트 테이블을 갱신하는 테이블 갱신 단계로 구성되는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 13항에 있어서,상기 테이블 갱신 단계는상기 논리적 페이지의 기준 페이지(base page)와 차이 페이지(differential page)가 각각 상기 물리적 페이지와 none이 되도록 물리적 페이지 맵핑 테이블을 갱신하는 단계;상기 논리적 페이지의 예전 디퍼러셜 페이지가 none이 아닌 경우 유효 디퍼런셜 카운트 테이블에서 예전 차이 페이지(differential page)의 카운트 값을 1 감소시키는 단계 및상기 논리적 페이지의 예전 기준 페이지(base page)를 쓸모없음(obsolete) 상태로 설정하는 단계로 구성되는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 11항 또는 14항에 있어서,상기 예전 차이 페이지(differential page)의 카운트 값을 1 감소시키는 단계 이후에상기 감소된 예전 차이 페이지(differential page)의 카운트 값이 0인 경우 상기 차이 페이지(differential page)를 쓸모없음(obsolete) 상태로 설정하는 단계를 더 포함하는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 2항에 있어서,상기 재생성단계는 상기 플래시 메모리로부터 상기 논리적 페이지에 대한 상기 기준 페이지(base page)를 읽는 제1과정;상기 논리적 페이지에 대한 차이(differential)를 찾는 제2과정; 및상기 제1과정에서 읽은 기준 페이지(base page)와 상기 제2과정에서 찾은 차이(differential)를 병합하여 논리적 페이지를 생성한 후, 이를 결과로 반환하는 제3과정으로 이루어짐을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 16항에 있어서,상기 제2과정은 상기 차이(differential)가 상기 쓰기 버퍼에 존재하는 경우 상기 쓰기 버퍼로부터 논리적 페이지에 대한 차이(differential)를 찾는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 16에 있어서,상기 제2과정은 상기 차이(differential)가 상기 쓰기 버퍼에 존재하지 않는 경우 논리적 페이지에 대한 차이 페이지(differential page)를 읽는 단계 및 상기 읽은 차이 페이지(differential page)로부터 차이(differential)를 찾는 단계로 이루어진 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
- 청구항 18항에 있어서,상기 논리적 페이지에 대한 차이 페이지(differential page)를 읽는 단계 이전에논리적 페이지에 대한 차이 페이지(differential page)가 플래시 메모리에 존재하지 않는 경우 상기 제1과정에서 읽은 기준 페이지(base page)를 결과로 반환하는 단계를 더 포함하는 것을 특징으로 하는 페이지-디퍼런셜을 이용하여 DBMS에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/507,946 US8117406B2 (en) | 2009-03-18 | 2009-07-23 | Method of storing data into flash memory in a DBMS-independent manner using the page-differential |
JP2009183667A JP5184462B2 (ja) | 2009-03-18 | 2009-08-06 | ページ−ディファレンシャルを使用して、dbmsに独立的な方法でフラッシュメモリーにデータを格納する方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20090022955 | 2009-03-18 | ||
KR1020090022955 | 2009-03-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR100929371B1 true KR100929371B1 (ko) | 2009-12-02 |
Family
ID=41683734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090035341A KR100929371B1 (ko) | 2009-03-18 | 2009-04-23 | 페이지-디퍼런셜을 이용하여 dbms에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8117406B2 (ko) |
JP (1) | JP5184462B2 (ko) |
KR (1) | KR100929371B1 (ko) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101069667B1 (ko) | 2009-11-25 | 2011-10-05 | 동국대학교 산학협력단 | 전화번호 저장 방법 및 저장 시스템 |
KR101191320B1 (ko) | 2010-12-09 | 2012-10-16 | 한양대학교 산학협력단 | 쓰기 데이터의 비교에 의한 플래시 메모리 관리장치 및 방법 |
WO2014088684A1 (en) * | 2012-12-03 | 2014-06-12 | Western Digital Technologies, Inc. | Methods, solid state drive controllers and data storage devices having a runtime variable raid protection scheme |
US8972826B2 (en) | 2012-10-24 | 2015-03-03 | Western Digital Technologies, Inc. | Adaptive error correction codes for data storage systems |
US9021339B2 (en) | 2012-11-29 | 2015-04-28 | Western Digital Technologies, Inc. | Data reliability schemes for data storage systems |
US9214963B1 (en) | 2012-12-21 | 2015-12-15 | Western Digital Technologies, Inc. | Method and system for monitoring data channel to enable use of dynamically adjustable LDPC coding parameters in a data storage system |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101644125B1 (ko) * | 2009-09-22 | 2016-07-29 | 삼성전자주식회사 | 비휘발성 메모리를 이용한 로깅 최적화 장치 및 방법 |
JP2011192239A (ja) * | 2010-03-17 | 2011-09-29 | Sony Corp | 記憶装置および記憶システム |
US9159422B1 (en) * | 2011-04-12 | 2015-10-13 | Sk Hynix Memory Solutions Inc. | Cross page management to avoid NAND physical page size limitation |
JP2013127748A (ja) * | 2011-12-19 | 2013-06-27 | Fujitsu Ltd | 情報処理装置、データ記憶方法及びプログラム |
US8990450B2 (en) * | 2012-05-14 | 2015-03-24 | International Business Machines Corporation | Managing a direct memory access (‘DMA’) injection first-in-first-out (‘FIFO’) messaging queue in a parallel computer |
JP6008325B2 (ja) * | 2013-05-17 | 2016-10-19 | 学校法人 中央大学 | データ記憶システムおよびその制御方法 |
US20140351485A1 (en) * | 2013-05-23 | 2014-11-27 | Spansion Llc | Differential File System for Computer Memory |
US9519591B2 (en) * | 2013-06-22 | 2016-12-13 | Microsoft Technology Licensing, Llc | Latch-free, log-structured storage for multiple access methods |
US9275095B2 (en) | 2013-07-31 | 2016-03-01 | International Business Machines Corporation | Compressing a multi-version database |
CN105701021B (zh) * | 2014-12-10 | 2021-03-02 | 慧荣科技股份有限公司 | 数据储存装置及其数据写入方法 |
KR102275710B1 (ko) | 2015-02-02 | 2021-07-09 | 삼성전자주식회사 | 오버-라이트가 가능한 메모리 장치, 메모리 시스템 및 메모리 시스템의 동작방법 |
US9870170B2 (en) | 2015-09-10 | 2018-01-16 | Toshiba Memory Corporation | Memory controller, memory system and memory control method |
US20170109102A1 (en) * | 2015-10-19 | 2017-04-20 | Elastifile Ltd. | Usage of ssd nvdram by upper software layers |
US10013346B2 (en) * | 2015-11-17 | 2018-07-03 | Western Digital Technologies, Inc. | Method of decreasing write amplification of NAND flash using a journal approach |
US10061523B2 (en) * | 2016-01-15 | 2018-08-28 | Samsung Electronics Co., Ltd. | Versioning storage devices and methods |
US10180891B2 (en) * | 2016-11-02 | 2019-01-15 | Sap Se | Monitoring processes running on a platform as a service architecture |
US10268566B2 (en) | 2016-11-04 | 2019-04-23 | Sap Se | Debugging in a private cloud environment |
US10446197B2 (en) | 2017-08-31 | 2019-10-15 | Micron Technology, Inc. | Optimized scan interval |
US10754580B2 (en) | 2017-10-23 | 2020-08-25 | Micron Technology, Inc. | Virtual partition management in a memory device |
US11455245B2 (en) | 2017-12-11 | 2022-09-27 | Micron Technology, Inc. | Scheme to improve efficiency of garbage collection in cached flash translation layer |
US10365854B1 (en) | 2018-03-19 | 2019-07-30 | Micron Technology, Inc. | Tracking data temperatures of logical block addresses |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20070086846A (ko) * | 2004-12-10 | 2007-08-27 | 인텔 코오퍼레이션 | 동적 코드 갱신을 지원하기 위한 페이징 사용 |
KR20080038613A (ko) * | 2006-10-30 | 2008-05-07 | 한국과학기술원 | 플래시메모리 관리방법 |
KR20080045556A (ko) * | 2006-11-20 | 2008-05-23 | 삼성전자주식회사 | 비휘발성 메모리 관리 방법 및 장치 |
KR20090021063A (ko) * | 2007-08-24 | 2009-02-27 | 삼성전자주식회사 | 플래시 메모리를 스토리지로 사용하는 장치 및 그 동작방법 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002008379A (ja) * | 2000-06-12 | 2002-01-11 | Shijin Kogyo Sakushinkai | フラッシュメモリの消去回数減少可能なデータアクセス方法と該方法を使用するデータ補修及びアクセス装置 |
FR2816750B1 (fr) * | 2000-11-15 | 2003-01-24 | St Microelectronics Sa | Memoire flash comprenant des moyens de controle de la tension de seuil de cellules memoire |
EP1331643B1 (en) * | 2002-01-29 | 2009-12-16 | Agere Systems Inc. | Differential flash memory programming technique |
-
2009
- 2009-04-23 KR KR1020090035341A patent/KR100929371B1/ko not_active IP Right Cessation
- 2009-07-23 US US12/507,946 patent/US8117406B2/en active Active
- 2009-08-06 JP JP2009183667A patent/JP5184462B2/ja not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20070086846A (ko) * | 2004-12-10 | 2007-08-27 | 인텔 코오퍼레이션 | 동적 코드 갱신을 지원하기 위한 페이징 사용 |
KR20080038613A (ko) * | 2006-10-30 | 2008-05-07 | 한국과학기술원 | 플래시메모리 관리방법 |
KR20080045556A (ko) * | 2006-11-20 | 2008-05-23 | 삼성전자주식회사 | 비휘발성 메모리 관리 방법 및 장치 |
KR20090021063A (ko) * | 2007-08-24 | 2009-02-27 | 삼성전자주식회사 | 플래시 메모리를 스토리지로 사용하는 장치 및 그 동작방법 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101069667B1 (ko) | 2009-11-25 | 2011-10-05 | 동국대학교 산학협력단 | 전화번호 저장 방법 및 저장 시스템 |
KR101191320B1 (ko) | 2010-12-09 | 2012-10-16 | 한양대학교 산학협력단 | 쓰기 데이터의 비교에 의한 플래시 메모리 관리장치 및 방법 |
US8972826B2 (en) | 2012-10-24 | 2015-03-03 | Western Digital Technologies, Inc. | Adaptive error correction codes for data storage systems |
US10216574B2 (en) | 2012-10-24 | 2019-02-26 | Western Digital Technologies, Inc. | Adaptive error correction codes for data storage systems |
US9021339B2 (en) | 2012-11-29 | 2015-04-28 | Western Digital Technologies, Inc. | Data reliability schemes for data storage systems |
WO2014088684A1 (en) * | 2012-12-03 | 2014-06-12 | Western Digital Technologies, Inc. | Methods, solid state drive controllers and data storage devices having a runtime variable raid protection scheme |
US9059736B2 (en) | 2012-12-03 | 2015-06-16 | Western Digital Technologies, Inc. | Methods, solid state drive controllers and data storage devices having a runtime variable raid protection scheme |
US9214963B1 (en) | 2012-12-21 | 2015-12-15 | Western Digital Technologies, Inc. | Method and system for monitoring data channel to enable use of dynamically adjustable LDPC coding parameters in a data storage system |
Also Published As
Publication number | Publication date |
---|---|
JP2010218529A (ja) | 2010-09-30 |
US20100241790A1 (en) | 2010-09-23 |
US8117406B2 (en) | 2012-02-14 |
JP5184462B2 (ja) | 2013-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100929371B1 (ko) | 페이지-디퍼런셜을 이용하여 dbms에 독립적인 방법으로 플래시 메모리에 데이터를 저장하는 방법 | |
US10649910B2 (en) | Persistent memory for key-value storage | |
US9535830B2 (en) | Fast block device and methodology | |
US9134918B2 (en) | Physical compression of data with flat or systematic pattern | |
US7877569B2 (en) | Reduction of fragmentation in nonvolatile memory using alternate address mapping | |
US7761655B2 (en) | Storage system and method of preventing deterioration of write performance in storage system | |
CN103257831B (zh) | 存储器的读写控制方法及对应的存储器 | |
US20110161560A1 (en) | Erase command caching to improve erase performance on flash memory | |
US7389395B1 (en) | Split-reference, two-pass mark-compaction | |
US8296503B2 (en) | Data updating and recovering methods for a non-volatile memory array | |
JP2004013895A (ja) | フラッシュメモリ用のファイルシステム | |
KR20070060070A (ko) | 최적화된 순차적인 클러스터 관리용 에프에이티 분석 | |
KR20100115090A (ko) | 버퍼를 고려한 가비지 컬렉션 기법 | |
KR20110093035A (ko) | 플래시 주소 변환 장치 및 그 방법 | |
CN112860594B (zh) | 一种固态盘地址重映射方法、设备及固态盘 | |
CN113190180A (zh) | 一种基于混合介质的存储装置及分布式存储系统 | |
KR101077901B1 (ko) | 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
KR101020781B1 (ko) | 플래시 메모리를 기반으로 한 데이터베이스 시스템에 대한 로그 관리 방법 | |
KR100638638B1 (ko) | 플래시 메모리의 제어 방법 | |
KR100941423B1 (ko) | 메모리의 페이지 할당 방법 및 이를 수행하기 위한프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체 | |
CN117891415B (zh) | 一种存储装置的p2l数据管理方法及装置 | |
CN114661238B (zh) | 带缓存的存储系统空间回收的方法及应用 | |
US8838878B2 (en) | Method of writing to a NAND memory block based file system with log based buffering | |
CN118277158A (zh) | 数据恢复方法、计算机可读存储介质和存储器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
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: 20121031 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20131030 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20161026 Year of fee payment: 8 |
|
LAPS | Lapse due to unpaid annual fee |