[0001][0001] 본 개시는 일반적으로 저장 장치에 관한 것으로, 보다 구체적으로 호스트 시스템의 워크로드에 기초하여 저장 장치에 대한 판독 동작을 식별하는 것에 관한 것이다.
[0002][0002] 저장 장치는 데이터를 저장하는 하나 이상의 메모리 컴포넌트들을 포함할 수 있다. 예를 들어, 솔리드 스테이트 드라이브(SSD)는 비휘발성 메모리 장치들과 같은 메모리 장치들을 포함할 수 있다. SSD는 메모리 장치들 각각을 관리하고 메모리 장치들에 저장될 데이터를 할당할 수 있는 SSD 컨트롤러를 더 포함할 수 있다. 호스트 시스템은 SSD를 이용하고 SSD로부터 데이터를 요청할 수 있다. SSD 컨트롤러는 대응되는 메모리 장치들로부터 데이터를 검색하고 검색된 데이터를 호스트 시스템으로 반환하는 데 사용될 수 있다.
[0003][0003] 본 개시는 이하의 상세한 설명 및 본 개시의 다양한 구현예들의 첨부 도면들로부터 보다 완전하게 이해될 것이다. 도 1은 본 개시의 일부 실시예들에 따른 저장 장치를 포함하는 예시적인 컴퓨팅 환경을 예시한다. 도 2는 일부 실시예들에 따른 저장 장치의 예시적인 컨트롤러의 블록도이다. 도 3은 본 개시의 일부 실시예들에 따른 호스트 시스템의 워크로드에 기초하여 메모리 장치에 의해 수행될 판독 동작을 식별하기 위한 예시적인 방법의 흐름도이다. 도 4는 본 개시의 일부 실시예들에 따른 호스트 시스템의 워크로드에 기초하여 데이터를 검색하기 위해 메모리 장치에 의해 사용될 판독 동작을 나타내기 위한 예시적인 방법의 흐름도이다. 도 5a는 본 개시의 일부 실시예들에 따른 결정적 워크로드의 예를 예시한다. 도 5b는 본 개시의 일부 실시예들에 따른 랜덤 워크로드의 예를 예시한다. 도 6a은 본 개시의 일부 실시예들에 따른 워드 라인 램프 판독 동작에 기초한 메모리 장치의 워드 라인들 및 비트 라인들의 어써션을 예시한다. 도 6b는 본 개시의 일부 실시예들에 따른 개별 판독 동작에 기초한 메모리 장치의 워드 라인들 및 비트 라인들의 어써션을 예시한다. 도 7은 일부 실시예들에 따른 데이터를 검색하기 위해 메모리 장치에 의해 사용될 판독 동작을 결정하기 위한 예시적인 방법의 흐름도이다. 도 8은 본 개시의 일부 실시예들에 따른 호스트 시스템들로부터의 판독 요청들의 집합에 기초하여 메모리 장치에 의해 사용될 판독 동작을 결정하기 위한 예시적인 방법의 흐름도이다. 도 9는 본 개시의 구현예들이 동작될 수 있는 예시적인 컴퓨터 시스템의 블록도이다.
[0004][0004] 본 개시의 측면들은 호스트 시스템의 워크로드에 기초하여 저장 장치에 대한 판독 동작을 식별하는 것에 관한 것이다. 일반적으로, 호스트 시스템은 하나 이상의 메모리 장치들을 포함하는 저장 장치를 이용할 수 있다. 호스트 시스템은 저장 장치에 저장될 데이터를 제공할 수 있으며, 이후 저장 장치에 저장된 데이터를 검색할 수 있다. 데이터는 저장 장치 내의 메모리 장치들로부터 저장 및 판독될 수 있다. 호스트 시스템의 워크로드는 메모리 장치들로부터 데이터를 검색하기 위해 호스트 시스템에 의해 제공된 판독 요청 그룹일 수 있다.
[0005][0005] 저장 장치의 예는 비휘발성 메모리 및 비휘발성 메모리를 관리하기 위한 컨트롤러를 포함하는 솔리드 스테이트 드라이브(Solid-State Drive; SSD)이다. 컨트롤러는 비휘발성 메모리의 특정 위치에 저장되는 데이터를 검색하기 위해 비휘발성 메모리에 의해 사용될 동작을 식별하거나 나타낼 수 있다. 비휘발성 메모리에 저장된 데이터는 비휘발성 메모리의 논리 유닛들에 대응되는 메모리 페이지들(즉, 메모리 셀들)에서 구성될 수 있다. 메모리 페이지 각각은 비휘발성 메모리의 워드 라인 및 비트 라인에 의해 액세스될 수 있다. 예를 들어, 컨트롤러는 비위발성 메모리의 대응되는 메모리 페이지에 저장된 데이터를 검색하기 위해 특정 워드 라인 및 특정 비트 라인에서 어써트(assert)하기 위한 동작을 제공(예를 들어, 전압 입력을 제공)할 수 있다. 그 결과, 데이터는 워드 라인들 및 비트 라인들에서 전압 입력들을 제공함으로써 비휘발성 메모리의 메모리 페이지들로부터 데이터가 검색될 수 있다.
[0006][0006] 비휘발성 메모리에서의 데이터는 비휘발성 메모리의 메모리 페이지들 내에서 데이터를 판독하기 위해 비휘발성 메모리에 의해 사용되는 상이한 판독 동작들을 사용함으로써 검색될 수 있다. 예를 들어, 제1 유형의 판독 동작은 워드 라인에 인가되는 가변 또는 증가 전압 입력에 대응하는 워드 라인 램프 판독 동작일 수 있는 반면, 워드 라인과 연관된 상이한 비트 라인들도 어써트된다. 이러한 워드 라인 램프 판독 동작으로 인해 어써트되었던 동일한 워드 라인 및 어서트되었던 다양한 다른 비트 라인들에 의해 액세스되는 각 메모리 페이지에 저장된 데이터의 판독 또는 검색이 발생될 수 있다. 따라서, 다수의 메모리 페이지들에 대응되는 데이터는 워드 라인 램프 판독 동작을 사용하여 검색될 수 있다. 제2 유형의 판독 동작은 워드 라인에서 특정 전압 입력을 인가하여 워드 라인을 어써팅하는 것과 단일 비트 라인을 어써팅하는 것에 대응되는 개별 판독 동작일 수 있다. 이러한 개별 판독 동작으로 인해 워드 라인과 단일 비트 라인에 의해 액세스되는 단일 메모리 페이지(또는 페이지의 일부)에서 저장된 데이터의 판독 또는 검색이 발생될 수 있다. 따라서, 단일 메모리 페이지(또는 일부)에 대응되는 데이터는 개별 판독 동작을 사용하여 검색될 수 있다.
[0007][0007] 이와 같이, 워드 라인 램프 판독 동작을 사용하면 개별 판독 동작보다 많은 메모리 페이지들로부터 데이터를 검색할 수 있지만, 워드 라인 램프 판독 동작은 단일 개별 판독 동작보다 수행하는데 더 오랜 시간이 걸릴 수 있다. 그러나, 특정 워드 라인의 각 메모리 페이지로부터 데이터를 검색하기 위해 워드 라인 램프 판독 동작의 사용은 워드 라인이 각 개별 판독 동작을 위해 어써팅되는 비트 라인의 각 인스턴스를 위해 개별적으로 어써팅될 수 있으므로 특정 워드 라인의 각 메모리 페이지로부터 데이터를 검색하기 위해 개별 판독 동작들의 성능보다 적은 누적 시간을 사용할 수 있다. 따라서, 호스트 시스템이 비휘발성 메모리에 저장된 데이터에 대한 판독 요청을 제공하는 경우, 비휘발성 메모리의 특정 판독 동작으로 인해 비휘발성 메모리에 의해 수행되는 또 다른 판독 동작보다 데이터를 검색하는데 있어 더 빠를 수 있다. 예를 들어, 호스트 시스템이 결정적 데이터(예를 들어, 다양한 메모리 페이지들에 저장된 데이터 또는 동일한 워드 라인 상의 순차적 메모리 페이지들)에 대한 판독 요청들을 제공하는 경우, 워드 라인 램프 판독 동작은 워드 라인과 연관된 각 비트에 대한 개별 판독 동작보다 적은 시간 내에 요청된 데이터를 검색하는 데 사용될 수 있다. 대안으로, 호스트 시스템은 랜덤 데이터에 대한(예를 들어, 비휘발성 메모리의 상이한 워드 라인들에서 액세스되는 데이터에 대한) 판독 요청들을 제공하는 경우, 개별 판독 동작은 (워드 라인과 연관된 다수의 메모리 페이지들이 아닌) 단일 메모리 페이지로부터 데이터가 요청될 수 있으므로 워드 라인 램프 판독 동작보다 빨리 요청된 데이터를 검색하는 데 사용될 수 있다. 그러나, 비휘발성 메모리는 호스트 시스템에 의해 제공되는 판독 요청들의 유형들을 알지 못할 수 있으며, 따라서 판독 동작들의 유형들 중 하나는 적은 시간 내에 요청된 데이터를 검색할 수 있을 경우 워드 라인 램프 판독 동작 또는 개별 판독 동작을 수행하지 않을 수 있다.
[0008][0008] 본 개시의 측면들은 호스트 시스템의 워크로드에 기초하여 수행하기 위해 솔리드 스테이트 드라이브의 비휘발성 메모리 장치에 대한 특정 판독 동작을 식별함으로써 상기 및 다른 결합들을 처리한다. 예를 들어, 솔리드 스테이트 드라이브의 컨트롤러는 호스트 시스템의 워크로드가 결정적 워크로드인지(예를 들어, 호스트 시스템은 순차적 메모리 페이지들의 그룹으로부터 순차적 메모리 페이지들 또는 메모리 페이지들에 저장된 데이터를 요청했는지)를 식별하거나 또는 호스트 시스템의 워크로드가 랜덤 워크로드인 경우(예를 들어, 호스트 시스템이 랜덤 위치들 또는 다른 워드 라인들에서 메모리 페이지들에 저장되는 데이터를 요청한 경우)를 식별할 수 있다. 호스트 시스템으로부터의 워크로드가 결정적 워크로드인 경우, 컨트롤러는 비휘발성 메모리가 특정 워드 라인에 의해 액세스된 메모리 페이지들 각각에 저장된 데이터를 검색하기 위해 워드 라인 램프 판독 동작을 수행하도록 지시할 수 있다. 그렇지 않으면, 호스트 시스템으로부터의 워크로드가 랜덤 워크로드인 경우, 컨트롤러는 비휘발성 메모리가 워드 라인 및 특정 비트 라인에 의해 액세스된 특정 메모리 페이지들로부터 데이터를 검색하기 위해 개별 판독 동작을 수행하도록 지시할 수 있다.
[0009][0009] 데이터를 검색할 때 비휘발성 메모리에 의해 수행될 판독 동작의 유형을 식별하기 위해 솔리드 스테이트 드라이브의 컨트롤러의 사용은 솔리드 스테이트 드라이브의 성능을 향상시킬 수 있다. 예를 들어, 단일 어써트된 워드 라인에 의해 액세스된 메모리 페이지들이 이후에 호스트 시스템에 의해 사용될 수 있으므로 호스트 시스템의 워크로드가 결정적일 때 워드 라인 램프 판독 동작이 사용될 수 있다. 따라서, 단일 워드 라인 램프 판독 동작은 메모리 페이지들을 검색하기 위한 다수의 개별 판독 동작들과는 달리 메모리 페이지들을 검색하는데 사용될 수 있으며, 그 결과 호스트 시스템에 의해 사용되거나 요청될 것으로 예상되는 메모리 페이지들을 보다 적은 시간 내에 검색할 수 있다. 게다가, 개별 판독 동작은 호스트 시스템에 의해 요청된 데이터가 비휘발성 메모리의 상이한 워드 라인들을 어써팅함으로써 액세스될 수 있고 단일 라인에 걸친 메모리 페이지들이 호스트 시스템에 의해 사용되거나 요청될 것으로 예상되지 않는 데이터를 포함할 수 있으므로 호스트 시스템의 워크로드가 랜덤일 때 워드 라인 램프 판독 동작과 반대로 메모리 페이지를 검색하는 데 사용될 수 있다. 그 결과, 솔리드 스테이트 드라이브의 판독 성능은 호스트 시스템으로부터의 판독 동작들이 더 적은 시간 내에 수행될 수 있으므로 향상될 수 있다.
[0010][0010] 도 1은 저장 장치(110)를 포함하는 예시적인 컴퓨팅 환경(100)을 예시한다. 일반적으로, 컴퓨팅 환경(100)은 저장 장치(110)를 사용하는 호스트 시스템(120)을 포함할 수 있다. 예를 들어, 호스트 시스템(120)은 저장 장치(110)에 데이터를 기록하고 저장 장치(110)로부터 데이터를 판독할 수 있다.
[0011][0011] 호스트 장치(120)는 데스크탑 컴퓨터, 랩탑 컴퓨터, 네트워크 서버, 모바일 장치와 같은 컴퓨팅 장치 또는 메모리와 처리 장치를 포함하는 이러한 컴퓨팅 장치일 수 있다. 호스트 시스템(120)은 호스트 시스템(120)이 저장 장치(110)로부터 데이터를 판독하거나 이에 데이터를 기록할 수 있도록 저장 장치(110)를 포함하거나 이에 결합될 수 있다. 예를 들어, 호스트 시스템(120)은 물리적 호스트 인터페이스를 통해 저장 장치(110)에 결합될 수 있다. 물리적 호스트 인터페이스의 예들은, 이에 제한되는 것은 아니나, SATA(serial advanced technology attachment) 인터페이스, PCIe(peripheral component interconnect express) 인터페이스, USB(universal serial bus) 인터페이스, 광섬유 채널, SAS(Serial Attached SCSI) 등을 포함한다. 물리적 호스트 인터페이스는 호스트 시스템(120)과 저장 장치(110) 사이에서 데이터를 전송하는 데 사용될 수 있다. 호스트 시스템(120)은 저장 장치(110)가 PCIe 인터페이스에 의해 호스트 시스템(120)과 결합되는 경우 NVMe(NVM Express) 인터페이스를 추가로 이용하여 메모리 장치들(112A 내지 112N)에 액세스할 수 있다.
[0012][0012] 도 1에 도시된 바와 같이, 저장 장치(110)는 컨트롤러(111) 및 메모리 장치들(112A 내지 112N)을 포함할 수 있다. 일부 실시예들에서, 메모리 장치들(112A 내지 112N)은 비취발성 메모리에 기초할 수 있다. 예를 들어, 메모리 장치들(112A 내지 112N)은 NAND(negative-and) 유형 플래시 메모리일 수 있다. 메모리 장치들(112A 내지 112N) 각각은 단일 레벨 셀(single level cell; SLC)들, 다중 레벨 셀(multi-level cell; MLC)들 또는 쿼드 레벨 셀(quad-level cell; QLC)들과 같은 하나 이상의 메모리 셀 어레이를 포함할 수 있다. 메모리 셀 각각은 호스트 시스템(120)에 의해 사용된 데이터 비트들(예를 들어, 데이터 블록들)을 저장할 수 있다. NAND 유형 플래시 메모리와 같은 비휘발성 메모리 장치들이 개시되어 있지만, 메모리 장치들(112A 내지 112N)은 임의의 다른 유형의 메모리에 기초할 수 있다. 예를 들어, 메모리 장치들(112A 내지 112N)은, 이에 제한되는 것은 아니나, RAM(random access memory), ROM(read-only memory), DRAM(dynamic random access memory), SDRAM(synchronous dynamic random access memory), PCM(phase change memory), MRAM(magneto random access memory), NOR(negative-or) 플래시 메모리 및 EEPROM(electrically erasable programmable read-only memory)일 수 있다. 게다가, 메모리 장치들(112A 내지 112N)의 메모리 셀들은 데이터를 저장하는데 사용되는 메모리 장치의 유닛을 지칭할 수 있는 메모리 페이지들 또는 데이터 블록들로서 그룹화될 수 있다.
[0013][0013] 컨트롤러(111)는 메모리 장치들(112A 내지 112N)에서 데이터를 판독하거나, 데이터를 기록하는 것과 같은 동작들 및 다른 이러한 동작들을 수행하기 위해 메모리 장치들(112A 내지 112N)과 통신할 수 있다. 컨트롤러(111)는 하나 이상의 집적 회로들 및/또는 개별 컴포넌트들과 같은 하드웨어, 펌웨어 또는 다른 인스트럭션들과 같은 소프트웨어, 또는 이들의 조합을 포함할 수 있다. 일반적으로, 컨트롤러(111)는 호스트 시스템(120)으로부터 명령들 또는 동작들을 수신할 수 있으며, 메모리 장치들(112A 내지 112N)에 대한 원하는 액세스를 달성하기 위해 명령들 또는 동작들을 인스트럭션들 또는 적절한 명령들로 변환할 수 있다. 컨트롤러(111)는 웨어 레벨링(wear leveling) 동작들, 가비지 수집 동작들, 에러 검출 및 ECC(error-correcting code) 동작들, 암호화 동작들, 캐싱 동작들 및 메모리 장치들(112A 내지 112N)과 관련되는 논리 블록 어드레스와 물리 블록 어드레스 간의 어드레스 변환들과 같은 다른 동작들을 담당할 수 있다.
[0014][0014] 도 1을 참조하면, 컨트롤러(111)는 각각의 메모리 장치에서 저장된 데이터를 검색할 경우 메모리 장치들(112A 내지 112N)에 의해 수행될 판독 동작의 유형을 나타내는 데 사용될 수 있는 판독 표시기 컴포넌트(113)를 포함할 수 있다. 예를 들어, 판독 표시기 컴포넌트(113)는 호스트 시스템(120)과 연관된 워크로드의 유형을 식별할 수 있으며, 식별된 워크로드 유형에 기초하여 대응되는 메모리 장치(112A 내지 112N)에 의해 수행될 특정 판독 동작을 나타낼 수 있다. 예를 들어, 호스트 시스템(120)은 특정 메모리 장치에서 저장된 데이터에 대한 판독 요청을 제공할 수 있다. 컨트롤러(111)는 요청된 데이터를 저장하고 있는 특정 메모리 장치(112A 내지 112N)를 식별할 수 있으며, 호스트 시스템(120)으로부터 워크로드의 유형을 더 식별할 수 있다. 컨트롤러(111)는 이후 요청된 데이터에 대한 메모리 장치 내에서 특정 유형의 판독 동작을 수행하도록 하는 표시를 특정 메모리 장치에 제공할 수 있다. 판독 표시기 컴포넌트(113)의 동작들에 관한 추가 세부 사항이 아래에 설명된다.
[0015][0015] 저장 장치(110)는 예시되지 않은 추가 회로부 또는 컴포넌트들을 포함할 수 있다. 예를 들어, 저장 장치(110)는 컨트롤러(111)로부터 어드레스를 수신하고 메모리 장치들(112A 내지 112N)에 액세스하기 위해 어드레스를 디코딩할 수 있는 캐시나 버퍼(예를 들어, DRAM) 및 어드레스 회로부(예를 들어, 행 디코더 또는 열 디코더)를 포함할 수 있다.
[0016][0016] 도 2는 저장 장치의 예시적인 컨트롤러(200)의 블록도이다. 일반적으로, 컨트롤러(200)는 도 1의 컨트롤러(111)에 대응될 수 있다.
[0017][0017] 도 2에 도시된 바와 같이, 비휘발성 메모리는 다수의 메모리 유닛들(250)을 포함할 수 있으며 컨트롤러(200)는 휘발성 메모리(212)를 포함할 수 있다. 메모리 유닛(250)은 컨트롤러(200)에 의해 개별적으로 제어 가능할 수 있는 비휘발성 메모리의 일부(예를 들어, 메모리 페이지, 물리적 데이터 블록, 메모리 장치의 다이 등)일 수 있다. 컨트롤러(200)는 물리적 호스트 인터페이스(206)를 통해 호스트 시스템과 인터페이싱하기 위한 호스트 인터페이스 회로부(214)를 포함할 수 있다. 컨트롤러는 호스트-메모리 변환 회로(216), 메모리 관리 회로(218), 스위치(220), 비휘발성 메모리 제어 회로부(222) 및/또는 휘발성 메모리 제어 회로부(224)를 더 포함할 수 있다.
[0018][0018] 호스트 인터페이스 회로부(214)는 호스트-메모리 변환 회로부(216)에 결합될 수 있다. 호스트 인터페이스 회로부(214)는 호스트 시스템과 인터페이싱할 수 있다. 일반적으로, 호스트 인터페이스 회로부(214)는 호스트 시스템으로부터 수신된 명령 패킷들을 호스트-메모리 변환 회로부(216)에 대한 명령 인스트럭션들로 변환하고, 요청하는 호스트 시스템으로의 전송을 위해 호스트-메모리 변환 응답들을 호스트 시스템 명령들로 변환하는 것을 담당할 수 있다.
[0019][0019] 도 2를 참조하면, 호스트-메모리 변환 회로부(216)는 호스트 인터페이스 회로부(214)에, 메모리 관리 회로부(218)에 및/또는 스위치(220)에 결합될 수 있다. 호스트-메모리 변환 회로부(216)는 호스트 어드레스들을 메모리 어드레스들(예를 들어, 호스트 시스템으로부터의 판독 및/또는 기록 명령과 같은 수신된 명령들과 연관된 어드레스들)로 변환하도록 구성될 수 있다. 예를 들어, 호스트-메모리 변환 회로부(216)는 호스트 시스템 판독 및 기록 동작들에 의해 특정된 논리 블록 어드레스(LBA)들을 특정 메모리 유닛들(250)에 지시된 명령들(예를 들어, 물리적 블록 어드레스들)로 변환할 수 있다. 호스트-메모리 변환 회로부(216)는 호스트 인터페이스 회로부(214)로부터 수신된 정보에 기초하여 패러티(parity) 정보를 계산할 수 있는 배타적 또는 (XOR) 회로부와 같은 에러 검출/정정 회로부를 포함할 수 있다.
[0020][0020] 메모리 관리 회로부(218)는 호스트-메모리 변환 회로부(216) 및 스위치(220)에 결합될 수 있다. 메모리 관리 회로부(218)는, 이에 제한되는 것은 아니나, 초기화, 웨어 레벨링, 가비지 수집, 회수(reclamation) 및/또는 에러 검출/정정을 포함하는 다수의 메모리 동작들을 제어할 수 있다. 메모리 관리 회로부(218)는 프로세서 (228)를 포함할 수 있지만, 본 개시의 다수의 실시예들은 프로세서(228)에 의해 (예를 들어, 소프트웨어 및/또는 펌웨어와 같은 인스트럭션들의 실행에 의존하지 않고) 회로부에서의 메모리 동작들의 제어를 제공한다. 메모리 관리 회로부(218)는 휘발성 메모리(212) 및/또는 비휘발성 메모리의 메모리 유닛들(250)으로부터 데이터를 검색하기 위한 블록 관리 회로부(240)를 포함할 수 있다. 예를 들어, 블록 관리 회로부(240)는 메모리 유닛들(250)의 유효한 데이터 블록들의 식별들, 소거 카운트 및 메모리 동작들을 수행하기 위한 메모리 유닛들(250)의 다른 상태 정보와 같은 정보를 검색할 수 있다.
[0021][0021] 스위치(220)는 호스트-메모리 변환 회로부(216), 메모리 관리 회로부(218), 비휘발성 메모리 제어 회로부(222) 및/또는 휘발성 메모리 제어 회로부(224)에 결합될 수 있다. 스위치(220)는 다수의 버퍼들을 포함하고/하거나 이에 결합될 수 있다. 예를 들어, 스위치(220)는 내부 정적 랜덤 액세스 메모리(SRAM) 버퍼(ISB)들(225)을 포함할 수 있다. 스위치는 휘발성 메모리(212)에 포함되는 DRAM 버퍼들(227)에 결합될 수 있다. 일부 실시예들에서, 스위치(220)는 컨트롤러(200)의 다양한 컴포넌트들 사이에 인터페이스를 제공할 수 있다. 예를 들어, 스위치(220)는 상이한 컴포넌트들 사이의 일관된 액세스 및 구현을 제공하기 위해 컨트롤러(200)의 상이한 컴포넌트들과 연관될 수 있는 정의된 시그널링 프로토콜들의 변화를 설명할 수 있다.
[0022][0022] 비휘발성 메모리 제어 회로부(222)는 버퍼들(예를 들어, ISB들(225) 또는 버퍼(227)) 중 하나에서의 수신된 판독 명령에 대응되는 정보를 저장할 수 있다. 게다가, 비휘발성 메모리 제어 회로부(222)는 버퍼들 중 하나로부터 정보를 검색하고 비휘발성 메모리의 대응하는 메모리 유닛(250)에 정보를 기록할 수 있다. 메모리 유닛들(250)의 수는 다수의 채널들에 의해 비휘발성 메모리 제어 회로(222)에 결합될 수 있다. 일부 실시예들에서, 채널들의 수는 비휘발성 메모리 제어 회로부(222)에 의해 집합적으로 제어될 수 있다. 일부 실시예들에서, 각 메모리 채널은 개별 채널 제어 회로(248)에 결합될 수 있다. 특정 채널 제어 회로(248)는 단일 채널에 의해 하나 이상의 메모리 유닛(250)을 제어하고 이에 결합될 수 있다.
[0023][0023] 도 2에 도시된 바와 같이, 비휘발성 메모리 제어 회로부(222)는 채널 제어 회로들(248) 각각에 결합되는 채널 요청 큐(request queue; CRQ)(242)를 포함할 수 있다. 게다가, 각 채널 제어 회로(248)는 다수의 메모리 유닛 명령 큐(CQ)들(246)에 결합되는 메모리 유닛 요청 큐(RQ)(244)를 포함할 수 있다. CRQ(242)는 채널들 사이에 공유되는 명령들(예를 들어, 기록 요청들 또는 판독 요청들)을 저장하도록 구성될 수 있고, RQ(244)는 특정 채널 상의 메모리 유닛들(250) 간 명령들을 저장하도록 구성될 수 있으며, CQ(246)는 현재 명령 및 현재 명령에 이어 수행될 다음 명령을 큐잉하도록 구성될 수 있다.
[0024][0024] CRQ(242)는 스위치(220)으로부터 명령을 수신하고, 명령을 RQ들(244)(예를 들어, 명령이 타겟으로 하는 특정 메모리 유닛(250)과 연관되는 채널과 연관된 RQ(244)) 중 하나로 중계하도록 구성될 수 있다. RQ(244)는 특정 메모리 유닛(250)에 대한 명령들의 제1 개수를 제1 개수의 명령들이 RQ(244)에 의해 수신되는 순서로 특정 메모리 유닛(250)과 연관되는 CQ(246)로 중계하도록 구성될 수 있다. 명령 파이프라인은 동일한 메모리 유닛(250)에 대한 명령들이 특정 순서로(예를 들어, RQ(244)에 의해 수신된 순서로) 이동하도록 구성될 수 있다. RQ(244)는 특정 메모리 유닛(250)과 연관된 CQ(246)가 가득하다는 것에 응답하여 특정 메모리 유닛(250)에 대한 명령을 큐잉하도록 구성될 수 있으며, CRQ(242)는 특정 RQ(244)가 가득하다는 것에 응답하여 특정 RQ(244)에 대한 명령을 큐잉하도록 구성될 수 있다.
[0025][0025] RQ(244)는 다른 메모리 유닛들(250)에 대한 다수의 명령들을 다른 메모리 유닛들(250)의 상태에 따른 순서로 다른 메모리 유닛들(250)과 연관되는 CQ들(246)에 중계할 수 있다. 예를 들어, 다른 메모리 유닛들(250)의 상태는 준비/사용중 상태일 수 있다. 명령 파이프라인은 다른 메모리 유닛들(250) 간 명령들이 비순차적으로(예를 들어, 당시 전체 메모리 동작에 효율적인 것에 따라 RQ(244)에 의해 명령들이 수신되는 순서와 다른 순서로) 이동될 수 있도록 구성된다. 예를 들어, RQ(244)는 사용중인 제2 CQ(246)과 연관된 다른 메모리 유닛(250)의 상태에 응답하여 제2 명령을 제2 개수의 명령들로부터 제2 CQ(246)로 중계하기 전에 제2 개수의 명령들 중 제1 명령을 제1 CQ(246)로 중계하도록 구성될 수 있으며, 여기서 제1 명령은 제2 명령보다 나중에 수신된다. RQ(244)는 준비중인 제2 CQ(246)와 관련된 메모리 유닛(250)의 상태에 응답하여(예를 들어, 제1 명령을 중계한 후) 제2 명령을 제2 CQ(246)에 중계하도록 구성될 수 있다.
[0026][0026] 일부 실시예들에서, 각 채널에 대한 제어 유닛들은 각 채널 제어 회로(248) 및/또는 하나 이상의 채널과 함께 사용될 수 있는 다수의 에러 검출/정정 회로들(232)에 결합된, 개별 에러 검출/정정 회로부(232)(예: 에러 정정 코드(ECC) 회로부)를 포함할 수 있다. 에러 검출/정정 회로부(232)는 메모리 유닛들(250)에 저장된 정보와 연관된 에러들을 검출 및/또는 정정하기 위해 BCH(Bose-Chaudhuri-Hocquenghem) 에러 정정과 같은 에러 정정을 적용하도록 구성될 수 있다. 에러 검출/정정 회로부(232)는 SLC, MLC 또는 QLC 동작들에 대해 서로 다른 에러 정정 방식들을 제공하도록 구성될 수 있다. 비휘발성 메모리 제어 회로부(222)는 메모리 유닛들(250) 중 하나에 대응되는 특정 메모리 장치에 의해 수행될 특정 유형의 판독 동작을 나타내기 위한 도 1의 판독 표시기 컴포넌트(113)을 더 포함할 수 있다. 판독 표시기 컴포넌트(113)는 비휘발성 메모리 제어 회로부(222) 내에 예시되어 있지만, 판독 표시 컴포넌트(113)의 기능은 컨트롤러(200)(예: 프로세서(228)) 내의 다른 위치에서 구현될 수 있다.
[0027][0027] 도 3은 호스트 시스템의 워크로드에 기초하여 메모리 장치에 의해 수행될 판독 동작을 식별하기 위한 예시적인 방법(300)의 흐름도이다. 방법(300)은 하드웨어(예: 처리 장치, 회로부, 전용 로직, 프로그램 가능 로직, 마이크로코드, 장치의 하드웨어, 집적 회로 등), 소프트웨어(예: 처리 장치에서 실행되거나 수행된 인스트럭션들) 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시예들에서, 방법(300)은 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)에 의해 수행될 수 있다.
[0028][0028] 도 3에 도시된 바와 같이, 방법(300)는 블록(310)에서 호스트 시스템의 워크로드와 연관된 판독 요청들을 수신하는 처리 로직에서 시작할 수 있다. 판독 요청들은 호스트 시스템의 어플리케이션으로부터 수신될 수 있으며, 호스트 시스템에 의해 사용되는 저장 장치에 저장된 데이터를 검색 또는 판독하기 위한 것일 수 있다. 일부 실시예들에서, 판독 요청들 각각은 저장 장치에서 요청된 데이터의 위치를 지정하는 데 사용될 수 있는 논리 블록 어드레스(logical block address; LBA)를 식별할 수 있다. 처리 로직은 호스트 시스템으로부터 수신된 판독 요청들과 연관된 워크로드의 유형을 더 식별할 수 있다(블록 320). 일부 실시예들에서, 워크로드는 임계 개수의 판독 요청들이 호스트 시스템으로부터 수신된 후 식별될 수 있다. 워크로드는 결정적 워크로드 또는 랜덤 워크로드로 식별될 수 있다. 결정적 워크로드는 함께 그룹화되는 저장 장치에 저장된 데이터에 대한 판독 요청들에 대응될 수 있다. 예를 들어, 결정적 워크로드는 호스트 시스템으로부터 연속적으로 수신된 판독 요청들의 논리 블록 어드레스들이 증가(예를 들어, 판독 요청으로부터의 LBA가 후속 판독 요청으로부터의 후속 LBA보다 우선)될 때 식별될 수 있다. 따라서, 결정적 워크로드는 순차적 판독 요청들의 그룹이 수신될 때 식별될 수 있다. 동일한 또는 대안적인 실시예들에서, 결정적 워크로드는 수신된 판독 요청들의 논리 블록 어드레스들이 순차적 논리 블록 어드레스 그룹의 각 부분일(예를 들어, 제1 판독 요청으로부터의 LBA가 LBA 그룹 내에 있고 후속 판독 요청으로부터의 후속 LBA가 동일한 LBA 그룹 내에 있을) 때 식별될 수 있다. 랜덤 워크로드는 호스트 시스템으로부터의 연속적으로 수신된 판독 요청들이 증가되지 않을(예를 들어, 판독 요청으로부터의 LBA가 후속 판독 요청으로부터의 후속 LBA보다 우선하지 않을) 때 식별될 수 있다. 결정적 워크로드 및 랜덤 워크로드를 식별하는 것에 관한 추가 세부 사항들은 도 5a 및 5b와 함께 설명된다.
[0029][0029] 처리 로직은 호스트 시스템의 식별된 워크로드 유형에 기초하여 다수의 유형의 판독 동작들로부터 판독 동작을 더 선택할 수 있다(블록 330). 판독 동작들의 유형들은 메모리 장치(예: NAND 플래시 메모리 장치)는 메모리 장치의 메모리 페이지들에서 데이터를 검색하도록 수행할 있는 동작들일 수 있다. 따라서, 판독 동작의 유형은 메모리 장치들 중 하나 내에서 내부적으로 수행되는 동작일 수 있다. 판독 동작의 한 유형은 메모리 장치의 워드 라인 및 비트 라인과 연관된 데이터를 검색하는 개별 판독 동작일 수 있다. 판독 동작의 다른 유형은 메모리 장치의 워드 라인 및 다수의 비트 라인들과 연관된 데이터를 검색하는 워드 라인 램프 판독 동작일 수 있다. 일부 실시예들에서, 개별 판독 동작은 호스트 시스템의 워크로드가 랜덤 워크로드로 식별될 때 메모리 장치에 의해 사용될 수 있으며, 워드 라인 램프 판독 동작은 호스트 시스템의 워크로드가 결정적 워크로드로 식별될 때 메모리 장치에 의해 사용될 수 있다. 게다가, 처리 장치는 메모리 장치에 의해 수행될 선택된 판독 동작의 표시를 제공할 수 있다(블록 340). 메모리 장치에 제공된 표시는 메모리 장치에 의해 수행될 판독 동작의 유형을 지정하는 인스트럭션인 동작 코드(opcode)일 수 있다. 따라서, 호스트 시스템에 의해 요청된 데이터를 저장하는 메모리 장치는 메모리 장치의 메모리 페이지들로부터 데이터를 검색할 때 지정된 판독 동작을 사용할 수 있다. 메모리 장치에 의해 수행될 수 있는 판독 동작들의 유형들에 관한 추가 세부 사항들은 도 6a 및 6b와 함께 설명된다.
[0030][0030] 이와 같이, 저장 장치(예: 솔리드 스테이트 드라이브)의 컨트롤러는 호스트 시스템의 워크로드를 식별할 수 있다. 워크로드가 결정적인 경우, 컨트롤러는 워드 라인 램프 판독 동작을 사용하여 다수의 메모리 페이지들에 저장된 데이터를 검색하도록 메모리 장치에 표시할 수 있다. 아니면, 워크로드가 랜덤인 경우, 컨트롤러는 개별 판독 동작을 사용하여 메모리 페이지에 저장된 데이터를 검색하도록 메모리 장치에 표시할 수 있다. 일부 실시예들에서, 워크로드가 결정적이거나 랜덤인 것으로 식별된 후, 워크로드의 식별은 메모리 장치와 결합된 컨트롤러에 저장될 수 있다. 저장된 식별은 컨트롤러에 의해 메모리 장치가 이후 수신되는 판독 요청들에 대한 특정 유형의 판독 동작을 수행하도록 하는 표시(예: opcode)를 제공하는 데 사용될 수 있다.
[0031][0031] 도 4는 호스트 시스템의 워크로드에 기초하여 데이터를 검색하도록 메모리 장치에 의해 수행될 판독 동작을 식별하기 위한 예시적인 방법(400)의 흐름도이다. 방법(400)은 하드웨어(예: 처리 장치, 회로부, 전용 로직, 프로그램 가능 로직, 마이크로코드, 장치의 하드웨어, 집적 회로 등), 소프트웨어(예: 처리 장치에서 실행되거나 수행된 인스트럭션들) 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시예들에서, 방법(400)은 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)에 의해 수행될 수 있다.
[0032][0032] 도 4에 도시된 바와 같이, 방법(400)은 블록(410)에서 호스트 시스템의 워크로드에 대응되는 판독 요청들을 수신하는 처리 로직에서 시작할 수 있다. 처리 로직은 판독 요청들이 순차적 논리 블록 어드레스들과 연관되는지를 더 결정할 수 있다(블록 420). 판독 요청들은 판독 요청들이 순차적 논리 블록 어드레스들과 연관될 때 결정적인 것으로 간주될 수 있다. 예를 들어, 각 판독 요청은 저장 장치에 포함되는 특정 메모리 장치의 특정 부분(예를 들어, 물리적 블록 어드레스)에 맵핑되는 수치적 논리 블록 어드레스에서 데이터를 검색하기 위한 요청일 수 있다. 논리 블록 어드레스들은 각 판독 요청의 대응되는 논리 블록 어드레스가 이전 판독 요청의 이전 논리 블록 어드레스로부터 증가될 때 순차적인 것으로 간주될 수 있다. 논리 블록 어드레스들이 증가될 경우, 판독 요청들 각각과 연관된 기본 데이터는 특정 메모리 장치의 연속적이거나 인접한 부분들(예를 들어, 연속적인 물리적 블록 어드레스들)에 저장될 수 있다. 일부 실시예들에서, 판독 요청들은 판독 요청들의 임계 개수의 논리 블록 어드레스들이 논리 블록 어드레스의 특정 범위(예를 들어, 순차적 논리 블록 어드레스 그룹) 내에 있을 경우 순차적 논리 블록 어드레스들과 연관되는 것으로 간주될 수 있다. 예를 들어, 100 개의 논리 블록 어드레스들에 저장된 데이터에 대한 100 개의 판독 요청들이 수신될 수 있으며, 100 개의 판독 요청들 중 90개가 100 개의 연속적인 논리 블록 어드레스들의 범위 내에 있는 경우, 100 개의 판독 요청들과 연관된 워크로드는 결정적인 것으로 간주될 수 있으며, 따라서 판독 요청들은 순차적 논리 블록 어드레스들과 연관되는 것으로 간주될 수 있다. 그렇지 않으면, 워크로드는 임계(예를 들어, 90 개의 판독 요청들) 미만의 판독 요청들이 100 개의 연속적인 논리 블록 어드레스들의 범위 내에 있는 논리 블록 어드레스들을 지정하는 경우 랜덤인 것으로 간주될 수 있다. 따라서, 결정적 워크로드는 판독 요청들의 논리 블록 어드레스들이 순차적 논리 블록 어드레스들에 대응될 때 식별될 수 있다. 예를 들어, 결정적 워크로드는 각 후속 논리 블록 어드레스들이 이전 판독 요청의 이전 논리 블록 어드레스로부터 증가되거나 판독 요청들의 각 논리 블록 어드레스가 순차적 논리 블록 어드레스 그룹 내에 있을 때 식별될 수 있다. 일부 실시예들에서, 워크로드가 결정적인지를 식별하는 데 사용되는 판독 요청들로부터의 데이터는 호스트 시스템으로 반환될 수 있다. 동일하거나 대안적인 실시예들에서, 이러한 데이터는 컨트롤러에 의해 지정된 판독 동작을 사용하여 메모리 장치에 의해 검색될 수 있다. 예를 들어, 판독 동작은 호스트 시스템으로부터 수신된 이전 워크로드에 기초하여 컨트롤러에 의해 지정되는 개별 판독 동작 또는 워드 라인 램프 판독 동작일 수 있다.
[0033][0033] 판독 요청들이 순차적 논리 블록 어드레스들과 연관된다고 결정하는 것에 응답하여, 처리 로직은 호스트 시스템의 워크로드가 결정적 워크로드라고 식별할 수 있다(블록 430). 게다가, 처리 로직은 후속 판독 요청을 수신하고 후속 판독 요청에 대한 데이터를 검색하기 위해 워드 라인 램프 판독 동작을 수행하도록 메모리 장치에 표시할 수 있다(블록 440). 예를 들어, 워드 라인 램프 판독 동작을 지정하는 opcode는 후속 판독 요청에 대한 데이터를 검색하기 위해 메모리 장치에 제공될 수 있다. 수행될 때, 워드 라인 램프 판독 동작은 도 6b와 함께 설명된 메모리 장치의 다수의 비트 라인들과 연관된 다수의 메모리 페이지들의 데이터를 판독하기 위해 워드 라인에 증가 전압 입력을 인가할 수 있다. 처리 로직은 워드 라인 램프 판독 동작에 기초하여 메모리 장치의 다수의 메모리 페이지들로부터 데이터를 더 수신할 수 있다(블록 450). 예를 들어, 워드 라인에 걸친 다수의 메모리 페이지들(예를 들어, 워드 라인에 걸친 각 비트 라인과 연관된 메모리 페이지들)로부터의 데이터가 수신될 수 있다. 다수의 메모리 페이지들로부터의 데이터는 수신된 후속 판독 요청에 대한 데이터뿐만 아니라 나중에 수신되는 다른 판독 요청들에 의해 요청될 수 있는 추가 데이터를 포함할 수 있다. 이후, 처리 로직은 수신된 데이터의 일부를 호스트 시스템에 제공하고 수신된 데이터의 또 다른 일부를 버퍼 메모리에 선택적으로 저장할 수 있다(블록 460). 예를 들어, 수신된 데이터의 제공된 일부는 후속 판독 요청에 의해 식별된 논리 블록 어드레스의 메모리 페이지로부터 비롯된 것일 수 있으며, 수신된 데이터의 다른 일부는 후속 판독 요청에 의해 식별되지 않은 논리 블록 어드레스들에 있는 다른 메모리 페이지들로부터 비롯된 것일 수 있다. 수신된 데이터의 다른 일부는 대응되는 논리 블록 어드레스들을 식별하는 호스트 시스템으로부터의 추후 판독 요청들에 응답하여 호스트 시스템으로의 후속 전송을 위한 컨트롤러 또는 저장 장치의 버퍼 메모리에 저장될 수 있다. 이와 같이, 복수의 메모리 페이지들로부터의 데이터의 일부는 데이터의 일부에 대한 판독 요청이 이전에 수신되었을 때 호스트 시스템으로 반환될 수 있으며, 데이터의 다른 일부는 데이터의 다른 일부에 대한 후속 판독 요청이 호스트 시스템으로부터 수신될 때까지 버퍼 메모리에 저장될 수 있다. 따라서, 다수의 메모리 페이지들로부터의 데이터는 수신된 판독 요청과 현재 연관되는 데이터 및 예상되는 후속 판독 요청과 연관되는 데이터를 포함할 수 있다.
[0034][0034] 도 4를 참조하면, 판독 요청들이 순차적 논리 블록 어드레스들과 연관되지 않는다고 결정하는 것에 응답하여(블록 420), 처리 로직은 호스트 시스템의 워크로드가 랜덤 워크로드라고 식별할 수 있다(블록 470). 처리 로직은 후속 판독 요청을 수신하고, 후속 판독 요청에 대한 데이터를 검색하기 위해 개별 판독 동작을 수행하도록 메모리 장치에 표시할 수 있다(블록 480). 예를 들어, 개별 판독 동작을 지정하는 또 다른 opcode가 메모리 장치에 제공될 수 있다. 수행될 때, 개별 판독 동작은 도 6a와 함께 설명된 메모리 장치의 단일 비트 라인들과 연관된 하나 이상의 메모리 페이지들의 데이터를 판독하기 위해 워드 라인에 일정 전압 입력을 인가할 수 있다. 처리 로직은 개별 판독 동작에 기초하여 메모리 장치의 메모리 페이지로부터 데이터를 더 수신할 수 있다(블록 490). 예를 들어, 단일 비트 라인 및 워드 라인에 의해 액세스되는 하나 이상의 메모리 페이지들로부터의 데이터가 수신될 수 있다. 이후, 처리 로직은 수신된 데이터를 호스트 시스템에 제공할 수 있다(블록 495). 예를 들어, 데이터는 후속 판독 요청에 응답하여 호스트 시스템으로 반환될 수 있다.
[0035][0035] 일부 실시예들에서, 개별 판독 동작으로부터 수신된 데이터는 호스트 시스템에 제공되기 전에 버퍼 메모리에 저장될 수 있다. 일부 실시예들에서, 개별 판독 동작은 워드 라인 램프 판독 동작보다 메모리 장치로부터 더 작은 데이터를 반환할 수 있다. 그 결과, 개별 판독 동작으로 인해 워드 라인 램프 판독 동작이 저장 장치의 메모리 장치에 의해 수행될 때보다 버퍼 메모리에 저장된 데이터가 더 적을 수 있다.
[0036][0036] 도 5a는 결정적 워크로드(500)의 예를 예시한다. 일부 실시예들에서, 결정적 워크로드(500)는 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)에 의해 식별될 수 있다. 워크로드는 호스트 시스템에 의해 제공된 판독 요청 그룹에 대응될 수 있다.
[0037][0037] 도 5a에 도시된 바와 같이, 논리 블록 어드레스들 0 내지 14는 특정 메모리 장치의 물리적 논리 어드레스들에 대응되거나 맵핑될 수 있다. 일부 실시예들에서, 다른 논리 블록 어드레스의 값에 수치적으로 인접한 값을 갖는 논리 블록 어드레스는 다른 논리 블록 어드레스의 데이터에 물리적으로 인접한 논리 블록 어드레스의 데이터(예를 들어, 인접한 물리적 블록 어드레스들에 위치되는 데이터)가 될 수 있다. 호스트 장치로부터의 판독 요청들은 'X'로 예시된 논리 블록 어드레스들 0 내지 4에 저장된 데이터의 검색을 지정할 수 있다. 일부 실시예들에서, 판독 요청들은 호스트 시스템으로부터 연속적으로 수신될 수 있다. 동일하거나 대안적인 실시예들에서, 각 판독 요청은 단일 논리 블록 어드레스 또는 다수의 논리 블록 어드레스들을 지정할 수 있다. 이와 같이, 판독 요청들의 논리 블록 어드레스들이 순차적 논리 블록 어드레스 그룹의 범위(예를 들어, '0' 내지 '4')에 수치적으로 인접하거나 그 범위 내에 있으므로, 호스트 장치로부터의 판독 요청들은 결정적 워크로드로 식별될 수 있다. 일부 실시예들에서, 결정적 워크로드의 판독 요청들은 메모리 장치의 단일 워드 라인과 연관된 물리적 블록 어드레스들에 맵핑되는 논리 블록 어드레스들을 식별할 수 있다.
[0038][0038] 도 5b는 랜덤 워크로드(550)의 예를 예시한다. 일부 실시예들에서, 랜덤 워크로드(550)는 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)에 의해 식별될 수 있다.
[0039][0039] 도 5b를 참조하면, 호스트 장치로부터의 판독 요청들은 논리 블록 어드레스들 0, 4, 6, 7 및 14를 식별할 수 있다. 이와 같이, 판독 요청들의 논리 블록 어드레스들이 증가되지 않거나 다른 요청된 논리 블록 어드레스에 수치적으로 인접하지 않으므로, 호스트 장치로부터의 판독 요청들은 랜덤 워크로드로 식별될 수 있다. 일부 실시예들에서, 메모리 장치의 다른 워드 라인들과 연관된 물리적 블록 어드레스들에 맵핑되는 논리 블록 어드레스들을 식별할 수 있다.
[0040][0040] 일부 실시예들에서, 호스트 시스템으로부터의 워크로드는 결정적 워크로드에서 랜덤 워크로드로(또는 그 반대로) 변경된 것으로 식별될 수 있다. 호스트 시스템의 워크로드는 호스트 시스템으로부터 연속적으로 수신된 판독 요청 그룹에 대해 식별될 수 있다. 예를 들어, 제1 판독 요청 그룹은 임계 개수의 판독 요청들을 포함할 수 있다. 호스트 시스템의 워크로드는 제1 그룹으로부터의 판독 요청들의 논리 블록 어드레스들에 기초하여 식별될 수 있다. 이후, 제2 판독 요청 그룹이 호스트 시스템으로부터 수신될 수 있다. 제2 판독 요청 그룹은 임계 개수의 판독 요청들을 포함할 수 있으며, 판독 요청들은 연속적으로 수신될 수 있다. 그런 다음, 호스트 시스템의 워크로드는 제2 그룹으로부터의 판독 요청들의 논리 블록 어드레스들에 기초하여 식별될 수 있다. 식별된 워크로드가 제1 판독 요청 그룹과 제2 판독 요청 그룹 간에 다를 경우, 이후 수신된 판독 요청들에 대해 수행되는 판독 요청의 유형이 변경될 수 있다. 워크로드의 식별은 후속 판독 요청 그룹이 수신됨에 따라 식별된 워크로드가 결정적 워크로드와 랜덤 워크로드 사이에서 변경될 수 있도록 후속 판독 요청 그룹에 대해 계속될 수 있어, 메모리 장치에 의해 워드 라인 램프 판독 동작과 개별 판독 동작을 수행하는 것 사이에서 변화가 발생한다.
[0041][0041] 도 5a 및 5b는 15 개의 논리 블록들을 예시하지만, 임의 개수의 논리 블록 어드레스들이 메모리 장치에 할당될 수 있다.
[0042][0042] 도 6a는 워드 라인 램프 판독 동작에 기초한 메모리 장치(600)의 워드 라인들 및 비트 라인들의 어써션(assertion)을 예시한다. 일부 실시예들에서, 워드 라인들과 비트 라인들의 어써션은 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)로부터의 메모리 장치(600)에 대한 표시에 기초할 수 있다.
[0043][0043] 도 6a에 도시된 바와 같이, 메모리 장치(600)는 다수의 워드 라인들(예: 워드 라인들 '0' 내지 'N') 및 다수의 비트 라인들(예: 비트 라인들 '0' 내지 'N')을 포함할 수 있다. 워드 라인과 비트 라인의 교차점은 대응되는 물리적 블록 어드레스에서의 메모리 셀 또는 메모리 페이지에 대응될 수 있다. 예를 들어, 워드 라인 '1'과 비트 라인들 '0' 내지 'N' 사이의 교차점들(653, 654, 655 및 656)은 메모리 장치의 다른 물리적 블록 어드레스들에서의 다른 메모리 페이지들에 대응될 수 있다. 교차점에 위치된 메모리 페이지에서의 데이터를 검색하기 위해, 전압 입력은 대응되는 비트 라인 및 대응되는 워드 라인에 제공될 수 있다. 예를 들어, 워드 라인 램프 판독 동작에서, 램프 전압 신호(652)(즉, 램프 입력 전압 신호)는 교차점들(653, 654, 655 및 656)에 위치된 메모리 페이지들에서의 데이터를 검색하기 위해 워드 라인 '1'의 입력에 인가될 수 있다. 일부 실시예들에서, 램프 전압 신호(652)는 교차점들(653, 654, 655 및 656)에서의 메모리 페이지들에서의 데이터가 검색될 때까지 일정 기간에 걸쳐 증가될 수 있다. 예를 들어, 램프 전압 신호(652)가 제공되는 동안, 전압 신호(660)는 교차점(653)에 위치된 메모리 페이지에 저장된 데이터를 검색하기 위해 비트 라인 '0'의 입력에 어써트될 수 있다. 마찬가지로, 추가 전압 신호들(661, 662 및 663)은 교차점들(654, 655 및 656)에 위치된 메모리 페이지들에 저장된 데이터를 검색하기 위해 비트 라인들 '1' 내지 'N'의 입력들에 어써트될 수 있다. 일부 실시예들에서, 전압 신호들은 램프 전압 신호(652)가 증가됨에 따라 비트 라인들의 입력들에 어써트될 수 있다. 일부 실시예들에서, 램프 전압 신호(652)는 시간이 지남에 따라 선형으로 증가될 수 있다. 예를 들어, 램프 전압 신호(652)는 제1 전압 레벨에 있을 수 있으며, 전압 신호(660)는 교차점(653)에 위치된 메모리 페이지에서의 데이터를 검색하기 위해 어써트될 수 있다. 이후, 램프 전압 신호(652)는 더 높은 제2 전압 레벨로 증가될 수 있으며, 전압 신호(661)는 교차점(654)에 위치된 메모리 페이지에서의 데이터를 검색하기 위해 어써트될 수 있다. 마찬가지로, 추가 전압 신호들(662 및 663)은 램프 전압 신호(652)가 증가됨에 따라 비트 라인에 각각 어써트될 수 있다. 이와 같이, 워드 라인 램프 판독 동작은 램프 전압 신호(652)와 어써트되는 워드 라인과 교차하는 비트 라인들 각각에 걸쳐 메모리 페이지들에 저장된 데이터를 검색하는 데 사용될 수 있다.
[0044][0044] 도 6b는 개별 판독 동작에 기초한 메모리 장치(600)의 워드 라인들 및 비트 라인들의 어써션을 예시한다. 일부 실시예들에서, 워드 라인들과 비트 라인들의 어써션은 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)로부터의 메모리 장치(600)에 대한 표시에 기초할 수 있다.
[0045][0045] 도 6b에 도시된 바와 같이, 교차점(603)에 위치된 메모리 페이지에서의 데이터를 검색하기 위해 전압 신호(601)가 비트 라인 '2'에 어써트될 수 있고 다른 전압 신호(602)가 워드 라인 '1'에 어써트될 수 있다. 일부 실시예들에서, 워드 라인 '1'의 입력에 어써트되는 전압 신호(602)는 일정한 레벨로 유지될 수 있으며 일정 기간에 걸쳐 증가되지 않을 수 있다. 따라서, 개별 판독 동작은 워드 라인과 단일 비트 라인의 교차점에 대응되는 단일 메모리 페이지에서의 데이터를 판독하기 위해 메모리 장치에 의해 수행될 수 있다. 그 결과, 일정 입력 전압 신호가 어써트될 때 워드 라인 램프 판독 동작과 비교하여 워드 라인과 교차하는 비트 라인들에 걸친 메모리 페이지들에 저장된 더 적은 데이터가 검색된다.
[0046][0046] 따라서, 표시에 기초하여 메모리 장치에 의해 수행된 다른 판독 동작들은 메모리 장치의 입력(예를 들어, 워드 라인)에 인가되는 다른 입력 전압 신호들에 대응될 수 있다. 도 6a 및 6b는 워드 라인 램프 판독 동작 및 개별 판독 동작을 설명하지만, 본 개시의 측면들이 이러한 동작들에 제한되는 것은 아니다. 예를 들어, 본 개시의 측면들은 메모리 장치의 메모리 페이지들에서의 데이터를 판독하는 데 사용되는 임의의 다른 이러한 동작들을 사용할지를 결정하는 데 사용될 수 있다. 예를 들어, 워드 라인 및/또는 비트 라인에 전압 입력을 어써트하는 다른 조합들이 본 개시와 함께 사용될 수 있다.
[0047][0047] 도 7은 데이터를 검색하기 위해 메모리 장치에 의해 사용된 판독 동작을 결정하기 위한 예시적인 방법(700)의 흐름도이다. 방법(700)은 하드웨어(예: 처리 장치, 회로부, 전용 로직, 프로그램 가능 로직, 마이크로코드, 장치의 하드웨어, 집적 회로 등), 소프트웨어(예: 처리 장치에서 실행되거나 수행된 인스트럭션들) 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시예들에서, 방법(700)은 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)에 의해 수행될 수 있다.
[0048][0048] 도 7에 도시된 바와 같이, 방법(700)은 블록(710)에서 호스트 시스템으로부터 판독 요청을 수신하는 처리 로직에서 시작할 수 있다. 이후, 처리 로직은 호스트 시스템으로부터의 판독 요청과 연관되는 메모리 장치의 워드 라인을 식별할 수 있다(블록 720). 예를 들어, 판독 요청의 논리 블록 어드레스는 메모리 장치의 워드 라인과 비트 라인의 교차점에 대응되는 메모리 장치의 물리적 블록 어드레스에 맵핑될 수 있다. 워드 라인은 교차점으로부터 식별된다. 처리 로직은 이후 식별된 워드 라인의 비트 라인들에 저장된 데이터가 호스트 시스템에 의해 요청될 것인지를 결정할 수 있다(블록 730). 예를 들어, 호스트 시스템과 연관된 워드로드가 앞서 설명된 바와 같이 결정적인지에 대한 결정이 이루어질 수 있다. 결정적 워크로드는 워드 라인 및 워드 라인과 교차되는 비트 라인들 각각에 걸쳐 위치된 메모리 페이지들 각각 또는 대다수에 대한 판독 요청들을 이용하고 제공할 수 있다. 일부 실시예들에서, 결정적 워크로드는 워드 라인과 교차되는 임계 개수의 메모리 페이지들 또는 비트 라인들에서의 데이터를 이용할 수 있다. 랜덤 워크로드는 워드 라인에 걸쳐 위치된 한 또는 더 적은 개수의 메모리 페이지들에 대한 요청을 이용하고 제공할 수 있다. 식별된 워드 라인의 비트 라인들에 저장된 데이터가 호스트 시스템에 의해 요청될 것이라고(예를 들어, 워크로드가 결정적이라고) 결정하는 것에 응답하여, 처리 로직은 메모리 장치가 식별된 워드 라인 및 비트 라인들에서의 메모리 페이지들에 대한 워드 라인 램프 판독 동작을 수행하도록 지시할 수 있다(블록 740). 예를 들어, 워드 라인 램프 판독 동작은 식별된 워드 라인 및 식별된 워드 라인과 교차되는 비트 라인들에 저장된 데이터를 검색하는 데 사용될 수 있다. 그렇지 않으면, 식별된 워드 라인의 비트 라인들에 저장된 데이터가 호스트 시스템에 의해 요청되지 않을 것이라고(예를 들어, 워크로드가 랜덤이라고) 결정하는 것에 응답하여, 처리 로직은 메모리 장치가 식별된 워드 라인 및 워드 라인과 교차되는 단일 비트 라인에서의 메모리 페이지에 대한 개별 판독 동작을 수행하도록 지시할 수 있다(블록 750).
[0049][0049] 호스트 시스템의 워크로드를 결정적 또는 랜덤으로 식별하는 것은 메모리 장치가 워드 라인 램프 판독 동작을 수행할지 개별 판독 동작을 수행할지를 결정하기 위한 것으로 설명되어 있지만, 호스트 시스템 또는 호스트 시스템의 워크로드와 연관된 임의의 다른 특성들은 메모리 장치에 의해 수행되도록 선택하기 위한 판독 동작의 유형을 결정하는 데 사용될 수 있다. 이러한 특성들의 예들은, 이에 제한하는 것은 아니나, 워크로드와 연관된 판독 요청들을 제공하는 어플리케이션의 식별, 판독 요청들을 제공하는 클라이언트 시스템의 식별 등을 포함한다. 예를 들어, 제1 식별된 어플리케이션은 각 판독 요청이 워드 라인 램프 판독 동작을 사용하여 수행되어야 함을 지정하는 데 사용될 수 있고, 제2 식별된 어플리케이션은 각 판독 요청이 개별 판독 동작을 사용하여 수행되어야 함을 지정하는 데 사용될 수 있으며, 제3 식별된 어플리케이션은 각 판독 요청이 앞서 설명된 바와 같이 결정적 워크로드인지 랜덤 워크로드인지가 식별되어야 함을 지정할 수 있다.
[0050][0050] 도 8은 호스트 시스템들로부터의 판독 요청들의 집합(aggregation)에 기초하여 메모리 장치에 의해 사용된 판독 동작을 결정하기 위한 예시적인 방법(800)의 흐름도이다. 방법(800)은 하드웨어(예: 처리 장치, 회로부, 전용 로직, 프로그램 가능 로직, 마이크로코드, 장치의 하드웨어, 집적 회로 등), 소프트웨어(예: 처리 장치에서 실행되거나 수행된 인스트럭션들) 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 일부 실시예들에서, 방법(800)은 도 1의 컨트롤러(111)의 판독 표시기 컴포넌트(113)에 의해 수행될 수 있다.
[0051][0051] 도 8에 도시된 바와 같이, 방법(800)은 블록(810)에서 제1 호스트 시스템으로부터 제1 판독 요청 그룹을 수신하는 처리 로직에서 시작할 수 있다. 처리 로직은 제2 호스트 시스템으로부터 제2 판독 요청 그룹을 더 수신할 수 있다(블록 820). 예를 들어, 다른 판독 요청 그룹들이 다른 호스트 시스템들로부터 수신될 수 있다. 일부 실시예들에서, 제1 호스트 시스템 및 제2 호스트 시스템은 동일한 엔티티(예를 들어, 동일한 클라이언트, 사용자 또는 다른 이러한 엔티티) 또는 동일한 물리적 위치(예를 들어, 동일한 데이터 센터) 또는 동일한 영역과 연관될 수 있다. 처리 로직은 이후 제1 판독 요청 그룹 및 제2 판독 요청 그룹을 집합할 수 있다(블록 830). 예를 들어, 제1 및 제2 그룹들로부터의 판독 요청들의 집합은 다른 호스트 시스템들이 동일한 엔티티 또는 동일한 물리적 위치와 연관될 때 다른 호스트 시스템들로부터의 판독 요청들의 논리 블록 어드레스들의 식별을 초래할 수 있다. 일부 실시예들에서, 다른 호스트 시스템들은 판독 요청들을 제공하는 관련 어플리케이션들이 실행될 수 있다. 예를 들어, 제1 호스트 시스템은 분산 어플리케이션의 제1 부분을 제공할 수 있고, 제2 호스트 시스템은 분산 어플리케이션의 제2 부분을 제공할 수 있다. 그 결과, 제1 호스트 시스템 및 제2 호스트 시스템으로부터의 판독 요청들은 판독 요청들이 동일한 분산 어플리케이션과 관련됨에 따라 집합될 수 있다.
[0052][0052] 도 8을 참조하면, 처리 로직은 집합된 판독 요청들이 결정적 워크로드에 대응되는지를 결정할 수 있다(블록 840). 예를 들어, 제1 및 제2 그룹들의 논리 블록 어드레스들은 집합된 판독 요청들의 논리 블록 어드레스들의 값들이 증가되는지 또는 순차적 논리 블록 어드레스들의 범위 내에 있는지를 결정하기 위해 결합될 수 있다. 집합된 판독 요청들이 결정적 워크로드에 대응된다고 결정하는 것에 응답하여, 처리 로직은 메모리 장치가 워드 라인 램프 판독 동작을 수행하도록 지시할 수 있다(블록 850). 예를 들어, 데이터는 워드 라인 램프 판독 동작을 사용하여 메모리 장치에 의해 검색될 수 있고, 데이터는 이후 제1 호스트 시스템 및 제2 호스트 시스템으로 반환될 수 있다. 그렇지 않으면, 집합된 판독 요청들이 결정적 워크로드에 대응되지 않는다고 결정하는 것에 응답하여, 처리 장치는 개별 판독 동작을 수행할 수 있다(블록 860). 예를 들어, 판독 요청들 각각에 대한 데이터는 개별 판독 동작을 사용하여 메모리 장치에 의해 검색될 수 있다.
[0053][0053] 도 9는 기계 본원에 논의된 방법론들 중 임의의 하나 이상을 수행하게 하는 인스트럭션 세트가 실행될 수 있는 컴퓨터 시스템(900)의 예시적인 상기 기계를 예시한다. 예를 들어, 컴퓨터 시스템(900)은 저장 장치(예: 도 1의 저장 장치(110))를 포함하거나 이용할 수 있거나, (예를 들어, 운영 체제가 도 1의 판독 표시기 컴포넌트(113)에 대응되는 동작들을 수행하도록 하는) 컨트롤러의 동작들을 수행하는 데 사용될 수 있다. 대안적인 구현예들에서, 기계는 LAN, 인트라넷, 엑스트라넷 및/또는 인터넷의 다른 기계들에 연결(예를 들어, 네트워킹)될 수 있다. 기계는 클라이언트-서버 네트워크 환경에서 서버 또는 클라이언트 기계의 용량으로, 피어 투 피어(또는 분산) 네트워크 환경에서의 피어 기계로, 또는 클라우드 컴퓨팅 인프라스트럭처 또는 환경에서의 서버 또는 클라이언트 기계로 동작할 수 있다.
[0054][0054] 기계는 개인용 컴퓨터(PC), 태블릿 PC, 셋톱박스(STB), 개인용 디지털 보조 장치(PDA), 셀룰러 텔레폰, 웹 기기, 서버, 네트워크 라우터, 스위치 또는 브릿지, 또는 해당 기계에 의해 수행될 조치들을 명시하는 인스트럭션 세트(순차적 또는 다른 방식)을 실행할 수 있는 임의의 기계일 수 있다. 또한, 단일 기계가 예시되어 있지만, "기계"라는 용어는 또한 본원에서 논의된 방법론들 중 임의의 하나 이상을 수행하기 위해 인스트럭션 세트(또는 복수 세트)를 개별적으로 또는 공통으로 실행하는 임의의 기계 컬렉션을 포함하는 것으로 간주해야 한다.
[0055][0055] 예시적인 컴퓨터 시스템(900)은 버스(930)를 통해 서로 통신하는, 처리 장치(902), 메인 메모리(904)(예: 읽기 전용 메모리(ROM), 플래시 메모리, 동기식 DRAM(SDRAM) 또는 램버스 DRAM(RDRAM)과 같은 동적 랜덤 액세스 메모리(DRAM) 등), 정적 메모리(906)(예: 플래시 메모리, 정적 랜덤 액세스 메모리(SRAM) 등) 및 데이터 저장 장치(918)를 포함한다.
[0056][0056] 처리 장치(902)는 마이크로프로세서, 중앙 처리 유닛 등과 같은 하나 이상의 범용 처리 장치들을 나타낸다. 보다 구체적으로, 처리 장치는 CISC(complex instruction set computing) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 또는 인스트럭션 세트들을 구현하는 프로세서, 또는 인스트럭션 세트들의 조합을 구현하는 프로세서들일 수 있다. 처리 장치(902)는 또한 ASIC(application specific integrated circuit), FPGA(field programmable gate array), DSP(digital signal processor), 네트워크 프로세서 등과 같은 하나 이상의 특수 목적 처리 장치들일 수 있다. 처리 장치(902)는 본원에 논의된 동작들 및 단계들을 수행하기 위한 인스트럭션들(926)을 수행하도록 구성된다.
[0057][0057] 컴퓨터 시스템(900)은 네트워크(920)를 통해 통신하기 위한 네트워크 인터페이스 장치(908)를 더 포함할 수 있다. 컴퓨터 시스템(900)은 또한 비디오 디스플레이 유닛(910)(예: LCD(liquid crystal display) 또는 CRT(cathode ray tube)), 자판 입력 장치(912)(예: 키보드), 커서 제어 장치(914)(예: 마우스), 그래픽 처리 유닛(922), 신호 생성 장치(916)(예: 스피커), 그래픽 처리 유닛(922), 비디오 처리 유닛(928) 및 오디오 처리 유닛(932)을 포함할 수 있다.
[0058][0058] 데이터 저장 장치(918)는 본원에 설명된 방법들 또는 기능들 중 임의의 하나 이상을 구현하는 하나 이상의 인스트력션 세트 또는 소프트웨어(926)가 저장되는 기계 판독 가능 저장 매체(924)(컴퓨터 판독 가능 매체라고도 함)를 포함할 수 있다. 인스트럭션들(926)은 또한 기계 판독 가능 저장 매체를 구성하는 컴퓨터 시스템(900), 메인 메모리(904) 및 처리 장치(902)에 의한 실행 동안 메인 메모리(904) 내에 및/또는 처리 장치(902) 내에 완전히 또는 적어도 부분적으로 상주할 수 있다. 기계 판독 가능 저장 매체(924), 데이터 저장 장치(918) 및/또는 메인 메모리(904)는 도 1의 저장 장치(110)에 대응될 수 있다.
[0059][0059] 일 구현예에서, 인스트럭션들(926)은 판독 표시기 컴포넌트(예: 도 1의 판독 표시기 컴포넌트(113))에 대응되는 기능을 구현하기 위한 인스트럭션들을 포함한다. 기계 판독 가능 저장 매체(924)가 예시적인 구현에서 단일 매체인 것으로 도시되어 있지만, "기계 판독 가능 저장 매체"라는 용어는 하나 이상의 인스트럭션 세트들을 저장하는 단일 매체 또는 다중 매체(예를 들어, 중앙식 또는 분산식 데이터베이스, 및/또는 관련 캐시들 및 서버들)을 포함하는 것으로 간주되어야 한다. "기계 판독 가능 저장 매체"라는 용어는 또한 기계에 의해 실행되는 인스트럭션 세트를 저장 또는 인코딩할 수 있고 기계가 본 개시의 방법들 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 간주되어야 한다. 따라서, "기계 판독 가능 저장 매체"라는 용어는, 이에 제한되는 것은 아니나, 솔리드 스테이트 메모리들, 광학 매체 및 자기 매체를 포함하는 것으로 간주되어야 한다.
[0060][0060] 전술한 상세한 설명의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 연산의 알고리즘 및 상징적 표현들과 관련하여 제시되었다. 이러한 알고리즘적 설명들 및 표현들은 데이터 처리 분야의 당업자가 그들 작업의 실체를 다른 당업자에게 가장 효과적으로 전달하기 위해 사용되는 방식들이다. 여기서, 알고리즘은 일반적으로 원하는 결과를 도출하는 자기 모순 없는(self-consistent) 동작 시퀀스인 것으로 생각된다. 동작들은 이러한 물리적 양의 물리적 조작을 필요로 한다. 일반적으로, 반드시 그런 것은 아니지만, 이러한 양은 저장되고, 결합되고, 비교되고 아니면 조작될 수 있는 전기 또는 자기 신호들의 형태를 취한다. 이러한 신호들을 비트, 값, 요소, 심볼, 문자, 용어, 숫자 등으로 지칭하는 것이, 주로 일반적인 사용의 이유로, 때때로 편리한 것으로 입증되었다.
[0061][0061] 그러나, 이러한 및 유사한 용어들 모두는 적절한 물리적 양과 관련이 있으며 이러한 양에 적용되는 편리한 라벨들일 뿐이라는 점을 명심해야 한다. 상기 논의로부터 구체적으로 달리 명시되지 않는 한, 설명 전반에 걸쳐, "수신(receiving)" 또는 "결정(determining)" 또는 "제공(providing)" 등과 같은 용어들을 이용하는 논의들은 컴퓨터 시스템 또는 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리적(전자) 양으로 표현된 데이터를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 이러한 정보 저장 장치들 내의 물리적 양으로 유사하게 표현되는 다른 데이터로 조작 및 변환하는 유사한 전기 컴퓨팅 장치의 동작 및 프로세스들을 지칭한다.
[0062][0062] 본 개시는 또한 본원에서 동작들을 수행하기 위한 장치에 관한 것이다. 이 장치는 의도된 목적들을 위해 특별히 구성될 수 있거나, 이는 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성된 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은, 이에 제한되는 것은 아니나, 플로피 디스크, 광 디스크, CD-ROM, 및 자기-광학 디스크, 읽기 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM, EEPROM, 자기 또는 광학 카드, 또는 각각 컴퓨터 시스템 버스에 연결된 전자 인스트럭션들을 저장하기에 적합한 임의의 유형의 매체를 포함하는 임의 유형의 디스크와 같은 컴퓨터 판독 가능 저장 매체에 저장될 수 있다.
[0063][0063] 본원에 제시된 알고리즘들 및 디스플레이들은 본질적으로 임의의 특정 컴퓨터 또는 다른 장치와 관련되지 않는다. 다양한 범용 시스템들은 본원의 교시에 따른 프로그램들과 함께 사용될 수 있거나, 방법을 수행하기 위해 다 특화된 장치를 구성하는 것이 편리하다는 것을 입증할 수 있다. 다양한 이들 시스템들의 구조는 아래의 설명에서 제시되는 것으로 나타날 것이다. 또한, 본 개시는 임의의 특정 프로그래밍 언어를 참조하여 설명되지 않는다. 다양한 프로그래밍 언어들이 본원에 기술된 바와 같이 본 개시의 교시를 구현하는 데 사용될 수 있음이 이해될 것이다.
[0064][0064] 본 개시는 본 개시에 따른 프로세스를 수행하기 위해 컴퓨터 시스템(또는 다른 전자 장치)를 프로그래밍하는 데 사용될 수는, 인스트럭션들을 저장한 기계 판독 가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 기계 판독 가능 매체는 기계(예: 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장하기 위한 임의의 메커니즘을 포함한다. 예를 들어, 기계 판독 가능(예: 컴퓨터 판독 가능) 매체는 읽기 전용 메모리( "ROM"), 랜덤 액세스 메모리( "RAM"), 자기 디스크 저장 매체, 광 저장 매체, 플래시 메모리 장치들 등과 같은 기계(예: 컴퓨터) 판독 가능 저장 매체를 포함한다.
[0065][0065] 전술한 명세서에서, 본 개시의 구현예들은 그 특정 예시적인 구현예들을 참조하여 설명되었다. 다음의 청구 범위에 명시된 본 개시의 넓은 사상 및 구현 범위를 벗어나지 않고 다양한 변형들이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면들은 제한적인 의미보다는 예시적인 의미로 간주되어야 한다.