KR20200076352A - 송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템 - Google Patents

송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템 Download PDF

Info

Publication number
KR20200076352A
KR20200076352A KR1020180165376A KR20180165376A KR20200076352A KR 20200076352 A KR20200076352 A KR 20200076352A KR 1020180165376 A KR1020180165376 A KR 1020180165376A KR 20180165376 A KR20180165376 A KR 20180165376A KR 20200076352 A KR20200076352 A KR 20200076352A
Authority
KR
South Korea
Prior art keywords
memory
memory block
descriptor
pool
buffer
Prior art date
Application number
KR1020180165376A
Other languages
English (en)
Other versions
KR102275871B1 (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 KR1020180165376A priority Critical patent/KR102275871B1/ko
Publication of KR20200076352A publication Critical patent/KR20200076352A/ko
Application granted granted Critical
Publication of KR102275871B1 publication Critical patent/KR102275871B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9047Buffering arrangements including multiple buffers, e.g. buffer pools
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9005Buffering arrangements using dynamic buffer space allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9015Buffering arrangements for supporting a linked list

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)

Abstract

통신 시스템에서 송수신 데이터를 저장하기 위한 버퍼의 저장 공간을 생성하고 해제하는 버퍼 관리 방법이 개시된다. 상기 버퍼 관리 방법은, 물리적 메모리 영역에 존재하는 디스크립터 풀(descriptor pool)과 메모리 블록 풀(memory block pool)로서, 다수의 디스크립터(descriptor)를 상기 디스크립터 풀에 미리 할당하고, 다수의 메모리 블록을 상기 메모리 블록 풀에 미리 할당하는 단계; 상기 디스크립터 풀로부터 하나의 디스크립터를 할당받고, 상기 메모리 블록 풀로부터 일정 개수의 메모리 블록들을 할당받는 단계; 및 상기 하나의 디스크립터와 상기 일정 개수의 메모리 블록들을 링크드 리스트 구조(linked list structure)로 연결하는 방식으로 상기 버퍼의 저장 공간을 생성하는 단계를 포함한다.

Description

