2009-11-18 6 views
5

저는 비 휘발성 플래시 메모리에 저장 될 알람 히스토리 구조를 개발하려고합니다. 플래시 메모리에는 쓰기 횟수가 제한되어 있으므로 매번 구조의 모든 플래시 페이지를 다시 작성하거나 큐의 헤드/테일에 대한 업데이트 된 포인터를 쓰지 않고 구조에 레코드를 추가하는 방법이 필요합니다.알람 내역 스택 또는 대기열?

또한 사용 가능한 플래시 메모리 공간이 사용되면 이전에 플래시에 저장된 레코드를 덮어 쓰기 시작하고 선입 선출에 추가 된 첫 번째 레코드부터 시작합니다. 이것은 순환 버퍼가 항목을 추가하는 데 가장 잘 작동한다고 생각합니다. 그러나 레코드를 볼 때 구조가 스택처럼 작동하기를 원합니다. 예 : 기록은 역순으로 선착순으로 표시됩니다.

구조체 크기, 헤드, 테일, 인덱스는 매번 고정 된 위치에 쓰여지면 저장된 페이지의 최대 쓰기주기를 초과하므로 레코드 자체에 저장되지 않으면 저장할 수 없습니다 .

그래서 스택, 대기열 또는 일부 하이브리드 구조를 사용해야합니까? 파워 업 후에 헤드, 테일, 크기 정보를 플래시에 저장하여 다시 초기화 할 수 있습니까? 마지막 (타임 스탬프 등에서 너무 마커를 작성할 필요가 없습니다) 항목이도 최고의 마모 레벨링 성능을 인 해결할 수 가정

+0

플래시에서 직접 작업 하시겠습니까? 아니면 플래시에서 파일 시스템을 사용하고 있습니까? – stefaanv

+0

파일 시스템이 없습니다. 플래시에 직접 쓰는 중. – mjh2007

답변

2

편집 : OP 플래시 컨트롤러에 적용되지 않습니다. 코드에 wear leveling을 신경 쓸 필요가 없습니다. 플래시 메모리 컨트롤러는 뒤에서이를 처리해야합니다.

그러나 아직 수행하고 싶다면 일반 원형 버퍼를 사용하고 keep pointers to the head and tail 스택을 사용하십시오.

Least Recently Used cache을 사용하여 데이터를 저장할 플래시를 관리 할 수도 있습니다.

+0

정확히 평평하게 착용하지 않습니다. 그는 글쓰기에 최대한 집중해야합니다. –

+0

저는 플래시 메모리 컨트롤러가웨어 레벨링을 제공하지 않는다고 확신합니다. AT45DB642D를 사용하고 있습니다. – mjh2007

+0

@ mjh2007 : 네 말이 맞아, 그 컨트롤러는 스펙 매뉴얼에 특별한 관리가없는 것 같아. –

0

확실히 링 버퍼가 필요합니다. 하지만 당신 말이 맞아요. 메타 정보는 약간 흥미 롭습니다. 흥미 롭습니다.

0

여러 항목으로 항목을 매핑하십시오. 섹션이 가득 차면 첫 번째 섹션부터 덮어 씁니다. 시퀀스 번호 (nbr 시퀀스 번호> 2 * 항목)를 추가하십시오. 따라서 재부팅 할 때 첫 번째 항목이 무엇인지 알 수 있습니다.

0

페이지에 저장된 첫 번째 요소가 페이지가 작성된 횟수 인 링 버퍼 버전을 사용할 수 있습니다. 이렇게하면 번호가 이전 페이지보다 낮은 첫 번째 페이지를 찾아 다음에 작성해야 할 위치를 결정할 수 있습니다. 둘 다 동일하면 처음부터 다음 번호로 시작합니다.