KR102469811B1 - 서비스품질 제어를 위한 선입선출 버퍼 시스템 - Google Patents

서비스품질 제어를 위한 선입선출 버퍼 시스템 Download PDF

Info

Publication number
KR102469811B1
KR102469811B1 KR1020170176471A KR20170176471A KR102469811B1 KR 102469811 B1 KR102469811 B1 KR 102469811B1 KR 1020170176471 A KR1020170176471 A KR 1020170176471A KR 20170176471 A KR20170176471 A KR 20170176471A KR 102469811 B1 KR102469811 B1 KR 102469811B1
Authority
KR
South Korea
Prior art keywords
data
register
stored
address
level
Prior art date
Application number
KR1020170176471A
Other languages
English (en)
Other versions
KR20190074823A (ko
Inventor
정승규
권정현
신원규
홍도선
Original Assignee
에스케이하이닉스 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에스케이하이닉스 주식회사 filed Critical 에스케이하이닉스 주식회사
Priority to KR1020170176471A priority Critical patent/KR102469811B1/ko
Priority to US16/003,927 priority patent/US10782914B2/en
Priority to CN201810828168.XA priority patent/CN109947390B/zh
Publication of KR20190074823A publication Critical patent/KR20190074823A/ko
Application granted granted Critical
Publication of KR102469811B1 publication Critical patent/KR102469811B1/ko

Links

Images

Classifications

    • 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/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/065Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Transfer Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

선입선출 버퍼 시스템은 입력 데이터를 우선순위에 따라 복수개의 레벨들로 구분하여 출력하는 분류기와, 선입선출 방식으로 분류기로부터 출력되는 데이터의 저장 및 출력을 수행하는 선입선출 버퍼를 포함한다. 선입선출 버퍼는, 각각이 분류기로부터의 데이터를 저장하는 복수개의 저장소들을 갖는 단일의 메모리스택과, 복수개의 저장소들 내에 저장된 데이터의 출력시 데이터의 우선순위에 따라 출력되어야 할 순서에 관한 정보를 포함하는 제1 레지스터스택과, 그리고 복수개의 저장소들 내에 데이터 저장시 데이터가 저장된 위치에 관한 정보를 포함하는 제2 레지스터스택을 포함한다.

Description

서비스품질 제어를 위한 선입선출 버퍼 시스템{FIFO buffer system for QoS control}
본 개시의 여러 실시예들은, 일반적으로 선입선출(FIFO; First In First Out) 버퍼 시스템에 관한 것으로서, 보다 상세하게는 서비스품질(QoS; Quality of Service) 제어를 위한 선입선출 버퍼 시스템에 관한 것이다.
시스템 내에 처리 요소가 필요로 하는 모든 메모리는 온 칩 메모리로 국부적으로 이용할 수 있는 것이 이상적이지만, 밀도와 비용 때문에 메모리 컨트롤러를 통해 접근할 수 있는 저전력 외부 메모리가 시스템에 사용되는 것이 일반적이다. 전력 및 시스템 비용의 제한으로 이와 같은 외부 메모리에서 사용할 수 있는 대역폭은 제한된다. 시스템의 트랜잭션(transaction)은 외부 메모리에 대한 액세스로 좌우된다. 시스템 마스터는 모두 그 기능을 수행하기 위해서 메모리 시스템으로부터 구체적인 데이터에 대한 동작 특성을 지원받아야 한다. 이와 같은 동작 특성은 마스터와 메모리 시스템 간의 계약으로 간주할 수 있다. 그러나 이러한 특성, 즉 계약은 버스 마스터 별로 상이할 수 있다. 일부 마스터는 데이터 요청에 대해 자체 조율(self regulated)을 한다. 즉 각 트랜잭션에 대해 일정한 지연시간을 가지고 특정 대역폭을 요청한다. 일반적으로 이와 같은 성분은 트랜잭션 지연시간의 변동을 수용하기 위한 유연성을 어느 정도 제공하기 위해 선입선출 버퍼를 지원하도록 구성된다.
일반적으로 아비트레이션(arbitration) 정책은 시스템 요건이 정해진 용량을 초과할 경우 정확한 트랜잭션 순서를 결정하기 위한 것이다. 한 트랜잭션이 다른 트랜잭션보다 더 중요할 수 있으며, 이는 우선순위로 코드화(encode)가 가능하다. 그러나 이 우선순위는 시간이 지나면서 바뀔 수 있다. 따라서 시스템의 트랜잭션에 상대적인 우선순위를 할당하는 시스템의 서비스품질 제어가 요구된다. 일반적으로 서비스품질 제어를 위해서는, 선입선출 버퍼를 구성하는 복수개의 메모리들 각각에 우선순위가 다른 데이터를 입력시키고, 스케줄러에 의해 우선순위로 할당된 데이터가 먼저 출력되도록 시스템이 구성된다. 그러나 이 경우 각각의 메모리 내에 여유 저장공간이 있더라도 해당하는 우선순위의 데이터 입력이 없는 경우 유휴 자원으로 남으며, 이는 시스템의 효율성을 저하시킨다.
본 출원이 해결하고자 하는 과제는, 모든 우선순위의 데이터를 하나의 선입선출 버퍼에 입력시키고, 출력시에는 높은 우선순위의 데이터부터 낮은 우선순위의 데이터에 이르기까지 순차적으로 출력되도록 함으로써 우선순위의 데이터 양과 무관하게 선입선출 버퍼의 모든 자원을 사용할 수 있도록 하는 서비스품질 제어를 위한 선입선출 버퍼 시스템을 제공하는 것이다.
본 개시의 일 예에 따른 선입선출 버퍼 시스템은 입력 데이터를 우선순위에 따라 복수개의 레벨들로 구분하여 출력하는 분류기와, 선입선출 방식으로 분류기로부터 출력되는 데이터의 저장 및 출력을 수행하는 선입선출 버퍼를 포함한다. 선입선출 버퍼는, 각각이 분류기로부터의 데이터를 저장하는 복수개의 저장소들을 갖는 단일의 메모리스택과, 복수개의 저장소들 내에 저장된 데이터의 출력시 데이터의 우선순위에 따라 출력되어야 할 순서에 관한 정보를 포함하는 제1 레지스터스택과, 그리고 복수개의 저장소들 내에 데이터 저장시 데이터가 저장된 위치에 관한 정보를 포함하는 제2 레지스터스택을 포함한다.
여러 실시예들에 따르면, 데이터 저장시 선입선출 버퍼를 구성하는 하나의 메모리스택 내에 데이터가 갖는 우선순위 레벨과 무관하게 데이터를 저장시키더라도, 데이터 출력시에 높은 우선순위의 데이터부터 낮은 우선순위의 데이터에 이르기까지 순차적으로 출력되는 서비스 품질 제어가 이루어지도록 함으로써, 우선순위 레벨의 데이터 양과 무관하게 선입선출 버퍼를 구성하는 메모리스택의 모든 저장 용량을 우선순위 레벨에 의해 제한받지 않고 사용할 수 있다는 이점이 제공된다.
도 1은 본 개시의 일 예에 따른 서비스품질 제어를 위한 선입선출 버퍼 시스템을 나타내 보인 도면이다.
도 2는 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼가 초기화된 상태를 나타내 보인 도면이다.
도 3은 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼가 초기화된 상태에서 푸시 동작을 수행할 때의 입력 데이터 저장 과정 및 팝 포인터와 푸시 포인터의 설정 과정을 설명하기 위해 나타내 보인 플로 챠트이다.
도 4는 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼가 초기화된 상태에서 푸시 동작을 수행할 때의 제1 레지스터스택 내의 어드레스 설정 과정을 설명하기 위해 나타내 보인 플로 챠트이다.
도 5 내지 도 13은 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼가 초기화된 상태에서 수행되는 푸시 동작의 일 예를 설명하기 위해 나타내 보인 도면들이다.
도 14는 본 개시의 일 예에 따라 서로 다른 우선순위 레벨의 데이터가 저장되어 있는 선입선출 버퍼에 대한 팝 동작 과정을 설명하기 위해 나타내 보인 플로챠트이다.
도 15 내지 도 18은 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼의 푸시 동작의 일 예를 설명하기 위해 나타내 보인 도면들이다.
도 19 내지 도 23은 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼에 데이터가 저장된 상태에서 수행되는 푸시 동작의 일 예를 설명하기 위해 나타내 보인 도면들이다.
본 출원의 예의 기재에서 "제1" 및 "제2"와 같은 기재는 부재를 구분하기 위한 것이며, 부재 자체를 한정하거나 특정한 순서를 의미하는 것으로 사용된 것은 아니다. 또한, 어느 부재의 "상"에 위치하거나 "상부", "하부", 또는 "측면"에 위치한다는 기재는 상대적인 위치 관계를 의미하는 것이지 그 부재에 직접 접촉하거나 또는 사이 계면에 다른 부재가 더 도입되는 특정한 경우를 한정하는 것은 아니다. 또한, 어느 한 구성 요소가 다른 구성 요소에 "연결되어 있다"거나 "접속되어 있다"의 기재는, 다른 구성 요소에 전기적 또는 기계적으로 직접 연결되어 있거나 또는 접속되어 있을 수 있으며, 또는, 중간에 다른 별도의 구성 요소들이 개재되어 연결 관계 또는 접속 관계를 구성할 수도 있다.
도 1은 본 개시의 일 예에 따른 서비스품질 제어를 위한 선입선출 버퍼 시스템을 나타내 보인 도면이다. 도 1을 참조하면, 본 예에 따른 선입선출 버퍼 시스템(100)은, 입력되는 데이터를 분류하는 분류기(classifier)(200) 및 선입선출 버퍼(300)를 포함하여 구성될 수 있다. 분류기(200)에 입력되는 입력 데이터는 복수개, 예컨대 8개의 입력채널들(채널 1-채널 8)을 통해 상호 구분될 수 있다. 8개의 입력채널들(채널 1-채널 8)은, 각각 전체 시스템에서의 처리 방식이 서로 다른 입력 데이터를 전송하는 경로로 정의될 수 있다. 일 예에서 8개의 채널들(채널 1 - 채널 8)은, 입력 데이터를 발생시키는 소스(source)에 의해 구분될 수 있다. 다른 예에서 8개의 채널들(채널 1-채널 8)은, 입력 데이터가 전송되는 전송 루트(route)에 의해 구분될 수 있다. 분류기(200)로부터의 데이터는 단일 출력채널을 통해 출력된다.
분류기(200)는 입력 데이터를 우선순위(priority)에 따라 복수개의 레벨들로 구분하여 출력한다. 일 예에서 분류기(200)로부터 출력되는 데이터에는 입력 데이터와 입력 데이터에 할당된 우선순위 레벨 정보가 포함될 수 있다. 본 예에서 분류기(200)는 높은 우선순위(high priority)의 레벨, 중간 우선순위(medium priority)의 레벨, 및 낮은 우선순위(low priority)의 레벨로 이루어지는 3개의 레벨로 입력 데이터를 구분하여 출력시킨다. 일 예에서 채널 3을 통해 입력되는 데이터는, 분류기(200)에 의해 높은 우선순위의 레벨로 구분되어 출력될 수 있다. 채널 2, 채널 5, 및 채널 6을 통해 입력되는 데이터는, 분류기(200)에 의해 중간 우선순위의 레벨로 구분되어 출력될 수 있다. 채널 1, 채널 4, 채널 7, 및 채널 8을 통해 입력되는 데이터는, 분류기(200)에 의해 낮은 우선순위의 레벨로 구분되어 출력될 수 있다.
선입선출 버퍼(300)는, 단일의 메모리스택(310)와, 제1 레지스터 스택(register stack)(320)과, 그리고 제2 레지스터 스택(330)을 포함하여 구성될 수 있다. 메모리스택(310)는, 가장 먼저 입력되는 데이터가 가장 먼저 출력되는 선입선출(FIFO; First In First Out) 방식으로 동작한다. 이를 위해 메모리스택(310)는 복수개의 저장소들을 가지며, 입력포트 및 출력포트를 갖는다. 일 예에서 메모리스택(310)는 에스램(SRAM; Static Random Access Memory)으로 구성될 수 있다. 메모리스택(310)의 입력포트는 분류기(200)와 결합하고, 출력포트는 출력단을 구성한다. 메모리스택(310)이 갖는 저장소들 각각은 각각의 고유한 어드레스를 갖는다.
푸시(PUSH) 명령에 응답하여 분류기(200)로부터 입력되는 데이터는, 메모리스택(310)의 저장소들에 순차적으로 저장된다. 이 경우 데이터는 분류기(200)에 의해 구분된 서로 다른 우선순위 레벨을 가질 수 있지만, 메모리스택(310)의 저장소들 각각에 저장될 때에는 우선순위 레벨이 고려되지 않는다. 즉 분류기(200)로부터 데이터가 입력될 때마다, 입력 데이터의 우선순위 레벨과 관계없이 메모리스택(310)의 저장소들 중 최하위 어드레스를 갖는 저장소부터 순차적으로 데이터가 입력된다. 경우에 따라서 입력 데이터는, 제2 레지스터스택에서 푸시 포인터가 가리키는 제2 레지스터에 저장된 어드레스를 갖는 저장소에 저장될 수 있다. 이 경우에도 입력 데이터의 저장은 입력 데이터의 우선순위 레벨과 무관하게 이루어진다. 따라서 메모리스택(310)의 저장소들의 전체 크기, 즉 저장 용량은 각각의 우선순위 레벨에 속하는 데이터 양과 무관하게 모두 사용될 수 있다. 메모리스택(310)의 각 저장소에 데이터가 저장될 때, 저장되는 데이터가 해당 우선순위 레벨의 현재까지의 마지막 데이터인 경우, 레벨 엔드 포인터가 데이터가 저장된 저장소의 어드레스로 설정될 수 있다. 메모리스택(310)으로의 데이터 입력은, 저장소들 모두가 채워질 때까지 수행된다. 저장소들 모두가 채워지기 전이라도 푸시 동작 과정에서 중간의 팝(POP) 명령이 발생되면, 데이터 저장 과정은 중단된다.
제1 레지스터스택(320)은, 복수개의 제1 레지스터들을 포함하여 구성된다. 제1 레지스터스택(320)을 구성하는 제1 레지스터들의 개수는, 메모리스택(310)를 구성하는 저장소들의 개수와 동일할 수 있다. 따라서 제1 레지스터들 각각은, 메모리스택(310)를 구성하는 저장소들 각각에 1:1로 매칭될 수 있다. 일 예에서 상호 매칭되는 저장소 및 제1 레지스터는 동일한 어드레스를 가질 수 있다. 즉 메모리스택(310)의 첫번째 저장소는 제1 레지스터스택(320)의 첫번째 제1 레지스터와 매칭된다. 따라서 첫번째 저장소 및 첫번째 제1 레지스터는 동일한 어드레스를 가질 수 있다. 마찬가지로 메모리스택(310)의 M번째 저장소는 제1 레지스터스택(320)의 M번째 제1 레지스터와 매칭된다. 따라서 M번째 저장소 및 M번째 제1 레지스터는 동일한 어드레스를 가질 수 있다. 제1 레지스터들 각각에는 메모리스택(310)를 구성하는 저장소들 중 어느 하나의 저장소의 어드레스가 저장된다.
푸시 명령에 의해 메모리스택(310)의 각 저장소에 데이터가 저장될 때, 팝 동작시 가장 높은 우선순위 레벨의 첫번째 데이터가 저장된 장소를 알려주는 팝 포인터가 제1 레지스터의 어드레스로 설정될 수 있다. 입력 데이터가 초기화 상태에서 처음 입력되는 최초 데이터인 경우, 팝 포인터는 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터의 어드레스로 설정된다. 최초 데이터가 입력된 이후에는 입력 데이터와 동일한 우선순위 레벨의 이전 데이터가 존재하지 않고, 입력 데이터가 갖는 우선순위 레벨이 저장되어 있는 데이터가 갖는 레벨 중 가장 높은 우선순위 레벨인 경우, 팝 포인터는 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터의 어드레스로 설정된다. 그 외의 경우 팝 포인터는 변경되지 않는다.
제2 레지스터스택(330)은, 복수개의 제2 레지스터들을 포함하여 구성된다. 제2 레지스터스택(330)을 구성하는 제2 레지스터들의 개수는, 메모리스택(310)를 구성하는 저장소들의 개수와 동일할 수 있다. 따라서 메모리스택(310)를 구성하는 저장소들과, 제1 레지스터 스택(320)을 구성하는 제1 레지스터들과, 그리고 제2 레지스터 스택(330)을 구성하는 제2 레지스터들은 모두 동일한 개수일 수 있다. 제2 레지스터들 각각은, 메모리스택(310)를 구성하는 저장소들 각각에 1:1로 매칭될 수 있다. 일 예에서 상호 매칭되는 저장소 및 제2 레지스터는 동일한 어드레스를 가질 수 있다. 즉 메모리스택(310)의 첫번째 저장소는 제2 레지스터스택(330)의 첫번째 제1 레지스터와 매칭된다. 따라서 첫번째 저장소 및 첫번째 제2 레지스터는 동일한 어드레스를 가질 수 있다. 마찬가지로 메모리스택(310)의 M번째 저장소는 제2 레지스터스택(330)의 M번째 제2 레지스터와 매칭된다. 따라서 M번째 저장소 및 M번째 제2 레지스터는 동일한 어드레스를 가질 수 있다. 제2 레지스터들 각각에는 메모리스택(310)를 구성하는 저장소들 중 어느 하나의 저장소의 어드레스가 저장된다.
푸시 명령에 의해 메모리스택(310)의 각 저장소에 데이터가 저장될 때, 입력 데이터가 저장될 저장소의 장소를 알려주는 푸시 포인터가 제2 레지스터의 어드레스로 설정될 수 있다. 입력 데이터가 초기화 상태에서 처음 입력되는 최초 데이터인 경우, 푸시 포인터는 첫번째 제2 레지스터의 어드레스로 설정된다. 최초 데이터가 입력된 이후에는 입력 데이터가 저장될 때마다 푸시 포인터가 가리키는 제2 레지스터의 어드레스는 증가된다. 푸시 포인터는 푸시 동작 과정에서만 변경되고, 팝 동작 과정에서는 변경되지 않는다.
도 2는 도 1의 선입선출 버퍼 시스템(100)의 선입선출 버퍼(300)가 초기화된 상태를 나타내 보인 도면이다. 본 예에서 메모리스택(310)의 저장소들의 개수와, 제1 레지스터스택(320)의 제1 레지스터들의 개수와, 그리고 제2 레지스터스택(330)의 제2 레지스터들의 개수는 각각 12개인 경우를 예로 들기로 한다. 도 2를 참조하면, 메모리스택(310)는 복수개의 저장소들을 갖는다. 복수개의 저장소들 각각은, 최하위의 어드레스부터 최상위의 어드레스까지 순차적인 어드레스를 갖는다. 즉 첫번째 저장소는 최하위의 어드레스를 갖고 열두번째 저장소는 최상위의 어드레스를 갖는다. 본 예에서 첫번째 저장소부터 열두번째 저장소까지 순차적으로 0, 1, 2, …, 9, A, B의 어드레스(address)를 갖는다. 초기화된 상태에서 푸시(push) 동작이 수행되지 전까지, 메모리스택(310)의 모든 저장소들은, 어떤 데이터도 저장되지 않은 빈 상태를 유지한다. 초기화된 상태에서 푸시 동작이 수행되기 전까지, 제1 레지스터스택(320)을 구성하는 제1 레지스터들도 모두 빈 상태를 유지한다. 반면에 제2 레지스터스택(330)을 구성하는 제2 레지스터들 각각에는 최하위의 제2 레지스터부터 시작하여 최상위 바로 전의 제2 레지스터에 이르기까지 어드레스 "1"부터 어드레스 "B"까지 순차적으로 저장된다. 최상위의 제2 레지스터는 비워진 상태로 설정된다.
선입선출 버퍼(300)가 초기화된 상태에서 푸시 명령에 의해 여러 우선순위 레벨들 중 어느 한 우선순위 레벨의 데이터가 메모리스택(310)로 입력되는 경우, 입력 데이터는 우선순위 레벨에 상관 없이 메모리스택(310)의 저장소들 중 최하위의 어드레스를 갖는 첫번째 저장소에서부터 순차적으로 저장된다. 푸시 동작에 의해 데이터가 메모리스택(310) 내의 저장소에 저장되면, 제1 레지스터스택(320)을 구성하는 제1 레지스터들에는 일정한 규칙에 의해 결정되는 저장소의 어드레스가 저장된다. 제1 레지스터들에 저장되는 어드레스에 의해, 후속의 팝(POP) 동작에서 우선순위 레벨에 따라 데이터가 출력될 수 있다. 제1 레지스터들 각각에 저장될 어드레스가 결정되는 규칙은 아래에서 도 4를 참조하여 보다 상세하게 설명하기로 한다. 선입선출 버퍼(300)가 초기화된 상태에서 푸시 동작이 수행된 후에 팝 동작이 이루어지기 전까지는 제2 레지스터스택(330)을 구성하는 제2 레지스터들 각각의 설정값은 변경되지 않는다.
푸시 명령에 의해 특정 우선순위 레벨의 데이터가 입력되면, 그 우선순위 레벨의 레벨 엔드 포인터(-L E)는 입력 데이터가 저장된 저장소의 어드레스로 설정된다. 선입선출 버퍼(300)가 초기화된 상태에서, 푸시 동작에 의해 첫번째 데이터가 메모리스택(310)의 첫번째 저장소에 저장되면, 푸시 포인터(-PUSH)는 제2 레지스터스택(330)의 첫번째 제2 레지스터의 어드레스로 설정된다. 이후 데이터가 추가적으로 저장될 때마다 푸시 포인터는 다음 제2 레지스터의 어드레스로 설정된다. 입력 데이터가 초기화 상태에서 처음 입력되는 최초 데이터인 경우, 팝 포인터(-POP)는 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터의 어드레스로 설정된다. 최초 데이터가 입력된 이후에는 입력 데이터와 동일한 우선순위 레벨의 이전 데이터가 존재하지 않고, 입력 데이터가 갖는 우선순위 레벨이 저장되어 있는 데이터가 갖는 레벨 중 가장 높은 우선순위 레벨인 경우, 팝 포인터(-POP)는 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터의 어드레스로 설정된다.
도 3은 도 1의 선입선출 버퍼 시스템(100)의 선입선출 버퍼(300)가 초기화된 상태에서 푸시 동작을 수행할 때의 입력 데이터 저장 과정 및 팝 포인터(-POP)와 푸시 포인터(-PUSH)의 어드레스 설정 과정을 설명하기 위해 나타내 보인 플로 챠트이다. 도 3을 참조하면, 선입선출 버퍼(300)가 초기화된 상태에서 복수개의 우선순위 레벨들 중 어느 하나, 예컨대 N 레벨의 데이터가 입력되는 경우, 먼저 입력 데이터가 최초 데이터인지 여부를 판단한다(단계 411). 단계 411의 판단에서, 입력 데이터가 최초 데이터인 경우 N 레벨의 입력 데이터를 비어 있는 메모리스택(310)의 저장소들 중 최하위 어드레스를 갖는 저장소에 저장한다(단계 412). 그리고 푸시 포인터(-PUSH)를 첫번째 제2 레지스터의 어드레스로 설정한다(단계 413). 또한 팝 포인터(-POP)를 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터의 어드레스로 설정한다(단계 414).
단계 411의 판단에서, 입력 데이터가 최초 데이터가 아닌 경우, N 레벨의 입력 데이터를 푸시 포인터가 가리키는 제2 레지스터에 저장된 어드레스를 갖는 저장소에 저장한다(단계 415). 그리고 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스를 증가시킨다(단계 416). 다음에 입력 데이터가 갖는 우선순위 레벨인 N 레벨이 메모리스택(310)에 저장되어 있는 데이터가 갖는 우선순위 레벨들 중 가장 높은 우선순위 레벨인지의 여부를 판단한다(단계 417). 단계 417에서의 판단에서 N 레벨이 가장 높은 우선순위 레벨이 아닌 경우, 즉 N 레벨보다 높은 우선순위 레벨이 메모리스택(310) 내에 존재하는 경우에는 팝 포인터(-POP)를 변동시키지 않는다. 단계 417의 판단에서 N 레벨이 가장 높은 우선순위 레벨인 경우, 즉 N 레벨보다 높은 우선순위 레벨이 메모리스택(310) 내에 존재하지 않는 경우에는, 입력 데이터가 갖는 N 레벨과 동일한 우선순위 레벨의 이전 데이터가 메모리스택(310) 내에 존재하는지의 여부를 판단한다(단계 418). 단계 418의 판단에서, N 레벨의 이전 데이터가 존재하는 경우에는 팝 포인터(-POP)를 변동시키지 않는다. 단계 418의 판단에서, N 레벨이 이전 데이터가 존재하지 않는 경우, 즉 입력 데이터가 N 레벨의 첫번째 데이터인 경우에는, 팝 포인터(-POP)를 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터의 어드레스로 설정한다(단계 419).
도 4는 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼가 초기화된 상태에서 푸시 동작을 수행할 때의 제1 레지스터스택 내의 어드레스 설정 과정을 설명하기 위해 나타내 보인 플로 챠트이다. 도 4를 참조하면, 선입선출 버퍼(300)가 초기화된 상태에서 N 레벨의 데이터가 입력되면, 먼저 입력 데이터가 최초 데이터인지 여부를 판단한다(단계 421). 단계 421의 판단에서 입력 데이터가 최초 데이터인 경우, 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터에 "E"를 저장한다(단계 422). 일 예에서 "E"는 팝 동작에서 가장 낮은 우선순위 레벨의 데이터가 모두 출력되었다는 것을 나타내는 엔드 플래그 데이터일 수 있다. 따라서 후속의 팝 과정에서 "E"가 저장된 제1 레지스터에 대응되는 저장소에 저장된 데이터를 출력되면, 가장 낮은 우선순위 레벨의 마지막 데이터까지 모두 출력되었다는 것을 알 수 있다. 단계 421의 판단에서, 입력 데이터가 최초 데이터가 아닌 경우, 입력 데이터가 갖는 우선순위 레벨인 N 레벨이 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 우선순위 레벨들 중 가장 낮은 우선순위 레벨인지의 여부를 판단한다(단계 423).
단계 423의 판단에서 N 레벨이 가장 낮은 우선순위 레벨인 경우, 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터에 "E"를 저장한다(단계 424). 그리고 기존에 "E"가 저장되었던 제1 레지스터에 입력 데이터가 저장된 저장소의 어드레스를 저장한다(단계 425). 단계 423에서의 판단에서, N 레벨이 가장 낮은 우선순위 레벨이 아닌 경우, 즉 N 레벨보다 낮은 우선순위 레벨의 데이터가 메모리스택(310) 내에 존재하는 경우, 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터에 N 레벨보다 낮은 레벨들 중에서 가장 높은 우선순위 레벨의 첫번째 데이터가 저장된 저장소의 어드레스를 저장한다(단계 426). 다음에 입력 데이터가 갖는 N 레벨의 이전 데이터가 메모리스택(310) 내에 존재하는지의 여부를 판단한다(단계 427). 단계 427의 판단에서, N 레벨의 이전 데이터가 메모리스택(310) 내에 존재하는 경우, 이전 데이터가 저장된 저장소에 매칭되는 제1 레지스터에 입력 데이터가 저장된 저장소의 어드레스를 저장한다(단계 428).
도 5 내지 도 13은 도 1의 선입선출 버퍼 시스템(100)의 선입선출 버퍼(300)가 초기화된 상태에서 수행되는 푸시 동작의 일 예를 설명하기 위해 나타내 보인 도면들이다. 본 예에서는 우선순위 레벨이 0 레벨(L0), 1 레벨(L1), 2 레벨(L2), 및 3 레벨(L3)의 4개의 레벨들로 구분될 수 있는 경우를 예로 들기로 한다. 여기서 0 레벨(L0)은 가장 낮은 우선순위를 가지고, 1 레벨(L1)은 0 레벨(L0)보다는 한 단계 높은 우선순위를 갖는다. 그리고 2 레벨(L2)은 1 레벨(L1)보다 한 단계 높은 우선순위를 가지며, 3 레벨(L3)은 가장 높은 우선순위를 갖는다. 따라서 데이터 출력시 3 레벨(L3)의 데이터, 2 레벨(L2)의 데이터, 1 레벨(L1)의 데이터, 0 레벨(L0)의 데이터 순서대로 출력되어야 한다. 메모리스택(310)를 구성하는 저장소들의 개수와, 제1 레지스터스택(320)을 구성하는 제1 레지스터들의 개수와, 그리고 제2 레지스터스택(330)을 구성하는 제2 레지스터들의 개수는 각각 12개인 경우를 예로 들기로 한다. 본 예에서 상호 매칭되는 저장소, 제1 레지스터, 및 제2 레지스터는 동일한 어드레스르를 가질 수 있다. 본 예는 단지 하나의 일 예일 뿐이며, 따라서 4개보다 적거나 더 많은 레벨들로 우선순위 레벨이 구분되는 경우와, 12개보다 적거나 더 많은 개수의 저장소들, 제1 레지스터들, 및 제2 레지스터들인 경우에도 동일하게 적용될 수 있다.
도 5를 도 3 및 도 4와 함께 참조하면, 초기화 상태에서 입력 데이터로 0 레벨의 첫번째 데이터(L0 0)가 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 0 레벨의 첫번째 데이터(L0 0)는 최초 데이터이므로, 메모리스택(310)의 최하위 어드레스 0으로 지정된 첫번째 저장소(310-1)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 첫번째 데이터(L0 0)가 저장되는 첫번째 저장소(310-1)의 어드레스로 설정된다. 푸시 포인터(-PUSH)는, 도 3의 단계 413에 따라, 첫번째 제2 레지스터스택(330-1)의 어드레스로 설정된다. 그리고 팝 포인터(-POP)는, 도 3의 단계 414에 따라, 0 레벨의 첫번째 데이터(L0 0)가 저장된 첫번째 저장소(310-1)에 매칭되는 제1 레지스터(320-1)의 어드레스로 설정된다. 0 레벨의 첫번째 데이터(L0 0)가 저장된 첫번째 저장소(310-1)에 매칭되는 제1 레지스터스택(320)의 첫번째 제1 레지스터(320-1)에는, 도 4의 단계 422에 따라, "E"가 저장된다.
도 6을 도 3 및 도 4와 함께 참조하면, 이어서 입력 데이터로서 0 레벨의 두번째 데이터(L0 1)가 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 0 레벨의 두번째 데이터(L0 1)는 최초 데이터가 아니므로, 도 5에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 첫번째 제2 레지스터(330-1)에 저장된 어드레스 "1"을 갖는 두번째 저장소(310-2)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 두번째 데이터(L0 1)가 저장되는 두번째 저장소(310-2)의 어드레스로 설정된다. 0 레벨의 두번째 데이터(L0 1)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 두번째 제2 레지스터(330-2)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 두번째 데이터(L0 1)가 갖는 0 레벨은 가장 낮은 우선순위 레벨이지만, 도 3의 단계 418의 판단에서 0 레벨의 이전 데이터, 즉 0 레벨의 첫번째 데이터(L0 0)가 메모리스택(310) 내에 존재하므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 두번째 데이터(L0 1)가 저장된 두번째 저장소(310-2)에 매칭되는 제1 레지스터스택(320)의 두번째 제1 레지스터(320-2)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 첫번째 제1 레지스터(320-1)에는 0 레벨의 두번째 데이터(L0 1)가 저장된 두번째 저장소(310-2)의 어드레스인 "1"이 저장된다.
도 7을 도 3 및 도 4와 함께 참조하면, 이어서 입력 데이터로서 1 레벨의 첫번째 데이터(L1 0)가 푸시 동작을 통해 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 1 레벨의 첫번째 데이터(L1 0)는, 최초 데이터가 아니므로, 도 3의 단계 415에 따라, 도 6에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 두번째 제2 레지스터(330-2)에 저장된 어드레스 "2"를 갖는 세번째 저장소(310-3)에 저장된다. 1 레벨 엔드 포인터(-L1 E)는 1 레벨의 첫번째 데이터(L1 0)가 저장되는 세번째 저장소(310-3)에 설정된다. 1 레벨의 첫번째 데이터(L1 0)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 세번째 제2 레지스터(330-3)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 1 레벨이 메모리스택(310)에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이고, 도 3의 단계 418의 판단에서 1 레벨의 이전 데이터가 존재하지 않으므로, 팝 포인터(-POP)는, 도 3의 단계 419에 따라, 1 레벨의 첫번째 데이터(L1 0)가 저장된 세번째 저장소(310-3)에 매칭되는 제1 레지스터스택(320)의 세번째 제1 레지스터(320-3)의 어드레스로 설정된다. 도 4의 단계 423의 판단에서 1 레벨이 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이 아니므로, 도 4의 단계 426에 따라 1 레벨의 첫번째 데이터(L1 0)가 저장된 세번째 저장소(310-3)에 매칭되는 제1 레지스터스택(320)의 세번째 제1 레지스터(320-3)에는 1 레벨보다 낮은 0 레벨의 첫번째 데이터(L0 0)가 저장된 첫번째 저장소(310-1)의 어드레스 "0"이 저장된다. 도 4의 단계 427의 판단에서, 1 레벨의 이전 데이터는 메모리스택(310) 내에 존재하지 않으므로, 추가적인 제1 레지스터스택(320)의 어드레스 변경은 없다.
도 8을 도 3 및 도 4와 함께 참조하면, 이어서 입력 데이터로서 0 레벨의 세번째 데이터(L0 2)가 푸시 동작을 통해 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 0 레벨의 세번째 데이터(L0 2)는 최초 데이터가 아니므로, 도 7에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 세번째 제2 레지스터(330-3)에 저장된 어드레스 "3"을 갖는 네번째 저장소(310-4)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 세번째 데이터(L0 2)가 저장되는 네번째 저장소(310-4)의 어드레스로 설정된다. 0 레벨의 세번째 데이터(L0 2)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 네번째 제2 레지스터(330-4)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 세번째 데이터(L0 2)가 갖는 0 레벨은 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 세번째 데이터(L0 2)가 저장된 네번째 저장소(310-4)에 매칭되는 제1 레지스터스택(320)의 네번째 제1 레지스터(320-4)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 첫번째 제1 레지스터(320-1)에는 0 레벨의 세번째 데이터(L0 2)가 저장된 네번째 저장소(310-4)의 어드레스인 "3"이 저장된다.
도 9를 도 3 및 도 4와 함께 참조하면, 이어서 입력 데이터로 2 레벨의 첫번째 데이터(L2 0)가 푸시 동작을 통해 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 2 레벨의 첫번째 데이터(L2 0)는, 최초 데이터가 아니므로, 도 3의 단계 415에 따라, 도 8에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 네번째 제2 레지스터(330-4)에 저장된 어드레스 "4"를 갖는 다섯번째 저장소(310-5)에 저장된다. 2 레벨 엔드 포인터(-L2 E)는 2 레벨의 첫번째 데이터(L2 0)가 저장되는 다섯번째 저장소(310-5)에 설정된다. 2 레벨의 첫번째 데이터(L2 0)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 다섯번째 제2 레지스터(330-5)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 2 레벨이 메모리스택(310)에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이고, 도 3의 단계 418의 판단에서 2 레벨의 이전 데이터가 존재하지 않으므로, 팝 포인터(-POP)는, 도 3의 단계 419에 따라, 2 레벨의 첫번째 데이터(L2 0)가 저장된 다섯번째 저장소(310-5)에 매칭되는 제1 레지스터스택(320)의 다섯번째 제1 레지스터(320-5)의 어드레스로 설정된다. 도 4의 단계 423의 판단에서 2 레벨이 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이 아니므로, 도 4의 단계 426에 따라 2 레벨의 첫번째 데이터(L2 0)가 저장된 다섯번째 저장소(310-5)에 매칭되는 제1 레지스터스택(320)의 다섯번째 제1 레지스터(320-5)에는 2 레벨보다 낮은 레벨들 중 가장 높은 1 레벨의 첫번째 데이터(L1 0)가 저장된 세번째 저장소(310-3)의 어드레스 "2"가 저장된다. 도 4의 단계 427의 판단에서 2 레벨의 이전 데이터가 존재하지 않으므로, 추가적인 제1 레지스터스택(320)의 어드레스 변경은 없다.
도 10을 도 3 및 도 4와 함께 참조하면, 이어서 3 레벨의 첫번째 데이터(L3 0)가 푸시 동작을 통해 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 3 레벨의 첫번째 데이터(L3 0)는, 최초 데이터가 아니므로, 도 3의 단계 415에 따라, 도 9에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 다섯번째 제2 레지스터(330-5)에 저장된 어드레스 "5"를 갖는 여섯번째 저장소(310-6)에 저장된다. 3 레벨 엔드 포인터(-L3 E)는 3 레벨의 첫번째 데이터(L3 0)가 저장되는 여섯번째 저장소(310-6)에 설정된다. 3 레벨의 첫번째 데이터(L3 0)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 여섯번째 제2 레지스터(330-6)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 3 레벨이 메모리스택(310)에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이고, 도 3의 단계 418의 판단에서 3 레벨의 이전 데이터가 존재하지 않으므로, 팝 포인터(-POP)는, 도 3의 단계 419에 따라, 3 레벨의 첫번째 데이터(L3 0)가 저장된 여섯번째 저장소(310-6)에 매칭되는 제1 레지스터스택(320)의 여섯번째 제1 레지스터(320-6)의 어드레스로 설정된다. 도 4의 단계 423의 판단에서 3 레벨이 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이 아니므로, 4의 단계 426에 따라 3 레벨의 첫번째 데이터(L3 0)가 저장된 여섯번째 저장소(310-6)에 매칭되는 제1 레지스터스택(320)의 여섯번째 제1 레지스터(320-6)에는 3 레벨보다 낮은 레벨들 중 가장 높은 2 레벨의 첫번째 데이터(L2 0)가 저장된 다섯번째 저장소(310-5)의 어드레스 "4"가 저장된다. 도 4의 단계 427의 판단에서 3 레벨의 이전 데이터가 존재하지 않으므로, 추가적인 제1 레지스터스택(320)의 어드레스 변경은 없다.
도 11을 도 3 및 도 4와 함께 참조하면, 이어서 입력 데이터로 2 레벨의 두번째 데이터(L2 1)가 푸시 동작을 통해 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 2 레벨의 두번째 데이터(L2 1)는, 최초 데이터가 아니므로, 도 10에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 여섯번째 제2 레지스터(330-6)에 저장된 어드레스 "6"을 갖는 일곱번째 저장소(310-7)에 저장된다. 2 레벨 엔드 포인터(-L2 E)는 2 레벨의 두번째 데이터(L2 1)가 저장되는 일곱번째 저장소(310-7)에 설정된다. 2 레벨의 두번째 데이터(L2 1)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 일곱번째 제2 레지스터(330-7)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 2 레벨의 두번째 데이터(L2 1)가 갖는 2 레벨은 메모리스택(310)에 저장된 데이터가 갖는 우선순위레벨들 중 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)가 가르키는 제1 레지스터의 어드레스는 변하지 않는다. 도 4의 단계 423의 판단에서 2 레벨은 메모리스택(310)에 저장된 데이터가 갖는 우선순위레벨들 중 가장 낮은 우선순위 레벨이 아니므로, 도 4의 단계 425에 따라, 2 레벨의 두번째 데이터(L2 1)가 저장된 일곱번째 저장소(310-7)에 매칭되는 일곱번째 제1 레지스터(320-7)에 2 레벨보다 낮은 레벨들 중 가장 높은 1 레벨의 첫번째 데이터(L1 0)가 저장된 세번째 저장소(310-3)의 어드레스 "2"가 저장된다. 도 4의 단계 427의 판단에서 2 레벨의 이전 데이터가 존재하므로, 도 4의 단계 428에 따라, 2 레벨의 첫번째 데이터(L2 0)가 저장된 다섯번째 저장소(310-5)에 매칭되는 다섯번째 제1 레지스터(320-5)에 2 레벨의 두번째 데이터(L2 1)가 저장된 일곱번째 저장소(310-7)의 어드레스 "6"을 저장한다.
도 12를 도 3 및 도 4와 함께 참조하면, 이어서 입력 데이터로 1 레벨의 두번째 데이터(L1 1)가 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 1 레벨의 두번째 데이터(L1 1)는, 최초 데이터가 아니므로, 도 11에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 일곱번째 제2 레지스터(330-7)에 저장된 어드레스 "7"을 갖는 여덟번째 저장소(310-8)에 저장된다. 1 레벨 엔드 포인터(-L1 E)는 1 레벨의 두번째 데이터(L1 1)가 저장되는 여덟번째 저장소(310-7)의 어드레스로 설정된다. 1 레벨의 두번째 데이터(L1 1)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 여덟번째 제2 레지스터(330-8)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 1 레벨의 두번째 데이터(L1 1)가 갖는 1 레벨은 메모리스택(310)에 저장된 데이터가 갖는 우선순위레벨들 중 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)가 가르키는 제1 레지스터의 어드레스는 변하지 않는다. 도 4의 단계 423의 판단에서 1 레벨은 메모리스택(310)에 저장된 데이터가 갖는 우선순위레벨들 중 가장 낮은 우선순위 레벨이 아니므로, 도 4의 단계 425에 따라, 1 레벨의 두번째 데이터(L1 1)가 저장된 여덟번째 저장소(310-8)에 매칭되는 여덟번째 제1 레지스터(320-8)에 1 레벨보다 낮은 0 레벨의 첫번째 데이터(L0 0)가 저장된 첫번째 저장소(310-1)의 어드레스 "0"이 저장된다. 도 4의 단계 427의 판단에서 1 레벨의 이전 데이터가 존재하므로, 도 4의 단계 428에 따라, 1 레벨의 첫번째 데이터(L1 0)가 저장된 세번째 저장소(310-3)에 매칭되는 세번째 제1 레지스터(320-3)에 1 레벨의 두번째 데이터(L1 1)가 저장된 여덟번째 저장소(310-8)의 어드레스 "7"을 저장한다.
도 13을 도 3 및 도 4와 함께 참조하면, 이어서 입력 데이터로서 0 레벨의 네번째 데이터(L0 3)가 푸시 동작을 통해 메모리스택(310)로 입력되는 경우를 예로 들기로 한다. 0 레벨의 네번째 데이터(L0 3)는 최초 데이터가 아니므로, 도 12에 나타낸 바와 같이, 푸시 포인트(-PUSH)가 가리키는 여덟번째 제2 레지스터(330-8)에 저장된 어드레스 "8"을 갖는 아홉번째 저장소(310-9)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 네번째 데이터(L0 3)가 저장되는 아홉번째 저장소(310-9)의 어드레스로 설정된다. 0 레벨의 네번째 데이터(L0 3)가 저장되면, 도 3의 단계 416에 따라 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 아홉번째 제2 레지스터(330-9)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 네번째 데이터(L0 3)가 갖는 0 레벨은 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 네번째 데이터(L0 3)가 저장된 아홉번째 저장소(310-9)에 매칭되는 제1 레지스터스택(320)의 아홉번째 제1 레지스터(320-9)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 네번째 제1 레지스터(320-4)에는 0 레벨의 네번째 데이터(L0 3)가 저장된 아홉째 저장소(310-9)의 어드레스인 "8"이 저장된다.
도 14는 본 개시의 일 예에 따라 서로 다른 우선순위 레벨의 데이터가 저장되어 있는 선입선출 버퍼에 대한 팝 동작 과정을 설명하기 위해 나타내 보인 플로챠트이다. 도 14를 참조하면, 푸시 동작을 수행하는 도중에 팝 명령이 발생되면, 팝 포인터(-POP)가 지정하는 제1 레지스터에 매칭되는 저장소의 데이터를 출력시킨다(단계 431). 팝 포인터(-POP)가 가리키는 제1 레지스터에 저장된 어드레스를 삭제하고, 삭제된 어드레스를 갖는 저장소에 매칭되는 제1 레지스터로 팝 포인터(-POP)를 이동시킨다(단계 432). 이 단계 432에 의해, 현재 상태에서 가장 높은 우선순위 레벨의 데이터 중 먼저 출력되어야 할 데이터가 저장되어 있는 저장소에 매칭되는 제1 레지스터의 어드레스로 팝 포인터(-POP)가 설정된다.
이어서 제2 레지스터스택(330)의 제2 레지스터들의 어드레스를 변경한다. 즉 최상위의 비어 있는 제2 레지스터부터 시작하여 첫번째 제2 레지스터부터 순차적으로 제1 레지스터에서 삭제된 어드레스로 변경되도록 한다(단계 433). 구체적으로 가장 높은 우선순위 레벨의 첫번째 데이터가 출력되면, 출력 데이터가 저장되어 있던 저장소의 어드레스를 제2 레지스터스택(330)의 비어 있는 최상위의 제2 레지스터에 저장한다. 이어서 출력된 데이터와 동일한 우선순위 레벨의 다음 데이터 또는 한 단계 낮은 우선순위 레벨의 첫번째 데이터가 출력되면, 제2 레지스터스택(330)의 첫번째 제2 레지스터의 저장값을 출력 데이터가 저장되어 있던 저장소의 어드레스로 갱신한다. 이후 동일한 방식으로 데이터 출력이 이루어질 때마다 순차적으로 제2 레지스터의 저장값이 갱신된다. 다음에 메모리스택(310)의 저장소들 내에 저장된 데이터가 모두 출력되었는지의 여부를 판단한다(단계 434). 단계 434에서의 판단에서, 메모리스택(310)의 저장소들 내에 저장된 데이터가 모두 출력되었으면 팝 동작을 종료한다. 단계 434에서의 판단에서, 메모리스택(310)의 저장소들 내에 저장된 데이터가 남아 있으면, 단계 431으로 돌아가서 팝 동작을 계속 수행한다.
도 15 내지 도 18은 도 1의 선입선출 버퍼 시스템(100)의 선입선출 버퍼(300)의 팝(POP) 동작의 일 예를 설명하기 위해 나타내 보인 도면들이다. 본 예에서의 팝(POP) 동작은, 도 5 내지 도 13을 참조하여 설명한 바와 같이, 선입선출 버퍼(300)가 초기화된 상태에서 푸시 동작이 수행되는 과정에서, 팝 명령이 발생되어 수행되는 경우이다. 도 15를 도 14와 함께 참조하면, 팝 명령이 발생되면, 도 14의 단계 431에 따라서 팝 포인터(-POP)가 가리키는 여섯번째 제1 레지스터(320-6)에 매칭되는 여섯번째 저장소(310-6)에 저장된 3 레벨의 첫번째 데이터(L3 0)를 출력시킨다. 팝 포인터(-POP)가 가리키는 여섯번째 제1 레지스터(320-6)에 저장되어 있는 어드레스 "4"는 다음으로 출력될 데이터, 즉 3 레벨의 첫번째 데이터(L3 0) 다음의 우선순위 레벨을 갖는 데이터가 저장된 저장소의 어드레스를 나타낸다. 이에 따라 3 레벨의 첫번째 데이터(L3 0)가 출력되면, 다음 출력 데이터는 어드레스 "4"를 갖는 다섯번째 저장소(310-5)에 저장된 2 레벨의 첫번째 데이터(L2 0)가 된다.
도 16을 도 14와 함께 참조하면, 3 레벨의 첫번째 데이터(L3 0)가 출력됨에 따라, 메모리스택(310)의 여섯번째 저장소(310-6)는 비워진 상태가 된다. 그리고 도 14의 단계 432에 따라서 여섯번째 제1 레지스터(320-6)에 저장된 어드레스 "4"는 삭제된다. 그리고 팝 포인터(-POP)가 가리키는 어드레스는, 여섯번째 제1 레지스터(320-6)의 어드레스로부터 여섯번째 제1 레지스터(320-6)에 저장된 어드레스 "4"를 갖는 다섯번째 저장소(310-5)에 매칭되는 다섯번째 제1 레지스터(320-5)의 어드레스로 변경된다. 또한 도 9의 단계 433에 따라서 제2 레지스터스택(330)의 최상위 어드레스를 가지며 비워져 있는 열두번째 제2 레지스터(330-12)에 출력 데이터(L3 0)가 저장되어 있던 여섯번째 저장소(310-6)가 갖는 어드레스 "5"가 저장된다.
도 14의 단계 434의 판단 결과, 메모리스택(310) 내의 모든 데이터를 출력시켰으면 팝 동작은 종료된다. 그러나 메모리스택(310) 내에 데이터가 아직 남아 있으면, 도 14의 단계 431에 따라서 팝 포인터(-POP)가 가리키는 다섯번째 제1 레지스터(320-5)에 매칭되는 다섯번째 저장소(310-5)에 저장된 2 레벨의 첫번째 데이터(L2 0)를 출력시킨다. 팝 포인터(-POP)가 가리키는 다섯번째 제1 레지스터(320-5)에 저장되어 있는 어드레스 "6"는 다음으로 출력될 데이터가 갖는 저장소의 어드레스를 나타낸다. 이에 따라 2 레벨의 첫번째 데이터(L2 0)가 출력되면, 다음 출력 데이터는 어드레스 "6"를 갖는 일곱번째 저장소(310-7)에 저장된 2 레벨의 두번째 데이터(L2 1)가 된다.
도 17을 도 14와 함께 참조하면, 2 레벨의 첫번째 데이터(L2 0)가 출력됨에 따라, 메모리스택(310)의 다섯번째 저장소(310-5)는 비워진 상태가 된다. 그리고 도 14의 단계 432에 따라서 다섯번째 제1 레지스터(32-5)에 저장된 어드레스 "6"은 삭제된다. 팝 포인터(-POP)가 가리키는 어드레스는, 다섯번째 제1 레지스터(320-5)의 어드레스에서 변경되어 다섯번째 제1 레지스터(320-5)에 저장된 어드레스 "6"을 갖는 일곱번째 저장소(310-7)에 매칭되는 일곱번째 제1 레지스터(320-7)의 어드레스로 설정된다. 또한 도 14의 단계 433에 따라서, 제2 레지스터스택(330)의 첫번째 제2 레지스터(330-1)에 저장된 저장값을 기존의 어드레스 "1"에서 출력 데이터(L2 0)가 저장되어 있던 다섯번째 저장소(310-5)가 갖는 어드레스 "4"로 변경시킨다.
도 14의 단계 434의 판단 결과, 메모리스택(310) 내의 모든 데이터를 출력시켰으면 팝 동작은 종료된다. 그러나 메모리스택(310) 내에 데이터가 아직 남아 있으면, 도 14의 단계 431에 따라서 팝 포인터(-POP)가 가리키는 일곱번째 제1 레지스터(320-7)에 매칭되는 일곱번째 저장소(310-7)에 저장된 2 레벨의 두번째 데이터(L2 1)를 출력시킨다. 팝 포인터(-POP)가 가리키는 일곱번째 제1 레지스터(320-7)에 저장되어 있는 어드레스 "2"는 다음으로 출력될 데이터가 갖는 저장소의 어드레스를 나타낸다. 이에 따라 2 레벨의 두번째 데이터(L2 1)가 출력되면, 다음 출력 데이터는 어드레스 "2"를 갖는 세번째 저장소(310-3)에 저장된 1 레벨의 첫번째 데이터(L1 0)가 된다.
도 18을 도 14와 함께 참조하면, 2 레벨의 두번째 데이터(L2 1)가 출력됨에 따라, 메모리스택(310)의 일곱번째 저장소(310-7)는 비워진 상태가 된다. 그리고 도 14의 단계 432에 따라서 일곱번째 제1 레지스터(320-7)에 저장된 어드레스 "2"는 삭제된다. 팝 포인터(-POP)가 가리키는 어드레스는, 일곱번째 제1 레지스터(320-7)의 어드레스에서 변경되어 일곱번째 제1 레지스터(320-7)에 저장된 어드레스 "2"를 갖는 세번째 저장소(310-3)에 매칭되는 세번째 제1 레지스터(320-3)의 어드레스로 설정된다. 도 14의 단계 433에 따라서, 제2 레지스터스택(330)의 두번째 제2 레지스터(330-2)에 저장된 저장값을 기존의 어드레스 "2"에서 출력 데이터(L2 1)가 저장되어 있던 일곱번째 저장소(310-7)가 갖는 어드레스 "6"으로 변경시킨다.
도 19 내지 도 24는 도 1의 선입선출 버퍼 시스템의 선입선출 버퍼에 데이터가 저장된 상태에서 수행되는 푸시 동작의 일 예를 설명하기 위해 나타내 보인 도면들이다. 본 예에서의 푸시 동작을 수행하는데 있어서, 도 3의 플로 챠트에서 단계들 411-414를 수행하지 않는 점을 제외하고는, 도 3을 참조하여 설명한 방식과 동일하게 데이터 저장 및 팝 포인터(-POP)와 푸시 포인터(-PUSH) 설정이 이루어진다. 또한 도 4의 플로 챠트에서도 단계들 421, 422를 수행하지 않는 점을 제외하고는, 도 4를 참조하여 설명한 방식과 동일하게 제1 레지스터스택이 설정된다.
도 19를 도 3 및 도 4와 함께 참조하면, 입력 데이터로서 0 레벨의 다섯번째 데이터(L0 4)가 입력되는 경우를 예로 들기로 한다. 도 3의 단계 415에 따라서, 0 레벨의 다섯번째 데이터(L0 4)는, 도 18에 나타낸 바와 같이, 푸시 포인터(-PUSH)가 가리키는 아홉번째 제2 레지스터(330-9)에 저장된 어드레스 "9"을 갖는 열번째 저장소(310-10)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 다섯번째 데이터(L0 4)가 저장되는 열번째 저장소(310-10)의 어드레스로 설정된다. 0 레벨의 다섯번째 데이터(L0 4)가 저장되면, 도 3의 단계 416에 따라서 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 열번째 제2 레지스터(330-10)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 다섯번째 데이터(L0 4)가 갖는 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 다섯번째 데이터(L0 4)가 저장된 열번째 저장소(310-10)에 매칭되는 제1 레지스터스택(320)의 열번째 제1 레지스터(320-10)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 아홉번째 제1 레지스터(320-9)에는 0 레벨의 다섯번째 데이터(L0 4)가 저장된 열번째 저장소(310-10)의 어드레스인 "9"이 저장된다.
도 20을 도 3 및 도 4와 함께 참조하면, 입력 데이터로서 0 레벨의 여섯번째 데이터(L0 5)가 입력되는 경우를 예로 들기로 한다. 도 3의 단계 415에 따라서, 0 레벨의 여섯번째 데이터(L0 5)는, 도 19에 나타낸 바와 같이, 푸시 포인터(-PUSH)가 가리키는 열번째 제2 레지스터(330-10)에 저장된 어드레스 "A"을 갖는 열한번째 저장소(310-11)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 여섯번째 데이터(L0 5)가 저장되는 열한번째 저장소(310-11)의 어드레스로 설정된다. 0 레벨의 여섯번째 데이터(L0 5)가 저장되면, 도 3의 단계 416에 따라서 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 열한번째 제2 레지스터(330-11)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 여섯번째 데이터(L0 5)가 갖는 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 여섯번째 데이터(L0 5)가 저장된 열한번째 저장소(310-11)에 매칭되는 제1 레지스터스택(320)의 열한번째 제1 레지스터(320-11)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 열번째 제1 레지스터(320-10)에는 0 레벨의 여섯번째 데이터(L0 5)가 저장된 열한번째 저장소(310-11)의 어드레스인 "A"가 저장된다.
도 21을 도 3 및 도 4와 함께 참조하면, 입력 데이터로서 0 레벨의 일곱번째 데이터(L0 6)가 입력되는 경우를 예로 들기로 한다. 도 3의 단계 415에 따라서, 0 레벨의 일곱번째 데이터(L0 6)는, 도 20에 나타낸 바와 같이, 푸시 포인터(-PUSH)가 가리키는 열한번째 제2 레지스터(330-11)에 저장된 어드레스 "B"을 갖는 열두번째 저장소(310-12)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 일곱번째 데이터(L0 6)가 저장되는 열두번째 저장소(310-12)의 어드레스로 설정된다. 0 레벨의 일곱번째 데이터(L0 6)가 저장되면, 도 3의 단계 416에 따라서 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되고, 이에 따라 푸시 포인터(-PUSH)는 열두번째 제2 레지스터(330-12)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 일곱번째 데이터(L0 6)가 갖는 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 일곱번째 데이터(L0 6)가 저장된 열두번째 저장소(310-12)에 매칭되는 제1 레지스터스택(320)의 열두번째 제1 레지스터(320-12)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 열한번째 제1 레지스터(320-11)에는 0 레벨의 일곱번째 데이터(L0 6)가 저장된 열두번째 저장소(310-12)의 어드레스인 "B"가 저장된다.
도 22를 도 3 및 도 4와 함께 참조하면, 입력 데이터로서 0 레벨의 여덟번째 데이터(L0 7)가 입력되는 경우를 예로 들기로 한다. 도 3의 단계 415에 따라서, 0 레벨의 여덟번째 데이터(L0 7)는, 도 21에 나타낸 바와 같이, 푸시 포인터(-PUSH)가 가리키는 열두번째 제2 레지스터(330-12)에 저장된 어드레스 "5"을 갖는 여섯번째 저장소(310-6)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 여덟번째 데이터(L0 7)가 저장되는 여섯번째 저장소(310-6)의 어드레스로 설정된다. 0 레벨의 여덟번째 데이터(L0 7)가 저장되면, 도 3의 단계 416에 따라서 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되는데, 이미 최상위 어드레스 설정이 이루어졌으므로, 푸시 포인터(-PUSH)는 다시 첫번째 제2 레지스터(330-1)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 여덟번째 데이터(L0 7)가 갖는 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 여덟번째 데이터(L0 7)가 저장된 여섯번째 저장소(310-6)에 매칭되는 제1 레지스터스택(320)의 여섯번째 제1 레지스터(320-6)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 열두번째 제1 레지스터(320-12)에는 0 레벨의 여덟번째 데이터(L0 7)가 저장된 여섯번째 저장소(310-6)의 어드레스인 "5"가 저장된다.
도 23을 도 3 및 도 4와 함께 참조하면, 입력 데이터로서 0 레벨의 아홉번째 데이터(L0 8)가 입력되는 경우를 예로 들기로 한다. 도 3의 단계 415에 따라서, 0 레벨의 아홉번째 데이터(L0 8)는, 도 22에 나타낸 바와 같이, 푸시 포인터(-PUSH)가 가리키는 첫번째 제2 레지스터(330-1)에 저장된 어드레스 "4"을 갖는 다섯번째 저장소(310-5)에 저장된다. 0 레벨 엔드 포인터(-L0 E)는 0 레벨의 아홉번째 데이터(L0 8)가 저장되는 다섯번째 저장소(310-5)의 어드레스로 설정된다. 0 레벨의 여덟번째 데이터(L0 7)가 저장되면, 도 3의 단계 416에 따라서 푸시 포인터(-PUSH)가 가리키는 제2 레지스터의 어드레스가 증가되어 두번째 제2 레지스터(330-2)의 어드레스로 설정된다.
도 3의 단계 417의 판단에서 0 레벨의 아홉번째 데이터(L0 8)가 갖는 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 우선순위 레벨이 아니므로, 팝 포인터(-POP)는 변경되지 않는다. 도 4의 단계 423의 판단에서 0 레벨은 메모리스택(310) 내에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 우선순위 레벨이므로, 도 4의 단계 424에 따라 0 레벨의 아홉번째 데이터(L0 8)가 저장된 다섯번째 저장소(310-5)에 매칭되는 제1 레지스터스택(320)의 다섯번째 제1 레지스터(320-5)에 "E"가 저장된다. 그리고 도 4의 단계 425에 따라, 기존에 "E"가 저장되었던 여섯번째 제1 레지스터(320-6)에는 0 레벨의 아홉번째 데이터(L0 8)가 저장된 다섯번째 저장소(310-5)의 어드레스인 "4"가 저장된다.
지금까지 도 5 내지 도 13을 참조하여 선입선출 버퍼(300)가 초기화된 상태에서 수행되는 푸시 동작의 일 예와, 도 15 내지 도 18을 참조하여 선입선출 버퍼(300)의 팝 동작의 일 예와, 그리고 도 19 내지 도 23을 참조하여 선입선출 버퍼(300)에 데이터가 저장되어 있는 상태에서 수행되는 푸시 동작의 일 예를 설명하였다. 이 과정에서 푸시 동작에서 메모리스택(310)을 구성하는 12개의 저장소들은, 입력되는 데이터의 우선순위 레벨에 관계 없이 데이터를 저장할 수 있다. 또한 팝 동작에서는 가장 높은 우선순위 레벨의 데이터부터 낮은 우선순위 레벨의 데이터까지 순차적으로 출력되도록 함으로써 서비스품질 제어가 수행되도록 할 수 있다. 메모리스택(310)을 구성하는 12개의 저장소들을 4개의 레벨로 구분하여, 각각의 우선순위 레벨 당 3개의 저장소들만 할당되는 경우, 각 우선순위 레벨에 할당된 저장소들에는 최대 3개의 데이터만이 저장될 수 있다. 그러나 본 예의 경우, 도 23에 나타낸 바와 같이, 메모리스택(310)을 구성하는 12개의 저장소들 중 9개의 저장소들 각각에 0 레벨의 데이터가 저장될 수 있다.
본 개시에 따른 선입선출 버퍼 시스템은 다양한 전자 시스템에 적용될 수 있다. 예컨대 AXI(Advanced eXensible Interface)와 같은 버스 아키텍쳐(bus architecture)나, PCIe(Peripheral Component Interconnect Express)와 같은 인터페이스 아키텍쳐에서 서비스품질 제어를 위한 선입선출 버퍼 동작을 구현하는데 본 개시에 따른 선입선출 버퍼 시스템을 적용할 수 있다. 본 예에 따른 선입선출 버퍼 시스템을 PCIe에 적용하는 경우, 소프트웨어층(software layer)로부터의 요청을 패킷을 기반으로 한 분할-변환(split-transaction) 프로토콜을 사용하여 입출력(I/O) 장치에 전송하는 변환층(transaction layer) 내에서 서로 다른 우선순위 레벨을 갖는 가상 채널들(VCs; Virtual channels)을 통해 전송되는 데이터에 대한 선입선출 버퍼 동작을 위한 아키텍쳐에 적용할 수 있다. AXI(Advanced eXensible Interface)와 같은 버스 아키텍쳐(bus architecture)나, PCIe(Peripheral Component Interconnect Express)와 같은 인터페이스 아키텍쳐에 본 예에 따른 선입선출 버퍼 시스템을 적용하는 경우, 데이터 저장시 단일의 메모리스택의 모든 저장 용량을 활용할 수 있으며, 데이터 출력시에는 데이터가 갖는 우선순위 레벨에 따라 가장 높은 우선순위 레벨의 데이터부터 가장 낮은 우선순위 레벨의 데이터까지 순차적으로 출력되도록 하는 서비스 품질 제어가 수행되도록 할 수 있다.
상술한 바와 같이 본 출원의 실시 형태들을 도면들을 예시하며 설명하지만, 이는 본 출원에서 제시하고자 하는 바를 설명하기 위한 것이며, 세밀하게 제시된 형상으로 본 출원에서 제시하고자 하는 바를 한정하고자 한 것은 아니다.
100...선입선출 버퍼 시스템 200...분류기(classifier)
300...선입선출 버퍼 310...메모리스택
320...제1 레지스터스택 330...제2 레지스터스택