송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템{A buffer management method for efficiently processing transmission and reception data and communication system}
본 발명은 통신 시스템에서 송수신 데이터의 저장 공간을 필요한 크기만큼 동적으로 할당하고 해제하도록 처리하는 버퍼 관리 기술이다.
통신 시스템에서 송수신 데이터를 임시로 버퍼에 저장하거나 읽어오는 과정은 매우 빈번하게 이루어진다. 또한 송수신 데이터의 길이는 어플리케이션에 따라 가변적으로 변하기 때문에 데이터 저장공간인 버퍼도 가변적으로 활용해야 한다.
버퍼를 가변적으로 운영하기 위한 일반적인 방법은 malloc() 함수를 사용하여 힙(Heap) 영역에서 필요한 크기만큼 동적으로 메모리를 할당받고 더 이상필요 없을 시 free() 함수를 이용해 힙(Heap) 영역에 다시 메모리를 반납하는 방법이다.
예를 들어, 힙(Heap)영역에서 동적으로 메모리를 할당하게 되면 일반적으로 도 1과 같이 순서대로 메모리를 할당해 준다. 그런데 메모리 해제는 할당된 순서와 상관없이 수행되기 때문에 중간에 두 번째 할당영역과 세 번째 할당영역이 순차적으로 해제 될 수 있다.
그 이후 900byte 크기 힙(Heap) 메모리를 할당하려고 할 때 이미 해제된 두 번째, 세 번째, 힙 영역의 크기가 900byte 보다 작기 때문에 네 번째 힙 할당영역 뒤에 순차적으로 할당된다. 이렇게 중간에 재사용 가능한 힙 영역이 있는데도 불구하고 중간에 비어있는 영역이 존재하는 것을 "메모리 단편화(memory fragmentation)"라고 한다.
메모리 단편화는 힙(Heap) 영역에서 동적 할당과 해제를 반복할수록 발생확률이 높아지기 때문에 메모리 공간 사용의 효율성 떨어지고 또한 해제 영역에 대한 재사용 가능성을 체크하는 절차로 인해 힙(Heap) 할당에 걸리는 시간이 지연되는 문제점이 발생한다.
본 발명의 목적은 통신시스템에서 송수신 데이터를 저장하고 읽어오는데 사용하는 버퍼를 가변적인 송수신 데이터의 크기에 따라 동적으로 메모리를 할당을 받을 수 있으며, 더 이상 버퍼를 사용하지 않을 경우 버퍼에 할당된 메모리를 반환하여 자원의 효율성을 높일 수 있는 버퍼 관리 방법을 제공하는 데 있다.
상술한 목적을 달성하기 위한 본 발명의 일면에 따른 버퍼 관리 방법은, 물리적 메모리 영역에 존재하는 디스크립터 풀(descriptor pool)과 메모리 블록 풀(memory block pool)로서, 다수의 디스크립터(descriptor)를 상기 디스크립터 풀에 미리 할당하고, 다수의 메모리 블록을 상기 메모리 블록 풀에 미리 할당하는 단계; 상기 디스크립터 풀로부터 하나의 디스크립터를 할당받고, 상기 메모리 블록 풀로부터 일정 개수의 메모리 블록들을 할당받는 단계; 및 상기 하나의 디스크립터와 상기 일정 개수의 메모리 블록들을 링크드 리스트 구조(linked list structure)로 연결하는 방식으로 상기 버퍼의 저장 공간을 생성하는 단계를 포함한다.
본 발명의 다른 일면에 따른 통신 시스템은, 다수의 디스크립터를 포함하는 디스크립터 풀(descriptor pool)과 다수의 메모리 블록을 포함하는 메모리 블록 풀(memory block pool)이 존재하는 물리적 메모리 영역을 갖는 메모리; 및 상기 디스크립터 풀로부터 하나의 디스크립터를 할당받고, 상기 메모리 블록 풀로부터 일정 개수의 메모리 블록들을 할당받고, 상기 하나의 디스크립터와 상기 일정 개수의 메모리 블록들을 링크드 리스트 구조(linked list structure)로 연결하여, 상기 버퍼의 저장 공간을 생성하는 프로세서;를 포함한다.
본 발명에 따르면, 송수신 데이터의 저장 공간인 버퍼에 대한 메모리 할당과 해제를 계속 반복하더라도 힙(Heap) 영역처럼 메모리 단편화가 증가하지 않아 메모리 재활용성이 용이하고, 이로 인해 메모리 할당에 대한 지연시간 또한 증가하지 않는다.
도 1은 종래의 힙(Heap) 영역에서 동적 할당과 해제를 반복함에 따라 발생확률이 높아지는 메모리 단편화를 설명하기 위한 도면이다.
도 2는 본 발명의 실시 예에 따른 버퍼 풀에서 메모리 할당방법을 설명하기 위한 개념도.
도 3은 본 발명의 실시 예에 따른 송수신 데이터를 저장하기 위한 1개의 버퍼를 생성 과정을 도시한 순서도.
도 4는 본 발명의 실시 예에 따른 버퍼 풀로부터 디스크립터와 메모리블록을 할당받아 송수신 기본 단위인 데이터를 저장하기 위한 버퍼의 구조도.
도 5는 본 발명에 일 실시 예에 따른 버퍼 해제 및 버퍼 풀에 메모리를 반납하는 과정을 도식적으로 나타낸 개념도.
도 6은 본 발명의 버퍼 생성 과정에 따른 버퍼 관리 방법이 적용되는 통신 시스템을 나타내는 블록도.
본 발명의 전술한 목적 및 그 이외의 목적과 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다.
그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 이하의 실시예들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 목적, 구성 및 효과를 용이하게 알려주기 위해 제공되는 것일 뿐으로서, 본 발명의 권리범위는 청구항의 기재에 의해 정의된다.
한편, 본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다. 명세서에서 사용되는 "포함한다(comprises)" 및/또는 "포함하는(comprising)"은 언급된 구성소자, 단계, 동작 및/또는 소자가 하나 이상의 다른 구성소자, 단계, 동작 및/또는 소자의 존재 또는 추가됨을 배제하지 않는다.
본 발명은 C 언어에서 제공하는 힙(Heap) 메모리에 대한 할당 함수(malloc())와 해제 함수(free())를 사용하지 않고 디스크립터와 메모리블록으로 구성된 버퍼 풀을 기반으로 송수신 버퍼를 동적으로 할당하고 해제하는 자체 메커니즘 방식으로 동작하는 버퍼 관리 방법을 제공함을 특징으로 한다.
도 2는 본 발명의 실시 예에 따른 버퍼 풀에서 메모리 할당방법을 설명하기 위한 개념도.
도 2를 참조하면, 본 발명의 실시 예에 따른 송수신 데이터(또는 송수신 패킷)의 저장 공간인 버퍼(100)는, 디스크립터(Descriptor)(112)와 메모리 블록(Memory Block)(122)을 버퍼 풀(Buffer Pool) 형태로 운영할 있도록 구성된다.
이를 위해, 버퍼 풀은 디스크립터 풀(110, Descriptor Pool 또는 디스크립터의 버퍼 풀)과 메모리 블록 풀(120, Memory Block Pool 또는 메모리 블록의 버퍼 풀)을 포함한다.
버퍼 풀은 물리적인 메모리 영역에 존재하고 버퍼 초기화 시 고정된 크기의 디스크립터(112)와 메모리 블록(122)을 각각의 버퍼 풀 영역(디스크립터 풀(110)과 메모리 블록 풀(120))에 미리 할당하여 도 2에 도시된 바와 같이 필요한 시점마다 빠르게 각각의 버퍼 풀 영역(디스크립터 풀(110)과 메모리 블록 풀(120))으로부터 디스크립터와 메모리블록을 할당 받을 수 있다.
도 3은 본 발명의 실시 예에 따른 송수신 데이터를 저장하기 위한 1개의 버퍼의 저장공간을 생성하는 과정을 도시한 순서도이다. 설명의 이해를 돕기 위해 도 2가 함께 참조된다. 아래의 각 단계의 수행 주체는 통신 시스템에서의 송수신 데이터(송수신 패킷)를 효율적으로 처리하도록 버퍼를 관리하는 프로세서일 수 있다.
다만, 아래의 모든 단계의 수행 주체를 프로세서로 한정하여 설명하면, 각 단계의 동작을 수행하는 주체가 무엇인지 불명확해질 수 있기 때문에, 이해를 돕기 위해, 각 단계를 수행하는데 가장 적절한 대상을 수행주체로 기술한다. 그렇지만, 각 단계의 수행 주체는 하나의 프로세서 또는 서로 다른 프로세서라는 하드웨어 수단으로 구체화될 수 있으며, 이는 당업자에게는 자명하다
도 3을 참조하면, 먼저, S311에서, 디스크립터 풀(110)에서 할당받을 수 있는 디스크립터가 존재하는지를 판단하는 과정이 수행된다.
이어, S313에서, 디스크립터 풀(110)에 버퍼 풀에 할당받을 수 있는 디스크립터가 존재하면, 디스크립터 풀(110)로부터 디스크립터(112)를 1개 할당을 받고, 디스크립터 풀(110)에 할당받을 수 있는 디스크립터가 존재하지 않으면, 버퍼 생성을 실패로 판단하여 버퍼 생성 과정을 종료한다.
이어, S315에서, 전단계(S313)의 수행에 따라 디스크립터 풀(110)로부터 1개의 디스크립터(112)를 할당받으면, 데이터 크기에 따른 메모리 블록 개수를 계산하는 과정이 수행된다. 데이터 크기에 적합한 메모리 블록의 개수는 아래의 수학식 1에 따라 계산될 수 있다.
Figure pat00001
여기서, BlockCount는 최종 계산값인 메모리 블록의 개수로서, 정수값이며, DataSize는 송수신 데이터의 실제크기, BlockSize는 메모리 블록의 저장 공간의 크기이다.
이어, S317에서, 수학식 1의 계산 과정에서 나머지 값이 생성하는 지를 판단한다.
나머지 값이 생성되지 않으면, 단계 S321를 진행하여 수학식 1에 따라 계산된 메모리 블록의 개수(BlockCount)만큼 순차적으로 메모리 블록 풀(도 2의 120)에서 메모리 블록(122)들을 할당받아 링크드 리스트 구조(linked list structure)로 단계 S313에서 할당 받은 디스크립터와 단계 S323에서 할당 받은 메모리 블록(122)들을 연결한다.
만약 계산 과정에서 나머지 값이 생성되는 경우, S310에서, 메모리 블록의 개수(BlockCount)를 1 증가 시키고, 단계 S321에서, 증가된 메모리 블록의 개수(BlockCount)만큼 순차적으로 메모리 블록 풀(도 2의 120)에서 메모리 블록(122)들을 할당받아서 링크드 리스트 구조(linked list structure)로 단계 S313에서 할당 받은 디스크립터와 할당 받은 메모리 블록(122)들을 연결한다.
만약 메모리 블록들을 링크드 리스트 구조로 연결하는 과정에서 메모리 블록 풀(120)에서 할당받을 수 있는 메모리 블록 존재하지 않는다면, 버퍼 생성을 실패라고 판단하여 기존에 할당 받은 메모리 블록을 전부 메모리 블록 풀(120)에 반납(해제)하여, 버퍼의 저장 공간 생성 과정을 종료한다.
도 4는 본 발명의 실시 예에 따른 버퍼 풀로부터 디스크립터와 메모리블록을 할당받아 송수신 기본 단위인 데이터를 저장하기 위한 버퍼의 구조도이다.
도 4를 참조하면, 본 발명의 실시 예에 따라 버퍼는 일반적으로 연속적인 데이터를 저장할 수 있는 일반적인 버퍼의 구조와 달리, 디스크립터(112)의 메모리 블록 필드는 첫 번째 메모리 블록(MB)에 연결되고 첫 번째 메모리 블록(MB1)의 메보리 블록 필드(F1)는 두 번째 메모리 블록(MB2)에 연결되는 방식으로 마지막 메모리 블록(MB6)까지 같은 방식으로 연결된다. 이렇게 1개의 디스크립터(112)와 다수의 메모리 블록(MB1~MB6)은 순차적으로 연결되어 있는 링크드 리스트 형태의 버퍼 구조로 되어있다.
데이터를 송수신 하는데 필요한 부가정보(프레임 길이, 프레임 종류, 전송속도, 전송시간 등)는 디스크립터(112)에 기록된다. 부가 정보는, 예를 들면, 프레임 길이, 프레임 종류, 전송속도, 전송시간 등을 포함한다. 따라서, 디스크립터(112)는 프레임 길이가 기록되는 필드(F1), 프레임 종류가 기록되는 필드(F2), 전송속도가 기록되는 필드(F3), 전송 시간이 기록되는 필드(F4)로 구성될 수 있다.
추가로, 디스크립터(112)는 첫 번째 메모리 블록(MB1) 주소가 기록되는 필드(Fn)를 더 포함하도록 구성될 수 있다. 이와 같이, 필드(Fn)에 첫 번째 메모리 블록(MB1) 주소가 기록됨으로써, 디스크립터(112)와 첫 번째 메모리 블록(MB1)이 연결된다.
실제 데이터 페이로드(또는 데이터)는 각 메모리 블록에 저장된다. 따라서, 각 메모리 블록은 실제 데이터 페이로드가 저장되는 필드(F2)로 구성될 수 있다.
추가로, 각 메모리 블록은 다음 메모리 블록의 주소가 기록되는 메모리 블록 필드(F1)를 포함하도록 구성될 수 있다. 이와 같이, 각 메모리 블록의 메모리 블록 필드에 다음 메모리 블록 주소가 기록됨으로써, 전체 메모리 블록들은 링크드 리스트 구조로 연결될 수 있게 된다.
한편, 데이터의 크기가 메모리 블록의 데이터 필드(F2)의 공간보다 클 경우 메모리 블록과 연결되어 있는 다른 메모리 블록들의 데이터 필드에 분할하여 저장할 수 있다.
링크드 리스트 구조로 연결된 메모리 블록의 개수는 메모리 블록 1개에 저장할 수 있는 공간의 크기와 송수신 데이터의 전송크기에 따라 가변적이다. 예를 들어 만약 메모리 블록에 Data 필드에 저장할 수 있는 공간이 256Byte이고 송신 데이터의 최대 전송크기가 1518byte이라면 1536byte(256byte x 6) 버퍼공간을 확보할 수 있는 6개의 메모리 블록이 필요하다.
이렇게 송신 데이터의 최대 크기보다 메모리 블록 1개의 데이터 저장 공간의 크기를 작게 하는 이유는 가변적인 송수신 데이터 크기에 따라 메모리 블록의 개수를 가변적으로 운영하여 메모리 블록의 낭비를 최소화 하고 버퍼공간의 활용성을 극대화하기 위함이다.
도 5는 본 발명에 일 실시 예에 따른 버퍼 해제 및 버퍼풀에 메모리를 반납하는 과정을 도식적으로 나타낸 개념도이다.
도 5를 참조하면, 송신 데이터를 성공적으로 전송했거나 수신 데이터를 이미 처리했다면 동적으로 할당된 버퍼는 더 이상 필요하지 않기 때문에 도 5와 같이 사용한 버퍼를 해제하기 위해서, 먼저 디스크립터(112)에 연결되어 있는 첫 번째 메모리 블록(MB1)에서부터 마지막 메모리 블록(MB6) 까지 순차적으로 주소 링크를 따라 가면서 각각의 메모리 블록을 메모리 블록 풀(120)에 모두 반납해준다.
그 이후 최종적으로 디스크립터(112)를 디스크립터 풀(110)에 반납하는 과정을 수행한다.
이상 설명한 바와 같이, 메모리 풀 없이 동적 할당과 해제를 반복하면 메모리의 랜덤한 위치에 할당과 해제가 반복되면서 메모리 단편화를 일으킬 수 있겠지만 미리 공간을 할당해 놓고 가져다 쓰고 반납하기 때문에 할당과 해제로 인한 메모리 단편화가 발생하지 않는다.
도 6은 본 발명의 버퍼 생성 과정에 따른 버퍼 관리 방법이 적용되는 통신 시스템을 나타내는 블록도이다.
도 6을 참조하면, 통신 시스템(600)은 버스(6200)를 통해 연결되는 적어도 하나의 프로세서(610), 메모리(630), 사용자 인터페이스 입력 장치(640), 사용자 인터페이스 출력 장치(650), 스토리지(660), 및 네트워크 인터페이스(670)를 포함할 수 있다.
프로세서(610)는 중앙 처리 장치(CPU) 또는 메모리(630) 및/또는 스토리지(660)에 저장된 명령어들에 대한 처리를 실행하는 반도체 장치일 수 있다.
일 예에서, 프로세서(610)의 실행에 따라, 하나의 메모리 블록이 저장할 수 있는 공간의 크기와 상기 송수신 데이터의 크기에 따라 상기 메모리 블록의 일정 개수가 계산될 수 있다.
다른 예에서, 프로세서(610)의 실행에 따라, 아래의 수학식 1에 따라 상기 송수신 데이터의 크기에 적합한 상기 일정 개수가 계산되고
상기 수학식 1은,
Figure pat00002
이다.
여기서, BlockCount는 최종 계산값인 메모리 블록의 일정 개수로서, 정수값이며, DataSize는 송수신 데이터의 실제크기, BlockSize는 메모리 블록의 저장 공간의 크기인
또 다른 예에서, 프로세서(610)의 실행에 따라, 상기 하나의 디스크립터에 링크드 리스트 구조(linked list structure)로 연결된 첫 번째 메모리블록에서부터 마지막 메모리블록까지 순차적으로 주소 링크를 따라가면서 각 메모리 블록을 상기 메모리 블록 풀에 모두 반납한 후, 각 메모리 블록의 반납이 완료되면, 상기 하나의 디스크립터를 디스크립터 풀에 반납하여, 상기 버퍼의 저장 공간을 해제하는 과정이 수행된다.
메모리(630) 및 스토리지(660)는 다양한 종류의 휘발성 또는 불휘발성 저장 매체를 포함할 수 있다. 예를 들어, 메모리(630)는 ROM(Read Only Memory) 및 RAM(Random Access Memory)을 포함할 수 있다.
일 예에서, 메모리(630)는 다수의 디스크립터를 포함하는 디스크립터 풀(descriptor pool)과 다수의 메모리 블록을 포함하는 메모리 블록 풀(memory block pool)이 존재하는 물리적 메모리 영역을 갖도록 구성될 수 있다.
본 명세서에 개시된 실시예들과 관련하여 설명된 방법 또는 알고리즘의 단계는 프로세서(610)에 의해 실행되는 하드웨어, 소프트웨어 모듈, 또는 그 2 개의 결합으로 직접 구현될 수 있다.
소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터, 하드 디스크, 착탈형 디스크, CD-ROM과 같은 저장 매체(즉, 메모리(630) 및/또는 스토리지(660))에 상주할 수도 있다.
예시적인 저장 매체는 프로세서(610)에 연결되며, 그 프로세서(610)는 저장 매체로부터 정보를 판독할 수 있고 저장 매체에 정보를 기입할 수 있다. 다른 방법으로, 저장 매체는 프로세서(610)와 일체형일 수도 있다. 프로세서 및 저장 매체는 주문형 집적회로(ASIC) 내에 상주할 수도 있다. ASIC는 사용자 단말기 내에 상주할 수도 있다. 다른 방법으로, 프로세서 및 저장 매체는 사용자 단말기 내에 개별 컴포넌트로서 상주할 수도 있다.
본 개시의 예시적인 방법들은 설명의 명확성을 위해서 동작의 시리즈로 표현되어 있지만, 이는 단계가 수행되는 순서를 제한하기 위한 것은 아니며, 필요한 경우에는 각각의 단계가 동시에 또는 상이한 순서로 수행될 수도 있다. 본개시에 따른 방법을 구현하기 위해서, 예시하는 단계에 추가적으로 다른 단계를 포함하거나, 일부의 단계를 제외하고 나머지 단계를 포함하거나, 또는 일부의 단계를 제외하고 추가적인 다른 단계를 포함할 수도 있다.
본 개시의 다양한 실시 예는 모든 가능한 조합을 나열한 것이 아니고 본 개시의 대표적인 양상을 설명하기 위한 것이며, 다양한 실시 예에서 설명하는 사항들은 독립적으로 적용되거나 또는 둘 이상의 조합으로 적용될 수도 있다
또한, 본 개시의 다양한 실시 예는 하드웨어, 펌웨어(firmware), 소프트웨어, 또는 그들의 결합 등에 의해 구현될 수 있다. 하드웨어에 의한 구현의 경우, 하나 또는 그 이상의 ASICs(Application Specific Integrated Circuits), DSPs(Digital Signal Processors), DSPDs(Digital Signal Processing Devices), PLDs(Programmable Logic Devices), FPGAs(Field Programmable Gate Arrays), 범용프로세서(general processor), 컨트롤러, 마이크로 컨트롤러, 마이크로 프로세서 등에 의해 구현될 수 있다.
본 개시의 범위는 다양한 실시 예의 방법에 따른 동작이 장치 또는 컴퓨터 상에서 실행되도록 하는 소프트웨어 또는 머신-실행가능한 명령들(예를 들어, 운영체제, 애플리케이션, 펌웨어(firmware), 프로그램 등), 및 이러한 소프트웨어 또는 명령 등이 저장되어 장치 또는 컴퓨터 상에서 실행 가능한 비-일시적 컴퓨터-판독가능 매체(non-transitory computer-readable medium)를 포함한다.
이상의 설명은 본 발명의 기술적 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면, 본 발명의 본질적 특성을 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능하다.
따라서, 본 발명에 표현된 실시예들은 본 발명의 기술적 사상을 한정하는 것이 아니라, 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 권리범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하고, 그와 동등하거나, 균등한 범위 내에 있는 모든 기술적 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (8)

  1. 통신 시스템에서 송수신 데이터를 저장하기 위한 버퍼의 저장 공간을 생성하고 해제하는 버퍼 관리 방법에서,
    물리적 메모리 영역에 존재하는 디스크립터 풀(descriptor pool)과 메모리 블록 풀(memory block pool)로서, 다수의 디스크립터(descriptor)를 상기 디스크립터 풀에 미리 할당하고, 다수의 메모리 블록을 상기 메모리 블록 풀에 미리 할당하는 단계;
    상기 디스크립터 풀로부터 하나의 디스크립터를 할당받고, 상기 메모리 블록 풀로부터 일정 개수의 메모리 블록들을 할당받는 단계; 및
    상기 하나의 디스크립터와 상기 일정 개수의 메모리 블록들을 링크드 리스트 구조(linked list structure)로 연결하는 방식으로 상기 버퍼의 저장 공간을 생성하는 단계
    를 포함하는 버퍼 관리 방법.
  2. 제1항에서,
    상기 일정 개수의 메모리 블록들을 할당받는 단계는,
    하나의 메모리 블록이 저장할 수 있는 공간의 크기와 상기 송수신 데이터의 크기에 따라 상기 메모리 블록의 일정 개수를 가변적으로 계산하는 단계; 및
    상기 메모리 블록 풀로부터 상기 가변적으로 계산된 상기 일정 개수의 메모리 블록들을 할당받는 단계;
    를 포함하는 버퍼 관리 방법.
  3. 제1항에서, 상기 일정 개수의 메모리 블록들을 할당받는 단계는,
    아래의 수학식 1에 따라 상기 송수신 데이터의 크기에 적합한 상기 일정 개수를 계산하는 단계를 포함하고,
    상기 수학식 1은,
    Figure pat00003

    여기서, BlockCount는 최종 계산값인 메모리 블록의 일정 개수로서, 정수값이며, DataSize는 송수신 데이터의 실제크기, BlockSize는 메모리 블록의 저장 공간의 크기인 것인 버퍼 관리 방법.
  4. 제1항에서,
    상기 버퍼의 저장 공간을 해제하는 단계를 더 포함하고,
    상기 하나의 디스크립터에 링크드 리스트 구조(linked list structure)로 연결된 첫 번째 메모리블록에서부터 마지막 메모리블록까지 순차적으로 주소 링크를 따라가면서 각 메모리 블록을 상기 메모리 블록 풀에 모두 반납하는 단계; 및
    각 메모리 블록의 반납이 완료되면, 상기 하나의 디스크립터를 디스크립터 풀에 반납하여, 상기 버퍼의 저장 공간을 해제하는 단계
    를 포함하는 버퍼 관리 방법.
  5. 송수신 데이터를 저장하기 위한 버퍼의 저장 공간을 생성하고 해제하는 통신 시스템에서,
    다수의 디스크립터를 포함하는 디스크립터 풀(descriptor pool)과 다수의 메모리 블록을 포함하는 메모리 블록 풀(memory block pool)이 존재하는 물리적 메모리 영역을 갖는 메모리; 및
    상기 디스크립터 풀로부터 하나의 디스크립터를 할당받고, 상기 메모리 블록 풀로부터 일정 개수의 메모리 블록들을 할당받고, 상기 하나의 디스크립터와 상기 일정 개수의 메모리 블록들을 링크드 리스트 구조(linked list structure)로 연결하여, 상기 버퍼의 저장 공간을 생성하는 프로세서;
    를 포함하는 통신 시스템.
  6. 제5항에서,
    상기 프로세서는,
    하나의 메모리 블록이 저장할 수 있는 공간의 크기와 상기 송수신 데이터의 크기에 따라 상기 메모리 블록의 일정 개수를 계산하는 것인 통신 시스템.
  7. 제5항에서,
    상기 프로세서는,
    아래의 수학식 1에 따라 상기 송수신 데이터의 크기에 적합한 상기 일정 개수를 계산하고,
    상기 수학식 1은,
    Figure pat00004
    이고,
    여기서, BlockCount는 최종 계산값인 메모리 블록의 일정 개수로서, 정수값이며, DataSize는 송수신 데이터의 실제크기, BlockSize는 메모리 블록의 저장 공간의 크기인 것인 통신 시스템.
  8. 제5항에서,
    상기 프로세서는,
    상기 하나의 디스크립터에 링크드 리스트 구조(linked list structure)로 연결된 첫 번째 메모리블록에서부터 마지막 메모리블록까지 순차적으로 주소 링크를 따라가면서 각 메모리 블록을 상기 메모리 블록 풀에 모두 반납한 후, 각 메모리 블록의 반납이 완료되면, 상기 하나의 디스크립터를 디스크립터 풀에 반납하여, 상기 버퍼의 저장 공간을 해제하는 것인 통신 시스템.
