KR20170032502A - 스토리지 장치 및 그것의 인터럽트 발생 방법 - Google Patents

스토리지 장치 및 그것의 인터럽트 발생 방법 Download PDF

Info

Publication number
KR20170032502A
KR20170032502A KR1020150129396A KR20150129396A KR20170032502A KR 20170032502 A KR20170032502 A KR 20170032502A KR 1020150129396 A KR1020150129396 A KR 1020150129396A KR 20150129396 A KR20150129396 A KR 20150129396A KR 20170032502 A KR20170032502 A KR 20170032502A
Authority
KR
South Korea
Prior art keywords
interrupt
host
completion
completion queue
pointer
Prior art date
Application number
KR1020150129396A
Other languages
English (en)
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 삼성전자주식회사
Priority to KR1020150129396A priority Critical patent/KR20170032502A/ko
Priority to CN201610664071.0A priority patent/CN106528461A/zh
Priority to CN202110198634.2A priority patent/CN112948292B/zh
Priority to US15/265,090 priority patent/US20170075834A1/en
Publication of KR20170032502A publication Critical patent/KR20170032502A/ko
Priority to US17/071,411 priority patent/US11561914B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • 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/061Improving I/O performance
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • 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/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

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)
  • Bus Control (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명에 따른 스토리지 장치의 인터럽트 발생 방법은, 호스트로부터 제공된 명령어를 실행하는 단계, 상기 명령어에 대한 실행의 완료에 응답하여 상기 호스트의 완료 큐에 완료 엔트리를 기입하는 단계, 상기 완료 엔트리에 대응하는 인터럽트의 발행 여부를 결정하는 단계를 포함하되, 상기 결정하는 단계에서 상기 인터럽트의 발행 여부는, 상기 완료 큐에서 테일 포인터와 헤드 포인터의 차이가 특정값에 대응하는지를 나타내는 제 1 기준, 그리고 상기 완료 큐에 누적된 엔트리들의 크기가 기준치에 도달했는지를 나타내는 제 2 기준, 또는 이전의 인터럽트 발행 시점으로부터의 경과 시간이 기준 시간을 초과했는지를 나타내는 제 3 기준들 중 적어도 하나에 의거하여 결정된다.

Description

스토리지 장치 및 그것의 인터럽트 발생 방법{STORAGE DEVICE AND INTERRUPT GENERATION METHOD THEREOF}
본 발명은 반도체 메모리 장치에 관한 것으로, 좀 더 구체적으로는 스토리지 장치 및 그것의 인터럽트 발생 방법에 관한 것이다.
플래시 메모리 장치는 컴퓨터, 스마트폰, PDA, 디지털 카메라, 캠코더, 보이스 리코더, MP3 플레이어, 휴대용 컴퓨터(Handheld PC)와 같은 정보 기기들의 음성 및 영상 데이터 저장 매체로서 널리 사용되고 있다. 그러나 플래시 메모리에 데이터를 기입하기 위해서는 소거 동작이 반드시 선행되어야 하며, 기입되는 데이터의 단위보다 삭제되는 데이터의 단위가 크다는 특징이 있다. 이러한 특징은 플래시 메모리가 보조기억장치로 사용되는 경우에도 일반 하드디스크용 파일 시스템(File System)을 그대로 활용하는 것을 저해하는 요인이 된다. 더불어, 이러한 특징은 플래시 메모리로의 연속적인(Sequential) 입출력 처리가 비연속적 입출력 처리보다 효율적임을 암시한다.
플래시 메모리 기반의 대용량 스토리지 장치의 대표적인 예로 솔리드 스테이트 드라이브(이하, SSD)가 있다. SSD의 폭발적인 수요 증가와 함께 그 용도는 다양하게 분화되고 있다. 예를 들면, 서버용 SSD, 클라이인트용 SSD, 데이터 센터용 SSD 등으로 용도가 세분화될 수 있다. SSD의 인터페이스는 이러한 각각의 용도에 따라 최적의 속도와 신뢰성을 제공할 수 있어야 한다. 이러한 요구를 충족하기 위해서 최적의 SSD 인터페이스로 SATA, PCIe, SAS 등이 적용되고 있다. 특히, 최근에는 PCIe 기반의 인터페이스의 후속으로 부각되는 NVMe가 최근에는 활발히 연구 및 적용되고 있는 실정이다.
SSD를 장착하는 호스트 장비는 일반적으로 다양한 컴퓨터 시스템들이 포함될 수 있다. 예를 들면, 서버라든지 데이터 센터 또는 개인용 컴퓨터(PC) 등에 SSD가 연결될 수 있다. 따라서, 호스트 장비의 성능이 상대적으로 낮거나, 호스트 장비에서 구동되는 애플리케이션 등의 수가 상대적으로 많은 경우에는 빈번한 인터럽트 발생은 호스트 장비의 오버헤드를 야기할 수 있다. 따라서, 호스트 장비의 성능 확보를 위해서 SSD에서 생성하는 인터럽트의 수를 줄일 수 있는 기술이 절실한 실정이다.
본 발명의 목적은 인터럽트의 발생 수를 줄일 수 있는 스토리지 장치 및 그것의 인터럽트 발생 방법을 제공하는 데 있다.
상기 목적을 달성하기 위한 본 발명에 따른 스토리지 장치의 인터럽트 발생 방법은, 호스트로부터 제공된 명령어를 실행하는 단계, 상기 명령어에 대한 실행의 완료에 응답하여 상기 호스트의 완료 큐에 완료 엔트리를 기입하는 단계, 상기 완료 엔트리에 대응하는 인터럽트의 발행 여부를 결정하는 단계를 포함하되, 상기 결정하는 단계에서 상기 인터럽트의 발행 여부는, 상기 완료 큐에서 테일 포인터와 헤드 포인터의 차이가 특정값에 대응하는지를 나타내는 제 1 기준, 그리고 상기 완료 큐에 누적된 엔트리들의 크기가 기준치에 도달했는지를 나타내는 제 2 기준, 또는 이전의 인터럽트 발행 시점으로부터의 경과 시간이 기준 시간을 초과했는지를 나타내는 제 3 기준들 중 적어도 하나에 의거하여 결정된다.
상기 목적을 달성하기 위한 본 발명에 따른 스토리지 장치는, 불휘발성 메모리 장치, 그리고 상기 불휘발성 메모리 장치를 제어하며, 호스트로부터의 명령어를 실행하고 상기 명령어에 대한 완료 엔트리를 상기 호스트로 전달하고, 상기 완료 엔트리에 대응하는 인터럽트를 상기 호스트로 발행하는 스토리지 컨트롤러를 포함하되, 상기 스토리지 컨트롤러는 상기 완료 엔트리가 저장되는 상기 호스트의 완료 큐의 테일 포인터와 헤드 포인터의 차이값, 상기 완료 큐에 저장된 완료 엔트리들의 누적값, 또는 이전 인터럽트가 발행된 시점으로부터의 경과 시간 중 적어도 하나를 기준으로 상기 인터럽트를 발행한다.
상기 목적을 달성하기 위한 본 발명에 따른 솔리드 스테이트 드라이브(SSD)의 인터럽트 발행 방법은, 호스트의 완료 큐에 완료 엔트리를 기입하는 단계, 상기 완료 엔트리에 대응하는 인터럽트의 발행 여부를 상기 완료 큐에 누적된 완료 엔트리들의 수에 따라 또는 이전의 인터럽트의 발행 시점으로부터의 경과 시간이 기준 시간을 초과했는지에 따라 결정하는 단계, 그리고 상기 결정된 인터럽트의 발행 여부에 따라 상기 호스트로 인터럽트를 전달하는 단계를 포함한다.
이상과 같은 본 발명의 실시 예에 따르면, 호스트로 전달되는 인터럽트의 발생 횟수를 획기적으로 줄일 수 있는 솔리드 스테이트 드라이버(SSD)를 제공할 수 있다. 따라서, 본 발명의 솔리드 스테이트 드라이버(SSD)에 따르면, 호스트에서 인터럽트의 누적에 따른 성능 감소를 줄일 수 있다.
도 1은 본 발명의 실시 예에 따른 사용자 장치를 보여주는 블록도이다.
도 2는 본 발명의 실시 예에 따른 호스트의 큐 관리 동작을 보여주는 블록도이다.
도 3은 도 1에 도시된 스토리지 컨트롤러(210)의 구성을 예시적으로 보여주는 블록도이다.
도 4는 도 3의 스토리지 컨트롤러의 호스트로의 인터럽트를 발생하는 방법의 예시를 간략히 보여주는 도면이다.
도 5는 본 발명의 실시 예에 따른 스토리지 장치(200)의 인터럽트 발생 방법을 예시적으로 보여주는 타이밍도이다.
도 6은 본 발명의 실시 예에 따른 스토리지 컨트롤러(210)의 인터럽트 발생 방법을 보여주는 순서도이다.
도 7은 도 5의 인터럽트 발생 방법에 따른 호스트와 스토리지 장치의 호출 처리 과정을 간략히 보여주는 도면이다.
도 8은 본 발명의 실시 예에 따른 스토리지 장치(200)의 인터럽트 발생 방법을 다른 예를 보여주는 타이밍도이다.
도 9는 도 8의 실시 예를 수행하기 위한 스토리지 컨트롤러(210)의 인터럽트 발생 방법을 보여주는 순서도이다.
도 10은 도 9의 인터럽트 발생 방법에 따른 호스트와 스토리지 장치의 호출 처리 과정을 간략히 보여주는 도면이다.
도 11은 인터럽트 발생 방법의 몇몇 실시 예 중에 어느 하나를 보여주는 타이밍도이다.
도 12는 도 11의 실시 예를 수행하는 스토리지 컨트롤러(210)의 인터럽트 발생 방법을 보여주는 순서도이다.
도 13은 도 11의 인터럽트 발생 방법에 따른 호스트와 스토리지 장치의 호출 처리 과정을 간략히 보여주는 도면이다.
도 14는 본 발명의 실시 예에 따른 인터럽트 발생 방법을 보여주는 타이밍도이다.
도 15는 본 발명의 실시 예에 따른 인터럽트 발생 방법을 보여주는 타이밍도이다.
도 16은 도 1에서 설명된 불휘발성 메모리의 구성을 예시적으로 보여주는 블록도이다.
도 17은 도 16의 메모리 셀 어레이에 포함된 메모리 블록들 중 제 1 메모리 블록의 예를 보여주는 회로도이다.
도 18은 본 발명의 실시 예들에 따른 불휘발성 메모리 시스템이 적용된 메모리 카드 시스템을 보여주는 블록도이다.
도 19는 본 발명에 따른 불휘발성 메모리 시스템이 적용된 SSD(Solid State Drive) 시스템을 예시적으로 보여주는 블록도이다.
도 20은 본 발명에 따른 불휘발성 메모리 시스템이 적용된 사용자 시스템을 보여주는 블록도이다.
앞의 일반적인 설명 및 다음의 상세한 설명 모두 예시적이라는 것이 이해되어야 하며, 청구된 발명의 부가적인 설명이 제공되는 것으로 여겨져야 한다. 참조 부호들이 본 발명의 바람직한 실시 예들에 상세히 표시되어 있으며, 그것의 예들이 참조 도면들에 표시되어 있다. 가능한 어떤 경우에도, 동일한 참조 번호들이 동일한 또는 유사한 부분을 참조하기 위해서 설명 및 도면들에 사용된다.
이하에서는, 플래시 메모리 장치를 사용하는 솔리드 스테이트 드라이버가 본 발명의 특징 및 기능을 설명하기 위한 예로서 사용될 것이다. 하지만, 이 기술 분야에 정통한 사람은 여기에 기재된 내용에 따라 본 발명의 다른 이점들 및 성능을 쉽게 이해할 수 있을 것이다. 본 발명은 다른 실시 예들을 통해 또한, 구현되거나 적용될 수 있을 것이다. 게다가, 상세한 설명은 본 발명의 범위, 기술적 사상 그리고 다른 목적으로부터 상당히 벗어나지 않고 관점 및 응용에 따라 수정되거나 변경될 수 있다.
도 1은 본 발명의 실시 예에 따른 사용자 장치를 간략히 보여주는 블록도이다. 도 1을 참조하면, 사용자 장치(User device, 10)는 호스트(100)와 스토리지 장치(200)를 포함한다. 호스트(100)는 스토리지 장치(200)에 명령어(CMD)를 제공한다. 스토리지 장치(200)는 명령어에 대한 실행 결과로 호스트(100)의 완료 큐(Completion Queue: 이하, CQ)에 완료 엔트리(Completion Entry)를 기입하고, 인터럽트(Interrupt)를 발행한다. 본 발명의 스토리지 장치(200)는 완료 엔트리의 기입 횟수보다 적은 수의 인터럽트를 발행할 수 있다. 좀더 자세히 설명하면 다음과 같다.
호스트(100)는 스토리지 장치(200)에 데이터를 쓰거나, 스토리지 장치(200)에 저장된 데이터를 읽어낸다. 호스트(100)는 스토리지 장치(200)에 데이터를 기입하거나, 스토리지 장치(200)에 저장된 데이터를 독출하는 등의 명령어(CMD)를 생성한다. 호스트(100)는 스토리지 장치(200)에 명령어(CMD)를 전달하고, 스토리지 장치(200)로부터 해당 명령어의 실행 여부를 지시하는 완료 엔트리(Complete) 및 그와 연관된 인터럽트(Interrupt)를 수신한다. 호스트(100)는 인터럽트(Interrupt)에 응답하여 해당 명령어(CMD)에 관련된 쓰레드(Thread)나 테스크(Task)를 완료하기 위한 인터럽트 처리를 수행할 것이다.
본 발명의 호스트(100)는 프로세싱 유닛(110), 호스트 메모리(120), 인터페이스 회로(130)를 포함한다. 호스트 메모리(120)에는 응용 프로그램, 파일 시스템, 장치 드라이버 등이 로드될 수 있다. 이 밖에도 호스트 메모리(120)에는 호스트(100)가 구동되기 위한 다양한 소프트웨어들이 로드될 수 있다.
프로세싱 유닛(110)은 호스트 메모리(120)에 로드된 다양한 소프트웨어(응용 프로그램, 운영 체제, 장치 드라이버)를 실행한다. 프로세싱 유닛(110)은 운영 체제(OS), 응용 프로그램들(Application Program)을 실행할 수 있다. 프로세싱 유닛(110)은 동종 멀티-코어 프로세서(Homogeneous Multi-Core Processor) 또는 이종 멀티-코어 프로세서(Heterogeneous Multi-Core Processor)로 제공될 수 있다.
호스트 메모리(120)에는 프로세싱 유닛(110)에서 처리할 응용 프로그램이나 데이터들이 로드된다. 그리고 스토리지 장치(200)로 전달될 명령어에 대한 큐를 관리하기 위한 입출력 스케줄러(122)가 호스트 메모리(120)에 로드될 수 있다. 입출력 스케줄러(122)에는 제출 큐(123, Submission Queue)와 완료 큐(125, Completion Queue)가 포함될 수 있다. 제출 큐(123)는 호스트(100)에 의해서 기입되는 대기열로서, 스토리지 장치(200)에 전송할 명령어들에 대응한다. 그리고 완료 큐(125)는 스토리지 장치(200)에 의해서 기입되는 완료 엔트리들의 대기열로, 호스트(100)에 의해서 요청된 명령어의 완료 여부를 나타낸다.
제출 큐(123)는 호스트(100)에 의해서 기입 또는 공급되고, 스토리지 장치(200)에 의해서 소비된다. 즉, 제출 큐(123)의 테일 포인터(Tail Pointer: 이하, TP)는 호스트(100)가 진전시키고, 새로운 테일 포인터(TP)의 위치는 스토리지 장치(200)에 전달될 것이다. 마찬가지로, 스토리지 장치(200)는 완료 엔트리(Complete)의 제공을 통해서 제출 큐(123)의 헤드 포인터(HP)를 진전시킬 수 있다.
완료 큐(125)는 스토리지 장치(200)에 의해서 기입되고, 호스트(100)에 의해서 소비된다. 즉, 완료 큐(125)의 테일 포인터(TP)는 스토리지 장치(200)의 기입에 의해서 진전된다. 호스트(100)는 인터럽트(Interrupt)에 응답하여 완료 큐(125)의 헤드 포인터(HP)를 진전시키고, 새로운 헤드 포인터(TP)의 위치는 스토리지 장치(200)로 전달될 것이다. 이러한 호스트(100)의 스토리지 장치(200)로의 헤드 포인터(HP)의 통지는 스토리지 장치(200)의 도어벨 레지스터(미도시됨)에 기입됨으로써 달성될 수 있다.
인터페이스 회로(130)는 호스트(100)와 스토리지 장치(200) 사이에서 물리적인 연결을 제공한다. 즉, 인터페이스 회로(130)는 호스트(100)에서 발행하는 다양한 접근 요청에 대응하는 명령어, 어드레스, 데이터 등을 스토리지 장치(200)와의 인터페이싱 방식으로 변환한다. 인터페이스 회로(130)의 프로토콜로는 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI) 중 적어도 어느 하나일 수 있다.
스토리지 장치(200)는 호스트(100)로부터 제공되는 명령어(CMD)에 응답하여 불휘발성 메모리 장치(230, 240, 250)에 접근하거나, 다양한 요청된 동작을 수행할 수 있다. 스토리지 장치(200)는 특히, 호스트(100)에서 제공되는 완료 큐(CQ)에 대한 도어벨 레지스터를 참조하여 인터럽트 신호(Interrupt)를 생성한다. 특히, 스토리지 장치(200)는 완료 큐(CQ)의 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치가 발생하는 시점에만 인터럽트(Interrupt)를 발생할 수 있다. 또는, 스토리지 장치(200)는 완료 큐(CQ)에 누적된 엔트리들의 수가 기준값(TH)을 초과하는 경우에 복수의 완료 신호들에 대응하는 하나의 인터럽트 벡터를 생성할 수 있다. 더불어, 스토리지 장치(200)는 완료 큐(CQ)에 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치가 발생하는 시점으로부터 기준 시간(Time Elapse)이 경과하면 복수의 완료 신호들에 대응하는 하나의 인터럽트 벡터를 생성할 수 있다.
상술한 방식의 인터럽트를 생성하는 스토리지 장치(200)는, 스토리지 컨트롤러(210), 버퍼 메모리(220), 그리고 복수의 불휘발성 메모리 장치(230, 240, 250)를 포함할 수 있다.
스토리지 컨트롤러(210)는 호스트와 스토리지 장치(200) 사이에서 인터페이싱을 제공한다. 스토리지 컨트롤러(210)는 호스트(100)로부터 제공되는 완료 큐(CQ)의 헤드 포인터(HP) 도어벨 정보를 참조하여 본 발명에 따른 인터럽트 발생을 수행한다. 즉, 스토리지 컨트롤러(210)는 완료 큐(CQ)의 테일 포인터 및 헤드 포인터의 불일치가 최초로 발생하는 시점에 인터럽트를 발생하는 레이지 인터럽트 발생(Lazy Interrupt generation) 동작을 수행할 수 있다. 더불어, 스토리지 컨트롤러(210)는 레이지 인터럽트 발생 동작과 더불어 누적된 완료 엔트리의 수가 기준치를 초과하거나, 이전의 인터럽트 발생 시점으로부터 경과 시간을 고려하여 상대적으로 적은 수의 인터럽트를 생성할 수 있다. 스토리지 컨트롤러(210)의 좀더 구체적인 동작은 후술하는 도면들에서 상세히 설명될 것이다.
이상의 본 발명의 실시 예에 따르면, 완료 큐(CQ)에 대한 인터럽트의 발생 횟수를 획기적으로 줄일 수 있는 스토리지 장치(200)가 제공된다. 따라서, 본 발명의 스토리지 장치(200)에 따르면, 인터럽트의 처리를 위해서 소모되는 자원과 오버헤드로 인한 호스트(100)의 성능 저하를 방지할 수 있다.
도 2는 본 발명의 실시 예에 따른 호스트의 큐 관리 동작을 보여주는 블록도이다. 도 2를 참조하면, 호스트 메모리(120)에 로드되고 프로세싱 유닛(110)에 의해서 구동되는 호스트(100)의 소프트웨어는 간략히 응용 프로그램들(121), 그리고 운영 체제(OS)의 커널(122)을 포함할 수 있다. 여기서, 커널(122)에는 입출력 스케줄러(126)와 장치 드라이버(128)가 포함될 수 있다. 더불어, 파일 시스템(미도시됨)이 운영 체제(OS)의 커널(Kernel, 122)에 포함될 수 있음은 잘 이해될 것이다.
응용 프로그램들(121)은 기본적인 서비스로서 구동되거나, 사용자의 요청에 의해서 호스트(100)에서 구동되는 상위 계층의 소프트웨어이다. 다양한 서비스를 제공하기 위하여 동시에 복수의 응용 프로그램들(APP1, APP2, APP3, APP4)이 실행될 수 있다. 실행되는 응용 프로그램들(APP1, APP2, APP3, APP4)은 호스트 메모리(120)에 로드된 후에 프로세싱 유닛(110)에 의해서 실행될 것이다.
예를 들면, 사용자에 의해서 동영상 파일의 재생이 요청되면, 동영상을 재생하기 위한 응용 프로그램(비디오 플레이어)이 실행된다. 그러면, 실행된 응용 프로그램은 사용자가 요청한 동영상 파일을 재생하기 위한 스토리지 장치(200)로의 읽기 요청(Read request) 또는 쓰기 요청(Write request)을 생성할 것이다. 이러한 스토리지 장치(200)로의 쓰기 요청을 위한 명령어(CMD)는 제출 큐(123)에 기입되고, 제출 큐(123)의 테일 포인터(TP)는 업데이트될 것이다. 더불어, 호스트(100)는 새로운 명령어가 제출 큐(123)에 기록되었음을 알리는 테일 도어벨(Tail Doorbell)을 스토리지 장치(200)로 전송한다. 그러면, 스토리지 장치(200)가 해당 명령어를 제출 큐(123)로부터 패치하고, 실행하게 된다.
더불어, 스토리지 장치(200)는 호스트(100)로부터의 가장 최근에 패치한 명령어에 대한 완료를 알리기 위해서 완료 큐(125)에 완료 엔트리를 기입한다. 이때, 완료 엔트리의 기입에 따라 완료 큐(125)의 테일 포인터(TP)가 증가하게 된다. 이어서, 스토리지 장치(200)로부터 해당 완료 엔트리에 대응하는 인터럽트(Interrupt)가 전송되면, 호스트(100)는 제출 큐(123)에 기입한 명령어에 대한 제반 처리 절차를 완료하기 위한 내부 동작을 수행할 것이다.
장치 드라이버(128)는 스토리지 장치(200)를 운영 체제(OS) 레벨에서 제어하기 위한 제어 모듈이다. 사용자에 의해서 또는 응용 프로그램들(121)로부터 메모리 접근 요청이 발생하면, 장치 드라이버(128)가 호출된다. 장치 드라이버(128)는 스토리지 장치(200)를 제어하기 위한 커널(Kernel)의 소프트웨어 모듈로 제공될 수 있다.
이상에서는 응용 프로그램에 의한 명령어의 생성과 복수의 명령어들이 기입되는 제출 큐(123), 그리고 제출 큐(123)에 기입된 명령어들에 대한 완료 엔트리가 기입되고 소비되는 완료 큐(125)가 간략히 설명되었다. 호스트(100)는 완료 큐(125)에 기입된 완료 엔트리들을 인터럽트(Interrupt)에 따라 처리한다. 만일, 완료 큐(125)에 누적된 완료 엔트리들에 대한 처리가 지연되는 경우, 빈번하게 발생하는 인터럽트는 호스트에게 있어서 큰 오버헤드로 작용한다. 본 발명의 스토리지 장치(200)는 인터럽트의 생성 횟수를 획기적으로 줄일 수 있는 방식으로 인터럽트를 생성할 수 있다.
도 3은 도 1에 도시된 스토리지 컨트롤러(210)의 구성을 예시적으로 보여주는 블록도이다. 도 3을 참조하면, 본 발명의 스토리지 컨트롤러(210)는 중앙처리장치(211), 호스트 인터페이스(212), 버퍼 매니저(216) 및 플래시 인터페이스(217)를 포함한다.
중앙처리장치(211)는 불휘발성 메모리 장치들(230, 240, 250)에 대한 읽기/쓰기 동작에 필요한 다양한 제어 정보를 호스트 인터페이스(212) 및 플래시 인터페이스(217)의 레지스터들에 전달한다. 중앙처리장치(211)는 스토리지 컨트롤러(210)의 다양한 제어 동작을 위해 제공되는 펌웨어에 따라 동작할 수 있다. 예를 들면, 중앙처리장치(211)는 불휘발성 메모리 장치들(230, 240, 250)을 관리하기 위한 가비지 컬렉션(Garbage collection)이나, 주소 맵핑, 웨어 레벨링 등을 수행하기 위한 플래시 변환 계층(FTL)을 실행할 수 있다.
호스트 인터페이스(212)는 호스트(100)와의 통신을 수행할 수 있다. 예를 들면, 호스트 인터페이스(212)는 호스트(100)의 제출 큐(123)의 테일 포인터(TP) 도어벨을 기입하기 위한 제 1 도어벨 레지스터(213)를 포함할 수 있다. 호스트 인터페이스(212)는 호스트(100)가 완료 큐(125)의 헤드 포인터(HP)가 업데이트되었음과 그 위치를 기입하기 위한 제 2 도어벨 레지스터(214)를 포함할 수 있다. 더불어, 호스트 인터페이스(212)는 제 2 도어벨 레지스터(214)의 상태에 따라 발생할 인터럽트들을 관리하는 인터럽트 테이블(215)을 포함할 수 있다.
호스트 인터페이스(212)는 호스트(100)와 스토리지 장치(200)와의 물리적 연결을 제공한다. 즉, 호스트 인터페이스(212)는 호스트의 버스 포맷(Bus format)에 대응하여 스토리지 장치(200)와의 인터페이싱을 제공한다. 호스트(100)의 버스 포맷은 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI) 중 적어도 하나로 구성될 수 있다. 호스트 인터페이스(212)는 바람직하게 PCI express 방식으로 데이터를 교환하는 호스트(100)에 장착되는 NVMe 프로토콜이 적용된 것일 수 있다.
버퍼 매니저(216)는 버퍼 메모리(220, 도 1 참조)의 읽기 및 쓰기 동작들을 제어한다. 예를 들면, 버퍼 매니저(216)는 쓰기 데이터(Write data)나 읽기 데이터(Read data)를 버퍼 메모리(220)에 일시 저장한다. 버퍼 매니저(216)는 중앙처리장치(211)의 제어에 따라 버퍼 메모리(220)의 메모리 영역을 스트림 단위로 구분하여 관리할 수 있다.
플래시 인터페이스(217)는 플래시 메모리 장치(230, 240, 250)와 데이터를 교환한다. 플래시 인터페이스(217)는 버퍼 메모리(220)로부터 전달되는 데이터를 각각의 메모리 채널들(CH1, CH2,…, CHn)을 경유하여 플래시 메모리 장치(230, 240, 250)에 기입한다. 그리고 메모리 채널을 통하여 제공되는 플래시 메모리 장치(230, 240, 250)로부터의 읽기 데이터(Read data)는 플래시 인터페이스(217)에 의해서 취합된다. 취합된 데이터는 이후 버퍼 메모리(220)에 저장될 것이다.
이러한 구조의 스토리지 컨트롤러(210)는, 호스트(100)로부터의 제 1 도어벨 레지스터(213)에 기입된 도어벨 정보에 응답하여 호스트(100)의 제출 큐(123)에 기입된 명령어를 패치할 수 있다. 패치된 명령어(CMD)의 실행이 완료되면, 해당 명령어에 대한 실행 완료를 지시하는 완료 엔트리를 호스트(100)의 완료 큐(125)에 기입할 것이다. 더불어, 스토리지 컨트롤러(210)는 해당 완료 엔트리에 대한 인터럽트를 호스트(100)에서 관리되는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이를 참조하여 발생할 수 있다.
구체적으로, 스토리지 컨트롤러(210)는 호스트(100)의 완료 엔트리를 기입한 후에도, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)가 최초 불일치 시점에만 인터럽트를 발생할 수 있다. 그리고 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 기준치를 초과할 때 인터럽트를 발생할 수도 있다. 더불어, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치 시점으로부터 기준 시간이 경과한 후에 누적된 완료 큐들에 대한 인터럽트를 생성할 수 있다.
도 4는 도 3의 스토리지 컨트롤러의 호스트로의 인터럽트를 발생하는 방법의 예시를 간략히 보여주는 도면이다. 도 4를 참조하면, 호스트(100)에서 관리되는 복수의 완료 큐들(215a, 215b)에 대응하는 하나의 인터럽트 발생 방법이 간략히 도시되어 있다. 여기서, 호스트(100)는 제출 큐(SQ, 123)에 이미 명령어 엔트리를 입력한 이후로 가정한다. 그리고 스토리지 장치(200)는 명령어 엔트리를 패치하여 실행하고 완료 엔트리(Complete)를 호스트의 완료 큐들(215a, 215b)에 기입하는 단계에서 본 발명의 특징이 설명될 것이다.
스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어를 실행한 후에 완료 엔트리(CQ1_1)를 제 1 완료 큐(215a)에 기입할 것이다(①). 더불어, 스토리지 컨트롤러(210)는 패치된 다른 하나의 명령어를 실행한 후에 완료 엔트리(CQ2_1)를 제 2 완료 큐(215b)에 기입할 것이다(②). 이어서, 스토리지 컨트롤러(210)는 제 2 도어벨 레지스터(214)에 업데이트된 완료 큐의 헤드 포인터와 테일 포인터의 차이를 검출할 것이다. 만일, 완료 큐의 헤드 포인터(HP)와 테일 포인터(TP)의 차이가 최초 불일치인 경우나 누적된 완료 엔트리들의 수가 기준치 이상인 경우, 스토리지 컨트롤러(210)는 2개의 완료 엔트리들(CQ1_1, CQ2_1)에 대한 인터럽트(Int0)를 생성할 수 있다(④). 따라서, 하나의 인터럽트 신호(Single Interrupt)는 2개의 완료 엔트리들(CQ1_1, CQ2_1)에 대한 호스트의 처리를 가능케 한다(⑤). 완료 엔트리들(CQ1_1, CQ2_1)에 대한 호스트(100)의 처리가 완료되면, 호스트(100)는 완료 큐들(215a, 215b)에 대한 헤드 포인터(HP)의 업데이트 또는 해제를 알리기 위해 제 2 도어벨 레지스터(214)를 업데이트할 것이다(⑥).
이상에서는 하나의 인터럽트 벡터를 사용하여 복수의 완료 큐에 대한 인터럽트를 제공하는 방법이 설명되었다. 하지만, 하나의 인터럽트 전송을 통해서 목적에 따라 3개 이상의 완료 큐들에 대한 인터럽트 처리가 가능할 수도 있음은 잘 이해될 것이다.
도 5는 본 발명의 실시 예에 따른 스토리지 장치(200)의 인터럽트 발생 방법을 예시적으로 보여주는 타이밍도이다. 도 5를 참조하면, 스토리지 컨트롤러(210)는 호스트에서 패치한 명령어를 실행한 후에 호스트(100)의 완료 큐(125)에 완료 엔트리를 기입할 것이다. 그리고 본 발명의 실시 예에 따라 완료 큐의 테일 포인터와 헤드 포인터의 최초 불일치 시점에 인터럽트를 발생하게 될 것이다. 좀더 자세히 설명하면 다음과 같다.
스토리지 컨트롤러(210)는 호스트(100)로부터 패치한 명령어의 실행이 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C0)를 기입할 것이다. 완료 엔트리(C0)가 기입되면, 완료 큐(125)의 테일 포인터(PT)는 ‘N+1’로 증가하게 될 것이다. 하지만, 호스트(100)에 의한 완료 엔트리에 대한 처리 및 완료 엔트리의 처리에 의해 완료 큐(125)의 헤드 포인터(HP)의 증가는 존재하지 않는다. 따라서, 이 시점에 헤드 포인터(HP)는 ‘N’이 될 것이다. 결국, T0 시점은 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '1'이 되어 최초 불일치 시점으로 판단될 것이다. 따라서, 스토리지 컨트롤러(210)는 인터럽트(IR0)를 호스트(100)로 전송할 것이다. 이때, 인터럽트는 핀 기반의 신호일 수도 있고, 메시지 신호 기반의 인터럽트(Message Signaled Interrupt: 이하, MSI) 또는 MSI-X 방식으로 전송될 수 있을 것이다.
이어서, T1 시점에서 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어의 실행 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C1)를 기입할 것이다. 완료 엔트리(C1)가 기입되면, 완료 큐(125)의 테일 포인터는 ‘N+2’로 증가하게 될 것이다. 하지만, 호스트(100)에 의한 완료 엔트리(C1)에 대한 처리 및 완료 엔트리의 처리에 의해 완료 큐(125)의 헤드 포인터(HP)의 증가는 존재하지 않는다. 따라서, 이 시점에 헤드 포인터는 ‘N’이 될 것이다. 결국, 새로운 완료 엔트리(C1)이 기입된 시점 T1에서, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '2'가 된다. 하지만, 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 최초 불일치에 대응하는 '1'이 아니므로, 인터럽트는 발행은 보류될 것이다.
T2 시점에서 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어의 실행 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C2)를 기입할 것이다. 완료 엔트리(C2)가 기입되면, 완료 큐(125)의 테일 포인터는 ‘N+3’로 증가하게 될 것이다. 하지만, 호스트(100)에 의한 완료 엔트리에 대한 처리 및 완료 엔트리의 처리에 의해 완료 큐(125)의 헤드 포인터(HP)는 'N'으로 유지 될 것이다. 결국, 새로운 완료 엔트리(C2)이 기입된 시점 T2에서, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '3'이 된다. 하지만, 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 최초 불일치에 대응하는 '1'이 아니므로, 인터럽트는 발행되지 않을 것이다.
T3 시점에서 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어의 실행 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C3)를 기입할 것이다. 완료 엔트리(C3)가 기입되면, 완료 큐(125)의 테일 포인터 ‘N+4’로 증가하게 될 것이다. 하지만, 호스트(100)에 의한 완료 엔트리에 대한 처리 및 완료 엔트리의 처리에 의해 완료 큐(125)의 헤드 포인터(HP)는 'N'으로 유지되고, 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '4'가 된다. 하지만, 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 최초 불일치에 대응하는 '1'이 아니므로, 인터럽트는 발행되지 않을 것이다. 하지만, T3 시점을 경과해서, 완료 큐(125)의 테일 포인터(N+5)로 증가하게 된다. 따라서, T4 시점 이전에 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '0'으로 리셋될 것이다.
T4 시점에서 패치된 어느 하나의 명령어의 실행 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C4)가 기입될 것이다. 완료 엔트리(C4)가 기입되면, 완료 큐(125)의 테일 포인터는 ‘N+5’로 증가하게 될 것이다. 하지만, 이 시점에서 완료 큐(125)의 헤드 포인터(HP)는 'N+4'로 유지될 것이다. 결국, 완료 엔트리(C4)가 기입된 시점 T4에서, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '1'이 된다. 따라서, 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 최초 불일치에 해당하므로, 스토리지 컨트롤러(210)는 인터럽트(IR1)를 발행할 것이다.
이후 T5 시점 이후로도 동일한 조건에서 인터럽트가 발생하도록 제어될 수 있다. 이러한 방식으로 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 최초 불일치 시점에만 인터럽트가 생성될 수 있다. 이러한 방식의 인터럽트 생성을 통해서 호스트(100)의 인터럽트 발생에 따른 성능 저하를 감소시킬 수 있다.
도 6은 본 발명의 실시 예에 따른 스토리지 컨트롤러(210)의 인터럽트 발생 방법을 보여주는 순서도이다. 도 6을 참조하면, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치가 발생하는 시점에만 인터럽트를 생성할 것이다.
S110 단계에서, 스토리지 컨트롤러(210)는 호스트(100)에서 전송된 완료 큐의 헤드 포인터(HP) 도어벨을 참조하여 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 검출할 것이다. 테일 포인터(TP)는 이미 스토리지 컨트롤러(210)에 의해서 호스트(100)에 기입된 것이다. 따라서, 테일 포인터(TP)의 위치는 스토리지 컨트롤러(210)에서 인지하고 있는 정보이다. 반면, 완료 큐(125)를 기입하는 스토리지 컨트롤러(210)에서 완료 큐(125)의 헤드 포인터(HP)의 위치는 호스트(100)가 제공하는 도어벨 정보에 의존할 수밖에 없다. 완료 큐(125)를 소비하는 호스트(100)에 의해서 제공되는 헤드 포인터(HP)의 위치를 참조하여 스토리지 컨트롤러(210)는 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 검출할 것이다.
S120 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '0'인지 검출하고 그 결과에 따라 동작 분기를 수행한다. 만일, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '0'이라면 스토리지 컨트롤러(210)는 인터럽트를 발생하지 않고 S110 단계로 복귀할 것이다. 반면, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '0'이 아니라면, 절차는 S130 단계로 이동한다.
S130 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'인지 검출하고 그 결과에 따라 동작 분기를 수행한다. 만일, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'이 아니라면, 스토리지 컨트롤러(210)는 인터럽트를 발생하지 않고 S110 단계로 복귀할 것이다. 반면, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'이면, 절차는 S140 단계로 이동한다. 여기서, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'이 아닌 경우는, 처리되지 못한 완료 큐들의 수가 적어도 2개 이상이 누적되어 있음을 의미한다.
S140 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'이기 때문에 호스트(100)로 인터럽트를 전달한다. 이때, 인터럽트는 핀 기반의 신호일 수도 있고, 메시지 신호 기반의 인터럽트(Message Signaled Interrupt: 이하, MSI) 또는 MSI-X 방식으로 전송될 수 있을 것이다.
이상에서는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1', 즉, 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치가 검출된 시점에서만 호스트(100)로 인터럽트를 발생하는 실시 예가 설명되었다. 하지만, 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '2'일 때에만 인터럽트를 발생하거나, 특정 값에서만 인터럽트를 발생하도록 설정될 수 있음은 잘 이해될 것이다. 이러한 방식으로 인터럽트를 발생함에 따라, 호스트(100)가 누적된 인터럽트를 처리하기 위해서 부담하는 오버헤드를 줄일 수 있다.
도 7은 도 5의 인터럽트 발생 방법에 따른 호스트와 스토리지 장치의 호출 처리 과정을 간략히 보여주는 도면이다. 도 7을 참조하면, 스토리지 장치(200)에서 호스트(100)로부터 패치한 명령어를 처리한 이후에 완료 큐(125)에 완료 엔트리를 기입하는 것으로 시작한다.
먼저, 스토리지 장치(200)는 패치된 명령어의 실행을 완료하고, 이러한 상태를 호스트(100)의 완료 큐(125)에 완료 엔트리를 기입하는 것으로 통지한다. 이때, 호스트(100)의 링 버퍼(Ring Buffer)로 구성되는 완료 큐(125)의 테일 포인터(TP)가 증가하게 될 것이다.
완료 큐(125)의 기입에 따라 호스트(100)는 완료 큐(125)의 가장 최근의 헤드 포인터(HP)를 스토리지 장치(100)에 알려 줄 수 있다. 여기서, 완료 큐(125)의 가장 최근의 헤드 포인터(HP)가 제공되는 절차는 생략되어도 무방하다. 또는, 완료 큐(125)의 가장 최근의 헤드 포인터(HP)는 스토리지 장치(200)에 의한 완료 엔트리의 기입 이전에 제공될 수도 있음은 잘 이해될 것이다.
테일 포인터(TP)와 헤드 포인터(HP)의 정보를 참조하여 스토리지 장치(200)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이를 검출한다. 그리고 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 최초 불일치에 대응하는 '1'에 해당하는 경우에만 인터럽트를 발생하게 될 것이다.
도 8은 본 발명의 실시 예에 따른 스토리지 장치(200)의 인터럽트 발생 방법을 다른 예를 보여주는 타이밍도이다. 도 8를 참조하면, 스토리지 컨트롤러(210)는 호스트에서 패치한 명령어를 실행한 후에 호스트(100)의 완료 큐(125)에 완료 엔트리들(CO, C1, C2, …)을 기입할 것이다. 그리고 본 발명의 실시 예에 따라 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(TP)의 차이의 누적 카운트가 특정 값(Aggregation Threshold)에 도달할 때에만 인터럽트를 발생할 수 있다. 여기서, 완료 엔트리들(CO, C1, C2, …)이 기입되는 간격은 스토리지 장치(200)의 상태, 성능이나 패치된 명령어의 종류 등에 따라 가변적일 수 있음은 잘 이해될 것이다. 좀더 자세히 설명하면 다음과 같다.
스토리지 컨트롤러(210)는 호스트(100)로부터 패치한 명령어의 실행이 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C0)를 기입할 것이다. 완료 엔트리(C0)가 기입되면, 완료 큐(125)의 테일 포인터(TP)가 증가하게 될 것이다. 그리고 T0 시점에서 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'로 검출되어 최초 불일치 시점으로 판단될 것이다. 하지만, 스토리지 컨트롤러(210)는 이때에도 인터럽트를 발생하지 않고 대기한다. 즉, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '4'가 되는 시점 또는 누적 카운트가 '0'가 되는 시점에만 인터럽트가 발생되도록 스토리지 컨트롤러(210)가 설정되었기 때문이다. 이후, 호스트(100)로부터 완료 큐(125)의 헤드 포인터(HP) 도어벨이 기입되어 다시 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '0'으로 설정되고, 누적 카운트(Aggregation Count)는 '4'가 될 수 있다.
이어서, T1 시점에서 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어의 실행 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C1)를 기입할 것이다. 완료 엔트리(C1)가 기입되면, 완료 큐(125)의 테일 포인터가 증가하게 될 것이다. 더불어, T1 시점에서 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'로 검출되어 최초 불일치 시점으로 판단될 것이다. 하지만, 스토리지 컨트롤러(210)는 이때에도 인터럽트를 발생하지 않고 대기한다. 즉, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '4'가 되는 시점 또는 누적 카운트가 '0'가 되는 시점이 아니기 때문이다. 이후, 호스트(100)로부터 완료 큐(125)의 헤드 포인터(HP) 도어벨이 기입되어 다시 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '0'으로 설정되고, 누적 카운트(Aggregation Count)는 '4'가 될 수 있다.
T2 시점에서 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어가 실행 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C2)를 기입할 것이다. 완료 엔트리(C2)가 기입되면, 완료 큐(125)의 테일 포인터(TP)가 증가하게 될 것이다. T2 시점에서 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '1'로, 누적 카운트는 '3'으로 검출된다. 따라서, 스토리지 컨트롤러(210)는 이때에도 인터럽트를 발생하지 않고 대기한다.
T3 시점에서, 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어가 실행 완료되면, 완료 큐(125)에 완료 엔트리(C3)를 기입할 것이다. 완료 엔트리(C3)가 기입되면, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '2'로, 누적 카운트는 '2'으로 검출된다. 따라서, 스토리지 컨트롤러(210)는 이때에도 인터럽트를 발생하지 않고 대기한다.
T4 시점에서, 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어가 실행 완료되면, 완료 큐(125)에 완료 엔트리(C4)를 기입할 것이다. 완료 엔트리(C4)가 기입되면, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '3'으로, 누적 카운트는 '1'로 검출된다. 따라서, 스토리지 컨트롤러(210)는 이때에도 인터럽트를 발생하지 않고 대기한다.
T5 시점에서, 스토리지 컨트롤러(210)는 패치된 어느 하나의 명령어가 실행 완료되면, 완료 큐(125)에 완료 엔트리(C5)를 기입할 것이다. 완료 엔트리(C5)가 기입되면, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '4'로, 누적 카운트는 '0'로 검출된다. 이때에는 테일 포인터(TP)와 헤드 포인터(HP)의 누적 카운트가 '0'에 도달했기 때문에, 스토리지 컨트롤러(210)는 호스트(100)에 누적된 복수의 완료 큐들에 대응하는 인터럽트(IR0)를 발생할 것이다.
이상에서 설명된 방식에 따라, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 특정 값에 도달할 때에만 인터럽트를 발생할 수 있을 것이다. 즉, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 특정 누적 카운트에 도달하면 인터럽트를 발생할 수 있을 것이다. 이러한 방식의 인터럽트 생성을 통해서 호스트(100)의 인터럽트 누적에 따른 성능 저하를 감소시킬 수 있다.
도 9는 도 8의 실시 예를 수행하기 위한 스토리지 컨트롤러(210)의 인터럽트 발생 방법을 보여주는 순서도이다. 도 9를 참조하면, 스토리지 컨트롤러(210)는 완료 큐(125)에 누적된 완료 엔트리의 수가 기준치에 도달하면 인터럽트를 발행할 것이다.
S210 단계에서, 스토리지 컨트롤러(210)는 호스트(100)에서 전송된 완료 큐의 헤드 포인터(HP) 도어벨을 참조하여 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 검출할 것이다. 스토리지 컨트롤러(210)는 호스트(100)가 제공하는 도어벨 정보를 참조하여 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 계산할 수 있다.
S220 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)에 누적된 엔트리들의 수를 판단할 수 있다. 예를 들면, 스토리지 컨트롤러(210)는 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 누적 기준치에 도달했는지 판단할 수 있다. 여기서, 누적된 완료 엔트리들의 수가 누적 기준치에 도달했음을 판단하기 위한 파라미터로 누적 카운트(Aggregation Count)를 도입하기로 한다. 누적 카운트는 완료 큐(125)에 누적된 완료 엔트리들의 수가 기준치(TH)에 도달했는지를 나타내는 파라미터이다. 즉, 누적 카운트는 기준치(TH)에서 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 차감한 값에 해당한다. 즉, 누적 카운트는 TH-(TP-HP)로 계산될 수 있다. 하지만, 누적 카운트 이외에도 완료 큐(125)에 누적된 완료 엔트리들의 수가 기준치에 도달했는지를 판단하기 위한 다양한 판단 방법이 적용될 수 있음은 잘 이해될 것이다.
S230 단계에서, 스토리지 컨트롤러(210)는 누적 카운트가 '0'인지 판단한다. 누적 카운트가 '0'으로 검출되는 시점은 완료 큐(125)에 누적된 완료 엔트리들의 수가 기준치(TH)에 도달했음을 의미한다. 만일, 누적 카운트가 '0'이 아니라면(No 방향), 절차는 S210 단계로 복귀할 것이다. 반면, 누적 카운트가 '0'이라면(Yes 방향), 절차는 S240 단계로 이동할 것이다.
S240 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 기준치(TH)에 도달했기 때문에 호스트(100)로 인터럽트를 전달한다. 이때의 인터럽트 벡터는 복수의 완료 엔트리들에 대응하는 값으로 전달될 것이다. 인터럽트는 핀 기반의 신호일 수도 있고, 메시지 신호 기반의 인터럽트(Message Signaled Interrupt: 이하, MSI) 또는 MSI-X 방식으로 전송될 수 있을 것이다.
이상에서는 완료 큐(125)에 누적된 완료 엔트리들의 수가 기준치(TH)에 도달했는지에 따라 인터럽트의 발생 여부가 결정되는 실시 예가 설명되었다. 즉, 완료 큐(125)에 누적된 완료 엔트리들의 수가 기준치에 도달할 때에만 인터럽트가 발생하게 되고, 호스트(100)에 제공되는 인터럽트의 수가 획기적으로 감소할 수 있게 될 것이다.
도 10은 도 9의 인터럽트 발생 방법에 따른 호스트와 스토리지 장치의 호출 처리 과정을 간략히 보여주는 도면이다. 도 10을 참조하면, 스토리지 장치(200)에서 호스트(100)로부터 패치한 명령어를 처리한 이후에 완료 큐(125)에 완료 엔트리를 기입하는 것으로 시작한다.
먼저, 스토리지 장치(200)는 패치된 명령어의 실행을 완료하고, 이러한 상태를 호스트(100)의 완료 큐(125)에 기입할 것이다. 이때, 호스트(100)의 완료 큐(125)의 테일 포인터(TP)가 증가한다.
완료 큐(125)의 기입에 따라 호스트(100)는 완료 큐(125)의 가장 최근의 헤드 포인터(HP)를 스토리지 장치(100)에 알려 줄 수 있다. 여기서, 완료 큐(125)의 가장 최근의 헤드 포인터(HP)가 제공되는 절차는 생략되어도 무방하다. 또는, 완료 큐(125)의 가장 최근의 헤드 포인터(HP)는 스토리지 장치(200)에 의한 완료 엔트리의 기입 이전에 제공될 수도 있을 것이다.
스토리지 컨트롤러(210)는 호스트가 제공하는 완료 큐(125)의 헤드 포인터(HP) 정보를 참조하여 완료 큐(125)의 누적 카운트를 계산한다. 즉, 완료 큐(125)에서 릴리즈(Release)되지 못한 완료 엔트리들의 수가 기준치(TH)에 도달했는지 판단하게 된다. 이러한 판단을 위한 파라미터로 누적 카운트가 사용될 수 있다. 즉, 스토리지 컨트롤러(210)는 누적된 완료 엔트리들의 수가 기준치에 도달했는지를 나타내는 누적 카운트가 '0'인지를 판단할 것이다. 스토리지 컨트롤러(210)는 누적 카운트가 '0'이 아니라면 인터럽트를 생성하지 않을 것이다. 반면, 누적 카운트가 '0'이라면 누적된 복수의 완료 엔트리들에 관련된 하나의 인터럽트 벡터를 발행할 것이다.
도 11은 인터럽트 발생 방법의 몇몇 실시 예 중에 어느 하나를 보여주는 타이밍도이다. 도 11을 참조하면, 스토리지 컨트롤러(210)는 호스트에서 패치한 명령어들을 실행한 후에 호스트(100)의 완료 큐(125)에 완료 엔트리들(CO, C1, C2, …)를 기입할 것이다. 더불어, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치시 또는 완료 큐(125)에 누적된 완료 엔트리들의 수가 기준치(TH)에 도달한 시점에 인터럽트를 발행할 수 있다.
T0 시점에서, 스토리지 컨트롤러(210)는 호스트(100)로부터 패치한 명령어의 실행이 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C0)를 기입할 것이다. 그리고 스토리지 컨트롤러(210)는 본 발명의 기준에 따라 완료 엔트리(C0)에 대응하는 인터럽트를 발행할지 결정하게 될 것이다. T0 시점에서, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'로 검출되어 최초 불일치 시점으로 판단될 것이다. 더불어, 이 시점에서 기준치(TH=4)에 대응하는 누적 카운트는 '3'으로 계산된다. 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치 여부와, 누적 카운트의 논리합(OR) 조건에 따라, 스토리지 컨트롤러(210)는 누적 카운트의 크기에 관계없이 인터럽트(IR0)를 발행할 것이다.
완료 엔트리들(C1, C2)이 호스트의 완료 큐(125)에 각각 기입되는 시점들(T1, T2)에서도 누적 카운트 조건과 포인터들의 최초 불일치 여부의 논리합(OR) 조건에 따라 인터럽트들(IR1, IR2)이 발행될 것이다.
T3 시점에서, 스토리지 컨트롤러(210)는 호스트(100)로부터 패치한 명령어의 실행을 완료하고 완료 큐(125)에 완료 엔트리(C3)를 기입할 것이다. 그리고 스토리지 컨트롤러(210)는 완료 엔트리(C3)에 대응하는 인터럽트의 발행 여부를 판단할 것이다. 즉, 스토리지 컨트롤러(210)는 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치 여부와, 누적 카운트의 기준치 도달 여부를 각각 판단할 것이다. 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '2'이기 때문에 포인터들의 최초 불일치는 아닌 것으로 판단될 것이다. 더불어, 누적 카운트의 값이 '2'로 계산될 것이다. 따라서, 포인터들의 최초 불일치 여부 및 누적 카운트 조건이 모두 인터럽트를 발행하는 조건에 미치지 못한다. 따라서, 스토리지 컨트롤러(210)는 완료 엔트리(C3)에 대응하는 인터럽트를 발생하지 않고 대기한다.
T4 시점에서, 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '3'이기 때문에 포인터들의 최초 불일치는 아닌 것으로 판단될 것이다. 더불어, 누적 카운트의 값이 '1'로 계산될 것이다. 따라서, 포인터들의 최초 불일치 여부 및 누적 카운트 조건이 모두 인터럽트를 발행하는 조건에 미치지 못한다. 따라서, T4 시점에서도 완료 엔트리(C4)에 대응하는 인터럽트는 발행되지 않을 것이다.
T5 시점에서, 스토리지 컨트롤러(210)는 호스트(100)로부터 패치한 명령어 실행을 완료하고, 완료 큐(125)에 완료 엔트리(C5)를 기입할 것이다. 그리고 스토리지 컨트롤러(210)는 완료 엔트리(C5)에 대응하는 인터럽트의 발행 여부를 판단할 것이다. 스토리지 컨트롤러(210)는 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치 여부와, 누적 카운트의 기준치 도달 여부를 각각 판단할 것이다. 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '4'이기 때문에 포인터들의 최초 불일치 조건에는 해당하지 않는다. 하지만, 누적 카운트의 값이 '0'으로 계산될 것이다. 따라서, 누적 카운트 조건에 의해서 스토리지 컨트롤러(210)는 인터럽트(IR3)를 발행할 것이다.
T6 및 T7 시점에서도 앞서 설명된 방식에 따라 완료 엔트리들(C6, C7)에 대한 인터럽트들의 발행 여부가 결정될 수 있다. 따라서, 이들 시점에서의 스토리지 컨트롤러(210)의 동작에 대한 설명은 생략하기로 한다.
도 12는 도 11의 실시 예를 수행하는 스토리지 컨트롤러(210)의 인터럽트 발생 방법을 보여주는 순서도이다. 도 12를 참조하면, 스토리지 컨트롤러(210)는 완료 큐(125)에 누적된 완료 엔트리의 수 및 포인터들의 최초 불일치 여부에 따라 인터럽트를 발행할 수 있다.
S310 단계에서, 스토리지 컨트롤러(210)는 호스트(100)에서 전송된 완료 큐의 헤드 포인터(HP) 도어벨을 참조하여 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 검출할 것이다. 스토리지 컨트롤러(210)는 호스트(100)가 제공하는 도어벨 정보를 참조하여 완료 큐(125)의 포인터들의 차이(TP-HP)를 계산할 수 있다.
S320 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)에 누적된 엔트리들의 수를 계산할 수 있다. 예를 들면, 스토리지 컨트롤러(210)는 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 기준치에 도달했는지 판단할 수 있다. 스토리지 컨트롤러(210)는 기준치(TH)에서 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 차감한 값인 누적 카운트를 계산할 수 있다.
S330 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)의 포인터들이 최초 불일치(즉, TP-HP=1)인지 판단한다. 만일, 포인터들의 차이(TP-HP)가 '1'이 아니라면(No 방향), 절차는 S340 단계로 이동할 것이다. 반면, 포인터들의 차이(TP-HP)가 '1'이라면(Yes 방향), 절차는 인터럽트를 발생하기 위한 S350 단계로 이동할 것이다.
S340 단계에서, 스토리지 컨트롤러(210)는 누적 카운트가 '0'인지 판단한다. 누적 카운트가 '0'으로 검출되는 시점은 완료 큐(125)에 누적된 완료 엔트리들의 수가 기준치(TH)에 도달했음을 의미한다. 만일, 누적 카운트가 '0'이 아니라면(No 방향), 절차는 S310 단계로 복귀할 것이다. 반면, 누적 카운트가 '0'이라면(Yes 방향), 절차는 S350 단계로 이동할 것이다.
S350 단계에서, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 최초로 '1'이 되었거나 누적 카운트가 기준값에 일치하기 때문에 호스트(100)로 인터럽트 발행할 것이다. 이때의 인터럽트 벡터는 하나의 완료 엔트리 또는 복수의 완료 엔트리들에 대응하는 값으로 전달될 것이다.
이상에서는 완료 큐(125)의 포인터들이 최초로 불일치하는 조건 또는 누적된 완료 엔트리 수들이 기준치에 도달했는지의 조건에 따라 인터럽트의 발생 여부가 결정되는 실시 예가 설명되었다.
도 13은 도 11의 인터럽트 발생 방법에 따른 호스트와 스토리지 장치의 호출 처리 과정을 간략히 보여주는 도면이다. 도 13을 참조하면, 스토리지 장치(200)에서 호스트(100)로부터 패치한 명령어를 처리한 이후에 완료 큐(125)에 완료 엔트리를 기입하는 것으로 시작한다.
먼저, 스토리지 장치(200)는 패치된 명령어의 실행을 완료하고, 이러한 상태를 호스트(100)의 완료 큐(125)에 기입할 것이다. 이때, 호스트(100)의 완료 큐(125)의 테일 포인터(TP)가 증가한다.
완료 큐(125)의 기입에 따라 호스트(100)는 완료 큐(125)의 가장 최근의 헤드 포인터(HP)를 스토리지 장치(100)에 알려 줄 수 있다. 여기서, 완료 큐(125)의 가장 최근의 헤드 포인터(HP)가 제공되는 절차는 생략되어도 무방하다. 또는, 완료 큐(125)의 가장 최근의 헤드 포인터(HP)는 스토리지 장치(200)에 의한 완료 엔트리의 기입 이전에 제공될 수도 있을 것이다.
스토리지 컨트롤러(210)는 호스트가 제공하는 완료 큐(125)의 헤드 포인터(HP) 정보를 참조하여 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 계산할 것이다. 더불어, 스토리지 컨트롤러(210)는 기준치(TH)에서 테일 포인터(TP)와 헤드 포인터(HP)의 차이(TP-HP)를 차감한 값인 누적 카운트를 계산할 수 있다. 만일, 포인터들의 차이(TP-HP)가 '1'인 경우(Yes 방향), 스토리지 컨트롤러(210)는 누적 카운트값에 관계없이 인터럽트를 발행할 것이다. 반면, 포인터들의 차이(TP-HP)가 '1'이 아닌 경우(No 방향), 누적 카운트가 기준치에 도달했는지 판단할 것이다. 만일, 누적 카운트가 '0'인 경우라면, 스토리지 컨트롤러(210)는 인터럽트(Interrupt)를 발행할 것이다. 하지만, 누적 카운트가 '0'이 아니면, 스토리지 컨트롤러(210)는 인터럽트(Interrupt)의 발행을 보류할 것이다.
도 14는 본 발명의 실시 예에 따른 인터럽트 발생 방법을 보여주는 타이밍도이다. 도 14를 참조하면, 스토리지 컨트롤러(210)는 호스트에서 패치한 명령어들을 실행한 후에 호스트(100)의 완료 큐(125)에 완료 엔트리들(CO, C1, C2, …)를 기입할 것이다. 더불어, 스토리지 컨트롤러(210)는 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 최초 불일치시 또는 인터럽트의 발행후 기준 경과 시간(Tout)의 초과 여부에 따라 후속하는 인터럽트를 발행할 수 있다. 여기서, 완료 엔트리들(CO, C1, C2, …)이 기입되는 간격은 스토리지 장치(200)의 상태, 성능이나 패치된 명령어의 종류 등에 따라 가변적일 수 있음은 잘 이해될 것이다. 더불어, 기준 경과 시간(Tout)은 호스트(100)의 성능이나 상태, 또는 SSD(200)의 성능, 상태 등을 고려하여 결정될 수 있을 것이다.
T0 시점에서, 스토리지 컨트롤러(210)는 호스트(100)로부터 패치한 명령어의 실행이 완료되면, 호스트(100)의 완료 큐(125)에 완료 엔트리(C0)를 기입할 것이다. 그리고 스토리지 컨트롤러(210)는 본 발명의 기준에 따라 완료 엔트리(C0)에 대응하는 인터럽트를 발행할지 결정하게 될 것이다. T0 시점에서, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'로 검출되어 최초 불일치 시점으로 판단될 것이다. 따라서, 이 시점에서는 경과 시간에 관계없이 인터럽트(IR0)가 발행될 것이다.
T1 시점에서, 완료 엔트리(C1)가 호스트의 완료 큐(125)에 기입되고, 스토리지 컨트롤러(210)는 완료 큐(125)의 포인터들의 최초 불일치 여부, 그리고 인터럽트의 발행후 경과 시간이 모니터링될 것이다. 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'로 검출되어 최초 불일치 시점으로 판단될 수 있다. 더불어, 인터럽트(IR0)가 발행된 후 시간(ΔT1)만큼 경과된 시점으로 판단될 수 있다. 따라서, T1 시점에서는 포인터들의 차이가 인터럽트 발행 조건을 만족하므로, 경과 시간에 관계없이 인터럽트(IR1)가 발행될 것이다. T2 시점에서도 T1 시점과 동일한 인터럽트 발행 조건을 충족하므로 인터럽트(IR2)가 발행될 것이다.
하지만, T3 시점에서는 완료 엔트리(C3)의 기입에 따라, 스토리지 컨트롤러(210)는 완료 큐(125)의 포인터들의 최초 불일치 여부, 그리고 경과 시간이 모니터링될 것이다. 이때, 테일 포인터(TP)와 헤드 포인터(HP)의 차이는 '2'가 된다. 즉, 포인터들의 차이는 인터럽트 발행 조건을 충족하지 못한다. 더불어, 경과 시간도 인터럽트(IR2)가 발행된 후로 기준 경과 시간(Tout)만큼 경과하지 못했으므로 인터럽트 발행 조건을 충족하지 못한다. 따라서, 이 시점에서의 인터럽트의 발행은 유보된다.
T4 시점에서는, 포인터들의 차이가 '3'이고, 인터럽트(IR2)가 발행된 후로 기준 경과 시간(Tout)만큼 경과하지 못한 상태이다. 따라서, 인터럽트 발행 조건을 충족하지 못한다.
T5 시점에서는, 포인터들의 차이는 '4'이기 때문에 인터럽트 발행 조건을 충족하지 못한다. 하지만, T5 시점은 인터럽트(IR2)가 발행된 후로 기준 경과 시간(Tout)보다 긴 경과 시간(ΔT3)에 해당한다. 따라서, 스토리지 컨트롤러(210)는 인터럽트(IR3)를 발행할 것이다.
T6 시점에서는 경과 시간(ΔT4)은 인터럽트 발행 조건을 충족시키지 못하지만, 완료 큐(125)의 포인터들의 차이(TP-HP)가 '1'에 해당하기 때문에 인터럽트(IR4)가 발행될 것이다. 더불어, T7 시점에서는 경과 시간(ΔT5)은 인터럽트 발생 조건에 해당하지 못하나, 완료 큐(125)의 포인터들의 차이(TP-HP)가 '1'에 해당하기 때문에 인터럽트(IR5)가 발행될 것이다.
이상에서는 완료 큐(125)의 포인터들의 차이가 최초 불일치에 대응하는 값인지의 여부와, 인터럽트가 발행된 이후로 경과 시간을 고려하여 후속 인터럽트의 발행 여부가 결정될 수 있음이 설명되었다.
도 15는 본 발명의 실시 예에 따른 인터럽트 발생 방법을 보여주는 타이밍도이다. 도 15를 참조하면, 스토리지 컨트롤러(210)는 완료 큐(125)의 포인터들의 최초 불일치 여부, 누적 카운트, 그리고 인터럽트의 발행후 경과 시간들 중 적어도 하나를 참조하여 인터럽트를 발행할 수 있다. 여기서, 설명의 편의를 위해서 기준 경과 시간을 (Tout)으로 가정하기로 한다.
T0 시점에서, 스토리지 컨트롤러(210)는 완료 큐(125)에 완료 엔트리(C0)를 기입할 것이다. 그리고 스토리지 컨트롤러(210)는 본 발명의 기준에 따라 완료 엔트리(C0)에 대응하는 인터럽트를 발행할지 결정하게 될 것이다. T0 시점에서, 완료 큐(125)의 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '1'로 검출되어 최초 불일치 시점으로 판단될 것이다. 따라서, 이 시점에서는 경과 시간이나, 누적 카운트에 관계없이 인터럽트(IR0)가 발행될 것이다. T1 시점과 T2 시점에서도 T0 시점과 동일한 이유로 인터럽트들(IR1, IR2)이 각각 발행될 수 있을 것이다. 즉, T1 시점은 경과 시간(ΔT1)은 기준 경과 시간(Tout)보다 짧지만, 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '0'으로부터 '1'로 천이되므로 최초 불일치 시점이 된다. T2 시점도 경과 시간(ΔT2)은 기준 경과 시간(Tout)보다 짧지만, 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '0'으로부터 '1'로 천이되므로 최초 불일치 시점이 된다.
하지만, T3 시점에서는 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '2'이기 때문에, 포인터들은 최초 불일치에 해당하지 않는다. 그리고 T3 시점은 인터럽트(IR2)의 발행 이후의 경과 시간도 기준 경과 시간(Tout)보다 짧은 시점에 해당하기 때문에 경과 시간 요건도 충족하지 않는다. 그리고, T3 시점은 누적 카운트도 '2'이기 때문에 인터럽트 발생 요건을 충족하지 않는다. 따라서, T3 시점에서 스토리지 컨트롤러(210)는 인터럽트의 발행을 유보하게 될 것이다.
T4 시점에서는 테일 포인터(TP)와 헤드 포인터(HP)의 차이가 '3'이기 때문에, 포인터들은 최초 불일치에 해당하지 않는다. 그리고 T4 시점에서 누적 카운트도 '1'이기 때문에 인터럽트 발생 요건을 충족하지 않는다. 하지만, T4 시점은 인터럽트(IR2)의 발행 이후로 기준 경과 시간(Tout)보다 긴 ΔT3만큼 경과 되었기 때문에 경과 시간 요건을 충족한다. 따라서, T4 시점에서 스토리지 컨트롤러(210)는 인터럽트(IR3)를 발행할 것이다.
T5 시점에서는 누적 카운트 요건이 인터럽트 발행 요건을 충족한다. 따라서, 인터럽트(IR4)가 발행될 것이다. 그리고 T6 시점에서는 포인터들은 최초 불일치 요건을 충족하기 때문에 인터럽트(IR5)가 발행될 것이다. 더불어, T7 시점에서는 3가지 인터럽트 발행 요건들 중 포인터들은 최초 불일치 요건을 충족하기 때문에, 인터럽트(IR6)가 발행될 것이다.
이상에서는 완료 큐(125)의 포인터들의 차이가 최초 불일치에 대응하는 값인지의 여부, 누적 카운트, 그리고 인터럽트가 발행된 이후로 경과 시간 등과 같은 조건들 중 어느 하나를 충족하는 경우에 인터럽트가 발행되는 예가 설명되었다. 하지만, 본 발명은 여기에 국한되지 않음은 잘 이해될 것이다. 상술한 3가지 요건 또는 그 이상의 요건들에 대한 논리곱 조건이나 선택적 논리합이나 논리곱 조건이 적용될 수 있을 것이다.
도 16은 도 1에서 설명된 불휘발성 메모리의 구성을 예시적으로 보여주는 블록도이다. 예시적으로, 도 1의 불휘발성 메모리(230)가 이들 불휘발성 메모리들 각각의 기능이나 특징을 대표하여 설명될 것이다. 도 16을 참조하면, 불휘발성 메모리 장치(230)는 메모리 셀 어레이(231), 어드레스 디코더(232), 제어 로직 및 전압 발생 회로(235), 페이지 버퍼(233), 및 입출력 회로(234)를 포함한다.
메모리 셀 어레이(231)는 복수의 메모리 블록들을 포함할 수 있다. 복수의 메모리 블록들 각각은 복수의 셀 스트링들을 포함할 수 있다. 복수의 셀 스트링들 각각은 복수의 메모리 셀들을 포함한다. 복수의 메모리 셀들은 복수의 워드라인들(WL)과 연결될 수 있다. 복수의 메모리 셀들 각각은 1-비트를 저장하는 단일 레벨 셀(SLC; Single Level Cell) 또는 적어도 2-비트를 저장하는 멀티 레벨 셀(MLC; Multi Level Cell)을 포함할 수 있다.
어드레스 디코더(232)는 복수의 워드라인들(WL), 스트링 선택 라인들(SSL), 및 접지 선택 라인들(GSL)을 통해 메모리 셀 어레이(231)와 연결된다. 어드레스 디코더(232)는 외부 장치(예를 들어, 장치 컨트롤러(110))로부터 물리 어드레스(ADD)를 수신하고, 수신된 물리 어드레스(ADD)를 디코딩하여, 복수의 워드라인들(WL)을 구동할 수 있다. 예를 들어, 어드레스 디코더(232)는 외부 장치로부터 수신된 물리 어드레스(ADD)를 디코딩하고, 디코딩된 물리 어드레스(ADD)를 기반으로 복수의 워드라인들(WL) 중 적어도 하나의 워드라인을 선택하고, 선택된 적어도 하나의 워드라인을 구동할 수 있다.
제어 로직 및 전압 발생 회로(235)는 외부 장치로부터 스토리지 커맨드(CMD) 및 제어 신호(CTRL)를 수신하고, 수신된 신호들에 응답하여 어드레스 디코더(232), 페이지 버퍼(233), 및 입출력 회로(234)를 제어할 수 있다. 예를 들어, 제어 로직 및 전압 발생 회로(235)는 신호들(CMD, CTRL)에 응답하여 데이터(DATA)가 메모리 셀 어레이(231)에 저장되도록 다른 구성 요소들을 제어할 수 있다. 또는 제어 로직 및 전압 발생 회로(235)는 신호들(CMD, CTRL)에 응답하여 메모리 셀 어레이(231)에 저장된 데이터(DATA)가 외부 장치로 전송되도록 다른 구성 요소들을 제어할 수 있다.
페이지 버퍼(233)는 복수의 비트 라인들(BL)을 통해 메모리 셀 어레이(231)와 연결된다. 페이지 버퍼(233)는 제어 로직 및 전압 발생 회로(235)의 제어에 따라 입출력 회로(234)로부터 수신된 데이터(DATA)가 메모리 셀 어레이(231)에 저장되도록 비트 라인들(BL)을 제어할 수 있다. 페이지 버퍼(233)는 제어 로직 및 전압 발생 회로(235)의 제어에 따라 메모리 셀 어레이(231)에 저장된 데이터를 읽고, 읽은 데이터를 입출력 회로(234)로 전달할 수 있다. 예시적으로, 페이지 버퍼(233)는 입출력 회로(234)로부터 페이지 단위로 데이터를 수신하거나 또는 메모리 셀 어레이(231)로부터 페이지 단위로 데이터를 읽을 수 있다.
입출력 회로(234)는 외부 장치로부터 데이터(DATA)를 수신하고, 수신된 데이터(DATA)를 페이지 버퍼(233)로 전달할 수 있다. 또는 입출력 회로(234)는 페이지 버퍼(233)로부터 데이터(DATA)를 수신하고, 수신된 데이터(DATA)를 외부 장치로 전달할 수 있다. 예시적으로, 입출력 회로(234)는 제어 신호(CTRL)와 동기되어 외부 장치와 데이터(DATA)를 송수신할 수 있다.
제어 로직 및 전압 발생 회로(235)는 불휘발성 메모리(230)가 동작하는데 요구되는 다양한 전압들을 생성할 수 있다. 예를 들어, 제어 로직 및 전압 발생 회로(235)는 복수의 프로그램 전압들, 복수의 패스 전압들, 복수의 선택 읽기 전압들, 복수의 비선택 읽기 전압들, 복수의 소거 전압들, 복수의 검증 전압들과 같은 다양한 전압들을 생성할 수 있다. 제어 로직 및 전압 발생 회로(235)는 생성된 다양한 전압들을 어드레스 디코더(232)로 제공하거나 또는 메모리 셀 어레이(231)의 기판으로 제공할 수 있다.
도 17은 도 16의 메모리 셀 어레이에 포함된 메모리 블록들 중 제 1 메모리 블록의 예를 보여주는 회로도이다. 예시적으로, 도 17을 참조하여 3차원 구조의 제 1 메모리 블록(BLK1)이 설명된다. 그러나, 본 발명의 범위가 이에 한정되는 것은 아니며, 불휘발성 메모리(128) 각각에 포함된 다른 메모리 블록들 또한 제 1 메모리 블록(BLK1)과 유사한 구조를 가질 수 있다.
도 17을 참조하면, 제 1 메모리 블록(BLK1)은 복수의 셀 스트링들(CS11, CS12, CS21, CS22)을 포함한다. 복수의 셀 스트링들(CS11, CS12, CS21, CS22)은 행 방향(row direction) 및 열 방향(column direction)을 따라 배치되어 행들 및 열들을 형성할 수 있다.
예를 들어, 셀 스트링들(CS11, CS12)은 스트링 선택 라인들(SSL1a, SSL1b)와 연결되어, 제 1 행을 형성할 수 있다. 셀 스트링들(CS21, CS22)은 스트링 선택 라인들(SSL2a, SSL2b)와 연결되어 제 2 행을 형성할 수 있다.
예를 들어, 셀 스트링들(CS11, CS21)은 제 1 비트라인(BL1)과 연결되어 제 1 열을 형성할 수 있다. 셀 스트링들(CS12, CS22)은 제 2 비트라인(BL2)과 연결되어 제 2 열을 형성할 수 있다.
복수의 셀 스트링들(CS11, CS12, CS21, CS22) 각각은 복수의 셀 트랜지스터들을 포함한다. 예를 들어, 복수의 셀 스트링들(CS11, CS12, CS21, CS22) 각각은 스트링 선택된 트랜지스터들(SSTa, SSTb), 복수의 메모리 셀들(MC1~MC8), 접지 선택된 트랜지스터들(GSTa, GSTb), 및 더미 메모리 셀들(DMC1, DMC2)을 포함할 수 있다.
예시적으로, 복수의 셀 스트링들(CS11, CS12, CS21, CS22)에 포함된 복수의 셀 트랜지스터들 각각은 전하 트랩형 플래시(CTF; charge trap flash) 메모리 셀일 수 있다.
복수의 메모리 셀들(MC1~MC8)은 직렬 연결되며, 행 방향 및 열 방향에 의해 형성된 평명과 수직한 방향인 높이 방향(height direction)으로 적층된다. 스트링 선택된 트랜지스터들(SSTa, SSTb)은 직렬 연결되고, 직렬 연결된 스트링 선택된 트랜지스터들(SSTa, SSTb)은 복수의 메모리 셀들(MC1~MC8) 및 비트라인(BL) 사이에 제공된다. 접지 선택된 트랜지스터들(GSTa, GSTb)은 직렬 연결되고, 직렬 연결된 접지 선택된 트랜지스터들(GSTa, GSTb)은 복수의 메모리 셀들(MC1~MC8) 및 공통 소스 라인(CSL) 사이에 제공된다.
예시적으로, 복수의 메모리 셀들(MC1~MC8) 및 접지 선택된 트랜지스터들(GSTa, GSTb) 사이에 제 1 더미 메모리 셀(DMC1)이 제공될 수 있다. 예시적으로, 복수의 메모리 셀들(MC1~MC8) 및 스트링 선택된 트랜지스터들(SSTa, SSTb) 사이에 제 2 더미 메모리 셀(DMC2)이 제공될 수 있다.
셀 스트링들(CS11, CS12, CS21, CS22)의 접지 선택된 트랜지스터들(GSTa, GSTb)은 접지 선택 라인(GSL)에 공통으로 연결될 수 있다.
예시적으로, 동일한 행의 접지 선택된 트랜지스터들은 동일한 접지 선택 라인에 연결될 수 있고, 다른 행의 접지 선택된 트랜지스터들은 다른 접지 선택 라인에 연결될 수 있다. 예를 들어, 제 1 행의 셀 스트링들(CS11, CS12)의 제 1 접지 선택된 트랜지스터들(GSTa)은 제1 접지 선택 라인에 연결될 수 있고, 제2 행의 셀 스트링들(CS21, CS22)의 제 1 접지 선택된 트랜지스터들(GSTa)은 제 2 접지 선택 라인에 연결될 수 있다.
예시적으로, 도면에 도시되지는 않았으나, 기판(미도시)으로부터 동일한 높이에 제공되는 접지 선택된 트랜지터들은 동일한 접지 선택 라인에 연결될 수 있고, 다른 높이에 제공되는 접지 선택된 트랜지스터들은 다른 접지 선택 라인에 연결될 수 있다. 예를 들어, 셀 스트링들(CS11, CS12, CS21, CS22)의 제 1 접지 선택된 트랜지스터들(GSTa)은 제 1 접지 선택 라인에 연결되고, 제 2 접지 선택 트랜지스터들(GSTb)은 제 2 접지 선택 라인에 연결될 수 있다.
기판(또는 접지 선택된 트랜지스터(GSTa, GSTb)으로부터 동일한 높이의 메모리 셀들은 동일한 워드라인에 공통으로 연결되고, 서로 다른 높이의 메모리 셀들은 서로 다른 워드라인에 연결된다. 예를 들어, 셀 스트링들(CS11, CS12, CS21, CS22)의 제 1 내지 제 8 메모리 셀들(MC8)은 제 1 내지 제 8 워드라인들(WL1~WL8)에 각각 공통으로 연결된다.
동일한 높이의 제 1 스트링 선택된 트랜지스터들(SSTa) 중 동일한 행의 스트링 선택된 트랜지스터들은 동일한 스트링 선택 라인과 연결되고, 다른 행의 스트링 선택된 트랜지스터들은 다른 스트링 선택 라인과 연결된다. 예를 들어, 제 1 행의 셀 스트링들(CS11, CS12)의 제 1 스트링 선택된 트랜지스터들(SSTa)은 스트링 선택 라인(SSL1a)과 공통으로 연결되고, 제 2 행의 셀 스트링들(CS21, CS22)의 제 1 스트링 선택된 트랜지스터들(SSTa)은 스트링 선택 라인(SSL1a)과 공통으로 연결된다.
마찬가지로, 동일한 높이의 제 2 스트링 선택된 트랜지스터들(SSTb) 중 동일한 행의 스트링 선택된 트랜지스터들은 동일한 스트링 선택 라인과 연결되고, 다른 행의 스트링 선택된 트랜지스터들은 다른 스트링 선택 라인과 연결된다. 예를 들어, 제 1 행의 셀 스트링들(CS11, CS12)의 제 2 스트링 선택된 트랜지스터들(SSTb)은 스트링 선택 라인(SSL1b)과 공통으로 연결되고, 제 2 행의 셀 스트링들(CS21, CS22)의 제 2 스트링 선택된 트랜지스터들(SSTb)은 스트링 선택 라인(SSL2b)과 공통으로 연결된다.
비록 도면에 도시되지는 않았으나, 동일한 행의 셀 스트링들의 스트링 선택된 트랜지스터들은 동일한 스트링 선택 라인에 공통으로 연결될 수 있다. 예를 들어, 제 1 행의 셀 스트링들(CS11, CS12)의 제 1 및 제 2 스트링 선택된 트랜지스터들(SSTa, SSTb)은 동일한 스트링 선택 라인에 공통으로 연결될 수 있다. 제 2 행의 셀 스트링들(CS21, CS22)의 제 1 및 제 2 스트링 선택된 트랜지스터들(SSTa, SSTb)은 동일한 스트링 선택 라인에 공통으로 연결될 수 있다.
예시적으로, 동일한 높이의 더미 메모리 셀들은 동일한 더미 워드라인과 연결되고, 다른 높이의 더미 메모리 셀들은 다른 더미 워드라인과 연결된다. 예를 들어, 제 1 더미 메모리 셀들(DMC1)은 제 1 더미 워드라인(DWL1)과 연결되고, 제 2 더미 메모리 셀들(DMC2)은 제 2 더미 워드라인(DWL2)과 연결된다.
제 1 메모리 블록(BLK1)에서, 읽기 및 쓰기는 행 단위로 수행될 수 있다. 예를 들어, 스트링 선택 라인들(SSL1a, SSL1b, SSL2a, SSL2b)에 의해 메모리 블록(BLKa)의 하나의 행이 선택될 수 있다.
예를 들어, 스트링 선택 라인들(SSL1a, SSL1b)이 턴-온 전압이 공급되고 스트링 선택 라인들(SSL2a, SSL2b)에 턴-오프 전압이 공급될 때, 제 1 행의 셀 스트링들(CS11, CS12)이 비트 라인들(BL1, BL2)에 연결된다. 스트링 선택 라인들(SSL2a, SSL2b)에 턴-온 전압이 공급되고 스트링 선택 라인들(SSL1a, SSL1B)에 턴-오프 전압이 공급될 때, 제 2 행의 셀 스트링들(CS21, CS22)이 비트 라인들(BL1, BL2)에 연결되어 구동된다. 워드라인을 구동함으로써 구동되는 행의 셀 스트링의 메모리 셀들 중 동일한 높이의 메모리 셀들이 선택된다. 선택된 메모리 셀들에서 읽기 및 쓰기 동작이 수행될 수 있다. 선택된 메모리 셀들은 물리 페이지 단위를 형성할 수 있다.
제 1 메모리 블록(BLK1)에서, 소거는 메모리 블록 단위 또는 서브 블록의 단위로 수행될 수 있다. 메모리 블록 단위로 소거가 수행될 때, 제 1 메모리 블록(BLK1)의 모든 메모리 셀들(MC)이 하나의 소거 요청에 따라 동시에 소거될 수 있다. 서브 블록의 단위로 수행될 때, 제1 메모리 블록(BLK1)의 메모리 셀들(MC) 중 일부는 하나의 소거 요청에 따라 동시에 소거되고, 나머지 일부는 소거 금지될 수 있다. 소거되는 메모리 셀들에 연결된 워드 라인에 저전압(예를 들어, 접지 전압)이 공급되고, 소거 금지된 메모리 셀들에 연결된 워드 라인은 플로팅될 수 있다.
도 17에 도시된 제 1 메모리 블록(BLK1)은 예시적인 것이며, 셀 스트링들의 개수는 증가 또는 감소할 수 있으며, 셀 스트링들의 개수에 따라 셀 스트링들이 구성하는 행들 및 열들의 개수는 증가 또는 감소할 수 있다. 또한, 제 1 메모리 블록(BLK1)의 셀 트랜지스터들(GST, MC, DMC, SST 등)의 개수들는 각각 증가 또는 감소될 수 있으며, 셀 트랜지스터들의 개수들에 따라 제 1 메모리 블록(BLK1)의 높이가 증가 또는 감소할 수 있다. 또한, 셀 트랜지스터들의 개수들에 따라 셀 트랜지스터들과 연결된 라인들(GSL, WL, DWL, SSL 등)의 개수들이 증가 또는 감소될 수 있다.
도 18은 본 발명의 실시 예들에 따른 불휘발성 메모리 시스템이 적용된 메모리 카드 시스템을 보여주는 블록도이다. 도 18을 참조하면, 메모리 카드 시스템(1000)은 컨트롤러(1100), 불휘발성 메모리(1200), 및 커넥터(1300)를 포함한다.
컨트롤러(1100)는 불휘발성 메모리(1200)와 연결된다. 컨트롤러(1100)는 불휘발성 메모리(1200)를 액세스하도록 구성된다. 예를 들어, 컨트롤러(1200)는 불휘발성 메모리(1100)의 읽기, 쓰기, 소거, 그리고 배경(background) 동작을 제어하도록 구성된다. 배경(background) 동작은 마모도 관리, 가비지 콜렉션 등과 같은 동작들을 포함한다. 예시적으로, 컨트롤러(1100)는 도 1 내지 도 15를 참조하여 설명된 방법을 기반으로 인터럽트를 생성할 수 있다.
컨트롤러(1200)는 불휘발성 메모리(1100) 및 호스트(Host) 사이에 인터페이스를 제공하도록 구성된다. 컨트롤러(1200)는 불휘발성 메모리(1100)를 제어하기 위한 펌웨어(firmware)를 구동하도록 구성된다. 예시적으로, 컨트롤러(1100)는 램(RAM, Random Access Memory), 프로세싱 유닛(processing unit), 호스트 인터페이스(host interface), 메모리 인터페이스(memory interface), 에러 정정부와 같은 구성 요소들을 포함할 수 있다.
컨트롤러(1100)는 커넥터(1300)를 통해 외부 장치와 통신할 수 있다. 컨트롤러(1100)는 특정한 통신 규격에 따라 외부 장치(예를 들어, 호스트)와 통신할 수 있다. 예시적으로, 컨트롤러(1200)는 USB (Universal Serial Bus), MMC (multimedia card), eMMC(embedded MMC), PCI (peripheral component interconnection), PCI-E (PCI-express), ATA (Advanced Technology Attachment), Serial-ATA, Parallel-ATA, SCSI (small computer small interface), ESDI (enhanced small disk interface), IDE (Integrated Drive Electronics), 파이어와이어(Firewire), UFS(Universal Flash Storage), NVMe (Nonvolatile Memory express) 등과 같은 다양한 통신 규격들 중 적어도 하나를 통해 외부 장치와 통신하도록 구성된다. 예시적으로, 상술된 통신 규격들에 의해 정의된 쓰기 커맨드는 쓰기 데이터의 사이즈 정보를 포함할 수 있다.
불휘발성 메모리(1200)는 EPROM (Electrically Erasable and Programmable ROM), 낸드 플래시 메모리, 노어 플래시 메모리, PRAM (Phase-change RAM), ReRAM (Resistive RAM), FRAM (Ferroelectric RAM), STT-MRAM(Spin-Torque Magnetic RAM) 등과 같은 다양한 불휘발성 메모리 소자들로 구현될 수 있다.
예시적으로, 컨트롤러(1100) 및 불휘발성 메모리(1200)는 하나의 반도체 장치로 집적될 수 있다. 예시적으로, 컨트롤러(1200) 및 불휘발성 메모리(1100)는 하나의 반도체 장치로 집적되어 솔리드 스테이트 드라이브(SSD, Solid State Drive)를 구성할 수 있다. 컨트롤러(1100) 및 불휘발성 메모리(1100)는 하나의 반도체 장치로 집적되어, 메모리 카드를 구성할 수 있다. 예를 들면, 컨트롤러(1100) 및 불휘발성 메모리(1200)는 하나의 반도체 장치로 집적되어 PC 카드(PCMCIA, personal computer memory card international association), 컴팩트 플래시 카드(CF), 스마트 미디어 카드(SM, SMC), 메모리 스틱, 멀티미디어 카드(MMC, RS-MMC, MMCmicro, eMMC), SD 카드(SD, miniSD, microSD, SDHC), 유니버설 플래시 기억장치(UFS) 등과 같은 메모리 카드를 구성할 수 있다.
도 19는 본 발명에 따른 불휘발성 메모리 시스템이 적용된 SSD(Solid State Drive) 시스템을 예시적으로 보여주는 블록도이다. 도 19를 참조하면, SSD 시스템(2000)은 호스트(2100) 및 SSD(2200)를 포함한다. SSD(2200)는 신호 커넥터(2001)를 통해 호스트(2100)와 신호(SIG)를 주고 받고, 전원 커넥터(2002)를 통해 전원(PWR)을 입력받는다. SSD(2200)는 SSD 컨트롤러(2210), 복수의 플래시 메모리들(2221~222n), 보조 전원 장치(2230), 및 버퍼 메모리(2240)를 포함한다.
SSD 컨트롤러(2210)는 호스트(2100)로부터 수신된 신호(SIG)에 응답하여 복수의 플래시 메모리들(2221~222n)을 제어할 수 있다. 예시적으로, SSD 컨트롤러(2210)는 도 1 내지 도 15를 참조하여 설명된 방법을 기반으로 인터럽트를 생성할 수 있다.
보조 전원 장치(2230)는 전원 커넥터(2002)를 통해 호스트(2100)와 연결된다. 보조 전원 장치(2230)는 호스트(2100)로부터 전원(PWR)을 입력받고, 충전할 수 있다. 보조 전원 장치(2230)는 호스트(2100)로부터의 전원 공급이 원활하지 않을 경우, SSD 시스템(2000)의 전원을 제공할 수 있다. 예시적으로, 보조 전원 장치(2230)는 SSD(2200) 내에 위치할 수도 있고, SSD(2200) 밖에 위치할 수도 있다. 예를 들면, 보조 전원 장치(2230)는 메인 보드에 위치하며, SSD(2200)에 보조 전원을 제공할 수도 있다.
버퍼 메모리(2240)는 SSD(2200)의 버퍼 메모리로 동작한다. 예를 들어, 버퍼 메모리(2240)는 호스트(2100)로부터 수신된 데이터 또는 복수의 플래시 메모리들(2221~222n)로부터 수신된 데이터를 임시 저장하거나, 플래시 메모리들(2221~222n)의 메타 데이터(예를 들어, 매핑 테이블)를 임시 저장할 수 있다. 버퍼 메모리(2240)는 DRAM, SDRAM, DDR SDRAM, LPDDR SDRAM, SRAM 등과 같은 휘발성 메모리 또는 FRAM ReRAM, STT-MRAM, PRAM 등과 같은 불휘발성 메모리들을 포함할 수 있다.
도 20은 본 발명에 따른 불휘발성 메모리 시스템이 적용된 사용자 시스템을 보여주는 블록도이다. 도 20을 참조하면, 사용자 시스템(3000)은 애플리케이션 프로세서(3100), 메모리 모듈(3200), 네트워크 모듈(3300), 스토리지 모듈(3400), 및 사용자 인터페이스(3500)를 포함한다.
애플리케이션 프로세서(3100)는 사용자 시스템(3000)에 포함된 구성 요소들, 운영체제(OS; Operating System)를 구동시킬 수 있다. 예시적으로, 애플리케이션 프로세서(3100)는 사용자 시스템(3000)에 포함된 구성 요소들을 제어하는 컨트롤러들, 인터페이스들, 그래픽 엔진 등을 포함할 수 있다. 애플리케이션 프로세서(3100)는 시스템-온-칩(SoC; System-on-Chip)으로 제공될 수 있다.
메모리 모듈(3200)은 사용자 시스템(3000)의 주메모리, 동작 메모리, 버퍼 메모리 또는 캐쉬 메모리로 동작할 수 있다. 메모리 모듈(3200)은 DRAM, SDRAM, DDR SDRAM, DDR2 SDRAM, DDR3 SDRAM, LPDDR SDARM, LPDDR3 SDRAM, LPDDR3 SDRAM 등과 같은 휘발성 랜덤 액세스 메모리 또는 PRAM, ReRAM, MRAM, FRAM 등과 같은 불휘발성 랜덤 액세스 메모리를 포함할 수 있다.
네트워크 모듈(3300)은 외부 장치들과 통신을 수행할 수 있다. 예시적으로, 네트워크 모듈(3300)은 CDMA(Code Division Multiple Access), GSM(Global System for Mobile communication), WCDMA(wideband CDMA), CDMA-2000, TDMA(Time Dvision Multiple Access), LTE(Long Term Evolution), Wimax, WLAN, UWB, 블루투스, WI-DI 등과 같은 무선 통신을 지원할 수 있다. 예시적으로, 네트워크 모듈(3300)은 애플리케이션 프로세서(3100)에 포함될 수 있다.
스토리지 모듈(3400)은 데이터를 저장할 수 있다. 예를 들어, 스토리지 모듈(3400)은 애플리케이션 프로세서(3100)로부터 수신한 데이터를 저장할 수 있다. 또는 스토리지 모듈(3400)은 스토리지 모듈(3400)에 저장된 데이터를 애플리케이션 프로세서(3100)로 전송할 수 있다. 예시적으로, 스토리지 모듈(3400)은 PRAM(Phase-change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), NAND flash, NOR flash, 3차원 구조의 NAND 플래시 등과 같은 불휘발성 반도체 메모리 소자로 구현될 수 있다.
예시적으로, 스토리지 모듈(3400)은 도 1 내지 도 15를 참조하여 설명된 방식에 따라 인터럽트를 생성할 수 있다. 스토리지 모듈(3400)은 애플리케이션 프로세서(3100)와 미리 정해진 인터페이스를 기반으로 통신할 수 있다. 스토리지 모듈(3400)은 애플리케이션 프로세서(3100)로부터 수신한 쓰기 커맨드를 기반으로 가비지 콜렉션의 수행 시간을 조절할 수 있다.
사용자 인터페이스(3500)는 애플리케이션 프로세서(3100)에 데이터 또는 명령어를 입력하거나 또는 외부 장치로 데이터를 출력하는 인터페이스들을 포함할 수 있다. 예시적으로, 사용자 인터페이스(3500)는 키보드, 키패드, 버튼, 터치 패널, 터치 스크린, 터치 패드, 터치 볼, 카메라, 마이크, 자이로스코프 센서, 진동 센서, 압전 소자 등과 같은 사용자 입력 인터페이스들을 포함할 수 있다. 사용자 인터페이스(3500)는 LCD (Liquid Crystal Display), OLED (Organic Light Emitting Diode) 표시 장치, AMOLED (Active Matrix OLED) 표시 장치, LED, 스피커, 모터 등과 같은 사용자 출력 인터페이스들을 포함할 수 있다.
본 발명에 따른 메모리 카드, 불휘발성 메모리 장치, 카드 컨트롤러는 다양한 형태들의 패키지를 이용하여 실장될 수 있다. 예를 들면, 본 발명에 따른 플래시 메모리 장치 그리고/또는 메모리 컨트롤러는 PoP(Package on Package), Ball grid arrays(BGAs), Chip scale packages(CSPs), Plastic Leaded Chip Carrier(PLCC), Plastic Dual In-Line Package(PDIP), Die in Waffle Pack, Die in Wafer Form, Chip On Board(COB), Ceramic Dual In-Line Package(CERDIP), Plastic Metric Quad Flat Pack(MQFP), Thin Quad Flatpack(TQFP), Small Outline(SOIC), Shrink Small Outline Package(SSOP), Thin Small Outline(TSOP), System In Package(SIP), Multi Chip Package(MCP), Wafer-level Fabricated Package(WFP), Wafer-Level Processed Stack Package(WSP), 등과 같은 패키지들을 이용하여 실장 될 수 있다.
이상에서와 같이 도면과 명세서에서 실시 예가 개시되었다. 여기서 특정한 용어들이 사용되었으나, 이는 단지 본 발명을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허 청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서 본 발명의 진정한 기술적 보호 범위는 첨부된 특허 청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (20)

  1. 스토리지 장치의 인터럽트 발생 방법에 있어서:
    호스트로부터 제공된 명령어를 실행하는 단계;
    상기 명령어에 대한 실행의 완료에 응답하여 상기 호스트의 완료 큐에 완료 엔트리를 기입하는 단계; 그리고
    상기 완료 엔트리에 대응하는 인터럽트의 발행 여부를 결정하는 단계를 포함하되,
    상기 결정하는 단계에서 상기 인터럽트의 발행 여부는, 상기 완료 큐에서 테일 포인터와 헤드 포인터의 차이가 특정값에 대응하는지를 나타내는 제 1 기준, 그리고 상기 완료 큐에 누적된 엔트리들의 크기가 기준치에 도달했는지를 나타내는 제 2 기준, 또는 이전의 인터럽트 발행 시점으로부터의 경과 시간이 기준 시간을 초과했는지를 나타내는 제 3 기준들 중 적어도 하나에 의거하여 결정되는 인터럽트 발생 방법.
  2. 제 1 항에 있어서,
    상기 헤드 포인터를 상기 호스트로부터 수신하는 단계를 더 포함하는 인터럽트 발생 방법.
  3. 제 2 항에 있어서,
    상기 수신된 헤드 포인터와 상기 스토리지 장치에서 관리하는 테일 포인터의 인덱스를 참조하여 상기 테일 포인터와 상기 헤드 포인터의 차이를 계산하는 단계를 더 포함하는 인터럽트 발생 방법.
  4. 제 2 항에 있어서,
    상기 특정값은 상기 헤드 포인터와 상기 테일 포인터가 최초로 불일치하는 태그값 또는 상기 헤드 포인터와 상기 테일 포인터 각각의 인덱스값의 차이가 '1'에 대응하는 인터럽트 발생 방법.
  5. 제 1 항에 있어서,
    상기 결정하는 단계에서 상기 제 1 기준, 상기 제 2 기준, 그리고 상기 제 3 기준들 중 어느 하나의 기준을 충족하면 상기 인터럽트가 발행되는 인터럽트 발생 방법.
  6. 제 1 항에 있어서,
    상기 스토리지 장치는 솔리드 스테이트 드라이버인 인터럽트 발생 방법.
  7. 제 1 항에 있어서,
    상기 스토리지 장치는 3차원 메모리 어레이를 포함하는 불휘발성 메모리 장치를 포함하는 인터럽트 발생 방법.
  8. 제 1 항에 있어서,
    상기 스토리지 장치는 상기 호스트와 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI) 인터페이스 방식들 중 적어도 하나에 따라 통신하는 인터럽트 발생 방법.
  9. 불휘발성 메모리 장치; 그리고
    상기 불휘발성 메모리 장치를 제어하며, 호스트로부터의 명령어를 실행하고 상기 명령어에 대한 완료 엔트리를 상기 호스트로 전달하고, 상기 완료 엔트리에 대응하는 인터럽트를 상기 호스트로 발행하는 스토리지 컨트롤러를 포함하되,
    상기 스토리지 컨트롤러는 상기 완료 엔트리가 저장되는 상기 호스트의 완료 큐의 테일 포인터와 헤드 포인터의 차이값, 상기 완료 큐에 저장된 완료 엔트리들의 누적값, 또는 이전 인터럽트가 발행된 시점으로부터의 경과 시간 중 적어도 하나를 기준으로 상기 인터럽트를 발행하는 스토리지 장치.
  10. 제 9 항에 있어서,
    상기 스토리지 컨트롤러는, 상기 호스트로부터 상기 헤드 포인터를 수신하고, 상기 인터럽트를 상기 호스트로 전달하기 위한 호스트 인터페이스를 포함하는 스토리지 장치.
  11. 제 10 항에 있어서,
    상기 호스트 인터페이스는:
    상기 호스트로부터 제공된 헤드 포인터를 저장하는 도어벨 레지스터; 및
    상기 차이값, 상기 누적값, 그리고 상기 경과 시간 중 적어도 하나에 의해서 결정된 상기 발행될 인터럽트를 지정하는 인터럽트 테이블을 포함하는 스토리지 장치.
  12. 제 11 항에 있어서,
    상기 스토리지 컨트롤러는 상기 도어벨 레지스터에 저장된 헤드 포인터를 참조하여 상기 차이값 또는 상기 누적값을 계산하는 스토리지 장치.
  13. 제 10 항에 있어서,
    상기 호스트 인터페이스는 상기 호스트와 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCI express, ATA, PATA(Parallel ATA), SATA(Serial ATA), SAS(Serial Attached SCSI), NVMe 인터페이스 방식들 중 적어도 하나의 프로토콜에 따라 상기 호스트와 통신하는 스토리지 장치.
  14. 제 9 항에 있어서,
    상기 불휘발성 메모리 장치는 3차원 메모리 어레이를 포함하는 스토리지 장치.
  15. 솔리드 스테이트 드라이브(SSD)의 인터럽트 발행 방법에 있어서;
    호스트의 완료 큐에 완료 엔트리를 기입하는 단계;
    상기 완료 엔트리에 대응하는 인터럽트의 발행 여부를 상기 완료 큐에 누적된 완료 엔트리들의 수에 따라 또는 이전의 인터럽트의 발행 시점으로부터의 경과 시간이 기준 시간을 초과했는지에 따라 결정하는 단계; 그리고
    상기 결정된 인터럽트의 발행 여부에 따라 상기 호스트로 인터럽트를 전달하는 단계를 포함하는 인터럽트 발행 방법.
  16. 제 15 항에 있어서,
    상기 솔리드 스테이트 드라이버는 상기 누적된 완료 엔트리들의 수가 기준치에 도달할 때까지 상기 인터럽트의 발행을 보류하는 인터럽트 발행 방법.
  17. 제 15 항에 있어서,
    상기 솔리드 스테이트 드라이버는 상기 누적된 완료 엔트리들의 수가 테일 포인터와 헤드 포인트의 최초 불일치를 나타내는 '1'일때 상기 인터럽트를 발행하는 인터럽트 발행 방법.
  18. 제 15 항에 있어서,
    상기 솔리드 스테이트 드라이버는 상기 호스트와 통신하기 위한 NVMe 프로토콜 방식의 인터페이스를 포함하는 인터럽트 발행 방법.
  19. 제 15 항에 있어서,
    상기 호스트의 완료 큐에 완료 엔트리를 기입하기 전에 호스트에서 패치된 명령어를 실행하는 단계를 더 포함하는 인터럽트 발행 방법.
  20. 제 19 항에 있어서,
    상기 호스트로부터 상기 완료 큐의 테일 포인터의 위치를 제공받는 단계를 더 포함하는 인터럽트 발행 방법.
