해시테이블 (Hash Table)

2024. 12. 23. 17:29디바이스 드라이버

데이터 검색시 걸리는 시간 복잡도를 줄이기 위한 자료구조

 

DEFINE_HASHTABLE(name) : 해시테이블 선언

 

hash_add(table,new,key) : 새로운 노드 추가

 

hash_del(target) : 해당 노드를 해시테이블에서 제거

 

hash_for_each_possible(table,node,member,key) {...} : key에 해당하는 해시테이블 순회

 

hash_for_each(table,bkt,node,hash) : 모든 노드를 순회

 

 

buffer 구조체를 설정해준다. buffer 구조체 안에는 실질적인 data값과 data값을 특정할 수 있는 key값과 node가 들어간다.

DEFINE_HASHTABLE 명령어를 통해 해시테이블을 구축하는데 크기는 2의 제곱인 4이다.

 

 

add_item은 새로운 data를 key값과 함께 등록하는 함수이다. new_buffer라는 이름의 buffer 구조체(하나의 node로 생각)를 만든 후 그 곳에 인수로 받은 data값과 key값을 넣어서 TABLE에 넣는다.

 

get_item은 key값을 받고 table을 순회하면서 key값과 일치하는 data의 node를 print_item 함수에 전달하는 함수이고, print_item은 해당 key값과 data값을 출력해주는 함수이다.

 

 

모듈이 로드될 때 add_item 함수를 통해 해시테이블을 채우고 있는 모습이다. get_item(1,print_item)을 통해 1이라는 key값이 get_item으로 들어감과 동시에 print_item도 같이 인자로 들어가는 모습을 볼 수 있다. 이 print_item은 (*callback)(struct buffer *node)로 받는데 get_item 안에서 callback(a)가 나오면 print_item을 a라는 인수로 호출하라는 뜻이다.

 

모듈이 언로드될 때 모든 테이블을 순회하면서 값을 지우는 작업을 한다.

 

 

모듈이 로드될 때 설정한 키값에 맞는 data가 출력된다.

 

모듈이 언로드될 때 위와같은 순서로 data가 삭제된다.

 

'디바이스 드라이버' 카테고리의 다른 글

디바이스 드라이버 개발 (2)  (0) 2024.12.28
디바이스 드라이버 개발 (1)  (1) 2024.12.28
커널의 기본 API 익히기  (0) 2024.12.23
커널 모듈 만들기  (0) 2024.12.19
시스템 콜 추가하기 (실습)  (0) 2024.12.10