KR1020180165376A 2018-12-19 2018-12-19 송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템 KR102275871B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180165376A KR102275871B1 (ko) 2018-12-19 2018-12-19 송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180165376A KR102275871B1 (ko) 2018-12-19 2018-12-19 송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템

Publications (2)

Publication Number Publication Date
KR20200076352A true KR20200076352A (ko) 2020-06-29
KR102275871B1 KR102275871B1 (ko) 2021-07-12

Family

ID=71400666

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180165376A KR102275871B1 (ko) 2018-12-19 2018-12-19 송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템

Country Status (1)

Country Link
KR (1) KR102275871B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150127762A1 (en) * 2013-11-05 2015-05-07 Oracle International Corporation System and method for supporting optimized buffer utilization for packet processing in a networking device
KR20150116627A (ko) * 2014-04-08 2015-10-16 에스케이하이닉스 주식회사 컨트롤러 및 그것을 포함하는 데이터 저장 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150127762A1 (en) * 2013-11-05 2015-05-07 Oracle International Corporation System and method for supporting optimized buffer utilization for packet processing in a networking device
KR20150116627A (ko) * 2014-04-08 2015-10-16 에스케이하이닉스 주식회사 컨트롤러 및 그것을 포함하는 데이터 저장 장치

Also Published As

Publication number Publication date
KR102275871B1 (ko) 2021-07-12

Similar Documents

Publication Publication Date Title
US10891253B2 (en) Multicast apparatuses and methods for distributing data to multiple receivers in high-performance computing and cloud-based networks
US8832385B2 (en) Read-ahead processing in networked client-server architecture
EP3916536A1 (en) Data processing method and nvme storage device
KR102077149B1 (ko) 메모리 관리 방법 및 장치
CN110209348B (zh) 数据存储方法、装置、电子设备及存储介质
CN111723057B (zh) 一种文件预读方法、装置、设备及存储介质
US10210109B2 (en) Pre-allocating memory buffers by physical processor and using a bitmap metadata in a control program
KR20120041582A (ko) 스냅샷 이미지 분할 처리 장치 및 스냅샷 이미지 분할 처리 방법
CN109918381B (zh) 用于存储数据的方法和装置
US11762554B2 (en) Metadata volume bitmap data conflict processing method and related components
CN112306693B (zh) 数据包的处理方法和设备
KR102275871B1 (ko) 송수신 데이터를 효율적으로 처리하기 위한 버퍼 관리 방법 및 통신 시스템
US11960427B2 (en) Bridging module, data transmission system, and data transmission method
US9189382B2 (en) Noncontiguous representation of an array
US11301238B2 (en) Firmware updating method and firmware updating system
US9032178B2 (en) Electronic apparatus for memory allocation and reorganization
CN109416663B (zh) 用于最小化存储系统和其设备内的ssd中的碎片化的方法
CN113010103A (zh) 数据存储方法、装置、相关设备及存储介质
KR20150048028A (ko) 데이터 전송 관리 방법
CN109840217B (zh) 一种缓存资源分配和装置
US9442835B1 (en) Dynamic memory allocation using suballocation of cell blocks
KR101948988B1 (ko) 캐시를 이용한 파일 실행 방법 및 그 장치
WO2016188063A1 (zh) 提高ram存取效率的方法、装置和计算机存储介质
CN110881277A (zh) 一种数据存储方法、装置及相关设备
CN110929102B (zh) 一种数据处理方法、装置及电子设备

Legal Events

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