KR1020150129396A 2015-09-14 2015-09-14 스토리지 장치 및 그것의 인터럽트 발생 방법 KR20170032502A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020150129396A KR20170032502A (ko) 2015-09-14 2015-09-14 스토리지 장치 및 그것의 인터럽트 발생 방법
CN201610664071.0A CN106528461A (zh) 2015-09-14 2016-08-12 储存设备及其中断生成方法
CN202110198634.2A CN112948292B (zh) 2015-09-14 2016-08-12 储存设备及其中断生成方法
US15/265,090 US20170075834A1 (en) 2015-09-14 2016-09-14 Storage device and interrupt generation method thereof
US17/071,411 US11561914B2 (en) 2015-09-14 2020-10-15 Storage device and interrupt generation method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150129396A KR20170032502A (ko) 2015-09-14 2015-09-14 스토리지 장치 및 그것의 인터럽트 발생 방법

Publications (1)

Publication Number Publication Date
KR20170032502A true KR20170032502A (ko) 2017-03-23

Family

ID=58238828

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150129396A KR20170032502A (ko) 2015-09-14 2015-09-14 스토리지 장치 및 그것의 인터럽트 발생 방법

Country Status (3)

Country Link
US (2) US20170075834A1 (ko)
KR (1) KR20170032502A (ko)
CN (2) CN106528461A (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190064083A (ko) * 2017-11-30 2019-06-10 삼성전자주식회사 스토리지 장치 및 스토리지 장치를 포함하는 전자 장치
KR20190073055A (ko) * 2017-12-18 2019-06-26 삼성전자주식회사 스토리지 컨트롤러, 그것을 포함하는 스토리지 장치, 및 스토리지 컨트롤러의 동작 방법
KR20190131012A (ko) * 2017-03-24 2019-11-25 웨스턴 디지털 테크놀로지스, 인코포레이티드 제어기 메모리 버퍼를 사용한 적응적 조기 완료 포스팅을 위한 시스템 및 방법
US11169709B2 (en) 2017-03-24 2021-11-09 Western Digital Technologies, Inc. System and method for adaptive command fetch aggregation
US11567773B2 (en) 2019-07-11 2023-01-31 SK Hynix Inc. Memory controller and memory system for generating instruction set based on non-interleaving block group information

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170032502A (ko) 2015-09-14 2017-03-23 삼성전자주식회사 스토리지 장치 및 그것의 인터럽트 발생 방법
US10146439B2 (en) * 2016-04-13 2018-12-04 Samsung Electronics Co., Ltd. System and method for high performance lockless scalable target
KR20180045103A (ko) * 2016-10-24 2018-05-04 삼성전자주식회사 적응형 인터럽트를 생성하는 데이터 저장 장치 및 그것의 동작 방법
US10466903B2 (en) * 2017-03-24 2019-11-05 Western Digital Technologies, Inc. System and method for dynamic and adaptive interrupt coalescing
DE112018000230T5 (de) * 2017-03-24 2019-09-05 Western Digital Technologies, Inc System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers
CN107273198B (zh) * 2017-06-16 2018-12-18 北京得瑞领新科技有限公司 一种ssd控制芯片的中断控制方法、装置及ssd设备
KR102340287B1 (ko) * 2017-09-20 2021-12-20 삼성전자주식회사 멀티캐스트 통신 프로토콜에 따라 호스트와 통신하는 저장 장치 및 호스트의 통신 방법
KR102395477B1 (ko) 2017-11-20 2022-05-09 삼성전자주식회사 호스트 메모리에 대한 메모리 액세스를 스케쥴링하는 장치 컨트롤러, 및 이를 포함하는 저장 장치
KR102504660B1 (ko) 2018-02-05 2023-03-02 삼성전자주식회사 응용 프로세서, 전장 프로세서, 그리고 응용 프로세서를 포함하는 컴퓨팅 장치
US11669267B2 (en) * 2018-02-09 2023-06-06 Western Digital Technologies, Inc. Completion entry throttling using host memory
KR102560251B1 (ko) 2018-06-20 2023-07-26 삼성전자주식회사 반도체 장치 및 반도체 시스템
US10635355B1 (en) * 2018-11-13 2020-04-28 Western Digital Technologies, Inc. Bandwidth limiting in solid state drives
CN110659122A (zh) * 2019-07-31 2020-01-07 杭州阿姆科技有限公司 一种ssd中断实现方法及装置
US11138108B2 (en) * 2019-08-22 2021-10-05 Micron Technology, Inc. Logical-to-physical map synchronization in a memory device
EP3842952B1 (en) 2019-12-23 2023-05-10 Samsung Electronics Co., Ltd. Storage controller managing completion timing, and operating method thereof
KR20210080761A (ko) * 2019-12-23 2021-07-01 삼성전자주식회사 컴플리션 타이밍을 관리하는 스토리지 컨트롤러, 및 이의 동작 방법
WO2022021372A1 (zh) * 2020-07-31 2022-02-03 华为技术有限公司 一种处理器、ufs控制方法及计算机系统
JP2022050757A (ja) 2020-09-18 2022-03-31 キオクシア株式会社 メモリシステム
CN114048156B (zh) * 2021-10-28 2024-05-03 山东云海国创云计算装备产业创新中心有限公司 一种多通道多映射中断控制器
CN115098733B (zh) * 2022-06-10 2023-04-07 深圳市移文科技有限公司 一种移动终端数据读取方法、装置及移动终端

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088740A (en) * 1997-08-05 2000-07-11 Adaptec, Inc. Command queuing system for a hardware accelerated command interpreter engine
US6055579A (en) * 1997-11-17 2000-04-25 Silicon Graphics, Inc. Distributed control and synchronization of multiple data processors using flexible command queues
US6145061A (en) * 1998-01-07 2000-11-07 Tandem Computers Incorporated Method of management of a circular queue for asynchronous access
US6065089A (en) * 1998-06-25 2000-05-16 Lsi Logic Corporation Method and apparatus for coalescing I/O interrupts that efficiently balances performance and latency
US6363438B1 (en) * 1999-02-03 2002-03-26 Sun Microsystems, Inc. Method of controlling DMA command buffer for holding sequence of DMA commands with head and tail pointers
US7277447B2 (en) * 2001-03-30 2007-10-02 Redback Networks Inc. Onboard RAM based FIFO with pointers to buffer overhead bytes of synchronous payload envelopes in synchronous optical networks
US6918116B2 (en) * 2001-05-15 2005-07-12 Hewlett-Packard Development Company, L.P. Method and apparatus for reconfiguring thread scheduling using a thread scheduler function unit
US6895460B2 (en) * 2002-07-19 2005-05-17 Hewlett-Packard Development Company, L.P. Synchronization of asynchronous emulated interrupts
US20060184949A1 (en) * 2005-02-15 2006-08-17 International Business Machines Corporation Methods, systems, and storage mediums for timing work requests and completion processing
CN100419723C (zh) * 2005-12-30 2008-09-17 北京中星微电子有限公司 多中断的缓存装置和方法
US20080091868A1 (en) 2006-10-17 2008-04-17 Shay Mizrachi Method and System for Delayed Completion Coalescing
KR101226685B1 (ko) 2007-11-08 2013-01-25 삼성전자주식회사 수직형 반도체 소자 및 그 제조 방법.
KR100924549B1 (ko) * 2007-11-14 2009-11-02 주식회사 하이닉스반도체 반도체 소자 및 그의 제조방법
KR101486987B1 (ko) * 2008-05-21 2015-01-30 삼성전자주식회사 불휘발성 메모리를 포함하는 반도체 메모리 장치 및 불휘발성 메모리를 위한 커맨드 스케줄링 방법
US8032680B2 (en) 2008-06-27 2011-10-04 Microsoft Corporation Lazy handling of end of interrupt messages in a virtualized environment
JP5018814B2 (ja) * 2009-03-18 2012-09-05 富士ゼロックス株式会社 割り込み制御装置及び画像形成装置
US9063561B2 (en) 2009-05-06 2015-06-23 Avago Technologies General Ip (Singapore) Pte. Ltd. Direct memory access for loopback transfers in a media controller architecture
US8244946B2 (en) 2009-10-16 2012-08-14 Brocade Communications Systems, Inc. Interrupt moderation
KR101691092B1 (ko) 2010-08-26 2016-12-30 삼성전자주식회사 불휘발성 메모리 장치, 그것의 동작 방법, 그리고 그것을 포함하는 메모리 시스템
US8553466B2 (en) 2010-03-04 2013-10-08 Samsung Electronics Co., Ltd. Non-volatile memory device, erasing method thereof, and memory system including the same
US9536970B2 (en) 2010-03-26 2017-01-03 Samsung Electronics Co., Ltd. Three-dimensional semiconductor memory devices and methods of fabricating the same
KR101682666B1 (ko) 2010-08-11 2016-12-07 삼성전자주식회사 비휘발성 메모리 장치, 그것의 채널 부스팅 방법, 그것의 프로그램 방법 및 그것을 포함하는 메모리 시스템
US8588228B1 (en) * 2010-08-16 2013-11-19 Pmc-Sierra Us, Inc. Nonvolatile memory controller with host controller interface for retrieving and dispatching nonvolatile memory commands in a distributed manner
US9141571B2 (en) 2010-12-28 2015-09-22 Avago Technologies General Ip (Singapore) Pte. Ltd. PCI express switch with logical device capability
US9311137B2 (en) * 2012-09-28 2016-04-12 International Business Machines Corporation Delaying interrupts for a transactional-execution facility
CN103778009A (zh) * 2012-10-18 2014-05-07 深圳市中兴微电子技术有限公司 中断处理方法及装置
US8924605B2 (en) 2012-11-21 2014-12-30 Mellanox Technologies Ltd. Efficient delivery of completion notifications
US9122515B2 (en) * 2012-12-19 2015-09-01 Dell Products L.P. Completion notification for a storage device
US8935453B2 (en) 2013-03-15 2015-01-13 Intel Corporation Completion combining to improve effective link bandwidth by disposing at end of two-end link a matching engine for outstanding non-posted transactions
US9684613B2 (en) 2013-05-15 2017-06-20 Seagate Technology Llc Methods and systems for reducing spurious interrupts in a data storage system
CN104166598A (zh) * 2013-05-16 2014-11-26 鸿富锦精密工业(深圳)有限公司 电子设备及其中断保护方法
US9378162B2 (en) * 2013-05-21 2016-06-28 Arm Limited Handling and routing interrupts to virtual processors
CN104111870B (zh) * 2014-07-08 2017-05-24 福建星网锐捷网络有限公司 一种中断处理装置及中断处理方法
KR102238652B1 (ko) * 2014-11-12 2021-04-09 삼성전자주식회사 데이터 저장 장치, 이의 작동 방법, 및 이를 포함하는 데이터 처리 시스템의 작동 방법
KR20170032502A (ko) 2015-09-14 2017-03-23 삼성전자주식회사 스토리지 장치 및 그것의 인터럽트 발생 방법

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190131012A (ko) * 2017-03-24 2019-11-25 웨스턴 디지털 테크놀로지스, 인코포레이티드 제어기 메모리 버퍼를 사용한 적응적 조기 완료 포스팅을 위한 시스템 및 방법
US10817182B2 (en) 2017-03-24 2020-10-27 Western Digital Technologies, Inc. System and method for adaptive early completion posting using controller memory buffer
US11169709B2 (en) 2017-03-24 2021-11-09 Western Digital Technologies, Inc. System and method for adaptive command fetch aggregation
US11487434B2 (en) 2017-03-24 2022-11-01 Western Digital Technologies, Inc. Data storage device and method for adaptive command completion posting
US11635898B2 (en) 2017-03-24 2023-04-25 Western Digital Technologies, Inc. System and method for adaptive command fetch aggregation
KR20190064083A (ko) * 2017-11-30 2019-06-10 삼성전자주식회사 스토리지 장치 및 스토리지 장치를 포함하는 전자 장치
KR20190073055A (ko) * 2017-12-18 2019-06-26 삼성전자주식회사 스토리지 컨트롤러, 그것을 포함하는 스토리지 장치, 및 스토리지 컨트롤러의 동작 방법
US11940862B2 (en) 2017-12-18 2024-03-26 Samsung Electronics Co., Ltd. Storage controller, storage device including the same, and operation method of storage controller
US11567773B2 (en) 2019-07-11 2023-01-31 SK Hynix Inc. Memory controller and memory system for generating instruction set based on non-interleaving block group information

Also Published As

Publication number Publication date
US20210049120A1 (en) 2021-02-18
CN112948292A (zh) 2021-06-11
CN106528461A (zh) 2017-03-22
US20170075834A1 (en) 2017-03-16
US11561914B2 (en) 2023-01-24
CN112948292B (zh) 2024-06-18

Similar Documents

Publication Publication Date Title
US11561914B2 (en) Storage device and interrupt generation method thereof
KR102549611B1 (ko) 스토리지 장치 및 그것의 이벤트 통지 방법
KR102450555B1 (ko) 스토리지 장치 및 그것의 동작 방법
US10304539B2 (en) Method of performing a write operation based on an idle time
KR101730991B1 (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
KR102569783B1 (ko) 비순차적 구역 네임스페이스들
KR102576625B1 (ko) 스토리지 장치 및 그것의 디버깅 방법
TWI678618B (zh) 快閃記憶裝置的命名空間操作方法及裝置
US11334248B2 (en) Storage device and method of changing between memory blocks of different bits based on delay of migration request
US11264086B2 (en) Memory controller and operating method thereof
KR102079939B1 (ko) 데이터 저장 장치 및 그것의 명령어 스케줄링 방법
US11210226B2 (en) Data storage device and method for first processing core to determine that second processing core has completed loading portion of logical-to-physical mapping table thereof
KR102435863B1 (ko) 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법
KR102222444B1 (ko) 전력 상태 정보를 사용하는 저장 장치 및 그것의 동작 방법
TW202026891A (zh) 閃存的資料寫入方法及電腦程式產品
KR20210081088A (ko) 메모리 컨트롤러를 포함하는 스토리지 장치
KR20180053027A (ko) 스토리지 장치 및 그 동작 방법
CN110895449A (zh) 用于在存储器系统中管理有效数据的装置和方法
KR20170001235A (ko) 메모리 시스템 및 그것의 동작 방법
US20160132251A1 (en) Operating method of storage device and data writing method for writing data into storage device
KR20160144577A (ko) 불휘발성 메모리 모듈 및 그것의 포함하는 사용자 장치
US11775211B2 (en) Memory controller and method of operating the same
KR20210085499A (ko) 저장 장치 및 그 동작 방법
US11941294B2 (en) Memory controller for controlling suspension of operation and method of operating the same
US20220180946A1 (en) Memory controller and operating method thereof