[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

KR102553878B1 - Non-volatile memory-based storage device, and device controller and method thereof - Google Patents

Non-volatile memory-based storage device, and device controller and method thereof Download PDF

Info

Publication number
KR102553878B1
KR102553878B1 KR1020220054905A KR20220054905A KR102553878B1 KR 102553878 B1 KR102553878 B1 KR 102553878B1 KR 1020220054905 A KR1020220054905 A KR 1020220054905A KR 20220054905 A KR20220054905 A KR 20220054905A KR 102553878 B1 KR102553878 B1 KR 102553878B1
Authority
KR
South Korea
Prior art keywords
command
queue
resource
instruction
executable
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
KR1020220054905A
Other languages
Korean (ko)
Other versions
KR20230077609A (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 CN202211349754.9A priority Critical patent/CN116166415A/en
Priority to US17/983,458 priority patent/US12271628B2/en
Priority to EP22206564.1A priority patent/EP4187364A1/en
Publication of KR20230077609A publication Critical patent/KR20230077609A/en
Application granted granted Critical
Publication of KR102553878B1 publication Critical patent/KR102553878B1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System (AREA)

Abstract

비휘발성 메모리를 포함하는 저장 장치의 장치 컨트롤러가 제출 큐로부터 명령을 피크하며, 장치 리소스의 상태에 기초해서 피크한 명령이 실행 가능한지를 판단할 수 있다. 장치 컨트롤러는 명령이 실행 가능하다는 판단에 응답하여 명령을 페치하고, 페치한 명령에 장치 리소스를 할당하고 실행할 수 있다.A device controller of a storage device including non-volatile memory may pick a command from a submit queue and determine whether the peaked command is executable based on a state of device resources. The device controller may fetch the command in response to determining that the command is executable, allocate device resources to the fetched command, and execute it.

Figure R1020220054905
Figure R1020220054905

Description

비휘발성 메모리 기반의 저장 장치, 장치 컨트롤러 및 방법{NON-VOLATILE MEMORY-BASED STORAGE DEVICE, AND DEVICE CONTROLLER AND METHOD THEREOF}Non-volatile memory based storage device, device controller and method

개시 내용은 비휘발성 메모리 기반의 저장 장치, 장치 컨트롤러 및 방법에 관한 것이다.The disclosure relates to a non-volatile memory based storage device, device controller and method.

솔리드 스테이트 드라이브(solid-state drive, SSD)와 같은 비휘발성 메모리 기반 저장 장치의 리소스 풀에는 읽기 리소스와 쓰기 리소스가 별도로 존재할 수 있다. 읽기 리소스와 쓰기 리소스는 각각 특정 유형의 입출력(input/output, I/O)를 처리하는데 사용될 수 있다. 또한 리소스 풀은 모든 유형의 I/O가 공유하는 공유 리소스를 포함할 수 있다.Read resources and write resources may separately exist in a resource pool of a non-volatile memory-based storage device such as a solid-state drive (SSD). Read and write resources can each be used to process a specific type of input/output (I/O). Resource pools can also contain shared resources shared by all types of I/O.

공유 리소스가 모두 사용되면, 공유 리소스를 다시 사용할 수 있을 때까지 저장 장치는 모든 I/O 유형의 명령 처리를 일시적으로 중지한다. 특히, 저장 장치가 많은 수의 쓰기 명령을 페치하면, 거의 모든 공유 리소스가 쓰기 명령에 의해 점유될 수 있다. 대제적으로 쓰기 명령을 처리하는데 시간이 오래 걸리므로, 공유 리소스가 더 오래 점유될 수 있다. 따라서, 읽기 명령이 읽기 리소스를 사용할 수 있지만, 공유 리소스가 모두 소진되어 저장 장치가 읽기 명령을 처리할 수 없을 수 있다. 또한, 쓰기 리소스가 소진된 경우에 저장 장치가 쓰기 명령을 가지고 오는 경우, 쓰기 리소스가 사용 가능할 때까지 저장 장치는 공유 리소스를 차단할 수 있다. 그러면 저장 장치가 읽기 명령을 가지고 오더라도 읽기 명령을 처리할 수 없을 수 있다. 이와 같이, 일부 리소스의 소진에 의해 다른 명령이 대기하고 대기 명령은 명령 처리 파이프라인에 병목 현상을 일으킬 수 있으므로, 명령의 대기 시간이 늘어나서 명령 처리 효율성이 저하될 수 있다.When the shared resources are exhausted, the storage device temporarily suspends command processing of all I/O types until the shared resources are available again. In particular, if the storage device fetches a large number of write commands, almost all of the shared resources may be occupied by the write commands. Typically, processing write commands takes longer, so shared resources can be occupied longer. Therefore, the read command may use the read resource, but the storage device may not be able to process the read command because the shared resource is exhausted. Also, if the storage device brings a write command when the write resource is exhausted, the storage device may block the shared resource until the write resource is available. Then, even if the storage device comes with a read command, it may not be able to process the read command. In this way, other commands wait due to exhaustion of some resources, and the wait command may cause a bottleneck in the command processing pipeline, so command waiting time may increase and command processing efficiency may decrease.

어떤 실시예는 명령 처리 효율성을 높일 수 있는 비휘발성 메모리 기반 저장 장치, 그 장치 컨트롤러 또는 방법을 제공할 수 있다.Certain embodiments may provide a non-volatile memory-based storage device capable of increasing command processing efficiency, a device controller or method thereof.

한 실시예에 따르면, 비휘발성 메모리를 포함하는 저장 장치의 장치 컨트롤러가 제공될 수 있다. 상기 장치 컨트롤러는 장치 리소스, 명령 페치 로직, 명령 전처리 로직 및 명령 처리 로직을 포함할 수 있다. 상기 명령 페치 로직은 복수의 제출 큐 중에서 제1 제출 큐로부터 제1 명령을 피크하며, 상기 제1 명령이 실행 가능하다는 판단에 응답하여 상기 제1 명령을 페치할 수 있다. 상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 상기 명령 페치 로직에서 피크한 상기 제1 명령이 실행 가능한지를 판단할 수 있다. 상기 명령 처리 로직은 상기 제1 명령이 실행 가능하다는 판단에 응답하여, 상기 명령 페치 로직에서 페치한 상기 제1 명령에 상기 장치 리소스를 할당하고 상기 제1 명령을 실행할 수 있다.According to one embodiment, a device controller of a storage device including a non-volatile memory may be provided. The device controller may include device resources, command fetch logic, command preprocessing logic, and command processing logic. The command fetch logic may pick a first command from a first submit queue among a plurality of submission queues, and fetch the first command in response to determining that the first command is executable. The command preprocessing logic may determine whether the first command peaked in the command fetch logic is executable based on the state of the device resource. The command processing logic may allocate the device resource to the first command fetched by the command fetch logic and execute the first command in response to determining that the first command is executable.

어떤 실시예에서, 상기 명령 페치 로직은 상기 제1 명령의 피크 시에 상기 제1 제출 큐의 헤드 포인터를 이동하지 않고, 상기 제1 제출 큐의 상기 헤드 포인터를 이동하여 상기 제1 명령을 페치할 수 있다.In some embodiments, the instruction fetch logic may move the head pointer of the first submit queue to fetch the first instruction at the peak of the first instruction, without moving the head pointer of the first submit queue. can

어떤 실시예에서, 상기 명령 페치 로직은 상기 복수의 제출 큐 중 제2 제출 큐로부터 제2 명령을 피크할 수 있다. 상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 상기 제2 명령이 실행 가능한지를 판단하고, 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여 상기 제2 제출 큐를 상기 장치 리소스를 대기하는 대기 상태로 지정할 수 있다.In some embodiments, the command fetch logic may pick a second command from a second submit queue of the plurality of submit queues. The command pre-processing logic determines whether the second command is executable based on the state of the device resource, and in response to determining that the second command is not executable, sets the second submit queue to wait for the device resource. status can be specified.

어떤 실시예에서, 상기 명령 페치 로직은 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여 상기 제2 명령을 페치하지 않고 드롭할 수 있다.In some embodiments, the instruction fetch logic may drop the second instruction rather than fetch it in response to determining that the second instruction is not executable.

어떤 실시예에서, 상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 상기 대기 상태로 지정된 상기 제2 제출 큐가 처리 가능한지를 판단할 수 있다. 상기 제2 제출 큐가 처리 가능하다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제2 제출 큐로부터 상기 제2 명령을 피크하고, 상기 명령 전처리 로직은 상기 제2 명령이 실행 가능한지를 판단할 수 있다.In some embodiments, the command pre-processing logic may determine whether the second submission queue designated as the waiting state is available for processing based on a state of the device resource. In response to determining that the second submit queue is processable, the command fetch logic may pick the second command from the second submit queue, and the command preprocessing logic may determine whether the second command is executable. .

어떤 실시예에서, 상기 명령 전처리 로직은, 상기 장치 리소스 중에서 상기 제2 명령이 대기하는 리소스가 사용 가능한 경우, 상기 제2 제출 큐가 처리 가능하다고 판단할 수 있다.In some embodiments, the command pre-processing logic may determine that the second submission queue is processable when a resource in which the second command waits is available among the device resources.

어떤 실시예에서, 상기 명령 전처리 로직은 상기 제2 제출 큐를 상기 복수의 제출 큐 중 나머지 제출 큐에 비해 우선해서 처리할 수 있다.In some embodiments, the command pre-processing logic may preferentially process the second submission queue over the other submission queues of the plurality of submission queues.

어떤 실시예에서, 상기 장치 컨트롤러는 펜딩 명령 큐를 더 포함할 수 있다. 상기 명령 페치 로직은 상기 제1 제출 큐로부터 상기 제1 명령과 제2 명령을 피크할 수 있다. 상기 명령 전처리 로직의 상기 제1 명령이 실행 가능하고 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제1 명령과 상기 제2 명령을 페치하고, 상기 명령 전처리 로직은 상기 제2 명령을 상기 펜딩 명령 큐에 저장할 수 있다.In some embodiments, the device controller may further include a pending command queue. The command fetch logic may pick the first command and the second command from the first submit queue. In response to the instruction pre-processing logic determining that the first instruction is executable and the second instruction not executable, the instruction fetch logic fetches the first instruction and the second instruction, wherein the instruction pre-processing logic The second command may be stored in the pending command queue.

어떤 실시예에서, 상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 상기 펜딩 명령 큐에 저장된 제3 명령이 실행 가능한지를 판단할 수 있다. 상기 펜딩 명령 큐의 상기 제3 명령이 실행 가능하다는 판단에 응답하여, 상기 명령 처리 로직은 상기 펜딩 명령 큐의 상기 제3 명령을 실행할 수 있다.In some embodiments, the command preprocessing logic may determine whether a third command stored in the pending command queue is executable based on a state of the device resource. In response to determining that the third command in the pending command queue is executable, the command processing logic may execute the third command in the pending command queue.

어떤 실시예에서, 상기 명령 전처리 로직은 상기 펜딩 명령 큐를 상기 복수의 제출 큐에 비해 우선해서 처리할 수 있다.In some embodiments, the command pre-processing logic may preferentially process the pending command queue over the plurality of submit queues.

어떤 실시예에서, 상기 명령 페치 로직은 상기 제1 제출 큐로부터 상기 제1 명령과 제2 명령을 피크할 수 있다. 상기 명령 전처리 로직의 상기 제1 명령이 실행 가능하고 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제1 제출 큐에서 상기 제1 명령을 페치하고, 상기 제2 명령을 제1 제출 큐에서 패킹할 수 있다. In some embodiments, the command fetch logic may pick the first command and the second command from the first submit queue. In response to the command preprocessing logic determining that the first command is executable and the second command is not executable, the command fetch logic fetches the first command from the first submit queue, and the second command can be packed in the first submission queue.

어떤 실시예에서, 상기 명령 페치 로직은 상기 제1 제출 큐의 헤드 포인터를 상기 제1 명령의 수만큼 이동하고, 상기 헤드 포인터가 이동된 엔트리부터 상기 제2 명령을 패킹할 수 있다.In some embodiments, the instruction fetch logic may move a head pointer of the first submit queue by the number of the first instructions, and may pack the second instructions from an entry to which the head pointer is moved.

어떤 실시예에서, 상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 패킹된 상기 제1 제출 큐가 처리 가능한지를 판단할 수 있다. 상기 제1 제출 큐가 처리 가능하다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제1 제출 큐로부터 상기 제2 명령을 피크하고, 상기 명령 전처리 로직은 상기 제2 명령이 실행 가능한지를 판단할 수 있다.In some embodiments, the command pre-processing logic may determine whether the packed first submit queue is processable based on a state of the device resource. In response to determining that the first submit queue is processable, the command fetch logic may pick the second command from the first submit queue, and the command preprocessing logic may determine whether the second command is executable. .

어떤 실시예에서, 상기 명령 전처리 로직은 상기 제1 제출 큐를 상기 복수의 제출 큐 중 나머지 제출 큐에 비해 우선해서 처리할 수 있다.In some embodiments, the command pre-processing logic may preferentially process the first submission queue over the rest of the plurality of submission queues.

어떤 실시예에서, 상기 명령 전처리 로직은 상기 장치 리소스 중에서 상기 제1 명령을 실행하기 위한 리소스가 사용 가능한 경우 상기 제1 명령이 실행 가능하다고 판단하고, 상기 제1 명령을 페치할 수 있다.In some embodiments, the command preprocessing logic may determine that the first command is executable when a resource for executing the first command is available among the device resources, and may fetch the first command.

어떤 실시예에서, 상기 장치 리소스는 읽기 명령에 전용인 읽기 리소스, 쓰기 명령에 전용인 쓰기 리소스 및 상기 읽기 명령과 상기 쓰기 명령이 공유하는 공유 리소스를 포함할 수 있다. 상기 명령 전처리 로직은 상기 읽기 리소스와 상기 쓰기 리소스 중 상기 제1 명령의 입출력 유형에 해당하는 리소스와 상기 공유 리소스가 사용 가능한 경우, 상기 제1 명령을 실행하기 위한 리소스가 사용 가능하다고 판단하고, 상기 제1 명령을 페치할 수 있다.In some embodiments, the device resource may include a read resource dedicated to a read command, a write resource dedicated to a write command, and a shared resource shared by the read command and the write command. The command pre-processing logic determines that a resource for executing the first command is available when a resource corresponding to the input/output type of the first command and the shared resource among the read resource and the write resource are available, The first instruction can be fetched.

어떤 실시예에서, 상기 장치 리소스는 상기 제1 명령을 실행하는데 사용되는 복수의 유형의 리소스를 포함할 수 있다. 상기 명령 전처리 로직은 상기 복수의 유형의 리소스 중 일부 유형의 리소스가 사용 가능하지 않은 경우, 상기 제1 명령을 실행하기 위한 리소스가 사용 가능하지 않다고 판단할 수 있다.In some embodiments, the device resource may include multiple types of resources used to execute the first instruction. The command pre-processing logic may determine that a resource for executing the first command is not available when some type of resource among the plurality of types of resources is not available.

어떤 실시예에서, 상기 명령 전처리 로직은 상기 장치 리소스 중에서 상기 제1 명령을 실행하기 위한 리소스가 사용 가능하지 않은 경우, 상기 제1 명령에 상기 장치 리소스를 할당하지 않을 수 있다.In some embodiments, the command preprocessing logic may not allocate a device resource to the first command if a resource for executing the first command is not available among the device resources.

다른 실시예에 따르면, 비휘발성 메모리 및 장치 컨트롤러를 포함하는 저장 장치가 제공될 수 있다. 상기 장치 컨트롤러는 상기 비휘발성 메모리로의 액세스를 제어하며, 제1 제출 큐로부터 상기 제1 제출 큐의 헤드 포인터의 이동 없이 제1 명령을 가져오고, 장치 리소스의 상태에 기초해서 상기 제1 명령이 실행 가능한지를 판단하고, 상기 제1 명령이 실행 가능하다는 판단에 응답하여 상기 제1 제출 큐의 상기 헤드 포인터를 이동할 수 있다.According to another embodiment, a storage device including a non-volatile memory and a device controller may be provided. The device controller controls access to the non-volatile memory, fetches a first command from a first submission queue without moving the head pointer of the first submission queue, and determines whether the first command is executed based on a state of a device resource. It is determined whether the command is executable, and the head pointer of the first submission queue may be moved in response to determining that the first command is executable.

또 다른 실시예에 따르면, 비휘발성 메모리를 포함하는 저장 장치에 의해 실행되는 방법이 제공될 수 있다. 상기 방법은 제출 큐로부터 명령을 피크하는 단계, 장치 리소스의 상태에 기초해서 상기 명령이 실행 가능한지를 판단하는 단계, 상기 명령이 실행 가능하다는 판단에 응답하여 상기 명령을 페치하는 단계, 그리고 상기 명령이 실행 가능하다는 판단에 응답하여, 상기 명령에 상기 장치 리소스를 할당하고 상기 명령을 실행하는 단계를 포함할 수 있다.According to another embodiment, a method executed by a storage device including a non-volatile memory may be provided. The method includes picking a command from a submit queue, determining whether the command is executable based on a state of device resources, fetching the command in response to determining that the command is executable, and In response to determining that it is executable, allocating device resources to the command and executing the command.

도 1은 한 실시예에 따른 스토리지 시스템의 예시 블록도이다.
도 2는 다른 실시예에 따른 스토리지 시스템의 예시 블록도이다.
도 3은 한 실시예에 따른 저장 장치의 장치 컨트롤러의 예시 블록도이다.
도 4는 한 실시예에 따른 장치 컨트롤러의 장치 리소스를 예시하는 도면이다.
도 5 및 도 6은 도 3에 도시한 장치 컨트롤러의 동작의 한 예를 설명하는 도면이다.
도 7은 한 실시예에 따른 저장 장치의 장치 컨트롤러의 동작을 예시하는 흐름도이다.
도 8은 다른 실시예에 따른 저장 장치의 장치 컨트롤러의 예시 블록도이다.
도 9는 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러를 예시하는 도면이다.
도 10은 도 9에 도시한 장치 컨트롤러의 동작의 한 예를 설명하는 도면이다.
도 11은 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러의 동작을 예시하는 흐름도이다.
도 12는 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러를 예시하는 도면이다.
도 13은 도 12에 도시한 장치 컨트롤러의 동작의 한 예를 설명하는 도면이다.
도 14는 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러의 동작을 예시하는 흐름도이다.
도 15는 한 실시예에 따른 컴퓨터 시스템을 나타내는 예시 블록도이다.
1 is an exemplary block diagram of a storage system according to one embodiment.
2 is an exemplary block diagram of a storage system according to another embodiment.
3 is an exemplary block diagram of a device controller of a storage device according to one embodiment.
4 is a diagram illustrating device resources of a device controller according to one embodiment.
5 and 6 are diagrams for explaining an example of an operation of the device controller shown in FIG. 3 .
7 is a flowchart illustrating operation of a device controller of a storage device according to one embodiment.
8 is an exemplary block diagram of a device controller of a storage device according to another embodiment.
9 is a diagram illustrating a device controller of a storage device according to another embodiment.
FIG. 10 is a diagram for explaining an example of an operation of the device controller shown in FIG. 9 .
11 is a flowchart illustrating an operation of a device controller of a storage device according to another embodiment.
12 is a diagram illustrating a device controller of a storage device according to another embodiment.
FIG. 13 is a diagram for explaining an example of an operation of the device controller shown in FIG. 12;
14 is a flowchart illustrating an operation of a device controller of a storage device according to another embodiment.
15 is an example block diagram illustrating a computer system according to one embodiment.

아래에서는 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다.Hereinafter, with reference to the accompanying drawings, embodiments of the present invention will be described in detail so that those skilled in the art can easily carry out the present invention. However, the present invention may be embodied in many different forms and is not limited to the embodiments described herein.

그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다. 도면을 참고하여 설명한 흐름도에서, 동작 순서는 변경될 수 있고, 여러 동작들이 병합되거나, 어느 동작이 분할될 수 있고, 특정 동작은 수행되지 않을 수 있다.And in order to clearly explain the present invention in the drawings, parts irrelevant to the description are omitted, and similar reference numerals are attached to similar parts throughout the specification. In the flowchart described with reference to the drawings, the order of operations may be changed, several operations may be merged, a certain operation may be divided, and a specific operation may not be performed.

또한, 단수로 기재된 표현은 "하나" 또는 "단일" 등의 명시적인 표현을 사용하지 않은 이상, 단수 또는 복수로 해석될 수 있다. 제1, 제2 등과 같이 서수를 포함하는 용어는 다양한 구성요소를 설명하는데 사용될 수 있지만, 구성요소는 이러한 용어에 의해 한정되지는 않는다. 이들 용어는 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로 사용될 수 있다.In addition, expressions written in the singular may be interpreted in the singular or plural unless explicit expressions such as “one” or “single” are used. Terms including ordinal numbers, such as first and second, may be used to describe various components, but the components are not limited by these terms. These terms may be used for the purpose of distinguishing one component from another.

도 1은 한 실시예에 따른 스토리지 시스템의 예시 블록도이다.1 is an exemplary block diagram of a storage system according to one embodiment.

도 1을 참고하면, 스토리지 시스템(100)은 호스트 장치(110)와 저장 장치(120)를 포함할 수 있다.Referring to FIG. 1 , the storage system 100 may include a host device 110 and a storage device 120 .

호스트 장치(110)는 저장 장치(120)와 인터페이스할 있는 컴퓨팅 플랫폼(또는 컴퓨팅 장치)을 포함할 수 있다. 호스트 장치(110)는 예를 들면 데스크톱 컴퓨터(desktop computer), 서버 컴퓨터, 태블릿 컴퓨터(tablet computer), 랩톱 컴퓨터(laptop computer), 스마트폰(smartphone)과 같은 이동 전화기(mobile phone), 멀티미디어 플레이어(multimedia player), 게임 콘솔(game console), 텔레비전, 다양한 유형의 사물 인터넷(internet of thing, IoT) 기기 등을 포함할 수 있으며, 이에 한정되지 않는다.The host device 110 may include a computing platform (or computing device) capable of interfacing with the storage device 120 . The host device 110 may be, for example, a desktop computer, a server computer, a tablet computer, a laptop computer, a mobile phone such as a smartphone, a multimedia player ( multimedia players), game consoles, televisions, various types of Internet of Things (IoT) devices, etc., but are not limited thereto.

호스트 장치(110)는 프로세서(111)와 호스트 메모리(112)를 포함할 수 있다. 프로세서(111)는 명령어를 실행하여서 다양한 동작(예를 들면, 연산, 로직, 제어, 입출력 등의 연산)을 수행할 수 있다. 프로세서(111)는 예를 들면 중앙 처리 장치(central processing unit, CPU), 그래픽 처리 장치(graphics processing unit, GPU), 마이크로프로세서 또는 어플리케이션 프로세서(application processor, AP)일 수 있다. 호스트 메모리(112)는 프로세서(111)에 의해 액세스되어 사용되는 시스템 메모리일 수 있다. 호스트 메모리(112)는 예를 들면 동적 랜덤 액세스 메모리(dynamic random access memory, RAM)와 같은 랜덤 액세스 메모리를 포함할 수 있다.The host device 110 may include a processor 111 and a host memory 112 . The processor 111 may perform various operations (eg, arithmetic, logic, control, input/output, etc.) by executing instructions. The processor 111 may be, for example, a central processing unit (CPU), a graphics processing unit (GPU), a microprocessor, or an application processor (AP). The host memory 112 may be system memory accessed and used by the processor 111 . Host memory 112 may include, for example, random access memory, such as dynamic random access memory (RAM).

저장 장치(120)는 비휘발성 메모리 기반 저장 장치로, 장치 컨트롤러(121)와 비휘발성 메모리(122)를 포함할 수 있다. 장치 컨트롤러(121)는 비휘발성 메모리(122)로의 액세스를 제어할 수 있다. 어떤 실시예에서, 장치 컨트롤러(121)는 비휘발성 메모리(122)에 액세스하기 위한 프로토콜로 NVMe(non-volatile memory express) 프로토콜을 지원할 수 있다. 어떤 실시예에서, 비휘발성 메모리는 플래시 기반 메모리, 예를 들면 NAND 플래시 메모리를 포함할 수 있다. 어떤 실시예에서, 비휘발성 메모리는 예를 들면 상변화(phase-change) 메모리, 저항성(resistive) 메모리 memory), 자기저항(magnetoresistive) 메모리, 강유전체(ferroelectric) 메모리 또는 폴리머(polymer) 메모리를 포함할 수 있다.The storage device 120 is a non-volatile memory-based storage device and may include a device controller 121 and a non-volatile memory 122 . The device controller 121 may control access to the nonvolatile memory 122 . In some embodiments, the device controller 121 may support a non-volatile memory express (NVMe) protocol as a protocol for accessing the non-volatile memory 122 . In some embodiments, non-volatile memory may include flash based memory, such as NAND flash memory. In some embodiments, the non-volatile memory may include, for example, phase-change memory, resistive memory, magnetoresistive memory, ferroelectric memory, or polymer memory. can

어떤 실시예에서, 저장 장치(120)는 호스트 장치(110)에 탈착 가능하도록 연결될 수 있다. 어떤 실시예에서, 저장 장치(120)는 호스트 장치(110) 내에 통합되거나 호스트 장치(110)에 탈착 가능하지 않게 연결될 수 있다.In some embodiments, the storage device 120 may be detachably connected to the host device 110 . In some embodiments, the storage device 120 may be integrated within the host device 110 or non-removably coupled to the host device 110 .

호스트 장치(110)는 저장 장치(120)로 명령을 제출(submit)하여 다양한 동작을 수행할 수 있다. 예를 들면, 호스트 장치(110)는 저장 장치(120)로 읽기 명령을 제출하여 저장 장치(120)로부터 저장 장치(120)로부터 데이터를 읽거나, 저장 장치(120)로 쓰기 명령을 제출하여 저장 장치(120)에 데이터를 저장할 수 있다.The host device 110 may perform various operations by submitting commands to the storage device 120 . For example, the host device 110 submits a read command to the storage device 120 to read data from the storage device 120 or submits a write command to the storage device 120 to store data. Data may be stored on the device 120 .

호스트 장치(110)가 저장 장치(120)로부터 데이터를 읽거나 쓰기 위해, 프로세서(111)는 명령(예를 들면, 읽기 명령 또는 쓰기 명령)을 생성하고, 호스트 메모리(112)의 제출 큐(submission queue, SQ)(112a)에 명령을 제출(또는 기입)할 수 있다. 어떤 실시예에서, 제출 큐(112a)는 NVMe 프로토콜을 지원할 수 있다. 장치 컨트롤러(121)는 호스트 메모리(112)의 제출 큐(112a)에 제출된 명령을 피크(peek)하고, 장치 컨트롤러(121)의 장치 리소스 상태에 기초해서 명령이 실행 가능한지를 판단하고, 명령이 실행 가능하다는 판단에 응답하여 명령을 페치(fetch)하여 명령을 실행할 수 있다. 어떤 실시예에서, 명령의 "피크"는 제출 큐로부터 명령을 장치 컨트롤러로 가져왔지만 해당 명령이 다시 가져올 상태로 제출 큐에 남아 있도록 하는 동작을 의미할 수 있다. 따라서, 장치 컨트롤러(121)는 제출 큐(112a)의 헤드 포인터 이동 없이 제출 큐(112a)로부터 명령을 가져옴으로써 명령을 피크하고, 명령의 피크 후에 제출 큐(112a)의 헤드 포인터를 이동함으로써 제출 큐(112a)로부터 명령을 페치(즉, 명령 페치 동작을 완료)할 수 있다. 장치 컨트롤러(121)는 읽기 명령을 실행함으로써 비휘발성 메모리(122)로부터 호스트 메모리(112)로 데이터를 전달하거나, 쓰기 명령을 실행함으로써 호스트 메모리(112)로부터 메모리 장치(122)로 데이터를 전달할 수 있다.In order for the host device 110 to read or write data from the storage device 120, the processor 111 generates a command (eg, a read command or a write command) and submits a submission queue of the host memory 112. A command may be submitted (or written) to the queue, SQ) 112a. In some embodiments, the submission queue 112a may support the NVMe protocol. The device controller 121 peeks the command submitted to the submit queue 112a of the host memory 112, determines whether the command is executable based on the device resource status of the device controller 121, and determines whether the command is executed. In response to determining that it is executable, the instruction may be fetched and executed. In some embodiments, “picking” a command may refer to an action that brings a command from a submit queue to the device controller but allows the command to remain on the submit queue for re-fetching. Thus, the device controller 121 peaks an instruction by fetching an instruction from the submission queue 112a without moving the head pointer of the submission queue 112a, and moves the head pointer of the submission queue 112a after the peak of the instruction to the submit queue. Fetch the instruction from 112a (ie, complete the instruction fetch operation). The device controller 121 may transfer data from the non-volatile memory 122 to the host memory 112 by executing a read command or transfer data from the host memory 112 to the memory device 122 by executing a write command. there is.

도 2는 다른 실시예에 따른 스토리지 시스템의 예시 블록도이다.2 is an exemplary block diagram of a storage system according to another embodiment.

도 2를 참고하면, 스토리지 시스템(200)은 호스트 장치(210)와 저장 장치(220)를 포함할 수 있다.Referring to FIG. 2 , the storage system 200 may include a host device 210 and a storage device 220 .

호스트 장치(210)는 프로세서(211)와 호스트 메모리(212)를 포함할 수 있다. 저장 장치(220)는 장치 컨트롤러(221)와 비휘발성 메모리(222)를 포함할 수 있다. 도 1을 참고로 하여 설명한 실시예와 달리, 장치 컨트롤러(221)는 호스트 장치(210)로부터의 명령이 제출(또는 기입)될 제출 큐가 형성되는 메모리 버퍼(221a)를 더 포함할 수 있다. 어떤 실시예에서, 메모리 버퍼(221a)는 NVMe 프로토콜을 지원하는 컨트롤러 메모리 버퍼(controller memory buffer, CMB)일 수 있다.The host device 210 may include a processor 211 and a host memory 212 . The storage device 220 may include a device controller 221 and a non-volatile memory 222 . Unlike the embodiment described with reference to FIG. 1 , the device controller 221 may further include a memory buffer 221a in which a submission queue in which commands from the host device 210 are submitted (or written) is formed. In some embodiments, the memory buffer 221a may be a controller memory buffer (CMB) supporting the NVMe protocol.

호스트 장치(210)가 저장 장치(220)로부터 데이터를 읽거나 쓰기 위해, 프로세서(211)는 명령을 생성하고, 메모리 버퍼(221a)의 제출 큐에 명령을 제출할 수 있다. 장치 컨트롤러(221)는 메모리 버퍼(221a)의 제출 큐에 제출된 명령을 피크하고, 장치 컨트롤러(221)의 장치 리소스 상태에 기초해서 명령이 실행 가능한지를 판단하고, 명령이 실행 가능하다는 판단에 응답하여 명령을 페치하여 명령을 실행할 수 있다. 장치 컨트롤러(221)는 제출 큐의 헤드 포인터 이동 없이 제출 큐로부터 명령을 피크하고, 제출 큐의 헤드 포인터를 이동하여 제출 큐로부터 명령을 페치할 수 있다. 장치 컨트롤러(221)는 읽기 명령을 실행함으로써 메모리 장치(222)로부터 호스트 메모리(212)로 데이터를 전달하거나, 쓰기 명령을 실행함으로써 호스트 메모리(212)로부터 메모리 장치(222)로 데이터를 전달할 수 있다.In order for the host device 210 to read or write data from the storage device 220, the processor 211 may generate a command and submit the command to a submission queue of the memory buffer 221a. The device controller 221 picks the command submitted to the submission queue of the memory buffer 221a, determines whether the command is executable based on the device resource status of the device controller 221, and responds to the determination that the command is executable. to fetch the command and execute the command. The device controller 221 may pick an instruction from the submit queue without moving the head pointer of the submit queue and fetch the instruction from the submit queue by moving the head pointer of the submit queue. The device controller 221 may transfer data from the memory device 222 to the host memory 212 by executing a read command or transfer data from the host memory 212 to the memory device 222 by executing a write command. .

도 3은 한 실시예에 따른 저장 장치의 장치 컨트롤러의 예시 블록도이며, 도 4는 한 실시예에 따른 장치 컨트롤러의 장치 리소스를 예시하는 도면이고, 도 5 및 도 6은 도 3에 도시한 장치 컨트롤러의 동작의 한 예를 설명하는 도면이다.3 is an exemplary block diagram of a device controller of a storage device according to an embodiment, FIG. 4 is a diagram illustrating a device resource of the device controller according to an embodiment, and FIGS. 5 and 6 are the device shown in FIG. 3 It is a drawing explaining an example of the operation of the controller.

도 3을 참고하면, 장치 컨트롤러(300)는 명령 페치 로직(310), 명령 전처리 로직(320), 명령 처리 로직(330) 및 장치 리소스(340)를 포함할 수 있다.Referring to FIG. 3 , the device controller 300 may include an instruction fetch logic 310 , a command preprocessing logic 320 , a command processing logic 330 and a device resource 340 .

어떤 실시예에서, 장치 컨트롤러(300)는 메모리 버퍼(350)를 더 포함하고, 메모리 버퍼(350)는 복수의 제출 큐(351, 352, ..., 35n)를 포함할 수 있다. 어떤 실시예에서, 복수의 제출 큐(351 ~ 35n)는 호스트 장치의 호스트 메모리(예를 들면, 도 1의 112)에 형성될 수 있다. 복수의 제출 큐(351, 352, ..., 35n)를 각각 SQ1, SQ2, ..., SQn으로 표현할 수 있다. 호스트 장치는 명령을 생성하고, 생성한 명령을 제출 큐(35i)에 넣을 수 있다. 어떤 실시예에서, 호스트 장치는 명령을 제출 큐(35i)에 넣은 후에, 장치 컨트롤러(300)의 제출 큐(35i)에 대응하는 레지스터(예를 들면, SQ 테일 도어벨 레지스터)를 새로운 테일 포인터로 갱신할 수 있다.In some embodiments, the device controller 300 further includes a memory buffer 350, and the memory buffer 350 may include a plurality of submission queues 351, 352, ..., 35n. In some embodiments, a plurality of submission queues 351 to 35n may be formed in a host memory (eg, 112 of FIG. 1 ) of the host device. The plurality of submission queues 351, 352, ..., 35n may be expressed as SQ1, SQ2, ..., SQn, respectively. The host device can generate commands and put the generated commands into the submission queue 35i. In some embodiments, after the host device puts the command into submit queue 35i, the register corresponding to submit queue 35i of device controller 300 (eg, the SQ tail doorbell register) is used as the new tail pointer. can be renewed

명령 페치 로직(310)은 제출 큐(35i)로부터 명령을 피크할 수 있다. 제출 큐(35i)로부터 명령을 피크하는 경우, 명령 페치 로직(310)은 제출 큐(35i)의 헤드 포인터를 이동하지 않을 수 있다. 명령 페치 로직(310)은 피크한 명령을 장치 컨트롤러(300)의 버퍼 또는 장치 컨트롤러(300)를 포함하는 저장 장치의 버퍼에 임시로 저장할 수 있다. 어떤 실시예에서, 명령 페치 로직(310)은 복수의 제출 큐(351 ~ 35n)에서 타겟 제출 큐(35i)를 선택하고, 선택한 제출 큐(35i)로부터 명령을 피크할 수 있다. 명령 페치 로직(310)은 예를 들면 장치 컨트롤러(300)가 지원하는 중재(arbitration) 메커니즘에 기초해서 타겟 제출 큐(35i)를 선택할 수 있다. 어떤 실시예에서, 명령 페치 로직(310)은 중재 버스트(arbitration burst) 크기와 제출 큐(35i)에서 이용할 수 있는 명령의 수에 기초해서 제출 큐(35i)로부터 피크할 명령의 수를 결정할 수 있다. 중재 버스트 크기는 제출 큐로부터 한번에 가져올 수 있는 명령의 최대 수를 의미할 수 있다. 명령 페치 로직(310)은 예를 들면 중재 버스트 크기와 제출 큐(35i)에서 이용할 수 있는 명령의 수 중 적은 수를 제출 큐(35i)로부터 피크할 명령의 수로 결정할 수 있다. 제출 큐(35i)에서 이용할 수 있는 명령의 수는 제출 큐(35i)의 헤드(head)에서 테일(tail) 이전까지의 명령의 수에 해당할 수 있다. 헤드는 제출 큐(35i)에서 헤드 포인터가 지시하는 엔트리이고, 테일은 제출 큐(35i)에서 테일 포인터가 지시하는 엔트리일 수 있다. 따라서, 명령 페치 로직(310)은 제출 큐(35i)의 헤드부터 결정한 수만큼의 명령을 피크할 수 있다.The instruction fetch logic 310 may pick an instruction from the submit queue 35i. When peaking an instruction from submit queue 35i, instruction fetch logic 310 may not move the head pointer of submit queue 35i. The command fetch logic 310 may temporarily store the peaked command in a buffer of the device controller 300 or a buffer of a storage device including the device controller 300 . In some embodiments, the command fetch logic 310 may select a target submit queue 35i from the plurality of submit queues 351 - 35n and pick a command from the selected submit queue 35i. The command fetch logic 310 may select the target submit queue 35i based on, for example, an arbitration mechanism supported by the device controller 300 . In some embodiments, instruction fetch logic 310 may determine the number of instructions to peak from submit queue 35i based on an arbitration burst size and the number of instructions available in submit queue 35i. . Arbitration burst size may mean the maximum number of commands that can be retrieved from the submission queue at one time. Instruction fetch logic 310 may determine, for example, the smaller of the arbitration burst size and the number of instructions available in submit queue 35i as the number of instructions to pick from submit queue 35i. The number of commands available in the submission queue 35i may correspond to the number of commands from the head to the tail of the submission queue 35i. The head may be an entry indicated by the head pointer in the submission queue 35i, and the tail may be an entry indicated by the tail pointer in the submission queue 35i. Accordingly, the instruction fetch logic 310 may peak as many instructions as it determines from the head of the submit queue 35i.

명령 전처리 로직(320)은 장치 리소스(340)의 상태에 기초해서 피크한 명령의 실행 가능성을 판단할 수 있다. 명령 전처리 로직(320)은 피크한 명령을 실행하기 위한 장치 리소스(340)가 사용 가능한지를 판단하여서 실행 가능성을 판단할 수 있다. 어떤 실시예에서, 장치 리소스(340)는 읽기 명령에 전용인 읽기 리소스(341) 및 쓰기 명령에 전용인 쓰기 리소스(342)를 포함할 수 있다. 장치 리소스(340)는 읽기 명령과 쓰기 명령이 공유하는 공유 리소스(343)를 더 포함할 수 있다.Command preprocessing logic 320 may determine the feasibility of the peak command based on the state of device resources 340 . Command pre-processing logic 320 may determine feasibility by determining whether device resources 340 are available for executing the peak command. In some embodiments, device resources 340 may include read resources 341 dedicated to read commands and write resources 342 dedicated to write commands. The device resource 340 may further include a shared resource 343 shared by a read command and a write command.

명령 전처리 로직(320)은 장치 리소스(340) 중에서 피크한 명령의 실행을 위한 리소스가 사용 가능하다고 판단한 경우 해당 명령이 실행 가능하다고 판단할 수 있다. 어떤 실시예에서, 피크한 명령의 입출력(input/output, I/O) 유형에 따라 리소스의 종류가 달라질 수 있으므로, 명령 전처리 로직(320)은 피크한 명령의 I/O 유형, 공유 리소스(343), 그리고 읽기 리소스(341)와 쓰기 리소스(342) 중 I/O 유형에 대응하는 리소스에 기초해서 피크한 명령의 처리를 위한 리소스가 사용 가능한지를 판단할 수 있다. 어떤 실시예에서, 피크한 명령의 크기에 따라 필요한 리소스의 양이 달라질 수 있으므로, 명령 전처리 로직(320)은 피크한 명령의 I/O 유형 및 크기에 기초해서 해당 명령의 처리를 위한 리소스가 사용 가능한지를 판단할 수 있다. 명령 전처리 로직(320)은 장치 리소스(340) 중에서 피크한 명령의 처리를 위한 리소스가 다른 I/O 처리를 위해 점유되어 사용할 수 없는 경우, 해당 명령이 실행 가능하지 않다고 판단할 수 있다. 예를 들면, 명령 전처리 로직(320)은 읽기 리소스(341) 또는 공유 리소스(343)가 점유되어 사용할 수 없는 경우 읽기 명령을 실행할 수 없다고 판단하고, 읽기 리소스(341)와 공유 리소스(343)가 사용 가능한 경우 읽기 명령을 실행할 수 있다고 판단할 수 있다. 또한, 명령 전처리 로직(320)은 쓰기 리소스(342) 또는 공유 리소스(343)가 점유되어 사용할 수 없는 경우 쓰기 명령을 실행할 수 없다고 판단하고, 쓰기 리소스(342)와 공유 리소스(343)가 사용 가능한 경우 쓰기 명령을 실행할 수 있다고 판단할 수 있다.The command pre-processing logic 320 may determine that the command is executable when it is determined that a resource for executing the peak command is available among the device resources 340 . In some embodiments, since the type of resource may vary depending on the input/output (I/O) type of the peak command, the command preprocessing logic 320 may determine the I/O type of the peak command, the shared resource 343 ), and whether a resource for processing a peak command is available can be determined based on a resource corresponding to an I/O type among the read resource 341 and the write resource 342. In some embodiments, since the amount of resources required may vary depending on the size of the peak command, the command pre-processing logic 320 determines which resources are used to process the peak command based on the I/O type and size of the peak command. You can judge if it is possible. The command pre-processing logic 320 may determine that the command is not executable when the resource for processing the peak command among the device resources 340 is occupied for other I/O processing and cannot be used. For example, the command pre-processing logic 320 determines that the read command cannot be executed if the read resource 341 or the shared resource 343 is occupied and cannot be used, and the read resource 341 and the shared resource 343 are If available, it can be determined that the read command can be executed. In addition, the command pre-processing logic 320 determines that the write command cannot be executed when the write resource 342 or the shared resource 343 is occupied and unavailable, and the write resource 342 and the shared resource 343 are available. In this case, it can be determined that the write command can be executed.

피크한 명령이 실행 가능하다고 판단한 경우, 명령 전처리 로직(320)은 명령 페치 로직(310)을 통해 해당 명령을 페치하고 명령 처리 로직(330)으로 페치한 명령을 실행할 것을 지시할 수 있다. 명령 페치 로직(310)은 제출 큐(35i)에서 헤드 포인터를 페치한 명령(엔트리)의 수만큼 이동함으로써 제출 큐(35i)로부터 명령을 페치할 수 있다. 이에 따라, 제출 큐(35i)의 헤드 포인터는 페치한 명령의 다음 엔트리로 이동될 수 있다.If it is determined that the peaked command is executable, the command preprocessing logic 320 may fetch the corresponding command through the command fetch logic 310 and instruct the command processing logic 330 to execute the fetched command. The instruction fetch logic 310 may fetch instructions from the submit queue 35i by moving the head pointer by the number of fetched instructions (entries) in the submit queue 35i. Accordingly, the head pointer of the submission queue 35i may be moved to the next entry of the fetched instruction.

명령 처리 로직(330)은 페치한 명령에 장치 리소스(340)를 할당하고 페치한 명령을 실행할 수 있다. 어떤 실시예에서, 명령 처리 로직(330)은 페치한 명령을 명령 처리 파이프라인에 넣어 실행할 수 있다. 명령 처리 로직(330)은 페치한 명령을 명령 처리 파이프라인의 명령 처리 큐에 넣고, 명령 처리 큐로부터 명령을 꺼내서 명령을 실행할 수 있다. 명령 처리 파이프라인은 장치 리소스(340)를 사용하여 명령 처리(실행)을 수행하는 일련의 처리 엔진을 포함할 수 있다.The command processing logic 330 may allocate device resources 340 to the fetched command and execute the fetched command. In some embodiments, command processing logic 330 may put the fetched command into a command processing pipeline for execution. The command processing logic 330 may put the fetched command into the command processing queue of the command processing pipeline, retrieve the command from the command processing queue, and execute the command. The instruction processing pipeline may include a series of processing engines that perform instruction processing (execution) using device resources 340 .

명령 전처리 로직(320)이 피크한 명령이 실행 가능하지 않다고 판단한 경우, 명령 처리 로직(330)은 피크한 명령을 페치하지 않을 수 있다. 따라서, 제출 큐(35i)의 헤드 포인터는 이동되지 않고 유지될 수 있다. 명령 전처리 로직(320)은 명령 처리 로직(330)으로 명령을 실행할 것을 지시하지 않고, 피크한 명령을 페치하지 않고 드롭(drop)할 수 있다. 따라서, 명령 처리 로직(330)은 피크한 명령에 리소스를 할당하지 않고, 피크한 명령을 명령 처리 파이프라인에 넣지 않을 수 있다. 또한, 명령 전처리 로직(320)은 제출 큐(35i)를 리소스 대기 상태로 지정할 수 있다. 어떤 실시예에서, 리소스 대기 상태는 대기 중인 리소스를 지시하는 정보를 포함할 수 있다. 대기 중인 리소스를 지시하는 정보는 예를 들면 대기 중인 리소스의 종류와 대기 중인 리소스의 양을 포함할 수 있다.If instruction preprocessing logic 320 determines that the peaked instruction is not executable, instruction processing logic 330 may not fetch the peaked instruction. Therefore, the head pointer of the submission queue 35i can be maintained without being moved. The instruction preprocessing logic 320 may drop the peaked instruction without fetching it, without instructing the instruction processing logic 330 to execute the instruction. Accordingly, the command processing logic 330 may not allocate resources to the peak command and may not put the peak command into the command processing pipeline. In addition, the command pre-processing logic 320 may designate the submission queue 35i as a resource standby state. In some embodiments, the resource waiting state may include information indicating a waiting resource. Information indicating waiting resources may include, for example, the type of waiting resources and the amount of waiting resources.

타겟 제출 큐(35i)를 처리한 후에, 장치 컨트롤러(300)는 복수의 제출 큐(351 ~ 35n)에서 다음 타겟 제출 큐(35j)를 선택하고, 타겟 제출 큐(35j)에서 명령을 피크하고 피크한 명령이 실행 가능한지를 판단하는 과정을 반복할 수 있다.After processing the target submission queue 35i, the device controller 300 selects the next target submission queue 35j from the plurality of submission queues 351 to 35n, and picks and peaks a command from the target submission queue 35j. The process of determining whether a command is executable can be repeated.

어떤 실시예에서, 명령 전처리 로직(320)은 장치 리소스(340)의 상태를 모니터링하고, 장치 리소스(340)의 상태에 기초해서 대기 상태로 지정된 제출 큐(35i)가 처리 가능한지를 판단할 수 있다. 어떤 실시예에서, 명령 전처리 로직(320)은 대기 상태로 지정된 제출 큐(35i)의 리소스가 사용 가능한 상태로 되는 경우 제출 큐(35i)가 처리 가능하다고 판단할 수 있다. 제출 큐(35i)가 처리 가능하다고 판단한 경우, 명령 전처리 로직(320)은 제출 큐(35i)를 사용 가능한 제출 큐(35i)로 지정할 수 있다. 이에 따라, 앞서 설명한 것처럼, 제출 큐(35i)에 명령을 피크하여 실행 가능한지를 판단하는 동작이 수행될 수 있다. 어떤 실시예에서, 대기 상태로 지정된 제출 큐(35i)의 리소스가 사용 가능한 상태로 된 경우, 명령 전처리 로직(320)은 제출 큐(35i)에서 명령을 피크하는 동작을 수행하지 않고, 제출 큐(35i)에서 명령을 페치하고 명령 처리 로직(330)에 명령을 실행할 것을 지시할 수도 있다. 어떤 실시예에서, 리소스가 사용 가능한 상태로 된 경우, 명령 전처리 로직(320)은 대기 상태로 지정된 제출 큐(35i)를 다른 제출 큐에 비해 우선하여 처리할 수 있다. 예를 들면, 명령 전처리 로직(320)은 대기 상태로 지정된 제출 큐(35i)를 사용 가능한 제출 큐의 리스트의 헤드에 추가할 수 있다.In some embodiments, the command preprocessing logic 320 may monitor the state of the device resource 340 and, based on the state of the device resource 340, determine whether the pending submission queue 35i is available for processing. . In some embodiments, the command pre-processing logic 320 may determine that the submission queue 35i is ready for processing when a resource of the submission queue 35i designated as a standby state becomes available. If it is determined that submit queue 35i is processable, command preprocessing logic 320 may designate submit queue 35i as an available submit queue 35i. Accordingly, as described above, an operation of determining whether a command is executable by peaking a command in the submission queue 35i may be performed. In some embodiments, when a resource of the submission queue 35i designated as a standby state becomes available, the command preprocessing logic 320 does not perform an operation to peak a command from the submission queue 35i, and the submission queue ( 35i) may fetch the instruction and instruct the instruction processing logic 330 to execute the instruction. In some embodiments, when a resource becomes available, command preprocessing logic 320 may preferentially process the queue 35i designated as pending over other submission queues. For example, the command pre-processing logic 320 may add the submission queue 35i designated as pending to the head of the list of available submission queues.

어떤 실시예에서, 명령 처리 로직(330)이 특정 I/O 유형의 명령의 실행을 완료하는 경우, 해당 I/O 유형의 리소스가 사용 가능한 상태로 될 수 있다. 명령 처리 로직(330)이 명령 처리 파이프라인에서 특정 유형의 처리를 완료하는 경우, 해당 유형의 리소스가 사용 가능한 상태로 될 수 있다. 예를 들면, 명령 처리 로직(330)이 읽기 명령의 실행을 완료하는 경우 읽기 리소스(341)와 공유 리소스(343)가 사용 가능한 상태로 되고, 쓰기 명령의 실행을 완료하는 경우 쓰기 리소스(342)와 공유 리소스(343)가 사용 가능한 상태로 될 수 있다.In some embodiments, when command processing logic 330 completes execution of a command of a particular I/O type, a resource of that I/O type may become available. When the command processing logic 330 completes processing of a particular type in the command processing pipeline, that type of resource may become available. For example, when the command processing logic 330 completes the execution of a read command, the read resource 341 and the shared resource 343 become available, and when the write command completes, the write resource 342 and the shared resource 343 may be in a usable state.

도 4를 참고하면, 어떤 실시예에서, 읽기 리소스(341), 쓰기 리소스(342) 및 공유 리소스(343)는 각각 다양한 유형의 리소스를 포함할 수 있다. 읽기 리소스(341)는 읽기 버퍼(341a) 또는 직접 메모리 액세스(direct memory access, DMA) 읽기 디스크립터(descriptor)(341b) 중 적어도 하나를 포함하고, 쓰기 리소스(342)는 쓰기 버퍼(342a) 또는 DMA 쓰기 디스크립터(342b) 중 적어도 하나를 포함할 수 있다.Referring to FIG. 4 , in some embodiments, a read resource 341 , a write resource 342 , and a shared resource 343 may each include various types of resources. The read resource 341 includes at least one of a read buffer 341a or a direct memory access (DMA) read descriptor 341b, and the write resource 342 includes a write buffer 342a or a DMA It may include at least one of the write descriptors 342b.

읽기 버퍼(341a)는 비휘발성 메모리(예를 들면, 도 1의 122 또는 도 2의 222)에서 읽은 데이터를 임시로 저장하고, DMA 읽기 버퍼(341b)는 저장 장치에서 호스트 메모리(예를 들면, 도 1의 112 또는 도 2의 212)로의 DMA 전송과 관련된 정보를 저장할 수 있다. 쓰기 버퍼(342a)는 비휘발성 메모리(122 또는 222)에 기입될 데이터를 임시로 저장하고, DMA 쓰기 디스크립터(342b)는 호스트 메모리(112 또는 212)로부터 저장 장치로의 DMA 전송과 관련된 정보를 저장할 수 있다.The read buffer 341a temporarily stores data read from a non-volatile memory (eg, 122 in FIG. 1 or 222 in FIG. 2 ), and the DMA read buffer 341b stores data read from a storage device to a host memory (eg, 222 in FIG. 2 ). Information related to DMA transfer to 112 in FIG. 1 or 212 in FIG. 2) may be stored. The write buffer 342a temporarily stores data to be written to the non-volatile memory 122 or 222, and the DMA write descriptor 342b stores information related to DMA transfer from the host memory 112 or 212 to the storage device. can

공유 리소스(343)는 복수의 유형의 공유 리소스를 포함하며, 복수의 유형의 공유 리소스는 어드레스 변환 캐시(address translation cache, ATC) 리소스(343a), 호스트 연결 리소스(343b), 태그 리소스(343c), 채널 리소스(343d), 코어 리소스(343e), 어드레스 변환 리소스(343f), 물리적 영역 페이지(physical region page, PRP)/분산 수집 리스트(scatter gather list, SGL) 버퍼(343g) 또는 명령 완료 리소스(343h) 중 적어도 하나를 포함할 수 있다.The shared resource 343 includes a plurality of types of shared resources, including an address translation cache (ATC) resource 343a, a host connection resource 343b, and a tag resource 343c. , channel resource 343d, core resource 343e, address translation resource 343f, physical region page (PRP)/scatter gather list (SGL) buffer 343g or command completion resource ( 343h) may include at least one.

어드레스 변환 캐시(343a)는 명령에서 파싱된 PRP 또는 SGL에 의해 참조되는 가상 어드레스를 호스트 메모리(112 또는 212)의 물리적 어드레스로 변환할 때 사용되는 어드레스 변환 데이터를 저장할 수 있다. 호스트 연결 리소스(343b)는 호스트와의 연결에 사용되는 인터페이스(예를 들면, PCIe(peripheral component interconnect express) 인터페이스) 관련 리소스를 포함할 수 있다. 태그 리소스(343c)는 명령 처리 파이프라인 내에서 명령의 유일한 식별을 위해 할당되는 리소스(태그)를 포함할 수 있다. 채널 리소스(343d)는 장치 컨트롤러(300)와 비휘발성 메모리(122 또는 222) 사이의 채널 관련 리소스를 포함할 수 있다. 코어 리소스(343e)는 명령 처리 로직에서 명령의 처리를 위한 프로세싱 코어 리소스를 포함할 수 있다. 어드레스 변환 리소스(343f)는 명령에서 파싱된 논리적 어드레스(예를 들면, LBA(logical block address)를 비휘발성 메모리(122 또는 222)의 물리적 어드레스(예를 들면, PPN(physical page number)로 변환하는 리소스를 포함할 수 있다. PRP/SGL 버퍼(343g)는 명령에서 파싱된 PRP 또는 SGL을 임시로 저장할 수 있다. 명령 완료 리소스(343h)는 명령의 완료 처리를 하기 위한 리소스를 포함할 수 있다.The address translation cache 343a may store address translation data used when converting a virtual address referenced by a PRP or SGL parsed from an instruction into a physical address of the host memory 112 or 212 . The host connection resource 343b may include resources related to an interface (eg, a peripheral component interconnect express (PCIe) interface) used for connection with the host. The tag resource 343c may include a resource (tag) allocated for unique identification of an instruction within the instruction processing pipeline. The channel resource 343d may include channel related resources between the device controller 300 and the non-volatile memory 122 or 222 . The core resource 343e may include processing core resources for processing commands in command processing logic. The address conversion resource 343f converts a logical address (eg, a logical block address (LBA)) parsed from an instruction into a physical address (eg, a physical page number (PPN)) of the non-volatile memory 122 or 222 . The PRP/SGL buffer 343g may temporarily store the PRP or SGL parsed from the command The command completion resource 343h may include resources for completing command completion.

어떤 명령을 실행하기 위해 다양한 유형의 리소스가 필요한 경우, 일부 유형의 리소스가 사용 가능하지만 다른 일부 유형의 리소스가 사용 가능하지 않은 경우, 명령 전처리 로직(320)은 해당 명령이 실행 가능하지 않다고 판단하고, 해당 명령을 페치하지 않을 수 있다. 또한, 복수의 유형의 공유 리소스(343a-343h) 중에서 일부 유형의 공유 리소스(예를 들면, 태그 리소스(343c))는 사용 가능하지만, 다른 일부 유형의 공유 리소스(예를 들면, 어드레스 변환 리소스(343f))가 사용 가능하지 않은 경우, 명령 전처리 로직(320)은 공유 리소스(343)가 사용 가능하지 않다고 판단할 수 있다.If an instruction requires resources of various types to execute, if some types of resources are available but some other types of resources are not available, the instruction preprocessing logic 320 determines that the instruction is not executable, and , may not fetch that instruction. In addition, among the plurality of types of shared resources 343a to 343h, some types of shared resources (eg, tag resources 343c) can be used, but some other types of shared resources (eg, address conversion resources ( If 343f)) is not available, command preprocessing logic 320 may determine that shared resource 343 is not available.

예를 들면, 도 5 및 도 6에 도시한 것처럼, 제출 큐(SQ1)에 두 개의 쓰기 명령과 두 개의 읽기 명령이 입력되고, 제출 큐(SQ2)에 네 개의 쓰기 명령과 한 개의 읽기 명령이 입력되고, 제출 큐(SQ3)에 네 개의 읽기 명령과 한 개의 쓰기 명령이 입력되고, 제출 큐(SQ1, SQ2, SQ3)에서 헤드 포인터는 첫 번째 엔트리를 포인트하고, 중재 버스트 크기는 4인 것으로 가정한다. 도 5 및 도 6에서 쓰기 명령을 "W"로, 읽기 명령을 "R"로 표시한다. 또한, 장치 리소스(340) 중에서 쓰기 리소스(342)가 소진되어 사용 가능하지 않은 상태인 것으로 가정한다.For example, as shown in FIGS. 5 and 6, two write commands and two read commands are input to the submission queue SQ1, and four write commands and one read command are input to the submission queue SQ2. Assume that four read commands and one write command are input to the submission queue (SQ3), the head pointer points to the first entry in the submission queue (SQ1, SQ2, and SQ3), and the arbitration burst size is 4. . In FIGS. 5 and 6 , a write command is indicated by “W” and a read command is indicated by “R”. Also, it is assumed that the write resource 342 among the device resources 340 is exhausted and unavailable.

이 경우, 전형적인 장치 컨트롤러는 제출 큐(SQ1)에서 쓰기 명령을 페치하고, 페치한 쓰기 명령의 실행을 위한 쓰기 리소스(342)가 사용 가능해질 때까지 대기할 수 있다. 또한, 장치 컨트롤러는 쓰기 리소스가 사용 가능해질 때까지 공유 리소스(343)를 차단할 수 있다. 장치 컨트롤러는 쓰기 리소스(342)가 사용 가능해지면 제출 큐(SQ1)에서 페치한 쓰기 명령 및 읽기 명령을 실행한 후에, 다음 제출 큐(SQ2)에서 명령을 페치할 수 있다. 따라서, 리소스가 사용 가능해질 때까지 모든 명령의 실행을 기다리므로, 대기 시간이 길어질 수 있다. 또한, 쓰기 명령이 대기 중인 상태에서도 쓰기 명령은 공유 리소스(343)를 점유하므로, 읽기 리소스(341)가 사용 가능한 상태에서 읽기 명령이 페치되더라도 공유 리소스(343)가 사용 가능해질 때까지 읽기 명령이 실행될 수 없을 수 있다.In this case, the typical device controller may fetch the write command from the submit queue SQ1 and wait until the write resource 342 for execution of the fetched write command becomes available. Additionally, the device controller may block the shared resource 343 until a write resource becomes available. When the write resource 342 becomes available, the device controller may execute a write command and a read command fetched from the submit queue SQ1 and then fetch commands from the next submit queue SQ2. Therefore, the execution of all commands waits until the resource becomes available, which can lead to a long waiting time. In addition, since the write command occupies the shared resource 343 even while the write command is waiting, even if the read command is fetched while the read resource 341 is available, the read command continues until the shared resource 343 becomes available. may not be feasible.

어떤 실시예에서, 도 5에 도시한 것처럼, 명령 페치 로직(310)은 복수의 제출 큐(SQ1, SQ2, SQ3) 중에서 타겟 제출 큐(SQ1)를 선택하고, 제출 큐(SQ1)로부터 두 개의 쓰기 명령과 두 개의 읽기 명령을 피크할 수 있다. 명령 전처리 로직(320)은 쓰기 명령의 실행을 위한 쓰기 리소스(342)가 사용 가능하지 않은 상태이므로, 제출 큐(SQ1)를 리소스 대기 상태로 지정할 수 있다. 이 경우, 제출 큐(SQ1)는 명령이 피크된 상태이므로, 제출 큐(SQ1)의 헤드 포인터는 이동하지 않고 유지될 수 있다. 명령 페치 로직(310)은 다음 제출 큐(SQ2)로부터 네 개의 쓰기 명령을 피크할 수 있다. 마찬가지로, 명령 전처리 로직(320)은 쓰기 명령의 실행을 위한 쓰기 리소스(342)가 사용 가능하지 않은 상태이므로, 제출 큐(SQ2)를 리소스 대기 상태로 지정할 수 있다. 이 경우, 제출 큐(SQ2)도 명령이 피크된 상태이므로, 제출 큐(SQ2)의 헤드 포인터는 이동하지 않고 유지될 수 있다.In some embodiments, as shown in FIG. 5, command fetch logic 310 selects a target submit queue SQ1 from among a plurality of submit queues SQ1, SQ2, and SQ3, and writes two writes from submit queue SQ1. command and two read commands. Since the write resource 342 for executing the write command is not available, the command pre-processing logic 320 may designate the submission queue SQ1 as a resource standby state. In this case, since the submission queue SQ1 is in a command peak state, the head pointer of the submission queue SQ1 can be maintained without moving. The command fetch logic 310 may peak four write commands from the next submit queue SQ2. Similarly, since the write resource 342 for executing the write command is not available, the command pre-processing logic 320 may designate the submission queue SQ2 as a resource standby state. In this case, since the submission queue SQ2 is also in a command peak state, the head pointer of the submission queue SQ2 can be maintained without moving.

도 6에 도시한 것처럼, 명령 전처리 로직(320)은 다음 제출 큐(SQ3)로부터 네 개의 읽기 명령을 피크할 수 있다. 읽기 명령의 실행을 위한 읽기 리소스(341)와 공유 리소스(343)가 사용 가능한 상태이므로, 명령 페치 로직(310)은 읽기 명령을 페치하고, 명령 처리 로직(330)은 페치한 읽기 명령을 실행할 수 있다. 이 경우, 제출 큐(SQ3)의 명령은 페치되었으므로, 제출 큐(SQ3)의 헤드 포인터가 이동될 수 있다. 따라서, 점유 중인 리소스(쓰기 리소스(342))의 해제를 기다리지 않고 즉시 실행 가능한 명령을 먼저 실행할 수 있으므로, 대기 시간을 줄이고, 이에 따라 명령 처리 효율성을 높일 수 있다.As shown in FIG. 6, the command pre-processing logic 320 may peak four read commands from the next submit queue SQ3. Since the read resource 341 and the shared resource 343 for executing the read command are available, the command fetch logic 310 fetches the read command, and the command processing logic 330 can execute the fetched read command. there is. In this case, since the command of the submission queue SQ3 has been fetched, the head pointer of the submission queue SQ3 can be moved. Therefore, since an immediately executable command can be executed first without waiting for the occupied resource (write resource 342) to be released, waiting time can be reduced and command processing efficiency can be increased accordingly.

도 7은 한 실시예에 따른 저장 장치의 장치 컨트롤러의 동작을 예시하는 흐름도이다.7 is a flowchart illustrating operation of a device controller of a storage device according to one embodiment.

도 7을 참고하면, 장치 컨트롤러는 사용 가능한 제출 큐가 존재하는 경우(S730), 사용 가능한 제출 큐에서 타겟 제출 큐를 선택할 수 있다(S735). 어떤 실시예에서, 사용 가능한 제출 큐는 대기 상태로 표시되지 않은 제출 큐일 수 있다. 사용 가능한 제출 큐가 존재하지 않는 경우(S730), 장치 컨트롤러는 동작을 종료할 수 있다. 타겟 제출 큐에 명령이 존재하는 경우(S740), 장치 컨트롤러는 타겟 제출 큐에서 다음 명령을 피크할 수 있다(S745). 장치 컨트롤러는 타겟 제출 큐에서 명령을 피크하고, 헤드 포인터를 이동하지 않고 유지할 수 있다(S745). 어떤 실시예에서, 장치 컨트롤러는 중재 버스트 크기와 타겟 제출 큐에서 이용할 수 있는 명령의 수 중 최소 수에 해당하는 명령을 타겟 제출 큐로부터 피크할 수 있다(S745).Referring to FIG. 7 , when there is an available submission queue (S730), the device controller may select a target submission queue from the available submission queues (S735). In some embodiments, an available submission queue may be a submission queue that has not been marked as pending. When there is no usable submission queue (S730), the device controller may end the operation. If a command exists in the target submission queue (S740), the device controller may pick the next command from the target submission queue (S745). The device controller may pick a command from the target submission queue and maintain the head pointer without moving (S745). In some embodiments, the device controller may pick commands corresponding to the minimum number of the arbitration burst size and the number of commands available in the target submission queue from the target submission queue (S745).

장치 컨트롤러는 장치 리소스의 상태에 기초해서 피크한 명령을 실행 가능성을 판단할 수 있다(S750). 어떤 실시예에서, 장치 컨트롤러는 장치 리소스의 상태, 명령의 I/O 유형 및 명령의 크기에 기초해서 명령의 실행 가능성을 판단할 수 있다(S750). 명령이 실행 가능하다고 판단한 경우(S750), 장치 컨트롤러는 해당 명령을 페치하고, 명령 처리 파이프라인(또는 명령 처리 큐)에 넣어 명령을 실행할 수 있다(S755). 장치 컨트롤러는 타겟 제출 큐에서 헤드 포인터를 이동하여 명령을 페치할 수 있다(S755). 다음, 장치 컨트롤러는 타겟 제출 큐에 다음 명령이 존재하는지를 다시 확인할 수 있다(S740).The device controller may determine the possibility of executing the peak command based on the state of device resources (S750). In some embodiments, the device controller may determine the execution possibility of the command based on the state of device resources, the I/O type of the command, and the size of the command (S750). When it is determined that the command is executable (S750), the device controller fetches the command and puts it into a command processing pipeline (or command processing queue) to execute the command (S755). The device controller may fetch a command by moving a head pointer in the target submission queue (S755). Next, the device controller may check again whether the next command exists in the target submission queue (S740).

명령이 실행 가능하지 않다고 판단한 경우(S750), 장치 컨트롤러는 타겟 제출 큐를 리소스 대기 상태로 표시하고(S760), 사용 가능한 제출 큐가 존재하는지를 확인할 수 있다(S730). 어떤 실시예에서, 리소스 대기 상태는 대기 중인 리소스를 지시하는 정보를 포함할 수 있다. 대기 중인 리소스를 지시하는 정보는 예를 들면 대기 중인 리소스의 종류 또는 대기 중인 리소스의 양 중 적어도 하나를 포함할 수 있다.When it is determined that the command is not executable (S750), the device controller may display the target submission queue as a resource standby state (S760), and check whether an available submission queue exists (S730). In some embodiments, the resource waiting state may include information indicating a waiting resource. The information indicating the standby resource may include, for example, at least one of the type of the standby resource or the amount of the standby resource.

타겟 제출 큐에 명령이 존재하지 않는 경우(S740), 장치 컨트롤러는 사용 가능한 제출 큐에서 다음 타겟 제출 큐를 선택하고(S730, S735), S740 내지 S760을 참고로 하여 설명한 동작을 반복할 수 있다.If the command does not exist in the target submission queue (S740), the device controller may select the next target submission queue from available submission queues (S730 and S735), and repeat the operations described with reference to S740 to S760.

어떤 실시예에서, 대기 상태로 표시된 제출 큐를 처리하기 위해, 장치 컨트롤러는 대기 상태로 지정된 제출 큐가 존재하는지를 확인할 수 있다(S710). 대기 상태로 지정된 제출 큐가 존재하지 않는 경우(S710), 장치 컨트롤러는 사용 가능한 제출 큐 중에서 타겟 제출 큐를 선택하고(S730, S735), S740 내지 S760을 참고로 하여 설명한 동작을 반복할 수 있다.In some embodiments, in order to process the submission queue indicated as a waiting state, the device controller may check whether a submission queue designated as a waiting state exists (S710). If the submission queue designated as a standby state does not exist (S710), the device controller may select a target submission queue from available submission queues (S730 and S735), and repeat the operations described with reference to S740 to S760.

대기 상태로 지정된 제출 큐가 존재하는 경우(S710), 장치 컨트롤러는 대기 상태로 지정된 제출 큐 중에서 제출 큐를 선택할 수 있다(S715). 장치 컨트롤러는 장치 리소스의 상태에 기초해서 선택한 제출 큐의 대기 상태를 해제할 수 있는지를 판단할 수 있다(S720). 어떤 실시예에서, 장치 컨트롤러는 장치 리소스의 상태와 대기 상태의 정보에 기초해서 선택한 제출 큐의 대기 상태를 해제할 수 있는지를 판단할 수 있다(S720). 예를 들면, 대기 중인 리소스의 종류와 대기 중인 리소스의 양에 해당하는 리소스가 장치 리소스에서 사용 가능한 경우, 장치 컨트롤러는 선택한 제출 큐의 대기 상태를 해제할 수 있다. 대기 상태를 해제할 수 없는 경우, 장치 컨트롤러는 대기 상태로 지정된 제출 큐가 추가로 존재하는지를 확인할 수 있다(S710).If there is a submission queue designated as a standby state (S710), the device controller may select a submission queue from among submission queues designated as a standby state (S715). The device controller may determine whether the waiting state of the selected submission queue can be released based on the state of the device resource (S720). In some embodiments, the device controller may determine whether the waiting state of the selected submission queue can be released based on information on the state of the device resource and the waiting state (S720). For example, if resources corresponding to the type of waiting resource and the amount of waiting resources are available in the device resource, the device controller may release the waiting state of the selected submission queue. If the waiting state cannot be released, the device controller may check whether a submission queue designated as waiting state additionally exists (S710).

대기 상태를 해제할 수 있는 경우, 장치 컨트롤러는 선택한 제출 큐를 사용 가능한 제출 큐의 리스트에 추가할 수 있다(S725). 어떤 실시예에서, 장치 컨트롤러는 선택한 제출 큐가 중재 메커니즘에 따라 먼저 선택될 수 있도록 사용 가능한 제출 큐의 리스트의 헤드에 추가할 수 있다. 다음, 장치 컨트롤러는 대기 상태로 표시된 제출 큐가 추가로 존재하는지를 확인하고(S710), S715 내지 S725를 참고로 하여 설명한 동작 또는 S730 내지 S760을 참고로 하여 설명한 동작을 반복할 수 있다.If the waiting state can be released, the device controller can add the selected submission queue to the list of available submission queues (S725). In some embodiments, the device controller may add to the head of a list of available submission queues such that the selected submission queue is selected first according to the arbitration mechanism. Next, the device controller may check whether there is an additional submission queue displayed in a standby state (S710), and may repeat the operation described with reference to S715 to S725 or the operation described with reference to S730 to S760.

다음, 어드레스 변환 리소스를 공유 리소스로 사용하는 실시예에 대해서 도 8을 참고로 하여 설명한다.Next, an embodiment in which an address conversion resource is used as a shared resource will be described with reference to FIG. 8 .

도 8은 다른 실시예에 따른 저장 장치의 장치 컨트롤러의 예시 블록도이다.8 is an exemplary block diagram of a device controller of a storage device according to another embodiment.

도 8을 참고하면, 장치 컨트롤러(800)는 명령 페치 로직(810), 명령 전처리 로직(820), 명령 처리 로직(830) 및 어드레스 변환 회로(840)를 포함할 수 있다.Referring to FIG. 8 , the device controller 800 may include an instruction fetch logic 810 , an instruction pre-processing logic 820 , a command processing logic 830 and an address conversion circuit 840 .

어떤 실시예에서, 장치 컨트롤러(800)는 메모리 버퍼(850)를 더 포함하고, 메모리 버퍼(850)는 복수의 제출 큐(851, 852, ..., 85n)을 포함할 수 있다. 어떤 실시예에서, 복수의 제출 큐(851 ~ 85n)은 호스트 장치의 호스트 메모리(예를 들면, 도 1의 112)에 형성될 수 있다.In some embodiments, the device controller 800 further includes a memory buffer 850, and the memory buffer 850 may include a plurality of submission queues 851, 852, ..., 85n. In some embodiments, a plurality of submission queues 851 - 85n may be formed in the host memory (eg, 112 of FIG. 1 ) of the host device.

어드레스 변환 회로(840)는 어드레스 변환 캐시(841) 및 제어 로직(842)를 포함할 수 있다. 어드레스 변환 캐시(841)는 복수의 엔트리를 갖고, 각 엔트리는 가상 어드레스를 호스트 메모리(예를 들면, 도 1의 112 또는 도 2의 212)의 물리적 어드레스로 변환할 때 사용되는 어드레스 변환 데이터를 저장할 수 있다. 가상 어드레스는 명령의 PRP 또는 SGL에 의해 참조되는 어드레스일 수 있다. 제어 로직(842)은 명령(즉, 명령의 가상 어드레스)이 어드레스 변환 캐시(841)에서 히트(hit)하는지를 확인할 수 있다. 명령이 히트인 경우, 제어 로직(842)은 히트한 엔트리에 기초해서 명령의 가상 어드레스를 물리적 어드레스로 변환할 수 있다. 명령이 어드레스 변환 캐시(841)에서 미스(miss)인 경우, 제어 로직(842)은 호스트 장치(예를 들면, 도 1의 110 또는 도 2의 210)로 명령의 가상 어드레스에 해당하는 물리적 어드레스를 요청할 수 있다. 어떤 실시예에서, 제어 로직(842)은 어드레스 변환 서비스(address translation service, ATS)/페이지 요청 인터페이스(page request interface, PRI)를 통해 물리적 어드레스를 요청할 수 있다.The address translation circuit 840 may include an address translation cache 841 and control logic 842 . The address translation cache 841 has a plurality of entries, and each entry stores address translation data used when converting a virtual address to a physical address of the host memory (e.g., 112 in FIG. 1 or 212 in FIG. 2). can A virtual address can be an address referenced by the PRP or SGL of an instruction. Control logic 842 may check if the instruction (ie, the virtual address of the instruction) hits the address translation cache 841 . If the instruction is a hit, the control logic 842 can translate the instruction's virtual address to a physical address based on the hit entry. If an instruction misses in the address translation cache 841, the control logic 842 sends the physical address corresponding to the instruction's virtual address to the host device (e.g., 110 in FIG. 1 or 210 in FIG. 2). can request In some embodiments, control logic 842 may request a physical address via an address translation service (ATS)/page request interface (PRI).

명령 페치 로직(810)은 복수의 제출 큐(851 ~ 85n)에서 타겟 제출 큐(85i)를 선택하고, 선택한 제출 큐(85i)로부터 명령을 피크할 수 있다.The command fetch logic 810 may select a target submission queue 85i from the plurality of submission queues 851 - 85n and may pick a command from the selected submission queue 85i.

명령 전처리 로직(820)은 피크한 명령이 어드레스 변환 캐시(841)에서 히트인지에 기초해서 명령의 실행 가능성을 판단할 수 있다. 명령이 어드레스 변환 캐시(841)에서 히트인 경우, 명령 전처리 로직(820)은 해당 명령이 실행 가능하다고 판단하고, 명령 페치 로직(810)을 통해 해당 명령을 페치하고, 명령 처리 로직(830)으로 해당 명령을 실행할 것을 지시할 수 있다. 명령 처리 로직(830)은 해당 명령을 명령 처리 파이프라인에 넣고, 어드레스 변환 회로(840)를 통해 명령의 가상 어드레스를 물리적 어드레스로 변환하여 명령을 실행할 수 있다. 피크한 명령이 어드레스 변환 캐시(841)에서 히트이더라도, 피크한 명령을 실행하기 위한 다른 리소스가 부족한 경우에 명령 전처리 로직(820)은 해당 명령이 실행 가능하지 않다고 판단할 수 있다.The instruction pre-processing logic 820 may determine an instruction's feasibility based on whether the peaked instruction is a hit in the address translation cache 841. If the instruction is a hit in the address translation cache 841, the instruction preprocessing logic 820 determines that the instruction is executable, fetches the instruction via the instruction fetch logic 810, and to the instruction processing logic 830. You can instruct the command to be executed. The command processing logic 830 may put the corresponding command into the command processing pipeline and convert the virtual address of the command to a physical address through the address conversion circuit 840 to execute the command. Even if the peaked instruction is a hit in the address translation cache 841, the instruction preprocessing logic 820 may determine that the instruction is not executable if other resources are insufficient to execute the peaked instruction.

피크한 명령이 어드레스 변환 캐시(841)에서 미스인 경우, 어드레스 변환 회로(840)의 제어 로직(842)은 피크한 명령의 가상 어드레스에 해당하는 물리적 어드레스를 호스트 장치로 요청하고, 명령 전처리 로직(820)은 제출 큐(85i)를 리소스 대기 상태로 지정할 수 있다. 제어 로직(842)이 호스트 장치로부터 물리적 어드레스를 수신하여 어드레스 변환 캐시(841)가 사용 가능해지는 경우, 제출 큐(85i)의 대기 상태를 해제하고 제출 큐(85i)의 명령을 실행할 수 있다.If the peak command misses in the address translation cache 841, the control logic 842 of the address translation circuit 840 requests a physical address corresponding to the virtual address of the peak command to the host device, and the command pre-processing logic ( 820) may designate the submission queue 85i as a resource standby state. When the control logic 842 receives the physical address from the host device and the address translation cache 841 becomes available, the wait state of the submission queue 85i may be released and the command of the submission queue 85i may be executed.

도 9는 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러를 예시하는 도면이며, 도 10은 도 9에 도시한 장치 컨트롤러의 동작의 한 예를 설명하는 도면이다.FIG. 9 is a diagram illustrating a device controller of a storage device according to another embodiment, and FIG. 10 is a diagram illustrating an example of an operation of the device controller illustrated in FIG. 9 .

도 9를 참고하면, 장치 컨트롤러(900)는 명령 페치 로직(910), 명령 전처리 로직(920), 명령 처리 로직(930), 장치 리소스(940) 및 펜딩 명령 큐(pending command queue)(960)를 포함할 수 있다.Referring to FIG. 9 , the device controller 900 includes a command fetch logic 910, a command preprocessing logic 920, a command processing logic 930, a device resource 940, and a pending command queue 960. can include

어떤 실시예에서, 장치 컨트롤러(900)는 메모리 버퍼(950)를 더 포함하고, 메모리 버퍼(950)는 복수의 제출 큐(951, 952, ..., 95n)를 포함할 수 있다. 어떤 실시예에서, 복수의 제출 큐(951 ~ 95n)는 호스트 장치의 호스트 메모리(예를 들면, 도 1의 112)에 형성될 수 있다.In some embodiments, the device controller 900 further includes a memory buffer 950, and the memory buffer 950 may include a plurality of submission queues 951, 952, ..., 95n. In some embodiments, a plurality of submission queues 951 - 95n may be formed in the host memory (eg, 112 of FIG. 1 ) of the host device.

어떤 실시예에서, 펜딩 명령 큐(960)는 실행 가능하지 않은 읽기 명령을 저장하는 펜딩 읽기 명령 큐(961)과 실행 가능하지 않은 쓰기 명령을 저장하는 펜딩 쓰기 명령 큐(962)를 포함할 수 있다. 어떤 실시예에서, 펜딩 명령 큐의 크기는 중재 버스트 크기, 제출 큐(951 ~ 95n)의 개수 및 장치 컨트롤러(900)에서 동시에 실행할 수 있는 명령의 최대 개수에 기초해서 설정될 수 있다.In some embodiments, pending command queue 960 may include a pending read command queue 961 for storing non-executable read commands and a pending write command queue 962 for storing non-executable write commands. . In some embodiments, the size of the pending command queue may be set based on the arbitration burst size, the number of submit queues 951-95n, and the maximum number of commands that the device controller 900 can execute concurrently.

명령 페치 로직(910)은 제출 큐(95i)로부터 명령을 피크할 수 있다. 제출 큐(95i)로부터 명령을 피크하는 경우, 명령 페치 로직(910)은 제출 큐(95i)의 헤드 포인터를 이동하지 않을 수 있다. 어떤 실시예에서, 명령 페치 로직(910)은 복수의 제출 큐(951 ~ 95n)에서 타겟 제출 큐(95i)를 선택하고, 선택한 제출 큐(95i)로부터 명령을 피크할 수 있다.Instruction fetch logic 910 may pick an instruction from submit queue 95i. When peaking an instruction from submit queue 95i, instruction fetch logic 910 may not move the head pointer of submit queue 95i. In some embodiments, the command fetch logic 910 may select a target submit queue 95i from the plurality of submit queues 951 - 95n and pick a command from the selected submit queue 95i.

명령 전처리 로직(920)은 장치 리소스(940)의 상태에 기초해서 피크한 명령의 실행 가능성을 판단할 수 있다. 어떤 실시예에서, 장치 리소스(940)는 읽기 명령을 처리하기 위한 읽기 리소스(941) 및 쓰기 명령을 처리하기 위한 쓰기 리소스(942)를 포함할 수 있다. 장치 리소스(940)는 읽기 명령과 쓰기 명령이 공유하는 공유 리소스(943)를 더 포함할 수 있다.Command pre-processing logic 920 may determine the feasibility of the peak command based on the state of device resources 940 . In some embodiments, device resources 940 may include read resources 941 for processing read commands and write resources 942 for processing write commands. The device resource 940 may further include a shared resource 943 shared by a read command and a write command.

명령 전처리 로직(920)은 피크한 명령이 실행 가능하다고 판단한 경우, 명령 페치 로직(910)을 통해 해당 명령을 페치하고, 명령 처리 로직(930)으로 페치한 명령을 실행할 것을 지시할 수 있다. 명령 페치 로직(910)은 제출 큐(95i)의 헤드 포인터를 이동함으로써 제출 큐(95i)로부터 명령을 페치할 수 있다. 명령 처리 로직(930)은 페치한 명령에 장치 리소스(940)를 할당하고 페치한 명령을 실행할 수 있다. 피크한 명령이 실행 가능하지 않다고 판단한 경우, 명령 전처리 로직(920)은 실행 가능하지 않은 명령을 리소스 할당 없이 펜딩 명령 큐(960)에 넣고, 명령 페치 로직(910)을 통해 해당 명령을 페치할 수 있다. 즉, 실행 가능하지 않은 명령을 펜딩 명령 큐(960)로 이동함에 따라, 명령 페치 로직(910)은 제출 큐(95i)에서 헤드 포인터를 이동할 수 있다.When the command pre-processing logic 920 determines that the peak command is executable, the command fetch logic 910 fetches the command and commands the command processing logic 930 to execute the fetched command. Instruction fetch logic 910 may fetch an instruction from submit queue 95i by moving the head pointer of submit queue 95i. The command processing logic 930 may allocate device resources 940 to the fetched command and execute the fetched command. If it is determined that the peaked instruction is not executable, the instruction preprocessing logic 920 may place the non-executable instruction into the pending instruction queue 960 without allocating resources and fetch the instruction through the instruction fetch logic 910. there is. That is, as it moves a non-executable instruction to the pending instruction queue 960, the instruction fetch logic 910 can move the head pointer in the submit queue 95i.

어떤 실시예에서, 명령 전처리 로직(920)은 피크한 명령 중 일부 명령이 실행 가능하고 나머지 일부 명령이 실행 가능하지 않다고 판단한 경우, 명령 처리 로직(930)으로 실행 가능한 명령을 실행할 것을 지시하고, 실행 가능하지 않은 명령을 펜딩 명령 큐(960)에 넣을 수 있다. 예를 들면, 명령 페치 로직(910)이 제출 큐(95i)에서 피크한 명령이 읽기 명령과 쓰기 명령을 포함하고, 읽기 리소스(941)는 사용 가능하지만 쓰기 리소스(942)가 소진된 경우, 명령 전처리 로직(920)은 쓰기 명령을 펜딩 쓰기 명령 큐(962)에 넣고, 명령 처리 로직(930)은 읽기 명령을 실행할 수 있다. 펜딩 명령 큐(960)가 꽉 찬(full) 경우, 명령 전처리 로직(920)는 피크한 명령을 펜딩 명령 큐(960)에 넣지 않고 드롭할 수 있다. 어떤 실시예에서, 피크한 명령을 드롭한 경우, 명령 전처리 로직(920)은 도 3 내지 도 8을 참고로 하여 설명한 것처럼, 제출 큐(95i)를 리소스 대기 상태로 지정할 수 있다.In some embodiments, if command preprocessing logic 920 determines that some of the peaked commands are executable and some others are not, it instructs command processing logic 930 to execute the executable commands and executes them. Commands that are not available may be put into the pending command queue 960 . For example, if the command that command fetch logic 910 peaked in submit queue 95i includes a read command and a write command, and read resource 941 is available but write resource 942 is exhausted, the command The preprocessing logic 920 puts the write command into the pending write command queue 962, and the command processing logic 930 can execute the read command. If the pending command queue 960 is full, the command preprocessing logic 920 may drop the peaked command instead of putting it into the pending command queue 960 . In some embodiments, upon dropping a peak command, the command pre-processing logic 920 may place the submit queue 95i in a wait-for-resource state, as described with reference to FIGS. 3-8.

타겟 제출 큐(95i)를 처리한 후에, 장치 컨트롤러(900)는 복수의 제출 큐(951 ~ 95n)에서 다음 타겟 제출 큐(95j)를 선택하고, 선택한 제출 큐(95j)에서 명령을 페치하고 페치한 명령이 실행 가능한지를 판단하는 과정을 반복할 수 있다.After processing the target submission queue 95i, the device controller 900 selects the next target submission queue 95j from the plurality of submission queues 951 to 95n, fetches an instruction from the selected submission queue 95j, and fetches The process of determining whether a command is executable can be repeated.

어떤 실시예에서, 명령 전처리 로직(920)은 장치 리소스(940)의 상태를 모니터링하고, 명령 펜딩 큐(960)에 저장된 명령을 실행하기 위한 리소스가 사용 가능한 상태로 된 경우, 명령 펜딩 큐(960)에 저장된 명령을 페치하고, 명령 처리 로직(930)에 해당 명령을 실행할 것을 지시할 수 있다. 어떤 실시예에서, 명령 전처리 로직(920)은 명령 펜딩 큐(960)에 저장된 명령을 피크하고, 피크한 명령이 실행 가능한지를 판단하는 과정을 수행할 수도 있다.In some embodiments, command preprocessing logic 920 monitors the status of device resources 940 and, if resources for executing commands stored in command pending queue 960 become available, command pending queue 960 ), and instructs the command processing logic 930 to execute the corresponding command. In some embodiments, command pre-processing logic 920 may peak commands stored in command pending queue 960 and determine whether the peaked command is executable.

예를 들면, 도 10에 도시한 것처럼, 제출 큐(SQ1)에 두 개의 쓰기 명령(W0, W1)과 한 개의 읽기 명령(R0)이 입력되고, 제출 큐(SQ2)에 한 개의 읽기 명령(R1)과 두 개의 쓰기 명령(W2, W3)이 입력되고, 제출 큐(SQ3)에 두 개의 쓰기 명령(W4, W5)과 한 개의 읽기 명령(R2)이 입력되고, 제출 큐(SQ1, SQ2, SQ3)에서 헤드 포인터는 첫 번째 엔트리를 포인트하고, 중재 버스트는 3인 것으로 가정한다. 또한, 장치 리소스(940) 중에서 쓰기 리소스(942)가 소진되어 사용 가능하지 않은 상태인 것으로 가정한다.For example, as shown in FIG. 10, two write commands (W0, W1) and one read command (R0) are input to the submission queue (SQ1), and one read command (R1) is input to the submission queue (SQ2). ) and two write commands (W2, W3) are input, two write commands (W4, W5) and one read command (R2) are input to the submit queue (SQ3), and the submit queue (SQ1, SQ2, SQ3) ), the head pointer points to the first entry, and the arbitration burst is assumed to be 3. Also, it is assumed that the write resource 942 among the device resources 940 is exhausted and unavailable.

명령 페치 로직(910)은 복수의 제출 큐(SQ1, SQ2, SQ3) 중에서 타겟 제출 큐(SQ1)를 선택하고, 제출 큐(SQ1)로부터 명령(W0, W1, R0)을 페치할 수 있다. 명령 전처리 로직(920)은 쓰기 리소스(942)가 사용 가능하지 않은 상태이므로 쓰기 명령(W0, W1)을 펜딩 쓰기 명령 큐(962)에 넣을 수 있다. 또한 읽기 리소스(941)과 공유 리소스(943)가 사용 가능한 상태이므로, 명령 전처리 로직(920)은 명령 처리 로직(930)으로 읽기 명령(R0)을 실행할 것을 지시하고, 명령 처리 로직(930)은 읽기 명령(R0)을 실행할 수 있다.The instruction fetch logic 910 may select a target submission queue SQ1 from among the plurality of submission queues SQ1 , SQ2 , and SQ3 and fetch instructions W0 , W1 , and R0 from the submission queue SQ1 . Since the write resource 942 is not available, the command preprocessing logic 920 may put the write commands W0 and W1 into the pending write command queue 962 . Also, since the read resource 941 and the shared resource 943 are available, the command preprocessing logic 920 instructs the command processing logic 930 to execute the read command R0, and the command processing logic 930 Read command (R0) can be executed.

