이하 본 발명의 바람직한 실시 예를 첨부된 도면의 참조와 함께 상세히 설명한다. 그리고, 본 발명을 설명함에 있어서, 관련된 공지기능 혹은 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단 된 경우 그 상세한 설명은 생략한다.
이하 본 발명은 패킷을 수집(Aggregation) 할 경우, 검색에 따르는 오버헤드를 비트맵을 이용하여 줄이기 위한 새로운 BD(Buffer Descriptor)관리방법에 대해 설명할 것이다.
도 4는 본 발명의 실시 예에 따른 패킷을 수집하기 위한 블록 구성을 도시하고 있다.
상기 도 4에 도시된 바와 같이, HCF제어기(High Cycle Fatigue Controller)(401), Aggregation 제어기(403), Aggregation 생성기(409). 버퍼 제어 엔진(Buffer Control Engine : 이하, BCE라 칭함)(405), DMA 제어기(Direct Memory Access Controller)(407)로 구성된다.
상기 HCF 제어기(401)는 AP(Access Pointer)에서 스케줄링하여 수집(Aggregation)하는데 할당된 시간(TXOP(Transmitter Opportunity) Limit)을 상기 Aggregation 제어기(403)에 제공한다.
상기 Aggregation 제어기(403)는 상기 HCF 제어기(401)로부터 TXOP Limit를 제공받아 수집에 할당된 시간동안 보낼 수 있는 패킷을 길이를 결정하여 상기 패킷을 수집하는 기능을 수행한다. 또한, 패킷 수집(Packet Aggregation)에 관한 전반적인 동작을 제어한다. 여기서, 상기 패킷의 개수는, 상기 Aggregation 제어기(403)는 상기 Aggregation 생성기(405)에 수집 시작 신호를 전송하여 상기 패킷을 수집을 수행함을 알리면, 상기 수집 시작 신호를 수신한 상기 Aggregation 생성기(405)는 비트맵으로 구성된 수집할 패킷들의 위치 정보를 상기 Aggregation 제어기(403)에 제공한다. 상기 수집할 패킷들의 위치 정보를 제공받은 상기 Aggregation 제어기(403)는 상기 수집할 패킷들의 위치 정보를 상기 BCE(407)에 전송한다. 상기 BCE(407)는 상기 수집할 패킷들의 위치 정보를 제공받아, 상기 패킷들의 상태 정보(Status Information)와 제어 정보(Control Information)를 상기 Aggregation 제어기(403)에 제공한다. 상기 제공받은 해당패킷들의 상태 정보와 제어정보( 예 : 패킷 길이, 전송률)를 이용하여 상기 Aggregation 제어기(403)는 상기 할당된 시간동안 보낼 수 있는 패킷을 개수를 결정한다.
즉, 상기 Aggregation 생성기(405)는 비트맵을 이용하여 상기 패킷들의 위치 정보를 구성하고 있다. 여기서, 상기 패킷들의 위치 정보는, 상기 패킷들이 저장된 메모리 주소를 가리키는 프레임 디스크립터(Frame Descriptor)들의 인덱스들을 비트맵으로 구성한 것이다.
더욱이, 상기 Aggregation 생성기(405)는 임의의 패킷이 메모리에 추가되거나 삭제될 경우, 상기 Aggregation 제어기(403)의 제어에 따라 상기 임의의 패킷에 할당된 프레임 디스크립터의 인덱스를 이용하여 상기 비트맵을 갱신한다.
상기 DMA 제어기(409)는 상기 BCE(407)가 요청한 패킷들을 저장되어있는 메모리로 연결해주는 역할을 수행한다.
도 5a는 본 발명의 실시 예에 따른 송신시 BD를 관리하기 위한 구조를 도시하고 있다.
상기 도 5a에 도시된 바와 같이 새로운 BD관리 구조는 AC디스크립터(Access Category Descriptor)(501), 프레임 디스크립터(Frame Descriptor : 이하, FD라 칭함)(503), 프레임 본문(Frame Body)(505)로 구성된다.
먼저, 상기 AC 디스크립터(501)는 해당 AC(Access Category : 이하, AC라 칭함)에 포함된 FD들의 위치를 나타내는 비트맵을 포함하여 상기 FD를 쉽게 검색할 수 있게 한다. 예를 들어, 상기 AC디스크립터(501)는 도 5b에 도시된 바와 같은 구조를 갖는다.
WR 플래그 필드(511)는 상기 AC 디스크립터(501)의 내용을 갱신할 것인지, 상기 AC디스크립터(501)의 내용을 읽을 것인지를 나타내고, MAX.NUM of FD필드(513)는 메모리에 있는 상기 프레임 디스크립터(503)의 최대 개수를 나타낸다. 또한, 상기 프레임 디스크립터(503)의 최대 개수는 FD 비트맵(FD bitmap)필드(517)와 FD 비트맵 확인(Confimed FD bitmap)필드(519)의 길이(비트수)를 나타내며, AC.NUM of FD필드(515)는 특정 AC(예 : AC0, AC1, AC2, AC3)에 포함되는 FD의 개수를 나타낸다.
FD 비트맵필드(517)는 특정 AC에 포함되는 FD들의 위치를 비트맵을 이용하여 표시한다. 여기서, 상기 비트맵은, 메모리에 있는 모든 FD들의 개수만큼의 비트수를 가지며, 특정 AC에 포함되는 FD들의 인덱스 위치의 비트만을 1로 설정하여 위치를 표현한다.
FD 비트맵 확인필드(519)는 패킷들을 수집하여 송신한 후, 각 패킷들의 BA를 수신하는 것을 확인하기 위하여, 상기 BA가 수신된 패킷들의 FD의 인덱스를 1로 설정하여 상기 BA가 수신된 FD를 쉽게 찾을 수 있게 한다(이하, 도 13에서 상세히 설명한다).
TID의 개수(NUM of TID)(521)필드는 상기 특정 AC에 포함되는 TID 종류(예 : TID 1, TID 2, TID 3 )의 개수를 나타낸다. TID필드(523)은 해당 TID의 인덱스를 나타내며, TID 비트맵필드(525)는 상기 특정 AC에 포함되면 상기 TID필드(523)의 인덱스를 갖는 FD 인덱스를 나타낸다. 마지막으로 Reserved 필드(527)는 여유 공간을 나타낸다.
다음으로 프레임 디스크립터(503)는, 상기 패킷이 저장된 메모리 영역을 연결하는 기능을 수행하며, 링구조로 궤환적인 어레이(Array)구조를 갖는다. 예를 들어, 상기 프레임 디스크립터(503)는, 도 5c에 도시된 바와 같은 구조를 갖는다.
소유자(Owner)필드(531)는 상기 프레임 디스크립터(503)에 할당된 메모리 영 역을 사용하는 사용자의 동작을 나타낸다. 즉, 상기 메모리에 데이터를 저장하는 사용자일 경우 Host로 설정하고, 상기 메모리에 저장된 데이터를 읽는 사용자일 경우, LMAC로 설정한다. 데이터 길이(Data Length) 필드(533)는 전송할 패킷의 데이터의 길이를 나타내며, 헤더 길이(Header Length) 필드(535)는 상기 전송할 패킷의 헤더의 길이를 나타낸다.
헤더(Header) 필드(537)는 상기 전송할 패킷의 헤더를 나타내며, 버퍼 포인터(Buffer Pointer) 필드(539)는 상기 전송할 패킷에 할당된 메모리 공간에 대한 포인터정보 즉, 상기 전송할 패킷이 할당된 메모리 주소를 갖는다.
MD(MPDU Delimiter) 필드(541)는 상기 전송할 패킷들을 동일한 조건으로 수집하여 하나의 Aggregation PSDU(Physical Service Data Unit)로 구성하여 전송하는데, 상기 Aggregation PSDU내에서 각각의 패킷들을 구분하는 기능을 수행한다.
제어 정보(Control Information) 필드(543)는 상기 패킷을 전송하기 위한 전송률, 프로토콜(Protocol)정보, 등을 나타내며, 상태 정보(Status Information) 필드(545)는 상기 패킷을 전송한 결과를 저장하고, Reserved 필드(527)는 여유 공간을 나타낸다.
마지막으로 프레임 본문(505)은 송신할 패킷이 저장되어있는 메모리 영역으로 상기 프레임 디스크립터(503)의 버퍼 포인터(539)에 저장된 포인터 정보에 의해 연결된다.
도 6a는 본 발명의 실시 예에 따른 RX시 BD를 관리하기 위한 구조를 도시하고 있다.
상기 도 6a에 도시된 바와 같이 RX 버퍼 관리를 위해서 프레임 디스크립터(Frame Descriptor)(601)과 프레임 본문(603)만을 포함한다.
먼저, 상기 프레임 디스크립터(601)는 링구조를 갖으며, 상기 RX버퍼를 관리하는 기능을 수행한다. 예를 들어, 상기 프레임 디스크립터(601)는 도 6b에 도시된 바와 같은 구조를 갖는다.
소유자(Owner)(611)는 메모리를 사용하는 사용자의 동작을 나타낸다. 즉, 상기 메모리에 데이터를 저장하는 사용자일 경우 LMAC로 설정하고, 상기 메모리에 저장된 데이터를 읽는 사용자일 경우, Host로 설정한다. 데이터 길이(Data Length)(613)은 수신된 데이터의 길이를 저장하고, 버퍼 포인터(Buffer Pointer)(615)는 상기 수신된 데이터가 저장된 메모리 공간에 대한 포인터 정보 즉, 상기 수신된 패킷의 메모리 주소를 갖는다. 상태 정보(Status Information)(617)는 상기 패킷을 수신한 결과를 저장한다.
도 7은 본 발명의 실시 예에 따른 송신시 패킷을 수집하는 절차를 도시하고 있다.
상기 도 7을 참조하면, 먼저 Aggregation 제어기(403)는 전송할 패킷이 발생할 경우, 상기 패킷을 메모리의 빈 공간에 저장한다(701단계). 상기 패킷을 상기 메모리의 빈 공간에 저장한 후, 상기 Aggregation 제어기(403)는 상기 저장된 패킷을 관리하기 위한 프레임 디스크립터(Frame Descriptor)를 작성한다. 즉, 상기 도 5c에 도시된 바와 같은 구조를 갖는 프레임 디스크립터에 상기 패킷이 포함된 버퍼의 메모리 주소를 링크시키고, 상기 패킷에 대한 제어 정보(예 : 전송률, 프로토콜 (Protocol)정보, 등)를 작성한다(703단계).
이후, 상기 Aggregation 제어기(403)는 상기 패킷의 AC(Access Category)와 TID(Traffic ID)를 확인하여(705단계), 해당 AC의 AC 디스크립터에 상기 FD를 적용시킨다(707단계). 예를 들어, 상기 AC 디스크립터에 하나의 FD를 적용하는 것은 도 9에 도시된 바와 같은 구조를 갖는다.
이하 설명은 AC0 디스크립터에 하나의 패킷이 추가될 경우, 상기 추가되는 패킷의 FD가 추가되는 구조(900)와, 상기 FD가 추가될 경우의 상기 AC0 디스크립터의 구조(902)를 나타낸다.
먼저, 상기 AC0 디스크립터에 하나의 패킷이 추가되는 구조(900)는, 상기 AC0 디스크립터에 포함된 FD들 중, 첫 번째 FD(911)의 인덱스를 헤더(Head) 인덱스로 하고, 마지막 FD(913)의 인덱스를 테일(Tail)인덱스로 한다. 이때, 상기 TID 1을 갖는 FD(915)가 추가될 경우, 장치 드라이버(Device Driver)는 테일 레지스터(Tail Register)를 통해 상기 마지막 FD(913)를 가리키던 BD 어레이의 테일 인덱스를 아래로 이동시켜 새로 추가된 FD(915)의 인덱스를 상기 테일 인덱스로 한다.
상기 FD가 추가될 경우, 상기 AC0 디스크립터의 구조(902)는, 상기 FD(915)가 추가되면, 상기 AC0에 포함되는 상기 FD가 5개로 증가하므로 상기 AC.NUM of FD필드(515)는 5가 되고(921), 상기 FD 비트맵필드(517)의 비트맵의 마지막에 1을 추가한다(923)(101001…1 → 101001…11). 또한, 상기 추가된 FD를 전송하여 BA를 수신하였을 경우, 상기 FD 비트맵 확인필드(519)의 비트맵의 마지막을 1을 추가한다(925)(101001…1 → 101001…11).
또한, 상기 추가된 FD가 TID 1을 가지므로 상기 TID 1의 TID 비트맵필드(927)의 비트맵의 마지막에 1을 추가하며(001001…0 → 001001…01), TID 2의 TID 비트맵 필드(929)의 비트맵의 마지막은 0을 추가한다(100000…1 → 100000…10).
상기 707단계에서 상기 전송할 패킷의 FD를 상기 AC에 적용한 후, 상기 Aggregation 제어기(403)는 수집하고자 하는 조건을 갖는 패킷들을 상기 AC 디스크립터의 비트맵을 이용하여 수집한다(이하 도 11과 도 12에서 상세히 설명한다)(709단계).
이후, 상기 Aggregation 제어기(403)는 상기 수집한 패킷들을 하나의 Aggregation PSDU(Physical Service Data Unit)로 합성하여 물리계층을 통해 목적지로 전송한 후(711단계), 상기 FD의 상태 정보 필드(545)에 상기 Aggregation PSDU의 전송 결과, 즉 각 패킷들의 전송결과를 작성한다(713단계).
이후 미 도시되었지만, 상기 패킷들에 대한 BA(Block ACK)가 수신되면, 상기 BA를 수신한 패킷을 FD를 초기화시킨다. 예를 들어, 상기 BA를 수신한 FD를 초기화하는 것은 도 10에 도시된 바와 같은 구조를 갖는다.
이하 설명은 AC0 디스크립터에서 BA를 수신한 FD를 초기화할 경우, 상기 FD를 초기화하는 구조(1000)와, 상기 FD가 초기화될 경우의 상기 AC0 디스크립터의 구조(1002)를 나타낸다.
먼저, 상기 FD를 초기화하는 구조(1000)를 참조하면, 상기 AC0 디스크립터에 포함되는 FD들 중, 첫번째 FD(1111)를 헤더(Head) 인덱스로 하고, 마지막 FD(1115)를 테일(Tail) 인덱스로 한다. 이때, 상기 첫번째 FD(1111)에 대한 BA가 수신되면, 장치 드라이버(Device Driver)는 상기 FD(1111)를 초기화하고, 상기 FD(1111)이 헤더(Head) 인덱스이므로, 상기 TX/헤더 레지스터를 한단계 아래로 이동시켜 다음 FD(1113)를 헤더 인덱스로 한다.
다음으로 상기 FD가 초기화될 경우의 상기 AC0 디스크립터의 구조(1002)는, 상기 FD(1111)이 초기화 되었으므로, 상기 AC0에 포함되는 상기 FD의 개수가 4개로 감소하므로, 상기 AC.NUM of FD필드(515)는 4가 되고(1021), 상기 FD 비트맵필드(517)의 비트맵의 첫번째 1을 0으로 갱신하고(011001…11 → 001001…11) 헤더 인덱스를 FD(1113)으로 한다(1123). 또한, 상기 FD 비트맵 확인필드(519)의 비트맵의첫번째 1을 0으로 갱신한다(011001…11 → 001001…11)(1125).
또한, 상기 초기화된 FD(1111)의 TID가 2이므로 상기 TID 2의 TID 비트맵 필드(1027)의 비트맵의 상기 FD(1111) 인덱스의 비트를 0으로 갱신한다(010000…10 → 000000…10).
이후, 상기 Aggregation 제어기(403)는 상기 패킷을 전송하는 알고리즘을 종료한다.
도 8은 본 발명의 실시 예에 따른 수신시 패킷을 수집하는 절차를 도시하고 있다.
상기 도 8을 참조하면, 먼저 Aggregation 제어기(403)는 물리계층으로부터 패킷이 수신되면(801단계), 상기 수신된 패킷을 메모리의 빈 공간에 저장한 후, 상기 메모리에 저장된 패킷을 관리하기 위한 프레임 디스크립터(Frame Descriptor)를 작성한다. 즉, 상기 프레임 디스크립터에 상기 패킷이 포함된 버퍼 메모리 주소를 링크시킨다(803). 이후, 상기 Aggregation 제어기(403)는 상기 패킷이 수신된 결과를 상기 상태 정보 필드(617)에 기록한다(805).
이후, 상기 Aggregation 제어기(403)는 상기 패킷이 수신되는 알고리즘을 종료한다.
도 11은 본 발명의 실시 예에 따른 동일 TID별로 FD를 수집하기 위한 구조를 도시하고 있다. 이하 설명은, AC0 디스크립터(1101)에서 TID(Traffic ID)가 1인 프레임 디스크립터(Frame Descriptor)만을 검색하는 경우를 나타낸다.
상기 도 11을 참조하면, 상기 AC0 디스크립터(1101)에서 TID가 1을 갖는 FD의 위치 정보를 나타내는 TID 비트맵(1103)을 확인하여, 상기 비트맵이 1인 부분의 인덱스를 갖는 FD만을 수집한다(1105, 1107).
도 12는 본 발명의 실시 예에 따른 동일 AC별로 FD를 수집하기 위한 구조를 도시하고 있다. 이하 설명은, AC0디스크립터의 프레임 디스크립터(Frame Descriptor)를 검색하는 경우를 나타낸다.
상기 도 12를 참조하면, 상기 AC0 디스크립터(1201)에 속한 FD의 위치 정보를 나타내는 비트맵(1203)을 확인하여, 상기 비트맵이 1인 부분의 FD 인덱스를 갖는 FD(1205~1211)만을 수집한다.
도 13은 본 발명의 실시 예에 따른 BA의 수신을 확인하는 구조를 도시하고 있다. 이하 설명은, TID 1을 갖는 프레임 디스크립터(Frame Descriptor)의 BA(Block Ack)를 확인하기 위한 것을 가정하여 설명한다.
상기 도 13을 참조하면, 송신한 프레임 디스크립터들 중 BA를 수신한 상기 프레임 디스크립터의 인덱스를 1로 설정한 Confimed FD bitmap(1301)과 TID 1을 갖는 프레임 디스크립터의 위치를 나타낸 TID 1 Bitmap(1303)을 AND논리 연산을 수행하여 상기 TID 1을 갖는 프레임 디스크립터의 BA수신을 확인한다(1305).
도 14는 본 발명의 실시 예에 따른 동일 TID에서 다음 프레임의 지연시간을 예측하기 위한 구조를 도시하고 있다. 이하 설명에서 각 패킷들의 전송시간은 동일한 것으로 가정한다.
상기 도 14에 도시된 바와 같이, TID 1을 갖는 프레임 디스크립터의 비트맵 필드에서 1로 표시된 부분 사이의 비트수를 알 수 있기 때문에, 즉, 상기 TID 1을 갖는 프레임 사이에 포함된 프레임수를 알 수 있기 때문에, 상기 TID 1을 갖는 프레임 디스크립터사이의 지연 시간을 알수 있다.
한편 본 발명의 상세한 설명에서는 구체적인 실시 예에 관해 설명하였으나, 본 발명의 범위에서 벗어나지 않는 한도 내에서 여러 가지 변형이 가능함은 물론이다. 그러므로 본 발명의 범위는 설명된 실시 예에 국한되어 정해져서는 아니 되며 후술하는 특허청구의 범위뿐만 아니라 이 특허청구의 범위와 균등한 것들에 의해 정해져야 한다.