KR20050086832A - 바이오스 스토리지 어레이 - Google Patents

바이오스 스토리지 어레이 Download PDF

Info

Publication number
KR20050086832A
KR20050086832A KR1020057009445A KR20057009445A KR20050086832A KR 20050086832 A KR20050086832 A KR 20050086832A KR 1020057009445 A KR1020057009445 A KR 1020057009445A KR 20057009445 A KR20057009445 A KR 20057009445A KR 20050086832 A KR20050086832 A KR 20050086832A
Authority
KR
South Korea
Prior art keywords
storage device
data
storage
instructions
array
Prior art date
Application number
KR1020057009445A
Other languages
English (en)
Other versions
KR100829651B1 (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 KR20050086832A publication Critical patent/KR20050086832A/ko
Application granted granted Critical
Publication of KR100829651B1 publication Critical patent/KR100829651B1/ko

Links

Classifications

    • 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
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0632Configuration or reconfiguration of storage systems by initialisation or re-initialisation of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0605Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

BIOS 초기화 코드가 하나 이상의 스토리지 디바이스들을 둘 이상의 부분들로 분할하는 방법, 장치 및 머신 판독 가능 매체가 설명된다. 또한, BIOS 디바이스 핸들러는 분할된 스토리지 디바이스들을 이용하여 하나 이상의 RAID 레벨들의 속성들을 제공하는 스토리지 어레이를 구현할 수 있다.

Description

바이오스 스토리지 어레이{BIOS STORAGE ARRAY}
스토리지 어레이들은 데이터 액세스 성능을 증가시키는 것 및/또는 오류 허용(fault tolerance)을 증가시키는 것을 도울 수 있다. 그러한 스토리지 어레이들은 하나 또는 그 이상의 RAID(Redundant Arrays of Inexpensive Disks) 레벨들을 구현하는 것으로서 통상적으로 기술된다. 예를 들어, RAID 레벨 0 또는 RAID 0은, 데이터 판독 및 기록이 어레이의 스토리지 디바이스들을 가로질러 스트라이프화되어지는(striped) 둘 이상의 스토리지 디바이스들을 포함하는 스토리지 어레이를 일컫기 위해 통상 이용된다. 어레이의 스토리지 디바이스들을 가로질러 데이터 판독 및 기록을 스트라이프화(striping)하는 것은, 판독 또는 기록 요청을 수행하기 위해 어레이의 스토리지 디바이스들이 기본적으로 병렬로 액세스되기 때문에 판독 및 기록 성능을 향상시키는 경향이 있다. 그러나, RAID 0 어레이는 리던던시를 제공하지 않고, 따라서 어레이의 오류 허용을 증가시키지 않는다. 그 결과, RAID 0 어레이의 임의의 스토리지 디바이스에서 오류가 나면, 오류가 난 스토리지 디바이스에 관련된 데이터가 어레이를 통해 분산되기 때문에 일반적으로 그 어레이의 모든 데이터를 잃게 된다.
RAID 레벨 1 또는 RAID 1은, 데이터 기록이 어레이의 각각의 스토리지 디바이스에 미러링되는 두개 이상의 스토리지 디바이스들을 포함하는 스토리지 어레이를 일컫기 위해 통상 이용된다. 데이터 기록을 어레이의 각각의 스토리지 디바이스에 미러링하는 것은, 어레이의 임의의 스토리지 디바이스에 오류가 나면 그 데이터는 어레이의 다른 스토리지 디바이스로부터 여전히 검색될 수 있기 때문에, 일반적으로 어레이의 오류 허용을 증가시킨다. 그러나, 데이터 기록을 미러링하는 것은 데이터를 어레이의 다른 스토리지 디바이스들에 미러링하기 위해 필요한 추가적인 데이터 기록들 때문에 기록 성능을 저하시키는 경향이 있다. 데이터를 미러링하는 것은, 판독들이 어레이의 스토리지 디바이스들을 가로질러 균형잡혀 있다면/스트라이프화된다면, 판독 성능을 향상시킬 수 있다. 많은 구현예들은 모든 판독 요청들을 단순히 어레이의 단일 스토리지 디바이스에 보내고, 오류에 대한 응답으로 어레이의 다른 스토리지 디바이스들로부터 판독하기만 한다.
마지막으로, RAID 레벨 0+1 또는 RAID 0+1은 데이터 기록들이 스트라이프화된 어레이들에 미러링되는 4개 이상의 스토리지 디바이스들을 포함하는 스토리지 어레이를 일컫기 위해 통상적으로 이용된다. 예를 들어, RAID 0+1 어레이는 제1 RAID 0 어레이 및 제2 RAID 0 어레이를 포함할 수 있다. 어레이는 제1 RAID 0 어레이에 데이터를 더 기록할 수 있고, RAID 1에 따라 제2 RAID 0 어레이에 데이터를 미러링할 수 있다. 또한, 데이터 기록들을 미러링하는 것은 일반적으로 어레이의 오류 허용을 향상시키지만 추가적인 기록들 때문에 기록 성능을 저하시킨다. 그러나, 기록 성능 저하의 일부는 제1 및 제2 RAID 0 어레이들이 그들 각각의 어레이들의 스토리지 디바이스들을 가로질러 데이터를 스트라이프화하는 것에 의해 보상될 수 있다.
본 명세서에서 설명된 본 발명은 첨부 도면들로 예를 들어 설명된 것이고 제한을 하려는 것이 아니다. 설명을 간략하고 명료하게 하기 위해, 도면들에 예시된 구성 요소들은 반드시 비례척으로 도시된 것은 아니다. 예를 들어, 소정의 구성 요소들의 디멘젼들은 명료성을 위해 다른 구성 요소들에 비해 확대될 수 있다. 또한, 적당하다고 여겨지는 경우에는, 참조 번호들이 도면들 중에 대응하는 또는 유사한 구성 요소들을 지시하기 위해 반복되었다.
도 1은 적어도 하나의 스토리지 디바이스를 포함하는 컴퓨팅 디바이스의 일 예를 도시한다.
도 2는 도 1의 컴퓨팅 디바이스의 스토리지 어레이의 일 예를 도시한다.
도 3은 도 2의 어레이를 초기화하는 방법의 일 예를 도시한다.
도 4는 도 2의 어레이(15)에 대한 판독 및 기록 방법의 일 예를 도시한다.
도 5는 도 1의 컴퓨팅 디바이스의 스토리지 어레이의 다른 일 예를 도시한다.
도 6은 도 5의 어레이를 초기화하는 방법의 일 예를 도시한다.
도 7은 도 5의 어레이에 대한 판독 및 기록 방법의 일 예를 도시한다.
다음의 상세한 설명에서는, 본 발명의 완전한 이해를 제공하기 위해 다양한 구체적인 세부 사항들이 설명된다. 그러나, 본 발명은 이러한 구체적인 세부 사항들 없이 실시될 수 있다. 다른 경우는, 본 발명을 불명료하게 하지 않도록, 공지되어 있는 방법들, 프로시저들, 구성 성분들 및 회로들은 설명되지 않는다. 또한, 예시적인 사이즈/모델/값/범위가 주어지지만, 어떤 실시예들은 이러한 특수한 예들에 제한되지 않을 수 있다.
명세서에서 "일 실시예", "실시예", "예시적인 실시예" 등에 대한 참조는 설명된 실시예가 특별한 특징, 구조 또는 특성을 포함할 수 있으나, 모든 실시예가 그 특수한 특징, 구조 또는 특성을 포함할 필요는 없을 것이다. 또한, 그러한 문구들은 반드시 동일한 실시예를 일컫는 것은 아니다. 또한, 특별한 특징, 구조 또는 특성이 실시예와 관련하여 설명될 때, 분명하게 기재되어 있건 없건, 다른 실시예들과 관련하여 그러한 특징, 구조 또는 특성을 유효하게 하는 것은 당업자의 지식 범위 내임이 감안된다.
또한, "제1", "제2", "제3" 등의 용어들이 본 명세서에서 유사하게 명명된 구성 요소들 및/또는 동작들 간을 분별하기 위한 레이블들로서 이용된다. 특히, 그러한 용어들은 구성 요소들 및/동작들의 순서를 나타내기 위해 이용된 것은 아니며 또한 그러한 순서를 나타내는 것을 의미하지 않는다. 또한, 그러한 용어들은 한 구성 요소 및/또는 동작이 다른 것보다 더 큰 중요성을 가짐을 나타내기 위해 이용되지 않고 그러한 그러한 의미도 아니다.
컴퓨팅 디바이스(100)의 예시적인 실시예가 도 1에 도시된다. 컴퓨팅 디바이스(100)는 프로세서 버스를 통해 칩셋(104)에 연결된 하나 이상의 프로세서들(1021, ... 102p)을 포함할 수 있다. 일반적으로 칩셋(104)은 칩셋(104)을 포함하는 하나 이상의 패키지된 집적 회로 디바이스들 또는 칩들을 통해 하나 이상의 프로세서들(1021, ... 102p)을 메모리(106), 펌웨어(108), 스토리지 디바이스(SD) 콘트롤러(110), 하나 이상의 스토리지 디바이스들(1121, ... 112p), 및 다른 디바이스들(114)(예를 들면, 마우스, 키보드, 비디오 콘트롤러, 플로피 디스크, 네트워크 인터페이스 콘트롤러, 모뎀 등)과 상호접속한다. 특히, 다른 디바이스들(114)은 예를 들면 PCI(Peripheral Component Interconnect) 버스들, AGP(Accelerated Graphics Port) 버스, USB(Universal Serial Bus), LPC(Low Pin Count) 버스, 다른 I/O 버스 및/또는 연관 브리지들과 같은 다양한 버스들 및 브리지들을 통해 칩셋(104)에 연결될 수 있다.
일반적으로 SD 콘트롤러(110)는 하나 이상의 버스들을 통해 SD 콘트롤러(110)에 연결된 스토리지 디바이스들(1121, ... 112D)에 대해 데이터를 판독 및 기록하기 위한 인터페이스를 제공한다. 일 실시예에서, SD 콘트롤러(110)는 칩셋(104) 내에 내장된다. 그러나, 다른 실시예에서, SD 콘트롤러(110)는 칩셋(104)으로부터 분리되고, 예를 들면 PCI(Peripheral Component Interconnect) 슬롯, PCI Express 슬롯, ISA(Industry Standard Architecture) 슬롯 등과 같은 컴퓨팅 디바이스(100)의 슬롯 및/또는 소정의 다른 타입의 주변 상호 접속기 내에 삽입된 부가 카드에 의해 제공될 수 있다. 또한, SD 콘트롤러(110)는 스토리지 디바이스들(1121, ... 112D)에 의해 지원되는 스토리지 인터페이스 프로토콜을 통해 스토리지 디바이스들(1121, ... 112D)과 인터페이스할 수 있다. 예를 들어, SD 콘트롤러(110)와 스토리지 디바이스들(1121, ... 112D)은 다음의 인터페이스 프로토콜들, 즉 IDE(Integrated Drive Electronics), ATA(Advanced Technology Attachment), Serial ATA, SCSI(Small Computer System Interface), 및/또는 Serial SCSI 중 하나 이상을 지원할 수 있다.
펌웨어(108)는 기본 입출력 시스템(BIOS) 코드(116)를 포함할 수 있다. BIOS(116)는 하나 이상의 프로세서들(1021, ... 102p)이 컴퓨팅 디바이스(100)의 컴포넌트들을 액세스하고 초기화하기 위해 실행할 수 있는 명령들과 루틴들을 포함할 수 있다. 일 실시예에서, BIOS(116)는 하나 이상의 프로세서들(1021, ... 102p)이 하나 이상의 스토리지 디바이스들(1121, ... 112D)을 초기화하기 위해 실행할 수 있는 SD 초기화 코드(118)를 포함할 수 있다. 또한, BIOS(116)는 하나 이상의 스토리지 디바이스들(1121, ... 112D)로부터 데이터를 판독하고 하나 이상의 스토리지 디바이스들(1121, ... 112D)에 데이터를 기록하기 위한 SD 핸들러(120)를 포함할 수 있다. 일 특정 실시예에서, SD 초기화 코드(118)는 예를 들면 입터럽트 벡터 13H 등과 같은 인터럽트 벡터를 SD 핸들러(120)와 연관시킬 수 있다. 따라서, 예를 들면 x86 퍼스널 컴퓨터들 내의 IDE 하드 디스크를 액세스하기 위한 BIOS 코드와 통상적으로 연관되어 있는 소프트웨어 인터럽트(13H) 등의 소프트웨어 인터럽트에 응답하여, 하나 이상의 프로세서들(1021, ... 102p)은 SD 핸들러(120)를 실행시킬 수 있다.
메모리(106)는 프로세서들(1021, ... 102p)이 데이터를 판독하고 기록할 수 있는 어드레스 가능 스토리지 로케이션들을 제공하는 하나 이상의 메모리 디바이스들을 포함할 수 있다. 특히, 일 실시예의 메모리(106)는 BIOS 데이터 에어(122)와 운영 시스템(124)을 포함할 수 있다. 하나 이상의 프로세서들(1021, ... 102p)은 컴퓨팅 디바이스(100)의 컴포넌트들을 액세스하고 제어하기 위해, 그리고 상용자에게 컴퓨팅 장치(100)와 상호작용하기 위한 동작 환경을 제공하기 위해 운영 시스템(124)을 실행할 수 있다. 또한, 메모리(106)는 예를 들면, DRAM(Dynamic Random Access Memory) 디바이스, SDRAM(Synchronous Dynamic Random Access Memory) 디바이스, DDR(Double Data Rate) SDRAM 디바이스, ADR(Quad Data Rate) SDRAM 디바이스들, 또는 다른 휘발성 또는 비휘발성 메모리 디바이스 등과 같은 하나 이상의 메모리 기술들을 이용하여 구현될 수 있다.
편의상, BIOS(116), SD 초기화 코드(118), SD 핸들로(120), 운영 시스템(124), 보트 로드(boot loaders), 및/또는 다른 소프트웨어/펌웨어는 본 명세서에서 하나 이상의 동작들을 수행하는 것으로서 설명될 수 있다. 그러나, 컴퓨팅 디바이스(100)의 하드웨어 예를 들면 프로세서들(1021, ... 102p)은 BIOS(116), SD 초기화 코드(118), SD 핸들러(120), 운영 시스템(124), 부트 로더, 및/또는 다른 소프트웨어/펌웨어의 명령들을 실행하는 것에 대한 응답으로 그러한 동작들을 수행할 수 있다.
이제 도 2를 참조하면, RAID 0+1을 구현한 일 예의 스토리지 어레이(200)가 도시되어 있다. 도시된 바와 같이, 스토리지 어레이(200)는 두개의 스토리지 디바이스들(1121, 1122)을 포함할 수 있는데, 통상의 RAID 0+1 어레이들은 적어도 4개의 스토리지 디바이스들을 필요로 한다. 도시된 바와 같이, 제1 스토리지 디바이스(1121)는 제1 부분(2021)과 제2 부분(2022)을 포함하고, 제2 스토리지 디바이스(1122)는 제1 부분(2041)과 제2 부분(2042)을 포함한다. 일반적으로, 제1 스토리지 디바이스(1121)의 제1 부분(2021)과 제2 스토리지 디바이스(1122)의 제1 부분(2041)은 결합하여, 데이터가 제1 부분들(2021, 2041)을 가로질러 스트라이프화되는, 제1 RAID 0 어레이(2061)를 형성한다. 마찬가지로, 제2 스토리지 디바이스(1122)의 제2 부분(2042)과 제1 스토리지 디바이스(1121)의 제2 부분(2022)은 결합하여, 데이터가 제2 부분들(2022, 2042)을 가로질러 스트라이프화되는, 제2 RAID 0 어레이(2062)를 형성한다. 또한, 제1 RAID 0 어레이(2061)와 제2 RAID 0 어레이(2062)는 결합하여, 제1 RAID 0 어레이(2061)의 데이터가 제2 RAID 0 어레이(2062)에 미러링되는, RAID 1 어레이를 형성한다.
예를 들어, 도 2에 도시된 바와 같이, 데이터는 청크들 A...H로 분할되어 스토리지 어레이(200)에 기록될 수 있다. 청크들 A...H를 스토리지 어레이(200)에 기록한 결과, 청크들 A...H은 제1 RAID 0 어레이(2061)에 기록될 수 있고 제2 RAID 0 어레이(2062)에 미러링될 수 있다. 또한, 제1 RAID 0 어레이(2061)에 기록된 청크들 A...H은 스토리지 디바이스들(1121, 1122)의 제1 부분들(2021, 2041)을 가로질러 스트라이프화될 수 있다. 특히, 청크들 A, C, E, 및 G는 제1 스토리지 디바이스(1121)의 제1 부분(2021)에 기록될 수 있고, 청크들 B, D, F, 및 H는 제2 스토리지 디바이스(1122)의 제1 부분(2041)에 기록될 수 있다. 마찬가지로, 제2 RAID 0 어레이(2062)에 기록된 청크들 A...H은 스토리지 디바이스들(1121, 1122)의 제2 부분들(2022, 2042)을 가로질러 스트라이프화될 수 있다. 특히, 청크들 A, C, E 및 G는 제2 스토리지 디바이스(1122)의 제2 부분(2042)에 기록될 수 있고, 청크들 B, D, F 및 H는 제1 스토리지 디바이스(1121)의 제2 부분(2022)에 기록될 수 있다.
일 실시예에 있어서, 제1 스토리지 디바이스(1121)는 마스터 디바이스로서 제1 IDE 버스 혹은 채널에 접속되고, 제2 스토리지 디바이스(1122)는 마스터 디바이스로서 제2 IDE 버스 혹은 채널에 접속된다. 두개의 스토리지 디바이스들(1121, 1122)을 별개의 버스들에 연결함으로써, SD 핸들러(120)는 SD 콘트롤러(110)에게 스토리지 디바이스들(1121, 1122)을 병렬로 또는 실질적으로 병렬로 액세스하도록 요청할 수 있다. 데이터 미러링은 일반적으로 스토리지 디바이스들(1121, 1122)에 기록되는 바이트 수를 두배가 되게 하므로, 논-미러링 스토리지 디바이스 시스템에 비해 버스들을 통해 전송되는 바이트 수를 두배가 되게 한다. 그러나, 두개의 스토리지 디바이스들(1121, 1122)과 그들의 관련 버스들(2081, 2082)을 가로질러 데이터를 스트라이프화하는 것은 일반적으로 단일 버스 및 단일 스토리지 디바이스를 갖는 스토리지 디바이스 시스템의 대역폭의 두배를 제공한다. 따라서, 도 2의 어레이는 데이터의 미러링에도 불구하고 단일 스토리지 디바이스와 동등한 데이터 성능을 달성할 수 있다. 또한, 도 2의 RAID 0+1 어레이는, 판독 요청들이 스토리지 디바이스들(1121, 1122)을 가로질러 스트라이프화될 수 있고 병렬로 서비스될 수 있기 때문에, 단일 스토리지 디바이스 시스템에 비해 두배의 판독 성능을 달성하는 데이터 판독 성능을 달성할 수 있다. 또한, 도 2의 어레이는, 하나의 스토리지 디바이스의 모든 데이터가 다른 스토리지 디바이스에 미러링되기 때문에 제1 스토리지 디바이스(1121) 또는 제2 스토리지 디바이스(1122)의 오류를 적절하게 허용할 수 있다.
도 3에서, 도 2의 어레이를 생성하는 방법의 일 예가 도시되어 있다. 일 실시예에서, 컴퓨팅 디바이스(100)는 예를 들면, 시스템 파워-업 이벤트, 시스템 리셋 이벤트 등의 다양한 이벤트들에 응답하여 도 3의 방법을 실행할 수 있다. 또한, 일 실시예에서 컴퓨팅 디바이스(100)는 운영 시스템(124) 혹은 운영 시스템(124)의 실행을 인보크하기 위해 이용되는 부트 로더를 인보크하기 전에 도 3의 방법을 실행할 수 있다.
블럭(300)에서, SD 초기화 코드(118)는 SD 핸들러(120)를 인스톨할 수 있다. 일 실시예에서, SD 초기화 코드는 SD 핸들러(120)를 펌웨어(108)로부터 메모리(106)에 복사할 수 있고, 메모리(106) 내에 저장된 SD 핸들러(120)의 엔트리 포인트를 포인팅하기 위해 인터럽트 13H와 연관된 인터럽트 벡터를 갱신할 수 있다. 또한, SD 초기화 코드(118)는 히스토리적으로 인터럽트 13H에 연관된 BIOS(116)의 통상의 SD 핸들러(도시되지 않음)의 엔트리 포인트를 포인팅하기 위해 예를 들면 인터럽트 40H 등의 다른 인터럽트와 연관된 인터럽트 벡터를 갱신할 수 있다. 따라서, 일 실시예의 프로세서들(1021, ... 102p)은 인터럽트 13H에 응답하여 SD 핸들러(120)를 실행할 수 있고, 인터럽트 40H에 응답하여 통상의 SD 핸들러를 실행할 수 있다. 그러나, 주어진 컴퓨터 아키텍처에 대해, SD 초기화 코드(118)는 SD 핸들러(120)를 특정한 인터럽트와 연관시키기 위해 추가적인 그리고/또는 다른 동작들을 수행할 필요가 있을 수 있다. 또한, SD 초기화 코드(118)는 다른 인터럽트 및/또는 다수의 인터럽트들과 SD 초기화 코드(118)를 연관시킬 수 있다.
SD 초기화 코드(118)는 또한 블럭 302에서 SD 콘트롤러(110)에 접속된 적어도 두개의 가용 스토리지 디바이스들(1121, ... 112D)이 있는지를 판정한다. 이를 위해, SD 초기화 코드(118)는 다양한 테스트들 및/또는 진단들을 수행할 수 있다. 예를 들어, SD 초기화 코드(118)는 SD 콘트롤러(110)이 하나 이상의 스토리지 디바이스들(1121, ... 112D)에 접속되어 있는지를 판정할 수 있다. 또한, SD 초기화 코드(118)는 SD 콘트롤러(110)에 접속된 각각의 스토리지 디바이스(1121, ... 112D)가 적절하게 기능하는지를 확인하기 위해 하나 이상의 진단 테스트를 수행할 수 있고 적절하게 기능하고 있지 않은 SD 콘트롤러(110) 및/또는 스토리지 디바이스들(1121, ... 112D)의 채널들을 디스에이블할 수 있다. 일반적으로 그러한 테스트 및 진단들은 SD 콘트롤러(110) 및 스토리지 디바이스들(1121, ... 112D)에 의해 이용된 스토리지 기술들에 의존함을 알아야 한다. 결과적으로, SD 초기화 코드(118)는 특정한 특정 스토리지 기술들만 지원할 수 있고, 예를 들면, 스토리지 디바이스들의 상태 레지스터들을 판독하고, 그리고/또는 데이터가 스토리지 디바이스에 성공적으로 기록될 수 있는지 그리고/또는 스토리지 디바이스로부터 성공적으로 판독될 수 있는지를 판정하는 다양한 테스팅 및 진단 기술들을 이용하여 구현될 수 있다.
적어도 두개의 가용 스토리지 디바이스들이 없다고 판정하는 것에 응답하여, 블럭 304에서 SD 초기화 코드(118)는 RAID 지원을 디스에이블하고 엑시트할 수 있다. 그렇지 않으면, SD 초기화 코드(118)는 블럭 306에서 SD 콘트롤러(110)에 접속된 스토리지 디바이스들 및/또는 어레이들의 개수를 운영 시스템(124)에 보고하기 위해 BIOS 데이터 에리어(122)를 갱신할 수 있다. 일 실시예에서, SD 초기화 코드(118)는 각각의 RAID 0+1 어레이가 두개의 스토리지 디바이스들(1121, ... 112D)을 포함함에도 불구하고 단일 스토리지 디바이스로서 각각의 RAID 0+1 어레이에 보고할 수 있다. 따라서, 그러한 실시예에서 SD 초기화 코드(118)는 블럭 302에서 구해진 가용의 스토리지 디바이스들(1121, ... 112D)의 개수를 단순히 2로 나눔으로써 스토리지 디바이스들(1121, ... 112D)의 유효 개수를 얻을 수 있다. 따라서, SD 초기화 코드(118)가 두개의 스토리지 디바이스들(1121, 1122)을 검출했다면, SD 초기화 코드(118)는 단일 스토리지 디바이스를 운영 시스템(124)에 보고하기 위해 BIOS 데이터 에리어(122)를 갱신할 수 있다.
SD 초기화 코드(118)는 블럭 308에서 스토리지 디바이스들(1121, ... 112D)의 파라미터들을 획득할 수 있다. 일 실시예에서, SD 초기화 코드(118)는 512 바이트의 디바이스 식별 데이터를 획득하기 위해 각각의 ATA 스토리지 디바이스들(1121, ... 112D)에게 IDENTIFY DEVICE 명령을 송출할 수 있다. 일 실시예에서, 디바이스 식별 데이터는 스토리지 디바이스(112)의 논리적인 지원된 지오메트리를 함께 정의하는 논리 실리더의 개수, 논리 헤드의 개수, 논리 트랙당 논리 섹터의 개수를 포함할 수 있다. 또한, 디바이스 식별 데이터는 스토리지 디바이스(112)의 현재의 지오메트리를 함께 정의하는 논리 실리더의 현재 개수, 논리 헤드의 현재 개수, 트랙당 논리 섹터의 현재 개수를 포함할 수 있다. 식별 데이터는 또한 섹터들 내의 현재 스토리지 용량과 사용자 어드레스 가능한 섹터들의 총 개수를 포함할 수 있는데, 이들 중 어느 것이든 스토리지 디바이스의 현재의 스토리지 용량을 결정하기 위해 이용될 수 있다. 또한, 디바이스 식별 데이터는 예를 들면 DMA 전송에 관련된 파라미터들, 명령 세트들, PIO 모드들, 파워 관리 등의 운영 파라미터들에 관한 정보를 포함할 수 있다.
블럭 310에서, SD 초기화 코드(118)는 제1 스토리지 디바이스(1121)를 두개의 실질적으로 동일한 부분들(2021, 2022)로 분할할 수 있고, 제2 스토리지 디바이스(1122)를 두개의 실질적으로 동일한 부분들(2041, 2042)로 분할할 수 있다. 일 실시예에서, SD 초기화 코드(118)는 SET MAX 명령을 제1 스토리지 디바이스(1121)에 송출함으로써 제1 스토리지 디바이스(1121)를 제1 부분(2021)과 제2 부분(2022)으로 분할할 수 있는데, 이 SET MAX 명령은 제1 스토리지 디바이스(1121)의 최대 액세스 가능한 섹터를 제1 스토리지 디바이스(1121)의 최소 부분(2021, 2022) 내의 섹터들의 개수로 설정한다. 마찬가지로, SD 초기화 코드(118)는 SET MAX 명령을 제2 스토리지 디바이스(1122)에 송출함으로써 제2 스토리지 디바이스(1122)를 제1 부분(2041)과 제2 부분(2042)으로 분할할 수 있는데, 이 SET MAX 명령은 제2 스토리지 디바이스(1122)의 최대 액세스 가능한 섹터를 제2 스토리지 디바이스(1122)의 최소 부분(2041, 2042) 내의 섹터들의 개수로 설정한다.
블럭 312에서 SD 초기화 코드(118)는 디바이스 식별 데이터에 기초하여 더 향상된 성능을 위해 스토리지 디바이스들(1121, 1122) 및 SD 콘트롤러(110)를 초기화할 수 있다. 특히, SD 초기화 코드(118)는 스토리지 디바이스들(1121, 1122) 및 SD 콘트롤러(110)에 의해 지원되는 최고 성능 세팅을 위해 스토리지 디바이스들(1121, 1122)및 SD 콘트롤러(110)를 프로그램할 수 있다. 예를 들어, SD 초기화 코드(118)는 최고 속도의 지원 PIO, 다수-워드 DMA, Ultra DMA 모드 등을 위해 스토리지 디바이스들(1121, 1122) 및 SD 콘트롤러(110)를 프로그램할 수 있다.
SD 초기화 코드(118)는 블럭 314에서 제1 스토리지 디바이스들(1121)의 용량이 최소 부분들(2021, 2022)의 용량과 같다는 것을 운영 시스템(124)에게 보고하기 위해 BIOS 데이터 에리어(122)를 갱신할 수 있다. 또한, SD 초기화 코드(118)는 제1 스토리지 디바이스들(1122)의 용량이 최소 부분들(2041, 2042)의 용량과 같다는 것을 운영 시스템(124)에게 보고하기 위해 BIOS 데이터 에리어(122)를 갱신할 수 있다. 따라서, SD 초기화 코드(118)는 RAID 레벨 및/또는 데이터 리던던시를 구현하기 위해 이용될 수 있는 스토리지 디바이스들(1121, 1122)의 스토리지 용량의 절반을 실질적으로 준비할 수 있다.
도 4에는, 도 2의 스토리지 어레이(200)를 액세스하는 방법의 일 예가 도시되어 있다. 블럭 400에서, SD 핸들러(120)는 스토리지 어레이(200)에 대한 데이터 판독 및 기록 요청을 수신할 수 있다. 일 실시예에서, SD 핸들러(120)는, 예를 들면 어플리케이션 및/또는 운영 시스템(124)이 데이터가 스토리지 어레이(200)로부터 판독되도록 요청하는 것과 그리고 데이터가 스토리지 어레이(200)에 기록되도록 요청하는 것과 같은 다양한 이벤트들에 응답하여, 그러한 요청을 수신할 수 있다. 특히, 어플리케이션 및/또는 운영 시스템(124)은 인터럽트 13H와 연관된 SD 핸들러(120)에 제공되는 요청 파라미터들을 유발하는 인터럽트 13H를 생성할 수 있다.
SD 핸들러(120)는 블럭 402에서 요청이 유효한지를 판정할 수 있다. 일 실시예에서, SD 핸들러(120)는 요청된 섹터들이 스토리지 어레이(200)의 제1 부분들(2021, 2041)의 액세스 가능한 섹터들에 대응하는지를 판정할 수 있다. 예를 들어, 요청은 섹터 카운트와 LBA(Logical Block Addressing) 어드레스 또는 CHS(Cylinder/Head/Sector) 어드레스로 식별된 시작 섹터를 제공할 수 있다. SD 핸들러(120)는 시작 섹터 및 섹터 카운트로부터 끝 섹터 및 섹터 카운트를 결정할 수 있다. 또한, SD 핸들러(120)는 BIOS 데이터 에리어(122)에 의해 지시된 최대 액세스 가능한 섹터들에 기초하여, 시작 섹터와 끝 섹터가 제1 부분들(2021, 2041)의 액세스 가능한 섹터 범위 내에 있는지를 판정할 수 있다. 요청이 유효하지 않다는 판정에 응답하여, SD 핸들러(120)는 요청을 중단할 수 있고, 요청을 했던 어플리케이션 및/또는 운영 시스템(124)에게 에러가 발생했음을 지시하는 엑시트(exit) 메시지 또는 엑시트 코드를 제공할 수 있다(블럭 404).
블럭 406에서, SD 핸들러(120)는 스토리지 어레이(200)의 스토리지 디바이스들(1121, 1122)에게 요청된 전송을 구현하는 일련의 명령들을 발송할 수 있다. 예를 들어, 스토리지 어레이(200)로부터 데이터의 스트라이프를 판독하기 위한 요청에 응답하여, SD 핸들러(120)는, 스토리지 디바이스들(1121, 1122)이 요청된 데이터를 제1 부분들(2021, 2022)로부터 리턴하도록 야기하는 일련의 판독 명령들을 스토리지 디바이스들(1121, 1122)에게 발송할 수 있다. 생성된 판독 명령들의 개수는 요청된 데이터의 양과 각각의 청크의 사이즈 모두에 의존한다는 것에 유의한다. 예를 들어, 32 kilobytes 청크를 이용하는 스토리지 어레이(200)로부터의 64kilobytes의 데이터에 대한 요청에 응답하여, SD 핸들러(120)는 제1 스토리지 디바이스들(1121)에 제1 32kilobytes 청크를 획득하기 위해 제1 판독 명령을 발송할 수 있고, 제2 32kilobytes 청크를 획득하기 위해 제2 판독 명령을 발송할 수 있다. 또한, 판독 에러가 발생하면, SD 핸들러(120)는 제2 부분들(2022, 2042)로부터 제1 32 kilobyte 청크 및 제2 32kilobyte 청크의 미러링된 카피를 획득하기 위해 제3 판독 명령 및 제4 판독 명령을 스토리지 디바이스들(1121, 1122)에 발송할 수 있다.
마찬가지로, 스토리지 어레이(200)에 데이터의 스트라이프를 기록하기 위한 요청에 응답하여, SD 핸들러(120)는 스토리지 디바이스들(1121, 1122)이 요청의 데이터를 제1 부분들(2021, 2041)에 저장하고, 그 데이터를 제2 부분들(2022, 2042)에 미러링하도록 야기하는 일련의 기록 명령들을 스토리지 디바이스들(1121, 1122)에게 발송할 수 있다. 예를 들어, 32 kilobyte 청크를 이용하는 스토리지 어레이(200)에 64 kilobytes의 데이터를 기록하기 위한 요청에 응답하여, SD 핸들러(120)는 제1 기록 명령을 제1 스토리지 디바이스(1121)에 송출함으로써 결과적으로 제1 32kilobytes 청크가 제1 부분(2021)에 저장되도록 하며, 또한 제2 기록 명령을 제2 스토리지 디바이스(1122)에 송출함으로써 결과적으로 제2 32kilobytes 청크가 제1 부분(2041)에 저장되도록 한다. 또한, SD 핸들러(120)는 제3 기록 명령을 제2 스토리지 디바이스(1122)에 송출함으로써 결과적으로 제2 32kilobytes 청크가 제2 부분(2042)에 미러링되도록 하며, 또한 제4 기록 명령을 제1 스토리지 디바이스(1121)에 송출함으로써 결과적으로 제2 32kilobyte 청크가 제2 부분(2022)에 미러링되도록 한다.
블럭 408에서 SD 핸들러(120)는 요청된 전송이 성공적으로 완료되었는지를 판정할 수 있다. 요청이 성공적으로 완수되었다는 판정에 응답하여, SD 핸들러(120)는 블럭 410에서 중단될 수 있고, 요청이 성공적으로 완수되었음을 지시하는 엑시트 코드를 어플리케이션 및/또는 운영 시스템(124)에게 제공할 수 있다. 또한, 요청이 판독 요청이었다면, SD 핸들러(120)는 요청된 데이터, 요청된 데이터에 대한 포인터를 어플리케이션 및/또는 운영 시스템(124)에 더 제공할 수 있고, 어플리케이션 및/또는 운영 시스템(124)에 의해 요청된 로케이션에 요청된 데이터를 저장할 수 있다. 요청이 성공적으로 완수되지 않았다는 판정에 응답하여, SD 핸들러(120)는 블럭(404)에서 중단할 수 있고, 어플리케이션 및/또는 운영 시스템(124)에게 요청이 실패했음을 지시하는 엑시트 코드를 제공할 수 있다.
이제 도 5를 참조하면, 또 하나의 스토리지 어레이(500)가 도시되어 있다. 도시된 바와 같이, 스토리지 어레이(500)는 단일의 스토리지 디바이스(1121)를 포함할 수 있는데 반해, 통상의 스토리지 어레이들, 예를 들면 RAID 0 및 RAID 1 어레이들은 적어도 두개의 스토리지 디바이스들을 필요로 한다. 도시된 바와 같이, 스토리지 디바이스(1121)는 제1 부분(2021)과 제2 부분(2022)을 포함할 수 있다. 일반적으로, 제1 부분(2021)과 제2 부분(2022)은 결합하여 RAID 1 어레이를 형성하는데, 제1 부분(2021)의 데이터는 제2 부분(2022)에 미러링된다. 예를 들면, 도 5에 도시된 바와 같이, 데이터는 청크들 A...D로 분할될 수 있고, 청크들 A...D는 스토리지 디바이스(1121)의 제1 부분(2021)에 기록될 수 있으며 제2 부분(2022)에 미러링될 수 있다.
일반적으로 데이터의 미러링은 논-미러링 스토리지 디바이스에 비해 스토리지 디바이스(1121)에 기록되는 바이트 수가 두배이다. 따라서, 스토리지 어레이(500)는 논-미러링 스토리지 디바이스의 절반인 데이터 기록 성능을 달성할 수 있다. 그러나, 스토리지 어레이(500)는 논-미러링 스토리지 디바이스의 판독 성능에 도달하는 판독 성능을 달성할 수 있는데, 왜냐하면 판독 요청이 스토리지 디바이스(1121)의 한 부분에 의해 서비스될 수 있기 때문이다. 또한, 스토리지 어레이(500)는 스토리지 디바이스(1121)의 제2 부분(2022)에 요청을 재시도함으로써 제1 부분(2021)으로부터 데이터를 판독하는 것에 대한 실패를 적절하게 허용할 수 있다. 이러한 방식으로, 스토리지 어레이(500)는 간헐적인 스토리지 혹은 디바이스 에러들을 허용할 수 있고, 스토리지 디바이스 오류에 의해 유발되는 데이터 손실에 대한 소정의 프로텍션을 제공할 수 있다.
도 6에서, 도 5의 스토리지 어레이(500)를 생성하는 방법의 일 예가 도시되어 있다. 일 실시예에서, 컴퓨팅 디바이스(100)는 예를 들면, 시스템 파워-업 이벤트, 시스템 리셋 이벤트 등의 다양한 이벤트들에 응답하여 도 6의 방법을 실행할 수 있다. 또한, 일 실시예에서 컴퓨팅 디바이스(100)는 운영 시스템(124) 혹은 운영 시스템(124)의 실행을 인보크하기 위해 이용되는 부트 로더를 인보크하기 전에 도 5의 방법을 실행할 수 있다. 블럭 600에서, SD 초기화 코드(118)는 SD 핸들러(120)를 인스톨할 수 있다. 일 실시예에서, SD 초기화 코드(118)는 도 3의 블럭 300과 유사한 방식으로 SD 핸들러(120)를 인스톨할 수 있다.
SD 초기화 코드(118)는 블럭 602에서 SD 콘트롤러(110)에 접속된 적어도 하나의 가용의 스토리지 디바이스(1121...112D)가 있는지를 더 판정할 수 있다. 이를 위해, SD 초기화 코드(118)는 도 3의 블럭 302와 유사한 방식으로 다양한 테스트 및 진단을 수행할 수 있다. 적어도 하나의 가용 스토리지 디바이스가 없다는 판정에 응답하여, SD 초기화 코드(118)는 블럭 604에서 RAID 지원을 디스에이블하고 엑시트할 수 있다. 그렇지 않으면, SD 초기화 코드(118)는 블럭 606에서 SD 콘트롤러(110)에 연결된 스토리지 디바이스 및/또는 어레이의 개수를 운영 시스템(124)에 보고하기 위해 BIOS 데이터 에리어(122)를 갱신할 수 있다. SD 초기화 코드(118)는 블럭 608에서 가용의 스토리지 디바이스들(1121...112D)의 파라미터들을 획득할 수 있다. 다시, SD 초기화 코드(118)는 도 3의 블럭 308과 유사한 방식으로 가용의 스토리지 디바이스들의 파라미터들을 획득할 수 있다.
블럭 610에서, SD 초기화 코드(118)는 스토리지 디바이스(1121)를 두개의 실질적으로 동일한 부분들(2021, 2022)로 분할할 수 있다. 일 실시예에서, SD 초기화 코드(118)는 SET MAX 명령을 스토리지 디바이스(1121)에 송출함으로써 제1 스토리지 디바이스(1121)를 제1 부분(2021)과 제2 부분(2022)으로 분할할 수 있는데, 이 SET MAX 명령은 제1 스토리지 디바이스(1121)의 최대 액세스 가능한 섹터를 제1 스토리지 디바이스(1121)의 최소 부분(2021, 2022) 내의 섹터들의 개수로 설정한다.
SD 초기화 코드(118)는 블럭 612에서 디바이스 아이덴티티 데이터에 기초하여 더 나은 성능을 위해 스토리지 디바이스들(1121, 1122) 및 SD 콘트롤러(110)를 초기화할 수 있다. 특히, SD 초기화 코드(118)는 스토리지 디바이스들(1121, 1122) 및 SD 콘트롤러(110)에 의해 지원되는 최고 성능 설정을 위해 스토리지 디바이스들(1121, 1122) 및 SD 콘트롤러(110)를 프로그램할 수 있다. 예를 들어, SD 초기화 코드(118)는 최고 속도 지원 PIO, 멀티-워드 DMA, Ultra DMA 모드 등을 위해 스토리지 디바이스들(1121, 1122) 및 SD 콘트롤러(110)를 프로그램할 수 있다.
SD 초기화 코드(118)는 블럭 614에서 스토리지 디바이스(1121)의 용량이 최소 부분(2021, 2022)의 용량과 같음을 운영 시스템(124)에 보고하기 위해 BIOS 데이터 에리어(122)를 갱신할 수 있다. 따라서, SD 초기화 코드(118)는 RAID 레벨 및/또는 데이터 리던던시를 구현하기 위해 이용될 수 있는 스토리지 디바이스들(1121)의 스토리지 용량의 절반을 실질적으로 준비한다.
도 7에는, 도 5의 스토리지 어레이(500)를 액세스하는 방법의 일 예가 도시되어 있다. 블럭 700에서, SD 핸들러(120)는 스토리지 어레이(500)에 대한 데이터 판독 및 기록 요청을 수신할 수 있다. 일 실시예에서, SD 핸들러(120)는, 예를 들면 어플리케이션 및/또는 운영 시스템(124)이 데이터가 스토리지 어레이(500)로부터 판독되도록 요청하는 것과 데이터가 스토리지 어레이(500)에 기록되도록 요청하는 것과 같은 다양한 이벤트들에 응답하여, 그러한 요청을 수신할 수 있다. 특히, 어플리케이션 및/또는 운영 시스템(124)은 인터럽트 13H와 연관된 SD 핸들러(120)에 제공되는 요청 파라미터들을 유발하는 인터럽트 13H를 생성할 수 있다.
SD 핸들러(120)는 블럭 702에서 요청이 유효한지를 판정할 수 있다. 일 실시예에서, SD 핸들러(120)는 요청된 섹터들이 스토리지 어레이(500)의 제1 부분(2021)의 액세스 가능한 섹터들에 대응하는지를 판정할 수 있다. 요청이 유효하지 않다는 판정에 응답하여, SD 핸들러(120)는 요청을 중단할 수 있고, 요청을 했던 어플리케이션 및/또는 운영 시스템(124)에게 에러가 발생했음을 지시하는 엑시트(exit) 메시지 또는 엑시트 코드를 제공할 수 있다(블럭 704).
블럭 706에서, SD 핸들러(120)는 스토리지 어레이(500)의 스토리지 디바이스(1121)에게 요청된 전송을 구현하는 일련의 명령들을 발송할 수 있다. 예를 들어, 32 kilobytes 청크를 이용하는 스토리지 어레이(500)로부터의 64kilobytes의 데이터에 대한 요청에 응답하여, SD 핸들러(120)는 제1 부분(2022)으로부터 제1 및 제2 32kilobytes 청크를 획득하기 위해 제1 스토리지 디바이스들(1121)에 제1 판독 명령을 발송할 수 있다. 또한, 판독 에러가 발생하면, SD 핸들러(120)는 제2 부분(2022)으로부터 제1 및 제2 32 kilobyte 청크들의 미러링된 카피를 획득하기 위해 제2 판독 명령을 스토리지 디바이스들(1121)에 발송할 수 있다.
마찬가지로, 스토리지 어레이(500)에 데이터의 스트라이프를 기록하기 위한 요청에 응답하여, SD 핸들러(120)는 스토리지 디바이스(1121)가 요청의 데이터를 제1 부분(2021)에 저장하고, 그 데이터를 제2 부분(2022)에 미러링하도록 야기하는 일련의 기록 명령들을 스토리지 디바이스들(1121)에게 발송할 수 있다. 예를 들어, 32 kilobyte 청크를 이용하여 스토리지 어레이(500)에 64 kilobytes의 데이터를 기록하기 위한 요청에 응답하여, SD 핸들러(120)는 제1 기록 명령을 제1 스토리지 디바이스(1121)에 송출함으로써 결과적으로 제1 및 제2 32kilobytes 청크들이 제1 부분(2021)에 저장되도록 한다. 또한, SD 핸들러(120)는 제2 기록 명령을 제2 스토리지 디바이스(1121)에 송출함으로써 결과적으로 제1 및 제2 32kilobytes 청크들이 제2 부분(2022)에 미러링되도록 한다.
블럭 708에서 SD 핸들러(120)는 요청된 전송이 성공적으로 완수되었는지를 판정할 수 있다. 요청이 성공적으로 완수되었다는 판정에 응답하여, SD 핸들러(120)는 블럭 710에서 중단될 수 있고, 요청이 성공적으로 완수되었음을 지시하는 엑시트 코드를 어플리케이션 및/또는 운영 시스템(124)에게 제공할 수 있다. 또한, 요청이 판독 요청이었다면, SD 핸들러(120)는 요청된 데이터, 요청된 데이터에 대한 포인터를 어플리케이션 및/또는 운영 시스템(124)에 더 제공할 수 있고, 또는 어플리케이션 및/또는 운영 시스템(124)에 의해 요청된 로케이션에 요청된 데이터를 저장할 수 있다. 요청이 성공적으로 완수되지 않았다는 판정에 응답하여, SD 핸들러(120)는 블럭(704)에서 중단할 수 있고, 어플리케이션 및/또는 운영 시스템(124)에게 요청이 실패했음을 지시하는 엑시트 코드를 제공할 수 있다.
컴퓨팅 디바이스(100)는 예를 들면 ROM(Read Only Memory), RAM(Random Access Memory), 자기 디스크 스토리지 매체, 옵티컬 스토리지 매체, 플래시 메모리 디바이스 등과 같은 머신 판독 가능 매체, 및/또는 전기적, 광학적, 음향학적 혹은 다른 형태의 전파되는 신호 예를 들면 반송파, 적외선 신호, 디지털 신호, 아날로그 신호의 명령들을 실행하는 것에 응답하여 도 3, 4, 6 및 7에 도시된 동작들 모두 혹은 그 서브셋을 수행할 수 있다. 또한, 도 3, 4, 6 및 7은 동작들의 시퀀스를 예시하며, 어떤 실시예들에서컴퓨팅 디바이스(100)는 다양한 예시된 동작들을 병렬로 혹은 다른 순서로 수행할 수 있다.
본 발명의 특정한 특징들이 실시예들을 참조하여 설명되었으나, 설명은 제한적인 의미로 해석되도록 의도된 것이 아니다. 본 발명이 속하는 기술 분야의 통상의 기술자에게 자명한 실시예들의 다양한 변형들 및 본 발명의 다른 실시예들은 본 발명의 사상 및 범위 내에 들어오는 것으로 여겨진다.

Claims (20)

  1. 컴퓨팅 디바이스로서,
    프로세서와,
    프로세서와 적어도 하나의 스토리지 디바이스 사이에서 데이터를 전송하기 위한 콘트롤러와,
    상기 콘트롤러로부터 분리된 펌웨어 - 상기 펌웨어는 상기 프로세서에 의해 실행될 때 상기 프로세서가
    상기 적어도 하나의 스토리지 디바이스를 복수의 부분들로 분할하고,
    상기 적어도 하나의 스토리지 디바이스의 상기 복수의 부분들로부터 스토리지 어레이를 생성하도록 하는 명령들을 포함함 -
    를 포함하는 컴퓨팅 디바이스.
  2. 제1항에 있어서,
    실행되는 것에 응답하여, 상기 프로세서가 상기 펌웨어의 스토리지 디바이스 핸들러를 통해 적어도 하나의 스토리지 디바이스를 액세스하도록 야기하는 운영 시스템을 더 포함하는 컴퓨팅 디바이스.
  3. 제2항에 있어서,
    상기 운영 시스템은 프로세서가 상기 스토리지 디바이스 핸들러의 실행을 인보크하도록 야기하는 인터럽트를 생성하는 컴퓨팅 디바이스.
  4. 제1항에 있어서,
    상기 적어도 하나의 스토리지 디바이스는 제1 스토리지 디바이스 및 제2 스토리지 디바이스를 포함하고,
    상기 펌웨어는, 실행되는 것에 응답하여 상기 프로세서가 상기 제1 스토리지 디바이스를 제1 부분과 제2 부분으로 분할하고 상기 제2 스토리지 디바이스를 제1 부분과 제2 부분으로 분할하도록 야기하는 명령들을 포함하는 컴퓨팅 디바이스.
  5. 제4항에 있어서,
    상기 펌웨어는, 실행되는 것에 응답하여 상기 프로세서가 상기 제1 스토리지 디바이스의 상기 제1 부분과 상기 제2 스토리지 디바이스의 상기 제1 부분을 가로질러 데이터를 스트라이프화(striping)하도록 야기하는 명령들을 포함하는 컴퓨팅 디바이스.
  6. 제4항에 있어서,
    상기 펌웨어는, 실행되는 것에 응답하여 상기 프로세서가 상기 제1 스토리지 디바이스의 상기 제1 부분의 데이터를 상기 제2 스토리지 디바이스의 상기 제2 부분에 미러링하고 제2 스토리지 디바이스의 상기 제1 부분의 데이터를 상기 제1 스토리지 디바이스의 상기 제2 부분에 미러링하도록 야기하는 명령들을 포함하는 컴퓨팅 디바이스.
  7. 하나 이상의 스토리지 디바이스들을 포함하는 컴퓨팅 디바이스를 위한 것으로, 실행되는 것에 응답하여 상기 컴퓨팅 디바이스가
    제1 스토리지 디바이스의 스토리지 용량이 그의 총 스토리지 용량의 실질적으로 절반을 갖는다고 보고함으로써 상기 제1 스토리지 디바이스의 제1 부분 및 제2 부분을 정의하고,
    상기 제1 스토리지 디바이스의 제1 부분 및 제2 부분을 포함하는 스토리지 어레이를 생성하도록
    야기하는 복수의 명령들을 포함하는 펌웨어.
  8. 제7항에 있어서,
    상기 컴퓨팅 디바이스가
    상기 제1 스토리지 디바이스의 제1 부분에 데이터를 기록하고,
    상기 제1 스토리지 디바이스의 제2 부분에 상기 데이터를 미러링하도록
    야기하는 명령들을 더 포함하는 펌웨어.
  9. 제7항에 있어서,
    상기 컴퓨팅 디바이스가
    제2 스토리지 디바이스의 스토리지 용량이 그의 총 스토리지 용량의 실질적으로 절반을 갖는다고 보고함으로써 상기 제2 스토리지 디바이스의 제1 부분 및 제2 부분을 정의하고,
    상기 제2 스토리지 디바이스의 제1 부분 및 제2 부분을 포함하는 스토리지 어레이를 생성하도록
    야기하는 명령들을 더 포함하는 펌웨어.
  10. 제9항에 있어서,
    상기 컴퓨팅 디바이스가
    상기 제1 스토리지 디바이스의 제1 부분과 상기 제2 스토리지 디바이스의 제1 부분을 가로질러 데이터를 스트라이프화하도록 야기하는 명령들을 더 포함하는 펌웨어.
  11. 제9항에 있어서,
    상기 컴퓨팅 디바이스가
    상기 제1 스토리지 디바이스의 제1 부분과 상기 제2 스토리지 디바이스의 제1 부분에 기록된 데이터를 상기 제1 스토리지 디바이스의 제2 부분과 상기 제2 스토리지 디바이스의 제2 부분에 미러링하도록 야기하는 명령들을 더 포함하는 펌웨어.
  12. 제9항에 있어서,
    상기 컴퓨팅 디바이스가
    상기 제1 스토리지 디바이스의 제1 부분에 기록된 데이터를 상기 제2 스토리지 디바이스의 제2 부분에 미러링하고,
    상기 제2 스토리지 디바이스의 제1 부분에 기록된 데이터를 상기 제1 스토리지 디바이스의 제2 부분에 미러링하도록
    야기하는 명령들을 더 포함하는 펌웨어.
  13. 제12항에 있어서,
    상기 컴퓨팅 디바이스가
    상기 제1 스토리지 디바이스 및 상기 제2 스토리지 디바이스의 제1 부분들을 가로질러 데이터를 스트라이프화하도록 야기하는 명령들을 더 포함하는 펌웨어.
  14. 제1 스토리지 디바이스를 제1 복수의 부분들로 분할하는 단계와,
    상기 제1 스토리지 디바이스가 상기 제1 복수의 부분들 중 최소 부분과 같은 스토리지 용량을 갖는다고 보고하는 단계와,
    상기 제1 스토리지 디바이스에게 상기 제1 복수의 부분들에 및/또는 상기 제1 복수의 부분들로부터 데이터를 전송하도록 명령들을 송출하는 단계
    를 포함하는 방법.
  15. 제14항에 있어서,
    상기 제1 스토리지 디바이스가 상기 명령들을 처리하는 것에 응답하여, 상기 제1 스토리지 디바이스의 제1 부분에 데이터를 전송하는 단계와, 상기 제1 스토리지 디바이스의 제2 부분에 상기 데이터를 미러링하는 단계를 더 포함하는 방법.
  16. 제14항에 있어서,
    제2 스토리지 디바이스를 제2 복수의 부분들로 분할하는 단계와,
    상기 제2 스토리지 디바이스가 상기 제2 복수의 부분들 중 최소 부분과 같은 스토리지 용량을 갖는다고 보고하는 단계와,
    상기 제2 스토리지 디바이스에게 상기 제2 복수의 부분들에 및/또는 상기 제2 복수의 부분들로부터 데이터를 전송하도록 명령들을 송출하는 단계
    를 포함하는 방법.
  17. 제16항에 있어서,
    상기 제1 스토리지 디바이스와 상기 제2 제1 스토리지 디바이스가 그들 각각의 명령들을 처리하는 것에 응답하여, 상기 제1 스토리지 디바이스의 제1 부분과 상기 제2 스토리지 디바이스의 제1 부분을 가로질러 데이터를 스트라이프화하는 단계를 더 포함하는 방법.
  18. 제16항에 있어서,
    상기 제1 스토리지 디바이스와 상기 제2 제1 스토리지 디바이스가 그들 각각의 명령들을 처리하는 것에 응답하여, 상기 제1 스토리지 디바이스의 제1 부분과 상기 제2 스토리지 디바이스의 제1 부분에 데이터를 스트라이프화하는 단계와, 상기 데이터를 상기 제1 스토리지 디바이스의 제2 부분과 상기 상기 제2 스토리지 디바이스의 제2 부분에 미러링하는 단계를 더 포함하는 방법.
  19. 제16항에 있어서,
    상기 제1 스토리지 디바이스와 상기 제2 제1 스토리지 디바이스가 그들 각각의 명령들을 처리하는 것에 응답하여, 상기 제1 스토리지 디바이스의 제1 부분과 상기 제2 스토리지 디바이스의 제1 부분으로부터 데이터를 스트라이프화하는 단계를 더 포함하는 방법.
  20. 제16항에 있어서,
    상기 제1 스토리지 디바이스를 분할하는 단계는, 상기 제1 스토리지 디바이스의 제1 부분과 제2 부분을 정의하기 위해 상기 제1 스토리지 디바이스의 최대 액세스 가능한 섹터를 설정하는 단계를 포함하고,
    상기 제2 스토리지 디바이스를 분할하는 단계는, 상기 제2 스토리지 디바이스의 제1 부분과 제2 부분을 정의하기 위해 상기 제2 스토리지 디바이스의 최대 액세스 가능한 섹터를 설정하는 단계를 포함하는 방법.
KR1020057009445A 2002-11-26 2003-11-05 바이오스 스토리지 어레이 KR100829651B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/305,727 2002-11-26
US10/305,727 US7143234B2 (en) 2002-11-26 2002-11-26 Bios storage array

Publications (2)

Publication Number Publication Date
KR20050086832A true KR20050086832A (ko) 2005-08-30
KR100829651B1 KR100829651B1 (ko) 2008-05-16

Family

ID=32325499

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057009445A KR100829651B1 (ko) 2002-11-26 2003-11-05 바이오스 스토리지 어레이

Country Status (7)

Country Link
US (1) US7143234B2 (ko)
EP (1) EP1573542A2 (ko)
JP (1) JP2006507603A (ko)
KR (1) KR100829651B1 (ko)
CN (1) CN1327354C (ko)
AU (1) AU2003286914A1 (ko)
WO (1) WO2004049158A2 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7454555B2 (en) * 2003-06-12 2008-11-18 Rambus Inc. Apparatus and method including a memory device having multiple sets of memory banks with duplicated data emulating a fast access time, fixed latency memory device
US7418621B2 (en) * 2005-02-24 2008-08-26 Dot Hill Systems Corp. Redundant storage array method and apparatus
US20070113006A1 (en) * 2005-11-16 2007-05-17 Elliott John C Apparatus and method to configure one or more storage arrays
US7669008B2 (en) 2007-02-09 2010-02-23 International Business Machines Corporation Destage management of redundant data copies
JP5320678B2 (ja) * 2007-02-20 2013-10-23 日本電気株式会社 データ分散格納システム及びデータ分散方法、それに用いる装置並びにそのプログラム
KR20100133710A (ko) * 2009-06-12 2010-12-22 삼성전자주식회사 메모리 시스템 및 그것의 코드 데이터 로딩 방법
CN102906714A (zh) * 2010-05-05 2013-01-30 马维尔国际贸易有限公司 缓存存储适配器架构
US10579282B1 (en) * 2016-03-30 2020-03-03 EMC IP Holding Company LLC Distributed copy in multi-copy replication where offset and size of I/O requests to replication site is half offset and size of I/O request to production volume
KR20180023784A (ko) * 2016-08-25 2018-03-07 삼성전자주식회사 사전 부팅 환경에서 raid 볼륨에 접근하는 데이터 저장 시스템 및 방법
JP6662530B1 (ja) * 2018-11-16 2020-03-11 Necプラットフォームズ株式会社 制御装置、ディスクアレイシステム及びデータ入出力方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5694581A (en) * 1993-09-07 1997-12-02 Industrial Technology Research Institute Concurrent disk array management system implemented with CPU executable extension
US6098119A (en) * 1998-01-21 2000-08-01 Mylex Corporation Apparatus and method that automatically scans for and configures previously non-configured disk drives in accordance with a particular raid level based on the needed raid level
JP2000132915A (ja) 1998-10-22 2000-05-12 Matsushita Electric Ind Co Ltd ディスク装置およびそのデータ処理方法
US6401183B1 (en) * 1999-04-01 2002-06-04 Flash Vos, Inc. System and method for operating system independent storage management
US6681290B2 (en) * 2001-01-29 2004-01-20 International Business Machines Corporation Physical data layout to reduce seeks in a raid system
US20020156971A1 (en) * 2001-04-19 2002-10-24 International Business Machines Corporation Method, apparatus, and program for providing hybrid disk mirroring and striping
JP2003216341A (ja) * 2002-01-22 2003-07-31 American Megatrends Inc コンピュータシステム、HD(HardDisk)制御方法、及びRAIDプログラム
US7383576B2 (en) * 2004-04-23 2008-06-03 Microsoft Corporation Method and system for displaying and managing security information
KR100673329B1 (ko) * 2005-02-03 2007-01-24 학교법인 대전기독학원 한남대학교 그리드 환경에서 인증서를 이용한 사용자 역할/권한 설정 시스템 및 그 방법

Also Published As

Publication number Publication date
KR100829651B1 (ko) 2008-05-16
CN1327354C (zh) 2007-07-18
WO2004049158A2 (en) 2004-06-10
CN1503140A (zh) 2004-06-09
EP1573542A2 (en) 2005-09-14
US7143234B2 (en) 2006-11-28
WO2004049158A3 (en) 2005-08-04
AU2003286914A8 (en) 2004-06-18
JP2006507603A (ja) 2006-03-02
US20040103260A1 (en) 2004-05-27
AU2003286914A1 (en) 2004-06-18

Similar Documents

Publication Publication Date Title
US7206899B2 (en) Method, system, and program for managing data transfer and construction
US5951691A (en) Method and system for detection and reconstruction of corrupted data in a data storage subsystem
US8073675B2 (en) ATA emulation host interface in a RAID controller
US6760814B2 (en) Methods and apparatus for loading CRC values into a CRC cache in a storage controller
US7073010B2 (en) USB smart switch with packet re-ordering for interleaving among multiple flash-memory endpoints aggregated as a single virtual USB endpoint
US7958343B2 (en) BIOS bootable RAID support
US6470421B1 (en) Method and means for reducing device contention by random accessing and partial track staging of records according to a first DASD format but device mapped according to a second DASD format
US6993676B2 (en) Method and apparatus for fast initialization of redundant arrays of storage devices
KR100441189B1 (ko) Ata 에뮬레이션 호스트 인터페이스를 가진 raid제어기 시스템 및 방법
US5909592A (en) Method in a basic input-output system (BIOS) of detecting and configuring integrated device electronics (IDE) devices
US20020087786A1 (en) Method, system, and data structures for superimposing data records in a first data format to memory in a second data format
US9304710B2 (en) Storage system and data transfer method of storage system
US7222135B2 (en) Method, system, and program for managing data migration
KR20140023944A (ko) 가상 디스크 스토리지 기술
KR100829651B1 (ko) 바이오스 스토리지 어레이
CN109313593B (zh) 存储系统
US20190377684A1 (en) Storage control system and storage control method
US7188303B2 (en) Method, system, and program for generating parity data
US5574736A (en) Data storage device and method of operation
US6996739B2 (en) Accumulator memory for performing operations on block operands
US6901551B1 (en) Method and apparatus for protection of data utilizing CRC
JPH09288547A (ja) アレイ型記憶装置
US20050188145A1 (en) Method and apparatus for handling data transfers
US7353328B2 (en) Memory testing
JPH11143646A (ja) 外部記憶サブシステムの制御方法および外部記憶サブシステム

Legal Events

Date Code Title Description
A201 Request for 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: 20130503

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140502

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160427

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170504

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee