KR101485246B1 - 확장 원형 버퍼 - Google Patents
확장 원형 버퍼 Download PDFInfo
- Publication number
- KR101485246B1 KR101485246B1 KR20130073528A KR20130073528A KR101485246B1 KR 101485246 B1 KR101485246 B1 KR 101485246B1 KR 20130073528 A KR20130073528 A KR 20130073528A KR 20130073528 A KR20130073528 A KR 20130073528A KR 101485246 B1 KR101485246 B1 KR 101485246B1
- Authority
- KR
- South Korea
- Prior art keywords
- buffer
- node
- address
- data
- nodes
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0284—Multiple user address space allocation, e.g. using different base addresses
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
Abstract
본 발명은 고속의 비동기적 입출력을 위한 확장 원형 버퍼를 제공하고 확장 원형 버퍼 내의 노드들을 연결리스트로 연결하여, 노드의 삽입 및 삭제가 용이하며 높은 성능을 요구하는 서버-어플리케이션 방식에 적합한 확장 원형 버퍼에 관한 것으로 내부에 데이터를 기록할 수 있는 버퍼를 구비한 복수의 노드로 구성된 확장 원형 버퍼에 있어서, 복수의 노드 중 내부의 버퍼가 원형 버퍼 구조를 갖는 헤드 노드 및 복수의 노드 중 내부의 버퍼가 선형 버퍼 구조를 갖고, 복수의 노드의 말단에 위치한 테일 노드를 포함한 확장 원형 버퍼에 관한 것이다.
Description
본 발명은 확장 원형 버퍼에 관한 것이다.
버퍼란 속도 차이가 있는 하드웨어 장치들, 또는 우선 순위가 다른 프로그램의 프로세스들에 의해 공유되는 데이터 저장소를 말한다. 즉, 하나의 장치에서 다른 장치로 데이터를 전송할 경우에 양자간의 데이터의 전송속도나 처리속도의 차를 보상하여 양호하게 결합할 목적으로 사용하는 기억영역을 말하며, 버퍼 또는 버퍼 에어리어라고 한다. 버퍼는 각 장치나 프로세스가 상대방에 의해 정체되지 않고 잘 동작할 수 있도록 해준다. 효율적인 버퍼를 만들기 위해서는, 버퍼의 크기를 상황에 맞게 잘 설계하고, 데이터를 버퍼로 집어넣거나 빼내기 쉽도록 우수한 알고리즘을 개발하는 것이 중요하다.
서버 어플리케이션은 분산 네트워크 내의 컴퓨터 내에서 응용프로그램에 비즈니스 로직을 제공하는 서버 프로그램이다. 서버 어플리케이션에서는 데이터의 고속처리와 버퍼크기의 확장성이 요구된다. 일반적으로 높은 성능을 요구하는 서버 어플리케이션은 하드웨어의 멀티코어의 성능을 최대한 활용하기 위해 멀티스레드(Multi-thread)를 실행하게 된다.
또한 서버 어플리케이션은 운영체제의 비동기적 I/O 어플리케이션 프로그래밍 인터페이스(API : Application Programming Interface)에 의존하게 된다. API는 프로그래머를 위한 운영체제나 프로그램의 인터페이스로서 사용자와 직접 대하게 되는 그래픽 사용자 인터페이스나 명령형 인터페이스와는 뚜렷한 차이가 있다. API는 응용 프로그램이 운영체제나 데이터베이스 관리 시스템과 같은 시스템 프로그램과 통신할 때 사용되는 언어나 메시지 형식을 가지며, API는 프로그램 내에서 실행을 위해 특정 서브루틴에 연결을 제공하는 함수를 호출하는 것으로 구현된다. 그러므로 하나의 API는 함수의 호출에 의해 요청되는 작업을 수행하기 위해 이미 존재하거나 또는 연결되어야 하는 몇 개의 프로그램 모듈이나 루틴을 가진다. 이러한 API를 위해 높은 성능을 발휘하기 위해 확장성을 갖고 고속처리가 가능한 버퍼의 설계가 요구된다.
종래 버퍼의 설계 방식은 크게 세 가지로 나눌 수 있는데, 요청이 있을 때마다 메모리를 할당받아서 사용을 하는 방법, 선형(Linear)버퍼 그리고 원형(Ring) 버퍼가 그것이다.
선형버퍼는 운영체제의 파일 고유의 아이디(ID)인 파일 핸들(file handle)마다 적정크기의 선형 버퍼를 미리 만들어 두는 방식을 말한다. 선형 버퍼에서는 I/O요청을 하거나 완료될 때마다 선형버퍼의 읽기 지점(Read Offset) 및 쓰기 지점(Write offset)을 증가시켜나가며 선형 버퍼의 끝 부분에 다다르면 다시 재정렬을 통해 선형버퍼의 앞 부분으로 읽기 및 쓰기 지점을 옮기게 된다.
선형버퍼는 동적 메모리할당이 없어 처리속도는 빠를 수 있으나, 버퍼크기를 확장하기가 어렵고 이로 인해 선형버퍼의 읽기 및 쓰기 지점을 옮기는 재정렬이 자주 일어나게 되어 요구되는 비용이 상대적으로 높다.
원형 버퍼는 버퍼가 하나의 원형을 구성하게 되는 것으로 버퍼의 가장 마지막 장소의 다음 장소가 처음이 되는 버퍼를 말하며, 마지막 장소에 더 이상 데이터를 쓸 수 없는 경우 맨 처음 장소에 데이터를 쓰게 된다. 따라서 선형버퍼에서처럼 재정렬이 필요하지는 않으나, 버퍼크기를 확장하기 어렵다.
따라서 원형버퍼의 장점을 가지면서 선형버퍼의 확장성을 제공하는 확장원형버퍼의 구현이 필요하다.
본 발명은 상기한 바와 같은 문제점을 해결하기 위하여 제안된 것으로, 확장 원형 버퍼에 관한 것이다.
상기와 같은 기술적 과제를 해결하기 위해, 본 발명의 확장 원형 버퍼는 내부에 데이터를 기록할 수 있는 버퍼를 구비한 복수의 노드로 구성된 확장 원형 버퍼에 있어서, 상기 복수의 노드 중 내부의 버퍼가 원형 버퍼 구조를 갖는 헤드 노드 및 상기 복수의 노드 중 내부의 버퍼가 선형 버퍼 구조를 갖고, 상기 복수의 노드의 말단에 위치한 테일 노드를 포함한다.
본 발명의 일실시 예에 따른 상기 복수의 노드 중 상기 헤드 노드를 제외한 노드는 선형 버퍼 구조를 갖는 것이 바람직하다.
본 발명의 일실시 예에 따른 상기 복수의 노드는 연결리스트(Linked List)의 구조로 연결되는 것이 바람직하다.
본 발명의 일실시 예에 따른 상기 복수의 노드는 각 노드의 다음에 위치하는 노드의 주소를 나타내는 다음노드 어드레스, 상기 각 노드를 구성하는 버퍼의 전체 바이트 크기를 나타내는 버퍼크기, 상기 버퍼에 기록할 수 있는 데이터의 바이트수,상기 버퍼의 기록영역의 시작부분 주소를 나타내는 버퍼시작 어드레스, 상기 버퍼에 데이터를 기록하는 위치인 쓰기 어드레스 및 상기 버퍼에 기록된 데이터를 읽는 위치인 읽기 어드레스로 구성되는 것이 바람직하다.
본 발명의 일실시 예에 따른 상기 버퍼의 기록영역의 종결부분 주소를 나타내는 버퍼종료 어드레스를 더 포함하는 것이 바람직하다.
본 발명의 일실시 예에 따른 상기 쓰기 어드레스와 상기 버퍼종료 어드레스가 동일한 경우 선형 버퍼 구조를 갖는 새로운 테일노드를 추가하는 것이 바람직하다
본 발명의 일실시 예에 따른 상기 확장 원형 버퍼는 상기 확장 원형 버퍼의 전단에 위치한 노드의 주소를 나타내는 헤드노드 어드레스, 상기 확장 원형 버퍼의 말단에 위치한 노드의 주소를 나타내는 테일노드 어드레스 및 상기 확장 원형 모든 버퍼에 기록 가능한 데이터의 바이트수로 이루어진 자료구조를 갖는 것이 바람직하다.
상기와 같은 본 발명은 고속의 비동기적 입출력을 위한 확장 원형 버퍼를 제공할 수 있다.
또한 본 발명은 확장 원형 버퍼 내의 노드들을 연결리스트로 연결하여, 노드의 삽입 및 삭제가 용이하다는 효과가 있다.
또한 본 발명에 따른 확장 원형 버퍼는 높은 성능을 요구하는 서버-어플리케이션 방식에 적합한 효과가 있다.
도 1은 본 발명의 일 실시 예에 따른 확장 원형 버퍼의 자료구조를 나타낸 것이다.
도 2는 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 있어, 각 노드의 자료구조를 나타낸 것이다.
도 3은 본 발명의 일 실시 예에 의한 확장 원형 버퍼가 사용되는 경우 모듈의 동작상태를 나타낸 것이다.
도 4는 본 발명의 일 실시 예에 의한 확장 원형 버퍼의 구조를 나타낸 것이다.
도 5는 본 발명의 일 실시 예에 따른 확장 원형 버퍼의 각 노드를 연결하는 연결리스트의 구조를 나타낸 것이다.
도 6은 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 데이터를 쓰는 흐름을 나타낸 순서도이다.
도 7은 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 기록된 데이터를 읽는 흐름을 나타낸 순서도이다.
도 2는 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 있어, 각 노드의 자료구조를 나타낸 것이다.
도 3은 본 발명의 일 실시 예에 의한 확장 원형 버퍼가 사용되는 경우 모듈의 동작상태를 나타낸 것이다.
도 4는 본 발명의 일 실시 예에 의한 확장 원형 버퍼의 구조를 나타낸 것이다.
도 5는 본 발명의 일 실시 예에 따른 확장 원형 버퍼의 각 노드를 연결하는 연결리스트의 구조를 나타낸 것이다.
도 6은 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 데이터를 쓰는 흐름을 나타낸 순서도이다.
도 7은 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 기록된 데이터를 읽는 흐름을 나타낸 순서도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시 예를 가질 수 있는바, 특정 실시 예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 일실시 예를 상세히 설명한다.
도 1은 본 발명의 일 실시 예에 따른 확장 원형 버퍼의 자료구조를 나타낸 것이다.
도 1에 따르면 본 발명의 확장 원형 버퍼(100)는 헤드노드 어드레스(110), 테일노드 어드레스(120) 및 확장 데이터 바이트(130)으로 구성될 수 있다.
본 발명에 따른 확장 원형 버퍼(100)는 한 개 이상의 노드를 가질 수 있다. 복수의 노드가 확장 원형 버퍼(100)에 존재하는 경우, 맨 앞에 위치한 노드를 헤드노드라고 하고, 맨 뒤에 위치한 노드를 테일노드라고 할 수 있다.
헤드노드 어드레스(110)는 확장 원형 버퍼(100)의 맨 앞 노드의 주소이고, 테일노드 어드레스(120)는 맨 뒤 노드의 주소이다.
헤드노드 어드레스(110)와 테일노드 어드레스(120)가 동일한 경우, 확장 원형 버퍼는 1개의 노드로 이루어 질 수 있다.
확장 데이터 바이트(130)는 확장 원형 버퍼(100)가 저장 또는 기록할 수 있는 전체 바이트일 수 있다. 확장 원형 버퍼(100) 내의 각 노드의 버퍼에서 저장할 수 있는 바이트는 사용자의 구현에 따라 임의로 선택될 수 있다.
도 2는 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 있어, 각 노드의 자료구조를 나타낸 것이다.
도 2에 따르면, 본 발명의 확장 원형 버퍼(100)는 한 개 이상의 노드(200,201,202,203)로 구성될 수 있고, 각 노드는 데이터를 저장 또는 기록할 수 있는 버퍼를 구비할 수 있다.
본 발명의 확장 원형 버퍼(100)의 맨 앞에 위치한 노드1(200)을 헤드노드라고 하고, 맨 뒤에 위치한 노드N(203)을 테일노드라고 할 수 있다.
각 노드(200.201.202.203)의 자료구조에 대해 이하 상세히 설명한다.
먼저, 각 노드(200,201,202,203)는 자기의 다음에 위치한 노드의 주소를 나타내는 다음노드 어드레스(210), 버퍼크기(220), 노드 데이터 바이트(230), 버퍼시작 어드레스(240), 읽기 어드레스(250) 및 쓰기 어드레스(260)로 구성될 수 있다.
다음노드 어드레스(210)는 자신의 다음 노드의 주소이다. 확장 원형 버퍼(100)의 노드가 하나인 경우에도 다음노드 어드레스(210)는 미리 설정되어 있을 수 있다.
버퍼크기(220)는 노드 내 버퍼의 용량이나 저장 또는 기록 가능한 크기이며, 사용자의 설계에 따라 임의로 그 크기를 정할 수 있고 또 변경할 수 있다
노드 데이터 바이트(230)는 해당 노드에 저장 또는 기록 가능한 데이터의 바이트수이다. 즉, 각 노드는 일정한 버퍼를 갖고 해당하는 버퍼만큼 데이터를 일시적으로 저장 또는 기록할 수 있다. 노드 데이터 바이트(230)는 사용자가 그 크기를 임의로 정할 수 있다. 확장 원형 버퍼(100)내 모든 노드의 노드 데이터 바이트(230)가 동일한 크기일 필요는 없으며, 노드별로 다양한 값을 가질 수 있다.
버퍼 시작 어드레스(240)은 각 노드의 버퍼에 있어 데이터가 저장 또는 기록될 수 있는 주소이다. 선형 버퍼의 경우 처음 버퍼에 데이터를 기록할 때에는, 버퍼 시작 어드레스(240)의 값과 쓰기 어드레스(260)값은 일치하나 버퍼가 가득 차게 되면 버퍼 종료 어드레스와 쓰기 어드레스(260)값이 일치할 수 있다.
쓰기 어드레스(260)는 노드 내 버퍼에 데이터를 기록하는 경우 데이터를 기록할 위치를 나타내는 주소일 수 있다.
읽기 어드레스(250)는 노드 내 버퍼에 기록된 데이터를 읽어오는 경우 데이터를 읽어오는 위치를 나타내는 주소일 수 있다.
본 발명에 따른 확장 원형 버퍼(100)에 따르면, 각 노드 간의 연결은 연결리스트(Linked List)(270)를 이용할 수 있다.
연결리스트(270)는 링크드 리스트(Linked List)라고도 하며, 각 노드가 데이터부(271)와 어드레스부(272)를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료 구조일 수 있다. 연결리스트는 데이터를 담고 있는 노드들을 어드레스부(272)가 다음이나 이전의 노드와의 연결을 담당할 수 있다.
도 3은 본 발명의 일 실시 예에 의한 확장 원형 버퍼가 사용되는 경우 모듈의 동작상태를 나타낸 것이다.
버퍼란 서로 상이한 시스템이나 모듈 사이에 읽기 또는 쓰기를 하기 위한 장치이다. 읽기 및 쓰기는 다른 말로 입력 및 출력 또는 데이터 송수신 등의 표현으로 나타낼 수 있다.
즉, 처리속도가 상이한 두 모듈 사이의 데이터의 송수신의 경우 일정 시간동안 처리속도가 빠른 모듈에서 느린 모듈로 전송하는 경우 처리속도가 느린 모듈의 데이터 처리시간 동안 임시로 데이터를 보관, 저장 또는 기록해야 하는 곳이 필요한데, 이런 역할을 하는 것이 버퍼이다.
도 3에 따르면 모듈 A(10)에서 모듈 B(20)로 데이터를 전송하기 위해서는 먼저 모듈 A(10)가 버퍼에 데이터를 쓰고 모듈 B(20)로 하여금 데이터를 쓴 버퍼를 알려줄 수 있다. 이를 모듈 A(10)가 모듈 B(20)에게 쓰기 요청(S1)을 하는 것이다.
반대로 데이터를 읽어내기 위해서는 빈 버퍼를 명시하여 여기에 써 달라고 요청하면, 모듈 B(20)가 데이터가 준비되었을 때 쓰고 알려주는 읽기 요청(S2)을 하는 것이다.
도 4는 본 발명의 일 실시 예에 의한 확장 원형 버퍼의 구조를 나타낸 것이다.
본 발명에 의한 확장 원형 버퍼는 복수 개의 노드를 가질 수 있으나, 도 4에서는 3개의 노드로 되어 있는 확장 원형 버퍼를 예를 들고 있다.
이하 각각의 노드의 상태와 구성에 대해서 상세히 설명한다.
먼저 3개의 노드 중에서 맨 처음에 위치한 노드인 제1노드(300)를 헤드노드라고 하며, 본 발명에 따른 확장 원형 버퍼의 경우 헤드노드는 항상 원형 버퍼의 형태일 수 있다.
제1노드(300)는 8바이트의 데이터를 저장할 수 있는 원형 버퍼를 갖고 있으며, 8바이트의 버퍼에 모두 데이터가 기록되어 있다. 버퍼에는 데이터를 기록할 때 사용하는 쓰기위치(320)와 기록된 데이터를 불러올때 사용하는 읽기위치(310)이 존재하며, 원형 버퍼가 가득 차 있는지 여부는 쓰기위치(320)와 읽기위치(310)가 같은 부분을 가리키는 것을 통해 알 수 있다.
도 4에 나타난 경우처럼 원형 버퍼가 가득 차 있는 경우 더 이상 데이터를 쓸 수 없으므로, 새로운 노드를 추가할 수 있다. 이 경우 새로 추가된 노드인 제2노드(400)와 제1노드(300)는 연결리스트(270)를 통해 연결될 수 있다.
제2노드(400)는 선형 버퍼의 형태일 수 있다. 즉, 본 발명에 의한 확장 원형버퍼는 하나의 노드로 이루어진 경우에는 그 노드가 헤드노드임과 동시에 테일노드에 해당하고, 이 경우 원형 버퍼의 형태일 수 있다. 또한 복수 개의 노드로 이루어진 경우에는, 헤드노드은 원형 버퍼의 구조를 갖고, 나머지 노드들은 선형 버퍼의 구조로 되어 있으며, 노드와 노드간에는 연결리스트를 통해 연결될 수 있다.
도 4의 제2노드(400)에는 데이터를 쓰는 버퍼의 위치를 지시하는 쓰기위치(420), 기록된 데이터를 읽는 읽기위치(410), 버퍼의 시작위치를 알려주는 버퍼시작(430) 및 버퍼의 종료위치를 알려주는 버퍼종료(440)를 구비할 수 있다.
제2노드(400)의 선형버퍼는 데이터가 가득 찬 상태이다. 선형버퍼에 데이터가 가득 차 있는지 여부는 선형버퍼의 쓰기위치(420)과 버퍼종료(440)가 동일한 위치를 가리키는 지를 통해 알 수 있다. 제2노드(400)와 같이 선형 버퍼가 가득 차 있는 경우 버퍼를 확장하기 위해서 새로운 노드인 제3노드(500)을 추가할 수 있다.
제3노드(500)도 헤드노드가 아닌 이상 본 발명에 따른 확장 원형 버퍼에서는 선형 버퍼의 구조를 가질 수 있다. 제3노드(500)는 데이터를 쓰는 버퍼의 위치를 지시하는 쓰기위치(520), 기록된 데이터를 읽는 읽기위치(510), 버퍼의 시작위치를 알려주는 버퍼시작(530) 및 버퍼의 종료위치를 알려주는 버퍼종료(540)를 구비할 수 있다.
도 4의 제3노드(500)의 버퍼는 데이터를 기록할 수 있는 공간이 남아 있는 상태이고, 제3노드(500)는 확장 원형 버퍼(100)의 맨 뒤 노드에 위치한 테일 노드이다.
테일노드에 해당하는지 여부, 즉 버퍼에 잔여공간이 남아 있는지 여부의 판단은 쓰기위치(520)가 버퍼종료(540)보다 더 작은지를 확인하여 판단할 수 있다. 즉, 쓰기위치(520)가 버퍼종료(540)보다 더 작은 경우에는 아직 버퍼종료(540) 부분까지 데이터의 기록이 가능하다는 것이고 만일 쓰기위치(520)와 버퍼종료(540)와 동일한 값을 갖는다면, 버퍼에 잔여 공간이 없고 새로운 노드를 연결할 수 있다.
도 5는 본 발명의 일 실시 예에 따른 확장 원형 버퍼의 각 노드를 연결하는 연결리스트의 구조를 나타낸 것이다.
연결리스트는 배열구조에 있어 삽입, 제거 등이 불가능한 단점을 보완하는 자료구조로 확장성이 뛰어나다는 장점이 있다.
도 5에 따르면, 본 발명의 확장 원형 버퍼의 각 연결리스트는 데이터를 저장하는 데이터부(271)와 다음 또는 이전 노드의 위치에 대한 정보를 갖고 있는 어드레스부(272)로 이루어질 수 있다.
도 6은 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 데이터를 쓰는 흐름을 나타낸 순서도이다.
도 6에 따르면 임의의 N 바이트를 다른 모듈로 전송하기 위해서 버퍼에 쓰기 요청이 발생하면(S10), 현재 상태의 테일노드의 바이트 수를 저장한다(C)(S11). 즉, 현재 상태에서 테일노드 내 버퍼에 기록 가능한 바이트 수를 C라고 하면, 버퍼에 쓰기 요청한 바이트수 N과 현재 테일노드에 기록 가능한 바이트수 C를 비교하여 둘 중 작은 수를 X값으로 저장한다(S12).
그 다음 현재 테일노드에 기록 가능한 바이트수 C가 O인지 여부 즉 테일노드에 기록 가능한 공간이 있는지를 판단한다(S13).
만일 테일노드에 더 이상 기록 가능한 바이트수 C가 0인 경우에는 새로운 테일노드를 생성할 수 있다.(S14)
테일노드에 기록가능한 바이트수가 0이 아닌 경우에는, 헤드노드와 테일노드가 같은 노드인지를 판단한다(S15). 즉, 현재 버퍼의 상태에서 노드가 한 개 인지 아니면, 둘 이상의 노드를 갖고 있는지를 판단할 수 있다.
버퍼가 한 개의 노드로 구성된 경우, 즉 헤드노드와 테일노드가 같은 노드인 경우에는 헤드노드이자 테일노드는 원형 버퍼임을 알 수 있으므로, X 바이트를 원형 버퍼에 쓰고, 쓰기 위치를 증가시킨다(S16,17).
반면에 헤드노드와 테일노드가 일치하지 않는 경우에는 테일노드가 선형 버퍼임을 알 수 있다. 따라서 X 바이트를 선형 버퍼에 쓰고, 선형버퍼의 쓰기 위치를 증가시킨다(S18,19).
버퍼에 X 바이트를 쓰고 나면, 처음 쓰기 요청했던 바이트 수인 N에서 버퍼에 쓴 X 바이트를 뺀 값이 N으로 저장되고(S20), N이 O이 될 때까지, 즉 버퍼에 써야할 바이트 수가 0이 될 때까지 위 과정을 반복한다(S21).
도 7은 본 발명의 일 실시 예에 따른 확장 원형 버퍼에 기록된 데이터를 읽기 기능을 수행하는 흐름을 나타낸 순서도이다.
도 7에 따르면 확장 원형 버퍼에 기록된 임의의 N 바이트에 대한 읽기 기능을 수행하기 위해서 N 바이트의 읽기 기능 통보가 발생하면(S30), 현재 상태의 헤드노드의 바이트 수를 저장한다(C)(S31). 즉, 헤드노드 내 버퍼에 기록된 바이트 수를 C라고 하면, 버퍼로부터 읽기 요청된 바이트수 N과 현재 헤드노드에 기록된 바이트수 C를 비교하여 둘 중 작은 수를 X값으로 저장한다(S32).
그 다음 현재 헤드노드에 기록된 바이트수 C가 O인지 여부 즉 헤드노드가 비어 있는지 여부를 판단한다(S33).
만일 C가 0이어서 헤드노드가 비어 있는 경우에는 현재의 헤드노드보다 앞서있는 노드가 존재한다는 의미이므로 헤드노드를 반환하고 다음 노드로 헤드를 이동시킬 수 있다.(S34)
헤드노드에 기록된 바이트수가 0이 아닌 경우에는, 헤드노드와 테일노드가 같은 노드인지를 판단한다(S35). 즉, 현재 버퍼의 상태에서 노드가 한 개 인지 아니면, 둘 이상의 노드를 갖고 있는지를 판단할 수 있다.
버퍼가 한 개의 노드로 구성된 경우, 즉 헤드노드와 테일노드가 같은 노드인 경우에는 헤드노드이자 테일노드는 원형 버퍼임을 알 수 있으므로, X 바이트를 원형 버퍼로부터 읽기 기능을 수행하고, 읽기 위치를 증가시킨다(S36,37).
반면에 헤드노드와 테일노드가 일치하지 않는 경우에는 현재노드가 선형 버퍼임을 알 수 있다. 따라서 X 바이트를 선형 버퍼로부터 읽기 기능을 수행하고, 선형버퍼의 읽기 위치를 증가시킨다(S38,39).
버퍼에 기록된 X 바이트를 읽고 나면, 처음 읽기 요청했던 바이트 수인 N에서 읽기 기능을 수행한 X 바이트를 뺀 값이 다시 N으로 저장되고(S40), N이 O이 될 때까지, 즉 버퍼에 써야할 바이트 수가 0이 될 때까지 위 과정을 반복한다(S41).
이상에서 본 발명에 따른 실시 예들이 설명되었으나, 이는 예시적인 것에 불과하며, 당해 분야에서 통상적 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 범위의 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 다음의 특허청구범위에 의해서 정해져야 할 것이다.
100 : 확장 원형 버퍼
110 : 헤드노드 어드레스
120 : 테일노드 어드레스
130 : 확장 데이터 바이트
200 : 노드1(헤드노드)
203 : 노드N(테일노드)
210 : 다음노드 어드레스
220 : 버퍼크기
230 : 노드 데이터 바이트
240 : 버퍼시작 어드레스
250 : 읽기 어드레스
260 : 쓰기 어드레스
270 : 연결 리스트
300 : 제1노드
400 : 제2노드
500 : 제3노드
110 : 헤드노드 어드레스
120 : 테일노드 어드레스
130 : 확장 데이터 바이트
200 : 노드1(헤드노드)
203 : 노드N(테일노드)
210 : 다음노드 어드레스
220 : 버퍼크기
230 : 노드 데이터 바이트
240 : 버퍼시작 어드레스
250 : 읽기 어드레스
260 : 쓰기 어드레스
270 : 연결 리스트
300 : 제1노드
400 : 제2노드
500 : 제3노드
Claims (7)
- 버퍼를 구비하는 복수의 노드로 구성되는 확장 원형 버퍼에 있어서,
상기 복수의 노드 중 원형 버퍼 구조를 구비하는 헤드 노드; 및
상기 복수의 노드 중 선형 버퍼 구조를 구비하고, 상기 복수의 노드의 말단에 위치하는 테일 노드를 포함하고,
상기 복수의 노드의 여유용량보다 기록될 데이터의 용량이 큰 경우, 상기 말단에 선형 버퍼 구조를 구비하는 새로운 테일 노드가 추가로 연결되고,
상기 헤드 노드에 기록된 데이터가 없는 경우, 상기 복수의 노드 중 상기 헤드 노드의 다음에 위치하는 노드에 구비된 버퍼가 원형 버퍼 구조로 변경되어, 상기 다음에 위치하는 노드가 새로운 헤드 노드로 변경되는 확장 원형 버퍼.
- 제 1항에 있어서,
상기 복수의 노드 중 상기 헤드 노드를 제외한 노드에 구비되는 버퍼는 선형 버퍼 구조인 확장 원형 버퍼.
- 제 1항에 있어서 상기 복수의 노드는,
연결리스트(Linked List)를 통하여 서로 연결되는 확장 원형 버퍼.
- 제 1항에 있어서 상기 복수의 노드는,
각 노드의 다음에 위치하는 노드의 주소를 나타내는 다음노드 어드레스;
상기 각 노드를 구성하는 버퍼의 전체 바이트 크기를 나타내는 버퍼크기;
상기 버퍼에 기록할 수 있는 데이터의 바이트수;
상기 버퍼의 기록영역의 시작부분 주소를 나타내는 버퍼시작 어드레스;
상기 버퍼에 데이터를 기록하는 위치인 쓰기 어드레스; 및
상기 버퍼에 기록된 데이터를 읽는 위치인 읽기 어드레스로 구성된 확장 원형 버퍼.
- 제 4항에 있어서 상기 버퍼의 기록영역의 종결부분 주소를 나타내는 버퍼종료 어드레스를 더 포함하는 확장 원형 버퍼.
- 제 5항에 있어서,
상기 쓰기 어드레스와 상기 버퍼종료 어드레스가 동일한 경우, 상기 말단에 상기 새로운 테일 노드가 추가되는 확장 원형 버퍼.
- 제 1 항에 있어서 상기 확장 원형 버퍼는,
상기 확장 원형 버퍼의 전단에 위치한 노드의 주소를 나타내는 헤드노드 어드레스;
상기 확장 원형 버퍼의 말단에 위치한 노드의 주소를 나타내는 테일노드 어드레스; 및
상기 확장 원형 버퍼에 기록 가능한 데이터의 바이트수로 이루어진 자료구조를 갖는 확장 원형 버퍼.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20130073528A KR101485246B1 (ko) | 2013-06-26 | 2013-06-26 | 확장 원형 버퍼 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20130073528A KR101485246B1 (ko) | 2013-06-26 | 2013-06-26 | 확장 원형 버퍼 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150001005A KR20150001005A (ko) | 2015-01-06 |
KR101485246B1 true KR101485246B1 (ko) | 2015-01-21 |
Family
ID=52474877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR20130073528A KR101485246B1 (ko) | 2013-06-26 | 2013-06-26 | 확장 원형 버퍼 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101485246B1 (ko) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19990023278A (ko) * | 1997-08-02 | 1999-03-25 | 엠. 제이. 엠. 반캄 | 직접 메모리 접근 유닛을 구비한 통신 시스템 |
US6714720B1 (en) * | 2000-03-06 | 2004-03-30 | Ati International Srl | Method and apparatus for storing multi-media data |
-
2013
- 2013-06-26 KR KR20130073528A patent/KR101485246B1/ko active IP Right Grant
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19990023278A (ko) * | 1997-08-02 | 1999-03-25 | 엠. 제이. 엠. 반캄 | 직접 메모리 접근 유닛을 구비한 통신 시스템 |
US6714720B1 (en) * | 2000-03-06 | 2004-03-30 | Ati International Srl | Method and apparatus for storing multi-media data |
Also Published As
Publication number | Publication date |
---|---|
KR20150001005A (ko) | 2015-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10705974B2 (en) | Data processing method and NVME storage device | |
CN105245912B (zh) | 一种缓存视频数据及读取视频数据的方法及装置 | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
JP6900518B2 (ja) | メモリアクセス技術およびコンピュータシステム | |
CN108009008A (zh) | 数据处理方法和系统、电子设备 | |
JP6757808B2 (ja) | インフィニバンド(IB)上で仮想ホストバスアダプタ(vHBA)を管理およびサポートするためのシステムおよび方法、ならびに単一の外部メモリインターフェイスを用いてバッファの効率的な使用をサポートするためのシステムおよび方法 | |
WO2020199760A1 (zh) | 数据存储方法、存储器和服务器 | |
CN107783727B (zh) | 一种内存设备的访问方法、装置和系统 | |
CN117312201B (zh) | 一种数据传输方法、装置及加速器设备、主机和存储介质 | |
US9201609B2 (en) | Efficient replication of changes to a byte-addressable persistent memory over a network | |
CN109213423A (zh) | 基于地址屏障无锁处理并发io命令 | |
CN107329833B (zh) | 一种利用链表实现内存连续的方法和装置 | |
US20170286442A1 (en) | File system support for file-level ghosting | |
US8898353B1 (en) | System and method for supporting virtual host bus adaptor (VHBA) over infiniband (IB) using a single external memory interface | |
KR101485246B1 (ko) | 확장 원형 버퍼 | |
CN107122170B (zh) | 一种数据数组的大容量存储方法及装置 | |
JP2013088920A (ja) | 計算機システム及びデータ管理方法 | |
CN109960460B (zh) | 一种分布式存储系统 | |
US9104637B2 (en) | System and method for managing host bus adaptor (HBA) over infiniband (IB) using a single external memory interface | |
JP6333370B2 (ja) | キャッシュ線中で動的配列データ構造を実装するための方法 | |
CN109213424A (zh) | 并发io命令的无锁处理方法 | |
US20160292096A1 (en) | Packet processing system, method and device to optimize packet buffer space | |
US20240295990A1 (en) | System and Method for searching a buffer of a non-volatile storage Host Controller | |
JP5697403B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
CN103176907B (zh) | 一种内存管理的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20180108 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20190115 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20191031 Year of fee payment: 6 |