Claims (21)

  1. 입력 데이터를 우선순위에 따라 복수개의 레벨들로 구분하여 출력하는 분류기; 및
    선입선출 방식으로 상기 분류기로부터 출력되는 데이터의 저장 및 출력을 수행하는 선입선출 버퍼를 포함하되,
    상기 선입선출 버퍼는,
    각각이 상기 분류기로부터의 데이터를 저장하는 복수개의 저장소들을 갖는 단일의 메모리스택과,
    상기 복수개의 저장소들 내에 저장된 데이터의 출력시 데이터의 우선순위에 따라 출력되어야 할 순서에 관한 정보를 포함하는 제1 레지스터스택과, 그리고
    상기 복수개의 저장소들 내에 데이터 저장시 데이터가 저장된 위치에 관한 정보를 포함하는 제2 레지스터스택을 포함하되,
    상기 제1 레지스터스택은 복수개의 제1 레지스터들을 포함하고, 상기 제2 레지스터스택은 복수개의 제2 레지스터들을 포함하며,
    상기 제1 레지스터들의 개수 및 제2 레지스터들의 개수는 상기 메모리스택의 저장소들의 개수와 동일하되, 상기 제1 레지스터들 각각 및 상기 제2 레지스터들 각각은 상기 메모리스택의 저장소들 각각과 1:1로 매칭되는 선입선출 버퍼 시스템.
  2. ◈청구항 2은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 분류기는, 복수개의 입력채널들을 통해 상기 입력 데이터를 입력받고 단일의 출력채널을 통해 출력 데이터 및 상기 출력 데이터에 할당된 우선순위 레벨 정보를 출력하는 선입선출 버퍼 시스템.
  3. ◈청구항 3은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 분류기는, 상기 입력 데이터를 발생시키는 소스 또는 상기 입력 데이터가 전송되는 전송 루트에 의해 상기 입력 데이터를 상기 복수개의 레벨들로 구분하는 선입선출 버퍼 시스템.
  4. ◈청구항 4은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 메모리스택의 복수개의 저장소들 각각에 상기 입력 데이터가 저장될 때, 상기 입력 데이터가 갖는 우선순위 레벨의 레벨 엔드 포인터가 상기 입력 데이터가 저장되는 저장소의 어드레스로 설정되는 선입선출 버퍼 시스템.
  5. ◈청구항 5은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 제1 레지스터스택은 복수개의 제1 레지스터들을 포함하되,
    상기 복수개의 제1 레지스터들 각각은, 상기 복수개의 저장소들 중 어느 하나의 저장소에 데이터가 저장될 때마다 상기 저장된 데이터가 갖는 레벨보다 낮은 레벨의 데이터가 저장된 저장소의 어드레스를 저장하는 선입선출 버퍼 시스템.
  6. ◈청구항 6은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 제2 레지스터스택은 복수개의 제2 레지스터들을 포함하되,
    상기 복수개의 제2 레지스터들 각각은, 상기 저장소들 중 어느 하나의 저장소로부터 데이터가 출력될 때마다 데이터 출력으로 비워진 저장소의 어드레스를 저장하는 선입선출 버퍼 시스템.
  7. 삭제
  8. 삭제
  9. ◈청구항 9은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 1:1로 매칭되는 제1 레지스터, 제2 레지스터, 및 저장소는 동일한 어드레스를 갖는 선입선출 버퍼 시스템.
  10. ◈청구항 10은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 제1 레지스터스택은 복수개의 제1 레지스터들을 포함하고, 상기 제2 레지스터스택은 복수개의 제2 레지스터들을 포함하며,
    상기 선입선출 버퍼가 초기화된 상태에서 상기 메모리스택의 저장소들 및 상기 제1 레지스터스택의 제1 레지스터들은 모두 비어 있고,
    상기 제2 레지스터스택의 제2 레지스터들 각각에는 최하위 어드레스의 제2 레지스터부터 최상위 어드레스 바로 전의 제2 레지스터에 이르기까지 상기 저장소의 어드레스가 저장되며, 그리고
    상기 최상위 어드레스를 갖는 제2 레지스터는 비어 있는 선입선출 버퍼 시스템.
  11. ◈청구항 11은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 제1 레지스터스택은 복수개의 제1 레지스터들을 포함하고, 상기 제2 레지스터스택은 복수개의 제2 레지스터들을 포함하며,
    상기 입력 데이터가 상기 선입선출 버퍼가 초기화된 후 처음 입력되는 데이터인 경우,
    상기 입력 데이터는 상기 저장소들 중 최하위 어드레스를 갖는 첫번째 저장소에 저장되고,
    상기 첫번째 저장소에 대응되는 상기 제2 레지스터스택의 첫번째 제2 레지스터의 어드레스로 푸시 포인터가 설정되며, 그리고
    상기 첫번째 저장소에 대응되는 상기 제1 레지스터스택의 첫번째 제1 레지스터의 어드레스로 팝 포인터가 설정되는 선입선출 버퍼 시스템.
  12. ◈청구항 12은(는) 설정등록료 납부시 포기되었습니다.◈
    제11항에 있어서,
    상기 첫번째 저장소에 대응되는 상기 제1 레지스터스택의 첫번째 제1 레지스터에 상기 입력 데이터가 상기 저장소들에 저장된 마지막 데이터라는 것을 의미하는 엔드 플래그 데이터가 저장되는 선입선출 버퍼 시스템.
  13. ◈청구항 13은(는) 설정등록료 납부시 포기되었습니다.◈
    제12항에 있어서,
    푸시 명령에 응답하여 상기 팝 포인터가 가리키는 제1 레지스터에 매칭되는 저장소의 데이터가 출력되고,
    상기 팝 포인터가 가리키는 제1 레지스터에 저장된 어드레스를 삭제하고, 삭제된 어드레스를 갖는 저장소에 매칭되는 제1 레지스터로 팝 포인터가 이동되며, 그리고
    최상위의 비어 있는 제2 레지스터부터 시작하여 첫번째 제2 레지스터부터 순차적으로 저장값이 상기 제1 레지스터에서 삭제된 어드레스로 변경되는 선입선출 버퍼 시스템.
  14. ◈청구항 14은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 제1 레지스터스택은 복수개의 제1 레지스터들을 포함하고, 상기 제2 레지스터스택은 복수개의 제2 레지스터들을 포함하며,
    상기 입력 데이터가 상기 선입선출 버퍼가 초기화된 후 처음 입력되는 데이터가 아닌 경우,
    상기 입력 데이터는 상기 제2 레지스터들 중 푸시 포인터가 가리키는 제2 레지스터에 저장된 어드레스를 갖는 저장소에 저장되고, 그리고
    상기 푸시 포인터가 가리키는 제2 레지스터의 어드레스가 증가되는 선입선출 버퍼 시스템.
  15. ◈청구항 15은(는) 설정등록료 납부시 포기되었습니다.◈
    제14항에 있어서,
    상기 입력 데이터가 갖는 레벨이 상기 저장소들에 저장되어 있는 데이터가 갖는 레벨들 중 가장 높은 레벨이고, 상기 입력 데이터가 갖는 레벨의 이전 데이터가 상기 저장소들 내에 존재하지 않는 경우, 팝 포인터를 상기 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터의 어드레스로 설정하는 선입선출 버퍼 시스템.
  16. ◈청구항 16은(는) 설정등록료 납부시 포기되었습니다.◈
    제15항에 있어서,
    푸시 명령에 응답하여 상기 팝 포인터가 가리키는 제1 레지스터에 매칭되는 저장소의 데이터가 출력되고,
    상기 팝 포인터가 가리키는 제1 레지스터에 저장된 어드레스를 삭제하고, 삭제된 어드레스를 갖는 저장소에 매칭되는 제1 레지스터로 팝 포인터가 이동되며, 그리고
    최상위의 비어 있는 제2 레지스터부터 시작하여 첫번째 제2 레지스터부터 순차적으로 저장값이 상기 제1 레지스터에서 삭제된 어드레스로 변경되는 선입선출 버퍼 시스템.
  17. ◈청구항 17은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 제1 레지스터스택은 복수개의 제1 레지스터들을 포함하고, 상기 제2 레지스터스택은 복수개의 제2 레지스터들을 포함하며,
    상기 입력 데이터가 상기 선입선출 버퍼가 초기화된 후 처음 입력되는 데이터가 아니고, 상기 입력 데이터가 갖는 레벨이 상기 저장소들에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 레벨인 경우,
    상기 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터에 상기 입력 데이터가 상기 저장소들에 저장된 마지막 데이터라는 것을 의미하는 엔드 플래그 데이터가 저장되고, 그리고
    기존에 상기 엔드 플래그 데이터가 저장되었던 제1 레지스터에 상기 입력 데이터가 저장된 저장소의 어드레스가 저장되는 선입선출 버퍼 시스템.
  18. ◈청구항 18은(는) 설정등록료 납부시 포기되었습니다.◈
    제17항에 있어서,
    푸시 명령에 응답하여 팝 포인터가 가리키는 제1 레지스터에 매칭되는 저장소의 데이터가 출력되고,
    상기 팝 포인터가 가리키는 제1 레지스터에 저장된 어드레스를 삭제하고, 삭제된 어드레스를 갖는 저장소에 매칭되는 제1 레지스터로 팝 포인터가 이동되며, 그리고
    최상위의 비어 있는 제2 레지스터부터 시작하여 첫번째 제2 레지스터부터 순차적으로 저장값이 상기 제1 레지스터에서 삭제된 어드레스로 변경되는 선입선출 버퍼 시스템.
  19. ◈청구항 19은(는) 설정등록료 납부시 포기되었습니다.◈
    제1항에 있어서,
    상기 제1 레지스터스택은 복수개의 제1 레지스터들을 포함하고, 상기 제2 레지스터스택은 복수개의 제2 레지스터들을 포함하며,
    상기 입력 데이터가 상기 선입선출 버퍼가 초기화된 후 처음 입력되는 데이터가 아니고, 상기 입력 데이터가 갖는 레벨이 상기 저장소들에 저장되어 있는 데이터가 갖는 레벨들 중 가장 낮은 레벨이 아닌 경우, 상기 입력 데이터가 저장된 저장소에 매칭되는 제1 레지스터에 상기 입력 데이터가 갖는 레벨보다는 낮은 레벨들 중에서 가장 높은 레벨의 첫번째 데이터가 저장된 저장소의 어드레스가 저장되는 선입선출 버퍼 시스템.
  20. ◈청구항 20은(는) 설정등록료 납부시 포기되었습니다.◈
    제19항에 있어서,
    상기 입력 데이터가 갖는 레벨의 이전 데이터가 상기 저장소들 내에 존재하는 경우, 상기 이전 데이터가 저장된 저장소에 매칭되는 제1 레지스터에 상기 입력 데이터가 저장된 저장소의 어드레스가 저장되는 선입선출 버퍼 시스템.
  21. ◈청구항 21은(는) 설정등록료 납부시 포기되었습니다.◈
    제20항에 있어서,
    푸시 명령에 응답하여 팝 포인터가 가리키는 제1 레지스터에 매칭되는 저장소의 데이터가 출력되고,
    상기 팝 포인터가 가리키는 제1 레지스터에 저장된 어드레스를 삭제하고, 삭제된 어드레스를 갖는 저장소에 매칭되는 제1 레지스터로 팝 포인터가 이동되며, 그리고
    최상위의 비어 있는 제2 레지스터부터 시작하여 첫번째 제2 레지스터부터 순차적으로 저장값이 상기 제1 레지스터에서 삭제된 어드레스로 변경되는 선입선출 버퍼 시스템.