명령 페치 로직(910)은 다음 타겟 제출 큐(SQ2)를 선택하고, 제출 큐(SQ2)로부터 명령(R1, W2, W3)을 페치할 수 있다. 명령 전처리 로직(920)은 명령 처리 로직(930)으로 읽기 명령(R1)을 실행할 것을 지시하고, 명령 처리 로직(930)은 읽기 명령(R1)을 실행할 수 있다. 또한, 명령 전처리 로직(920)은 쓰기 리소스(942)가 사용 가능하지 않은 상태이므로 쓰기 명령(W2, W3)을 펜딩 쓰기 명령 큐(962)에 넣을 수 있다.The instruction fetch logic 910 may select the next target submit queue SQ2 and fetch instructions R1, W2, and W3 from submit queue SQ2. The command pre-processing logic 920 instructs the command processing logic 930 to execute the read command R1, and the command processing logic 930 may execute the read command R1. Also, since the write resource 942 is not available, the command preprocessing logic 920 may put the write commands W2 and W3 into the pending write command queue 962 .

명령 페치 로직(910)은 다음 타겟 제출 큐(SQ3)를 선택하고, 제출 큐(SQ3)로부터 명령(W4, W5, R2)을 페치할 수 있다. 명령 전처리 로직(920)은 쓰기 리소스(942)가 사용 가능하지 않은 상태이므로 쓰기 명령(W4, W5)을 펜딩 쓰기 명령 큐(962)에 넣고, 명령 처리 로직(930)으로 읽기 명령(R2)을 실행할 것을 지시할 수 있다.The instruction fetch logic 910 may select the next target submit queue SQ3 and fetch instructions W4, W5, and R2 from submit queue SQ3. Since the write resource 942 is not available, the command preprocessing logic 920 puts the write commands W4 and W5 into the pending write command queue 962 and sends the read command R2 to the command processing logic 930. You can instruct what to do.

쓰기 리소스(942)가 사용 가능한 상태로 되는 경우, 명령 전처리 로직(920)은 펜딩 쓰기 명령 큐(962)에서 쓰기 명령(W0-W5)을 페치하고, 명령 처리 로직(930)으로 쓰기 명령(W0-W5)을 실행할 것을 지시할 수 있다.When write resources 942 become available, command preprocessing logic 920 fetches write commands W0-W5 from pending write command queue 962 and write commands W0 to command processing logic 930. -W5) can be instructed to run.

도 11은 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러의 동작을 예시하는 흐름도이다.11 is a flowchart illustrating an operation of a device controller of a storage device according to another embodiment.

도 11을 참고하면, 장치 컨트롤러는 사용 가능한 제출 큐가 존재하는 경우(S1130), 사용 가능한 제출 큐에서 타겟 제출 큐를 선택할 수 있다(S1135). 사용 가능한 제출 큐가 존재하지 않는 경우(S1130), 장치 컨트롤러는 동작을 종료할 수 있다. 타겟 제출 큐에 명령이 존재하는 경우(S1140), 장치 컨트롤러는 타겟 제출 큐에서 다음 명령을 피크할 수 있다(S1145). 장치 컨트롤러는 타겟 제출 큐에서 명령을 피크하고, 헤드 포인터를 이동하지 않고 유지할 수 있다(S1145).Referring to FIG. 11 , when there are available submission queues (S1130), the device controller may select a target submission queue from the available submission queues (S1135). If there is no usable submission queue (S1130), the device controller may end the operation. When a command exists in the target submission queue (S1140), the device controller may pick the next command from the target submission queue (S1145). The device controller may pick a command from the target submission queue and maintain the head pointer without moving (S1145).

장치 컨트롤러는 장치 리소스의 상태를 포함하는 정보에 기초해서 피크한 명령의 실행 가능성을 판단할 수 있다(S1150). 피크한 명령 중 실행 가능한 명령이 존재하는 경우(S1150), 장치 컨트롤러는 해당 명령을 페치하고, 명령 처리 파이프라인(또는 명령 처리 큐)에 넣어 명령을 실행할 수 있다(S1155). 장치 컨트롤러는 타겟 제출 큐에서 헤드 포인터를 이동하여 명령을 페치할 수 있다(S1155). 페치한 명령 중 실행 가능하지 않은 명령이 존재하는 경우(S1150), 장치 컨트롤러는 실행 가능하지 않은 명령을 펜딩 명령 큐에 넣을 수 있다(S1160). 어떤 실시예에서, 장치 컨트롤러는 실행 가능하지 않은 명령을 펜딩 명령 큐에 넣고, 해당 명령을 제출 큐에서 페치할 수 있다(S1160). 장치 컨트롤러는 타겟 제출 큐에서 헤드 포인터를 이동하여 명령을 페치할 수 있다(S1160).The device controller may determine the execution possibility of the peak command based on the information including the state of the device resource (S1150). If there is an executable command among the peaked commands (S1150), the device controller may fetch the corresponding command and put it into a command processing pipeline (or command processing queue) to execute the command (S1155). The device controller may fetch a command by moving a head pointer in the target submission queue (S1155). If there is a non-executable command among the fetched commands (S1150), the device controller may put the non-executable command into the pending command queue (S1160). In some embodiments, the device controller may put an unexecutable command into a pending command queue and fetch the corresponding command from a submission queue (S1160). The device controller may fetch a command by moving a head pointer in the target submission queue (S1160).

장치 컨트롤러는 타겟 제출 큐에 다음 명령이 존재하는지를 확인할 수 있다(S1140). 타겟 제출 큐에 다음 명령이 존재하는 경우(S1140), 장치 컨트롤러는 S1145 내지 S1160을 참고로 하여 설명한 동작을 반복할 수 있다.The device controller may check whether the next command exists in the target submission queue (S1140). When the next command exists in the target submission queue (S1140), the device controller may repeat the operations described with reference to S1145 to S1160.

타겟 제출 큐에 명령이 존재하지 않는 경우(S1140), 장치 컨트롤러는 사용 가능한 제출 큐에서 다음 타겟 제출 큐를 선택하고(S1130, S1135), S1140 내지 S1160을 참고로 하여 설명한 동작을 반복할 수 있다.If there is no command in the target submission queue (S1140), the device controller may select the next target submission queue from available submission queues (S1130 and S1135), and repeat the operations described with reference to S1140 to S1160.

어떤 실시예에서, 펜딩 명령 큐를 처리하기 위해, 장치 컨트롤러는 펜딩 명령 큐에 명령이 존재하는지를 확인할 수 있다(S1110). 펜딩 명령 큐에 명령이 존재하지 않는 경우(S1110), 장치 컨트롤러는 사용 가능한 제출 큐 중에서 타겟 제출 큐를 선택하고(S1130, S1135), S1140 내지 S1160을 참고로 하여 설명한 동작을 반복할 수 있다.In some embodiments, in order to process the pending command queue, the device controller may check whether a command exists in the pending command queue (S1110). When no command exists in the pending command queue (S1110), the device controller may select a target submission queue from available submission queues (S1130 and S1135), and repeat the operations described with reference to S1140 to S1160.

펜딩 명령 큐에 명령이 존재하는 경우(S1110), 장치 컨트롤러는 펜딩 명령 큐의 명령을 실행할 수 있는지를 판단할 수 있다(S1120). 어떤 실시예에서, 장치 컨트롤러는 장치 리소스의 상태와 펜딩 명령 큐의 I/O 유형에 기초해서 펜딩 명령 큐의 명령을 실행할 수 있는지를 판단할 수 있다(S1120). 예를 들면, 장치 컨트롤러는 공유 리소스와 읽기 리소스가 사용 가능한 경우 펜딩 읽기 명령 큐의 명령을 실행할 수 있다고 판단하고, 공유 리소스와 쓰기 리소스가 사용 가능한 경우 펜딩 쓰기 명령 큐의 명령을 실행할 수 있다고 판단할 수 있다. 펜딩 명령 큐의 명령을 실행할 수 있는 경우, 장치 컨트롤러는 펜딩 명령 큐의 명령을 페치해서 실행할 수 있다(S1125).When a command exists in the pending command queue (S1110), the device controller may determine whether the command in the pending command queue can be executed (S1120). In some embodiments, the device controller may determine whether the command of the pending command queue can be executed based on the state of the device resource and the I/O type of the pending command queue (S1120). For example, the device controller may determine that a command in the pending read command queue can be executed if shared and read resources are available, and a command in the pending write command queue can be executed if shared and write resources are available. can If the command of the pending command queue can be executed, the device controller can fetch and execute the command of the pending command queue (S1125).

펜딩 명령 큐의 명령을 실행할 수 없는 경우(S1120), 장치 컨트롤러는 사용 가능한 제출 큐 중에서 타겟 제출 큐를 선택하고(S1130, S1135), S1140 내지 S1160을 참고로 하여 설명한 동작을 반복할 수 있다.When the command of the pending command queue cannot be executed (S1120), the device controller may select a target submission queue from available submission queues (S1130 and S1135), and repeat the operations described with reference to S1140 to S1160.

도 12는 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러를 예시하는 도면이며, 도 13은 도 12에 도시한 장치 컨트롤러의 동작의 한 예를 설명하는 도면이다.FIG. 12 is a diagram illustrating a device controller of a storage device according to another embodiment, and FIG. 13 is a diagram illustrating an example of an operation of the device controller illustrated in FIG. 12 .

도 12를 참고하면, 장치 컨트롤러(1200)는 명령 페치 로직(1210), 명령 전처리 로직(1220), 명령 처리 로직(1230) 및 장치 리소스(1240)를 포함할 수 있다.Referring to FIG. 12 , the device controller 1200 may include an instruction fetch logic 1210, an instruction pre-processing logic 1220, a command processing logic 1230, and a device resource 1240.

어떤 실시예에서, 장치 컨트롤러(1200)는 메모리 버퍼(1250)를 더 포함하고, 메모리 버퍼(1250)는 복수의 제출 큐(1251, 1252, ..., 125n)를 포함할 수 있다. 어떤 실시예에서, 복수의 제출 큐(1251 ~ 125n)는 호스트 장치의 호스트 메모리(예를 들면, 도 1의 112)에 형성될 수 있다.In some embodiments, the device controller 1200 further includes a memory buffer 1250, and the memory buffer 1250 may include a plurality of submission queues 1251, 1252, ..., 125n. In some embodiments, a plurality of submission queues 1251 - 125n may be formed in a host memory (eg, 112 of FIG. 1 ) of the host device.

명령 페치 로직(1210)은 제출 큐(125i)로부터 명령을 피크할 수 있다. 제출 큐(125i)로부터 명령을 피크하는 경우, 명령 페치 로직(1210)은 제출 큐(125i)의 헤드 포인터를 이동하지 않을 수 있다. 어떤 실시예에서, 명령 페치 로직(1210)은 복수의 제출 큐(1251 ~ 125n)에서 타겟 제출 큐(125i)를 선택하고, 선택한 제출 큐(125i)로부터 명령을 피크할 수 있다.The instruction fetch logic 1210 may pick an instruction from the submit queue 125i. When peaking an instruction from submit queue 125i, the instruction fetch logic 1210 may not move the head pointer of submit queue 125i. In some embodiments, the command fetch logic 1210 may select a target submit queue 125i from the plurality of submit queues 125i-125n and pick a command from the selected submit queue 125i.

명령 전처리 로직(1220)은 장치 리소스(1240)의 상태에 기초해서 피크한 명령의 실행 가능성을 판단할 수 있다. 어떤 실시예에서, 장치 리소스(1240)는 읽기 명령을 처리하기 위한 읽기 리소스(1241) 및 쓰기 명령을 처리하기 위한 쓰기 리소스(1242)를 포함할 수 있다. 장치 리소스(1240)는 읽기 명령과 쓰기 명령이 공유하는 공유 리소스(1243)를 더 포함할 수 있다.Command preprocessing logic 1220 may determine the feasibility of the peak command based on the state of device resources 1240 . In some embodiments, device resources 1240 may include read resources 1241 for processing read commands and write resources 1242 for processing write commands. The device resource 1240 may further include a shared resource 1243 shared by a read command and a write command.

명령 전처리 로직(1220)은 피크한 명령이 실행 가능하다고 판단한 경우, 명령 처리 로직(1230)으로 피크한 명령을 페치하고, 페치한 명령을 실행할 것을 지시할 수 있다. 명령 페치 로직(1210)은 제출 큐(125i)의 헤드 포인터를 이동함으로써 제출 큐(125i)로부터 명령을 페치할 수 있다. 명령 처리 로직(1230)은 페치한 명령에 장치 리소스(1240)를 할당하고 페치한 명령을 실행할 수 있다. 어떤 실시예에서, 피크한 명령이 실행 가능하지 않다고 판단한 경우, 명령 전처리 로직(1220)은 명령 페치 로직(1210)에 실행 가능하지 않은 명령을 제출 큐(125i)로 다시 푸시(push)할 것을 지시할 수 있다. 어떤 실시예에서, 명령 페치 로직(1210)은 제출 큐(125i)의 헤드 포인터를 조작하여 실행 가능하지 않은 명령을 제출 큐(125i)에서 패킹(packing)할 수 있다. 이에 따라, 제출 큐(125i)에서는 순서에서 벗어난(out of order) 명령 처리가 수행될 수 있다.When the command preprocessing logic 1220 determines that the peaked command is executable, it may instruct the command processing logic 1230 to fetch the peaked command and execute the fetched command. Instruction fetch logic 1210 may fetch an instruction from submit queue 125i by moving the head pointer of submit queue 125i. The command processing logic 1230 may allocate device resources 1240 to the fetched command and execute the fetched command. In some embodiments, if it determines that the peaked instruction is not executable, the instruction preprocessing logic 1220 instructs the instruction fetch logic 1210 to push the non-executable instruction back to the submit queue 125i. can do. In some embodiments, instruction fetch logic 1210 may manipulate the head pointer of submit queue 125i to pack non-executable instructions in submit queue 125i. Accordingly, out of order command processing may be performed in the submission queue 125i.

어떤 실시예에서, 명령 페치 로직(1210)은 제출 큐(125i)의 헤드부터 테일까지 명령을 차례로 피크하고, 명령 전처리 로직(1220)은 피크한 명령이 실행 가능한지를 판단할 수 있다. 피크한 명령 중 일부 명령이 실행 가능하고 나머지 일부 명령이 실행 가능하지 않다고 판단한 경우, 명령 전처리 로직(1220)은 명령 처리 로직(1230)으로 실행 가능한 명령을 실행할 것을 지시하고, 실행 가능하지 않은 명령을 제출 큐(125i)에서 다시 패킹할 수 있다. 명령 페치 로직(1210)이 제출 큐(125i)에서 피크한 명령이 읽기 명령과 쓰기 명령을 포함하고, 읽기 리소스(1241)는 사용 가능하지만 쓰기 리소스(1242)가 소진된 경우, 명령 처리 로직(1230)은 읽기 명령을 실행할 수 있다. 명령 페치 로직(1210)은 제출 큐(125i)의 헤드 포인터를 페치된 읽기 명령의 수만큼 이동하고, 이동한 헤드 포인터가 지시하는 헤드 엔트리부터 쓰기 명령을 패킹할 수 있다.In some embodiments, instruction fetch logic 1210 may sequentially peak instructions from head to tail of submit queue 125i, and instruction preprocessing logic 1220 may determine whether the peaked instruction is executable. If it is determined that some of the peaked commands are executable and some of the others are not, the command preprocessing logic 1220 instructs the command processing logic 1230 to execute the executable commands, and rejects the non-executable commands. You can pack again in the submit queue 125i. If the commands that the command fetch logic 1210 has peaked in the submit queue 125i include a read command and a write command, and the read resource 1241 is available but the write resource 1242 is exhausted, the command processing logic 1230 ) can execute the read command. The instruction fetch logic 1210 may move the head pointer of the submission queue 125i by the number of fetched read instructions, and may pack write instructions from the head entry indicated by the moved head pointer.

어떤 실시예에서, 제출 큐(125i)가 호스트 메모리(112)에 형성된 경우, 명령 페치 로직(1210)은 호스트 장치로 제출 큐(125i)의 쓰기 권한을 요청하고, 호스트 장치로부터 쓰기 권한을 받은 후에 제출 큐(125i)의 명령을 패킹할 수 있다.In some embodiments, when submit queue 125i is formed in host memory 112, command fetch logic 1210 requests write access to submit queue 125i from the host device, and after receiving write access from the host device, The commands in the submit queue 125i may be packed.

어떤 실시예에서, 명령 전처리 로직(1220)은 명령을 패킹한 제출 큐(125i)를 도 3 내지 도 7을 참고로 하여 설명한 것처럼 리소스 대기 상태로 지정할 수 있다. 어떤 실시예에서, 명령 전처리 로직(1220)은 패킹한 제출 큐(125i)가 대기하는 리소스 정보를 표시할 수 있다. 리소스 정보는 예를 들면 대기하는 리소스의 종류 또는 대기하는 리소스의 양 중 적어도 하나를 포함할 수 있다.In some embodiments, the command preprocessing logic 1220 may place the command-packed submit queue 125i in a wait-for-resource state, as described with reference to FIGS. 3-7. In some embodiments, command preprocessing logic 1220 may indicate resource information that packed submit queue 125i awaits. The resource information may include, for example, at least one of the type of standby resource or the amount of standby resource.

