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 |