KR1020170176471A 2017-12-20 2017-12-20 서비스품질 제어를 위한 선입선출 버퍼 시스템 KR102469811B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020170176471A KR102469811B1 (ko) 2017-12-20 2017-12-20 서비스품질 제어를 위한 선입선출 버퍼 시스템
US16/003,927 US10782914B2 (en) 2017-12-20 2018-06-08 Buffer systems and methods of operating the same
CN201810828168.XA CN109947390B (zh) 2017-12-20 2018-07-25 缓冲器系统及其操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170176471A KR102469811B1 (ko) 2017-12-20 2017-12-20 서비스품질 제어를 위한 선입선출 버퍼 시스템

Publications (2)

Publication Number Publication Date
KR20190074823A KR20190074823A (ko) 2019-06-28
KR102469811B1 true KR102469811B1 (ko) 2022-11-24

Family

ID=66814450

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170176471A KR102469811B1 (ko) 2017-12-20 2017-12-20 서비스품질 제어를 위한 선입선출 버퍼 시스템

Country Status (3)

Country Link
US (1) US10782914B2 (ko)
KR (1) KR102469811B1 (ko)
CN (1) CN109947390B (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11544063B2 (en) 2018-11-21 2023-01-03 SK Hynix Inc. Memory system and data processing system including the same
KR20200059493A (ko) 2018-11-21 2020-05-29 에스케이하이닉스 주식회사 데이터 처리 시스템
KR20200065762A (ko) 2018-11-30 2020-06-09 에스케이하이닉스 주식회사 메모리 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120263181A1 (en) * 2011-04-18 2012-10-18 Raikar Rayesh System and method for split ring first in first out buffer memory with priority
US20140149694A1 (en) 2012-11-27 2014-05-29 Donghan Lee System-on-chip and application processor including fifo buffer and mobile device comprising the same

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0522224B1 (en) * 1991-07-10 1998-10-21 International Business Machines Corporation High speed buffer management
US6747978B1 (en) * 1999-05-27 2004-06-08 Nortel Networks Limited Direct memory access packet router method and apparatus
CN1729655A (zh) * 2003-01-17 2006-02-01 富士通株式会社 网络交换装置和网络交换方法
KR20050050110A (ko) * 2005-03-30 2005-05-27 후지쯔 가부시끼가이샤 네트워크 스위치 장치 및 네트워크 스위치 방법
CN102662851A (zh) * 2012-04-12 2012-09-12 江苏中科芯核电子科技有限公司 一种堆栈入栈出栈装置及方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120263181A1 (en) * 2011-04-18 2012-10-18 Raikar Rayesh System and method for split ring first in first out buffer memory with priority
US20140149694A1 (en) 2012-11-27 2014-05-29 Donghan Lee System-on-chip and application processor including fifo buffer and mobile device comprising the same

Also Published As

Publication number Publication date
US20190187927A1 (en) 2019-06-20
CN109947390B (zh) 2023-06-09
CN109947390A (zh) 2019-06-28
US10782914B2 (en) 2020-09-22
KR20190074823A (ko) 2019-06-28

Similar Documents

Publication Publication Date Title
KR102082020B1 (ko) 다수의 링크된 메모리 리스트들을 사용하기 위한 방법 및 장치
KR102469811B1 (ko) 서비스품질 제어를 위한 선입선출 버퍼 시스템
US7295565B2 (en) System and method for sharing a resource among multiple queues
US7453898B1 (en) Methods and apparatus for simultaneously scheduling multiple priorities of packets
JP5552196B2 (ja) 中継装置、中継装置の制御方法、およびコンピュータプログラム
CN112486888A (zh) 一种行情数据传输方法、装置、设备及介质
KR20180030985A (ko) Usb 2.0 대역폭 예약을 위한 방법 및 시스템
US11093291B2 (en) Resource assignment using CDA protocol in distributed processing environment based on task bid and resource cost
CN116185596B (zh) 提升广域多集群分布式系统执行任务效率的方法及装置
CN110868364B (zh) 一种带宽隔离装置及方法
US20230136539A1 (en) Bridging module, data transmission system, and data transmission method
CN107920035B (zh) 用于确定性交换式以太网的多核处理器类型装置、系统及运载工具
US20100030930A1 (en) Bandwidth conserving protocol for command-response bus system
CN115878333A (zh) 进程组间的一致性判断方法、装置及设备
CN115563038A (zh) 基于dma控制器的数据处理系统、方法和数据处理设备
US20150003250A1 (en) Credit-Based Resource Allocator Circuit
US8386682B2 (en) Method, apparatus and system for maintaining transaction coherecy in a multiple data bus platform
SE522876C2 (sv) Metod för tilldelning av tidsluckor i ett datakommunikationssystem
US7583678B1 (en) Methods and apparatus for scheduling entities using a primary scheduling mechanism such as calendar scheduling filled in with entities from a secondary scheduling mechanism
CN114296918B (zh) 资源分配系统及方法
US11768630B1 (en) Credit based memory scheduler
US11240178B2 (en) Data transmission method and data transmission system
WO2024016947A1 (zh) 传输优化方法、设备、控制器及可读存储介质
US11915041B1 (en) Method and system for sequencing artificial intelligence (AI) jobs for execution at AI accelerators
KR102496994B1 (ko) PCIe 인터페이스 장치 및 그 동작 방법

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right