도 13에 도시한 것처럼, 예를 들면, 제출 큐(SQ)에 쓰기 명령(W0, W1), 읽기 명령(R0), 쓰기 명령(W2), 읽기 명령(R1) 및 쓰기 명령(W3) 순으로 명령이 입력된 것으로 가정한다. 또한, 장치 리소스(1240) 중에서 쓰기 리소스(1242)가 소진되어 사용 가능하지 않은 상태인 것으로 가정한다.As shown in FIG. 13, for example, a write command (W0, W1), a read command (R0), a write command (W2), a read command (R1), and a write command (W3) are sequentially sent to the submission queue (SQ). Assume that the command is entered. Also, it is assumed that the write resource 1242 among the device resources 1240 is exhausted and unavailable.

명령 페치 로직(1210)은 제출 큐(SQ)에서 명령을 차례로 피크하고, 읽기 리소스(1241)과 공유 리소스(1243)가 사용 가능한 상태이므로, 읽기 명령(R0, R1)을 페치할 수 있다. 명령 처리 로직(1230)은 페치한 읽기 명령(R0, R1)을 리소스를 할당하고 실행할 수 있다. 또한, 명령 페치 로직(1210)은 두 개의 읽기 명령(R0, R1)을 페치하였으므로, 제출 큐(SQ)의 헤드 포인터를 h에서 (h-2)로 이동하고, 헤드 포인터 (h-2)가 지시하는 제출 큐(SQ)의 엔트리부터 쓰기 명령(W0, W1, W2, W3)을 다시 패킹할 수 있다.The instruction fetch logic 1210 sequentially picks instructions from the submission queue SQ, and since the read resource 1241 and the shared resource 1243 are available, read instructions R0 and R1 can be fetched. The command processing logic 1230 may allocate resources and execute the fetched read commands R0 and R1. Also, since the instruction fetch logic 1210 has fetched two read instructions (R0 and R1), it moves the head pointer of the submit queue (SQ) from h to (h-2), and the head pointer (h-2) is Write commands (W0, W1, W2, W3) may be packed again from the entry of the indicated submission queue (SQ).

어떤 실시예에서, 명령 전처리 로직(1220)은 장치 리소스(1240)의 상태를 모니터링하고, 명령이 다시 패킹된 제출 큐(125i)의 리소스가 사용 가능한 상태로 되는지를 확인할 수 있다. 리소스가 사용 가능한 상태로 된 경우, 명령 전처리 로직(1220)은 제출 큐(125i)를 사용 가능한 제출 큐로 지정할 수 있다. 이에 따라, 앞서 설명한 것처럼, 제출 큐(125i)에 명령을 피크하여 실행 가능한지를 판단하는 동작이 수행될 수 있다. 어떤 실시예에서, 리소스가 사용 가능한 상태로 된 경우, 명령 전처리 로직(1220)은 명령이 다시 패킹된 제출 큐(125i)를 다른 제출 큐에 비해 우선하여 처리할 수 있다. 예를 들면, 명령 전처리 로직(1220)은 명령이 다시 패킹된 제출 큐(125i)를 사용 가능한 제출 큐의 리스트의 헤드에 추가할 수 있다.In some embodiments, the command preprocessing logic 1220 may monitor the state of the device resources 1240 and see if the resources of the submit queue 125i where the commands are packed back become available. If the resource is made available, command preprocessing logic 1220 may designate submit queue 125i as an available submit queue. Accordingly, as described above, an operation of determining whether a command is executable by peaking a command in the submission queue 125i may be performed. In some embodiments, when resources become available, command preprocessing logic 1220 may preferentially process submit queue 125i in which commands are repacked over other submit queues. For example, command preprocessing logic 1220 may add submit queue 125i with the command repacked to the head of the list of available submit queues.

어떤 실시예에서, 명령 전처리 로직(1220)은 제출 큐(125i)의 명령을 처리한 후에, 복수의 제출 큐(1251 ~ 125n)에서 다음 타겟 제출 큐(125j)를 선택하고, 선택한 제출 큐(125j)에서 명령을 피크하고 피크한 명령이 실행 가능한지를 판단하는 과정을 반복할 수 있다.In some embodiments, command preprocessing logic 1220, after processing the command in submission queue 125i, selects the next target submission queue 125j from the plurality of submission queues 1251-125n, and selects the selected submission queue 125j. ) and repeat the process of determining whether the peaked command is executable.

도 14는 또 다른 실시예에 따른 저장 장치의 장치 컨트롤러의 동작을 예시하는 흐름도이다.14 is a flowchart illustrating an operation of a device controller of a storage device according to another embodiment.

도 14를 참고하면, 장치 컨트롤러는 사용 가능한 제출 큐가 존재하는 경우(S1430), 사용 가능한 제출 큐에서 타겟 제출 큐를 선택할 수 있다(S1435). 사용 가능한 제출 큐가 존재하지 않는 경우(S1430), 장치 컨트롤러는 동작을 종료할 수 있다. 타겟 제출 큐에 명령이 존재하는 경우(S1440), 장치 컨트롤러는 타겟 제출 큐에서 다음 명령을 피크할 수 있다(S1445). 장치 컨트롤러는 타겟 제출 큐에서 명령을 피크하고, 헤드 포인터를 이동하지 않고 유지할 수 있다(S1445).Referring to FIG. 14 , when there is an available submission queue (S1430), the device controller may select a target submission queue from the available submission queues (S1435). If there is no usable submission queue (S1430), the device controller may end the operation. If a command exists in the target submission queue (S1440), the device controller may pick the next command from the target submission queue (S1445). The device controller may pick a command from the target submission queue and maintain the head pointer without moving (S1445).

장치 컨트롤러는 장치 리소스의 상태를 포함하는 정보에 기초해서 피크한 명령을 실행 가능성을 판단할 수 있다(S1450). 피크한 명령이 실행 가능하지 않다고 판단한 경우(S1450), 장치 컨트롤러는 타겟 제출 큐에 다음 명령이 존재하는지를 다시 확인할 수 있다(S1440). 피크한 명령이 실행 가능하다고 판단한 경우(S1450), 장치 컨트롤러는 해당 명령을 페치하고, 명령 처리 파이프라인(또는 명령 처리 큐)에 넣고 명령을 실행할 수 있다(S1455). 다음, 장치 컨트롤러는 타겟 제출 큐에 다음 명령이 존재하는지를 다시 확인할 수 있다(S1440). The device controller may determine the possibility of executing the peak command based on the information including the state of the device resource (S1450). If it is determined that the peaked command is not executable (S1450), the device controller may check again whether the next command exists in the target submission queue (S1440). When it is determined that the peak command is executable (S1450), the device controller fetches the command, puts it into a command processing pipeline (or command processing queue), and executes the command (S1455). Next, the device controller may check again whether the next command exists in the target submission queue (S1440).

타겟 제출 큐의 테일까지 피크한 후(S1440), 장치 컨트롤러는 타겟 제출 큐에서 실행 가능하지 않은 명령이 존재하는지를 확인할 수 있다(S1460). 실행 가능하지 않은 명령이 존재하지 않으면, 장치 컨트롤러는 사용 가능한 제출 큐에서 다음 타겟 제출 큐를 선택할 수 있다(S1430, S1435). 실행 가능하지 않은 명령이 존재하면, 장치 컨트롤러는 실행 가능하지 않은 명령을 타겟 제출 큐에서 패킹할 수 있다(S1465). 장치 컨트롤러는 타겟 제출 큐의 헤드 포인터를 페치된 명령의 수만큼 이동하고, 이동한 헤드 포인터가 지시하는 헤드 엔트리부터 실행 가능하지 않은 명령을 패킹할 수 있다. 어떤 실시예에서, 장치 컨트롤러는 패킹한 제출 큐를 리소스 대기 상태의 제출 큐로 표시할 수 있다. 다음, 장치 컨트롤러는 사용 가능한 제출 큐에서 다음 타겟 제출 큐를 선택하고(S1430, S1435), S1440 내지 S1465을 참고로 하여 설명한 동작을 반복할 수 있다.After peaking to the tail of the target submission queue (S1440), the device controller may check whether there is a command that is not executable in the target submission queue (S1460). If there is no non-executable command, the device controller may select a next target submission queue from available submission queues (S1430 and S1435). If the non-executable command exists, the device controller may pack the non-executable command in the target submission queue (S1465). The device controller may move the head pointer of the target submission queue by the number of fetched instructions, and may pack non-executable instructions from the head entry indicated by the moved head pointer. In some embodiments, the device controller may mark the packed submission queue as a resource-waiting submission queue. Next, the device controller may select the next target submission queue from available submission queues (S1430 and S1435), and repeat the operations described with reference to S1440 to S1465.

어떤 실시예에서, 패킹된 제출 큐를 우선해서 처리하기 위해, 장치 컨트롤러는 패킹된 제출 큐가 존재하는지를 확인할 수 있다(S1410). 어떤 실시예에서, 장치 컨트롤러는 리소스 대기 상태의 제출 큐가 존재하는지를 확인할 수 있다(S1410). 패킹된 제출 큐가 존재하지 않는 경우(S1410), 장치 컨트롤러는 사용 가능한 제출 큐 중에서 제출 큐를 선택하고(S1430, S1435), S1440 내지 S1465를 참고로 하여 설명한 동작을 반복할 수 있다.In some embodiments, in order to preferentially process the packed submission queue, the device controller may check whether the packed submission queue exists (S1410). In some embodiments, the device controller may check whether a submission queue in a resource standby state exists (S1410). If the packed submission queue does not exist (S1410), the device controller may select a submission queue from available submission queues (S1430 and S1435), and repeat the operations described with reference to S1440 to S1465.

패킹된 제출 큐가 존재하는 경우(S1410), 장치 컨트롤러는 패킹된 제출 큐 중에서 제출 큐를 선택할 수 있다(S1415). 장치 컨트롤러는 장치 리소스의 상태에 기초해서 선택한 제출 큐를 처리할 수 있는지를 판단할 수 있다(S1420). 어떤 실시예에서, 장치 컨트롤러는 장치 리소스의 상태와 선택한 제출 큐가 대기하는 리소스의 정보에 기초해서 선택한 제출 큐를 처리할 수 있는지를 판단할 수 있다(S1420). 예를 들면, 대기하는 리소스의 종류와 양에 해당하는 리소스가 장치 리소스에서 사용 가능한 경우, 장치 컨트롤러는 선택한 제출 큐를 처리할 수 있다고 판단할 수 있다. 선택한 제출 큐를 처리할 수 없는 경우, 장치 컨트롤러는 패킹된 제출 큐가 추가로 존재하는지를 확인할 수 있다(S1410).If a packed submission queue exists (S1410), the device controller may select a submission queue from among the packed submission queues (S1415). The device controller may determine whether the selected submission queue can be processed based on the state of the device resource (S1420). In some embodiments, the device controller may determine whether the selected submission queue can be processed based on the state of the device resource and information on the resource in which the selected submission queue waits (S1420). For example, if resources corresponding to the type and amount of waiting resources are available in the device resource, the device controller may determine that the selected submission queue can be processed. If the selected submission queue cannot be processed, the device controller may check whether a packed submission queue additionally exists (S1410).

선택한 제출 큐를 처리할 수 있는 경우, 장치 컨트롤러는 선택한 제출 큐를 사용 가능한 제출 큐의 리스트에 추가할 수 있다(S1425). 어떤 실시예에서, 장치 컨트롤러는 선택한 제출 큐가 중재 메커니즘에 따라 먼저 선택될 수 있도록 사용 가능한 제출 큐의 리스트의 헤드에 추가할 수 있다. 선택한 제출 큐를 처리할 수 없는 경우, 장치 컨트롤러는 패킹된 제출 큐가 추가로 존재하는지를 확인하고(S1410), S1415 내지 S1425를 참고로 하여 설명한 동작 또는 S1430 내지 S1465를 참고로 하여 설명한 동작을 반복할 수 있다.If the selected submission queue can be processed, the device controller can add the selected submission queue to the list of available submission queues (S1425). In some embodiments, the device controller may add to the head of a list of available submission queues such that the selected submission queue may be selected first according to the arbitration mechanism. If the selected submission queue cannot be processed, the device controller checks whether there are additional packed submission queues (S1410), and repeats the operation described with reference to S1415 to S1425 or the operation described with reference to S1430 to S1465. can

도 15는 한 실시예에 따른 컴퓨터 시스템을 나타내는 예시 블록도이다.15 is an example block diagram illustrating a computer system according to one embodiment.

도 15를 참고하면, 컴퓨팅 장치(1500)는 프로세서(1510), 메모리(1520), 메모리 컨트롤러(1530), 저장 장치(1540), 통신 인터페이스(1550) 및 버스(1560)를 포함한다. 컴퓨팅 장치(1500)는 다른 범용적인 구성 요소를 더 포함할 수 있다.Referring to FIG. 15 , a computing device 1500 includes a processor 1510, a memory 1520, a memory controller 1530, a storage device 1540, a communication interface 1550, and a bus 1560. The computing device 1500 may further include other general-purpose components.

프로세서(1510)는 컴퓨팅 장치(1500)의 각 구성의 전반적인 동작을 제어한다. 프로세서(1510)는 CPU(central processing unit), AP(application processor), GPU(graphic processing unit) 등의 다양한 프로세싱 유닛 중 적어도 하나로 구현될 수 있다.The processor 1510 controls the overall operation of each component of the computing device 1500 . The processor 1510 may be implemented as at least one of various processing units such as a central processing unit (CPU), an application processor (AP), and a graphic processing unit (GPU).

메모리(1520)는 각종 데이터 및 명령을 저장한다. 메모리 컨트롤러(1530)는 메모리(1520)로의 및 메모리(1520)로부터의 데이터 또는 명령의 전달을 제어한다. 어떤 실시예에서, 메모리 컨트롤러(1530)는 프로세서(1510)와 별도의 칩으로 제공될 수 있다. 어떤 실시예에서, 메모리 컨트롤러(1530)는 프로세서(1510)의 내부 구성으로 제공될 수 있다.The memory 1520 stores various data and commands. Memory controller 1530 controls the transfer of data or commands to and from memory 1520 . In some embodiments, the memory controller 1530 may be provided as a separate chip from the processor 1510 . In some embodiments, the memory controller 1530 may be provided as an internal component of the processor 1510 .

저장 장치(1540)는 프로그램 및 데이터를 비임시적으로 저장한다. 어떤 실시예에서, 저장 장치(1540)는 도 1 내지 도 14를 참고로 하여 설명한 저장 장치로 구현될 수 있다. 통신 인터페이스(1550)는 컴퓨팅 장치(1500)의 유무선 인터넷 통신을 지원한다. 또한, 통신 인터페이스(1550)는 인터넷 통신 외의 다양한 통신 방식을 지원할 수도 있다. 버스(1560)는 컴퓨팅 장치(1500)의 구성 요소간 통신 기능을 제공한다. 버스(1560)는 구성 요소간의 통신 프로토콜에 따라 적어도 하나의 유형의 버스를 포함할 수 있다.The storage device 1540 non-temporarily stores programs and data. In some embodiments, the storage device 1540 may be implemented as the storage device described with reference to FIGS. 1 to 14 . The communication interface 1550 supports wired and wireless Internet communication of the computing device 1500 . Also, the communication interface 1550 may support various communication methods other than Internet communication. The bus 1560 provides a communication function between components of the computing device 1500 . The bus 1560 may include at least one type of bus according to a communication protocol between components.

어떤 실시예에서, 도 1 내지 도 14를 참고로 하여 설명한 각 로직 또는 둘 이상의 로직의 조합은 디지털 회로, 프로그램 가능한 또는 프로그램할 수 없는 로직 장치 또는 어레이, 응용 주문형 집적 회로(application specific integrated circuit, ASIC) 등으로 구현될 수 있다.In some embodiments, each logic or combination of two or more logics described with reference to FIGS. 1-14 may be a digital circuit, programmable or non-programmable logic device or array, application specific integrated circuit (ASIC) ) and the like can be implemented.

이상에서 본 발명의 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.Although the embodiments of the present invention have been described in detail above, the scope of the present invention is not limited thereto, and various modifications and improvements made by those skilled in the art using the basic concept of the present invention defined in the following claims are also included in the scope of the present invention. that fall within the scope of the right.

Claims (20)

비휘발성 메모리를 포함하는 저장 장치의 장치 컨트롤러로서,
장치 리소스,
복수의 제출 큐 중에서 제1 제출 큐로부터 제1 명령을 피크(peek)하며, 상기 제1 명령이 실행 가능하다는 판단에 응답하여 상기 제1 명령을 페치(fetch)하는 명령 페치 로직,
상기 장치 리소스의 상태에 기초해서 상기 명령 페치 로직에서 피크한 상기 제1 명령이 실행 가능한지를 판단하는 명령 전처리 로직, 그리고
상기 제1 명령이 실행 가능하다는 판단에 응답하여, 상기 명령 페치 로직에서 페치한 상기 제1 명령에 상기 장치 리소스를 할당하고 상기 제1 명령을 실행하는 명령 처리 로직을 포함하며,
상기 명령 페치 로직은 상기 복수의 제출 큐 중 제2 제출 큐로부터 제2 명령을 피크하고,
상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 상기 제2 명령이 실행 가능한지를 판단하고, 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여 상기 제2 제출 큐를 상기 장치 리소스를 대기하는 대기 상태로 지정하는
장치 컨트롤러.
As a device controller of a storage device including a non-volatile memory,
device resource,
instruction fetch logic that peeks a first command from a first submit queue among a plurality of submit queues and fetches the first command in response to determining that the first command is executable;
instruction pre-processing logic to determine whether the first instruction peaked in the instruction fetch logic is executable based on the state of the device resource; and
In response to determining that the first command is executable, command processing logic to allocate device resources to the first command fetched by the command fetch logic and execute the first command;
the command fetch logic picks a second command from a second submit queue of the plurality of submit queues;
The command pre-processing logic determines whether the second command is executable based on the state of the device resource, and in response to determining that the second command is not executable, sets the second submit queue to wait for the device resource. state
device controller.
제1항에서,
상기 명령 페치 로직은 상기 제1 명령의 피크 시에 상기 제1 제출 큐의 헤드 포인터를 이동하지 않고, 상기 제1 제출 큐의 상기 헤드 포인터를 이동하여 상기 제1 명령을 페치하는, 장치 컨트롤러.
In paragraph 1,
and wherein the instruction fetch logic moves the head pointer of the first submission queue to fetch the first instruction at a peak of the first instruction, without moving the head pointer of the first submission queue.
삭제delete 제1항에서,
상기 명령 페치 로직은 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여 상기 제2 명령을 페치하지 않고 드롭하는, 장치 컨트롤러.
In paragraph 1,
and wherein the command fetch logic drops the second command rather than fetch it in response to determining that the second command is not executable.
제1항에서,
상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 상기 대기 상태로 지정된 상기 제2 제출 큐가 처리 가능한지를 판단하고,
상기 제2 제출 큐가 처리 가능하다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제2 제출 큐로부터 상기 제2 명령을 피크하고, 상기 명령 전처리 로직은 상기 제2 명령이 실행 가능한지를 판단하는
장치 컨트롤러.
In paragraph 1,
The command pre-processing logic determines whether the second submission queue designated as the waiting state can be processed based on the state of the device resource;
In response to determining that the second submit queue is processable, the command fetch logic picks the second command from the second submit queue, and the command preprocessing logic determines whether the second command is executable.
device controller.
제5항에서,
상기 명령 전처리 로직은, 상기 장치 리소스 중에서 상기 제2 명령이 대기하는 리소스가 사용 가능한 경우, 상기 제2 제출 큐가 처리 가능하다고 판단하는, 장치 컨트롤러.
In paragraph 5,
wherein the command pre-processing logic determines that the second submission queue is processable when a resource in which the second command waits is available among the device resources.
제6항에서,
상기 명령 전처리 로직은 상기 제2 제출 큐를 상기 복수의 제출 큐 중 나머지 제출 큐에 비해 우선해서 처리하는, 장치 컨트롤러.
In paragraph 6,
wherein the command pre-processing logic preferentially processes the second submission queue over the remaining submission queues of the plurality of submission queues.
비휘발성 메모리를 포함하는 저장 장치의 장치 컨트롤러로서,
장치 리소스,
복수의 제출 큐 중에서 제1 제출 큐로부터 제1 명령과 제2 명령을 피크하는 명령 페치 로직,
상기 장치 리소스의 상태에 기초해서 상기 명령 페치 로직에서 피크한 상기 제1 명령과 상기 제2 명령이 실행 가능한지를 판단하는 명령 전처리 로직,
명령 처리 로직, 그리고
펜딩 명령 큐를 포함하며,
상기 명령 전처리 로직의 상기 제1 명령이 실행 가능하고 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제1 명령과 상기 제2 명령을 페치하고, 상기 명령 전처리 로직은 상기 제2 명령을 상기 펜딩 명령 큐에 저장하며,
상기 제1 명령이 실행 가능하다는 판단에 응답하여, 상기 명령 처리 로직은 상기 명령 페치 로직에서 페치한 상기 제1 명령에 상기 장치 리소스를 할당하고 상기 제1 명령을 실행하는
장치 컨트롤러.
As a device controller of a storage device including a non-volatile memory,
device resource,
instruction fetch logic that picks a first command and a second command from a first submit queue among the plurality of submit queues;
instruction preprocessing logic to determine whether the first instruction and the second instruction peaked in the instruction fetch logic are executable based on the state of the device resource;
command processing logic, and
contains a queue of pending commands;
In response to the instruction pre-processing logic determining that the first instruction is executable and the second instruction not executable, the instruction fetch logic fetches the first instruction and the second instruction, wherein the instruction pre-processing logic storing the second command in the pending command queue;
In response to determining that the first command is executable, the command processing logic allocates device resources to the first command fetched by the instruction fetch logic and executes the first command.
device controller.
제8항에서,
상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 상기 펜딩 명령 큐에 저장된 제3 명령이 실행 가능한지를 판단하고,
상기 펜딩 명령 큐의 상기 제3 명령이 실행 가능하다는 판단에 응답하여, 상기 명령 처리 로직은 상기 펜딩 명령 큐의 상기 제3 명령을 실행하는
장치 컨트롤러.
In paragraph 8,
the command preprocessing logic determines whether a third command stored in the pending command queue is executable based on the state of the device resource;
In response to determining that the third command in the pending command queue is executable, the command processing logic executes the third command in the pending command queue.
device controller.
제9항에서,
상기 명령 전처리 로직은 상기 펜딩 명령 큐를 상기 복수의 제출 큐에 비해 우선해서 처리하는, 장치 컨트롤러.
In paragraph 9,
and the command pre-processing logic preferentially processes the pending command queue over the plurality of submission queues.
비휘발성 메모리를 포함하는 저장 장치의 장치 컨트롤러로서,
장치 리소스,
복수의 제출 큐 중에서 제1 제출 큐로부터 제1 명령과 제2 명령을 피크하는 명령 페치 로직,
상기 장치 리소스의 상태에 기초해서 상기 명령 페치 로직에서 피크한 상기 제1 명령과 상기 제2 명령이 실행 가능한지를 판단하는 명령 전처리 로직, 그리고
명령 처리 로직을 포함하며,
상기 명령 전처리 로직의 상기 제1 명령이 실행 가능하고 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제1 제출 큐에서 상기 제1 명령을 페치하고, 상기 제2 명령을 제1 제출 큐에서 패킹(packing)하며,
상기 제1 명령이 실행 가능하다는 판단에 응답하여, 상기 명령 처리 로직은 상기 명령 페치 로직에서 페치한 상기 제1 명령에 상기 장치 리소스를 할당하고 상기 제1 명령을 실행하는
장치 컨트롤러.
As a device controller of a storage device including a non-volatile memory,
device resource,
instruction fetch logic that picks a first command and a second command from a first submit queue among the plurality of submit queues;
instruction preprocessing logic for determining whether the first instruction and the second instruction peaked in the instruction fetch logic are executable based on the state of the device resource; and
Contains command processing logic;
In response to the command preprocessing logic determining that the first command is executable and the second command is not executable, the command fetch logic fetches the first command from the first submit queue, and the second command Packing in the first submission queue;
In response to determining that the first command is executable, the command processing logic allocates device resources to the first command fetched by the instruction fetch logic and executes the first command.
device controller.
제11항에서,
상기 명령 페치 로직은 상기 제1 제출 큐의 헤드 포인터를 상기 제1 명령의 수만큼 이동하고, 상기 헤드 포인터가 이동된 엔트리부터 상기 제2 명령을 패킹하는, 장치 컨트롤러.
In paragraph 11,
wherein the instruction fetch logic moves a head pointer of the first submit queue by the number of the first instructions, and packs the second instruction from an entry to which the head pointer is moved.
제11항에서,
상기 명령 전처리 로직은 상기 장치 리소스의 상태에 기초해서 패킹된 상기 제1 제출 큐가 처리 가능한지를 판단하고,
상기 제1 제출 큐가 처리 가능하다는 판단에 응답하여, 상기 명령 페치 로직은 상기 제1 제출 큐로부터 상기 제2 명령을 피크하고, 상기 명령 전처리 로직은 상기 제2 명령이 실행 가능한지를 판단하는
장치 컨트롤러.
In paragraph 11,
the command preprocessing logic determines whether the packed first submit queue is processable based on the state of the device resource;
In response to determining that the first submit queue is processable, the command fetch logic picks the second command from the first submit queue, and the command preprocessing logic determines whether the second command is executable.
device controller.
제13항에서,
상기 장치 리소스 중에서 상기 제2 명령이 대기하는 리소스가 사용 가능한 경우, 상기 명령 전처리 로직은 상기 제1 제출 큐를 상기 복수의 제출 큐 중 나머지 제출 큐에 비해 우선해서 처리하는, 장치 컨트롤러.
In paragraph 13,
If a resource for waiting the second command is available among the device resources, the command pre-processing logic prioritizes processing the first submission queue over other submission queues among the plurality of submission queues.
제1항에서,
상기 명령 전처리 로직은 상기 장치 리소스 중에서 상기 제1 명령을 실행하기 위한 리소스가 사용 가능한 경우 상기 제1 명령이 실행 가능하다고 판단하고, 상기 제1 명령을 페치하는, 장치 컨트롤러.
In paragraph 1,
wherein the command pre-processing logic determines that the first command is executable when a resource for executing the first command is available among the device resources, and fetches the first command.
제15항에서,
상기 장치 리소스는 읽기 명령에 전용인 읽기 리소스, 쓰기 명령에 전용인 쓰기 리소스 및 상기 읽기 명령과 상기 쓰기 명령이 공유하는 공유 리소스를 포함하며,
상기 명령 전처리 로직은 상기 읽기 리소스와 상기 쓰기 리소스 중 상기 제1 명령의 입출력 유형에 해당하는 리소스와 상기 공유 리소스가 사용 가능한 경우, 상기 제1 명령을 실행하기 위한 리소스가 사용 가능하다고 판단하고, 상기 제1 명령을 페치하는
장치 컨트롤러.
In paragraph 15,
The device resource includes a read resource dedicated to a read command, a write resource dedicated to a write command, and a shared resource shared by the read command and the write command,
The command pre-processing logic determines that a resource for executing the first command is available when a resource corresponding to the input/output type of the first command and the shared resource among the read resource and the write resource are available, fetching the first instruction
device controller.
제15항에서,
상기 장치 리소스는 상기 제1 명령을 실행하는데 사용되는 복수의 유형의 리소스를 포함하며,
상기 명령 전처리 로직은 상기 복수의 유형의 리소스 중 일부 유형의 리소스가 사용 가능하지 않은 경우, 상기 제1 명령을 실행하기 위한 리소스가 사용 가능하지 않다고 판단하는
장치 컨트롤러.
In clause 15,
the device resource includes a plurality of types of resources used to execute the first command;
The command pre-processing logic determines that resources for executing the first command are not available when some types of resources among the plurality of types of resources are not available.
device controller.
제15항에서,
상기 명령 전처리 로직은 상기 장치 리소스 중에서 상기 제1 명령을 실행하기 위한 리소스가 사용 가능하지 않은 경우, 상기 제1 명령에 상기 장치 리소스를 할당하지 않는, 장치 컨트롤러.
In paragraph 15,
and the command pre-processing logic does not allocate the device resource to the first command if a resource for executing the first command is not available among the device resources.
비휘발성 메모리, 그리고
상기 비휘발성 메모리로의 액세스를 제어하며, 복수의 제출 큐 중 제1 제출 큐로부터 상기 제1 제출 큐의 헤드 포인터의 이동 없이 제1 명령을 가져오고, 장치 리소스의 상태에 기초해서 상기 제1 명령이 실행 가능한지를 판단하고, 상기 제1 명령이 실행 가능하다는 판단에 응답하여 상기 제1 제출 큐의 상기 헤드 포인터를 이동하는 장치 컨트롤러를 포함하며,
상기 장치 컨트롤러는 상기 복수의 제출 큐 중 제2 제출 큐로부터 상기 제2 제출 큐의 헤드 포인터의 이동 없이 제2 명령을 가져오고, 상기 장치 리소스의 상태에 기초해서 상기 제2 명령이 실행 가능한지를 판단하고, 상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여 상기 제2 제출 큐를 상기 장치 리소스를 대기하는 대기 상태로 지정하는
저장 장치.
non-volatile memory; and
Controls access to the non-volatile memory, retrieves a first command from a first submission queue of a plurality of submission queues without moving a head pointer of the first submission queue, and retrieves the first command based on a state of a device resource. a device controller that determines whether the command is executable and moves the head pointer of the first submission queue in response to determining that the first command is executable;
The device controller fetches a second command from a second submission queue of the plurality of submission queues without moving the head pointer of the second submission queue, and determines whether the second command is executable based on the state of the device resource. and, in response to determining that the second command is not executable, designating the second submit queue in a standby state to wait for the device resource.
storage device.
비휘발성 메모리를 포함하는 저장 장치에 의해 실행되는 방법으로서,
복수의 제출 큐 중 제1 제출 큐로부터 제1 명령을 피크하는 단계,
장치 리소스의 상태에 기초해서 상기 제1 명령이 실행 가능한지를 판단하는 단계,
상기 제1 명령이 실행 가능하다는 판단에 응답하여 상기 제1 명령을 페치하는 단계,
상기 제1 명령이 실행 가능하다는 판단에 응답하여, 상기 제1 명령에 상기 장치 리소스를 할당하고 제2 명령을 실행하는 단계,
상기 복수의 제출 큐 중 제2 제출 큐로부터 제2 명령을 피크하는 단계,
상기 장치 리소스의 상태에 기초해서 상기 제2 명령이 실행 가능한지를 판단하는 단계, 그리고
상기 제2 명령이 실행 가능하지 않다는 판단에 응답하여 상기 제2 제출 큐를 상기 장치 리소스를 대기하는 대기 상태로 지정하는 단계
를 포함하는 방법.
A method executed by a storage device comprising a non-volatile memory, comprising:
picking a first command from a first submission queue of the plurality of submission queues;
determining whether the first command is executable based on a state of device resources;
fetching the first command in response to determining that the first command is executable;
in response to determining that the first command is executable, allocating device resources to the first command and executing a second command;
picking a second command from a second submission queue of the plurality of submission queues;
determining whether the second command is executable based on the state of the device resource; and
designating the second submit queue in a standby state to wait for the device resource in response to determining that the second command is not executable;
How to include.
KR1020220054905A 2021-11-25 2022-05-03 Non-volatile memory-based storage device, and device controller and method thereof Active KR102553878B1 (en)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202211349754.9A CN116166415A (en) 2021-11-25 2022-10-31 Device controller, storage device and method thereof
US17/983,458 US12271628B2 (en) 2021-11-25 2022-11-09 Non-volatile memory-based storage device, device controller and method thereof
EP22206564.1A EP4187364A1 (en) 2021-11-25 2022-11-10 Non-volatile memory-based storage device, device controller and method thereof

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020210164973 2021-11-25
KR20210164973 2021-11-25

Publications (2)

Publication Number Publication Date
KR20230077609A KR20230077609A (en) 2023-06-01
KR102553878B1 true KR102553878B1 (en) 2023-07-10

Family

ID=86771031

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220054905A Active KR102553878B1 (en) 2021-11-25 2022-05-03 Non-volatile memory-based storage device, and device controller and method thereof

Country Status (1)

Country Link
KR (1) KR102553878B1 (en)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012234363A (en) * 2011-04-28 2012-11-29 Toshiba Corp Memory system
JP2018169810A (en) * 2017-03-30 2018-11-01 東芝メモリ株式会社 Memory system and control method

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101730991B1 (en) * 2014-10-28 2017-04-28 삼성전자주식회사 Storage device and operating method of storage device
US9760281B2 (en) * 2015-03-27 2017-09-12 Intel Corporation Sequential write stream management
KR102349381B1 (en) * 2017-05-17 2022-01-13 에스케이하이닉스 주식회사 Data storage device and operating method thereof

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012234363A (en) * 2011-04-28 2012-11-29 Toshiba Corp Memory system
JP2018169810A (en) * 2017-03-30 2018-11-01 東芝メモリ株式会社 Memory system and control method

Also Published As

Publication number Publication date
KR20230077609A (en) 2023-06-01

Similar Documents

Publication Publication Date Title
EP4187364A1 (en) Non-volatile memory-based storage device, device controller and method thereof
KR102597570B1 (en) Continuous analysis tasks for GPU task scheduling
US10108371B2 (en) Method and system for managing host memory buffer of host using non-volatile memory express (NVME) controller in solid state storage device
US8838879B2 (en) Memory system
KR102353782B1 (en) Method for reducing read buffer size requirements in nvme based solid state drives
US10782915B2 (en) Device controller that schedules memory access to a host memory, and storage device including the same
US8266337B2 (en) Dynamic logical data channel assignment using channel bitmap
US20130212319A1 (en) Memory system and method of controlling memory system
US9423979B2 (en) Memory system and memory controller for determining whether one or plurality of pointers can be stored in a second buffer and for executing data transfer between data buffer and host using the pointers
US20170235671A1 (en) Computing device, data transfer method between coprocessor and non-volatile memory, and computer-readable recording medium
JP7470685B2 (en) Programming and Controlling Computational Units in Integrated Circuits
US10089039B2 (en) Memory controller, memory device having the same, and memory control method
US7865631B2 (en) Dynamic logical data channel assignment using time-grouped allocations
EP3270293B1 (en) Two stage command buffers to overlap iommu map and second tier memory reads
KR102553878B1 (en) Non-volatile memory-based storage device, and device controller and method thereof
US20250005705A1 (en) Register compaction with early release
US9268601B2 (en) API for launching work on a processor
JP5254710B2 (en) Data transfer device, data transfer method and processor
CN113742115A (en) Methods for handling page faults by the processor
KR102720566B1 (en) Storage device with reduced communication overhead using hardware logic
US20170351617A1 (en) Information processing device, information processing method, and non-transitory computer-readable recording medium storing information processing program
JP2024129443A (en) Memory System
Wan et al. Rabbitail: A Tail Latency-Aware Scheduler for Deep Learning Recommendation Systems with Hierarchical Embedding Storage
KR20250067493A (en) Computing system including multi-core processor and operating method thereof
CN119828955A (en) Data storage device and non-volatile memory control method

Legal Events

Date Code Title Description
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20220503

PA0201 Request for examination
PA0302 Request for accelerated examination

Patent event date: 20220503

Patent event code: PA03022R01D

Comment text: Request for Accelerated Examination

PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20230113

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20230504

PG1501 Laying open of application
GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20230705

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20230705

End annual number: 3

Start annual number: 1

PG1601 Publication of registration