운영체제 커널 모듈 프로그래밍에서의 Linked list 사용
- 최초 등록일
- 2021.11.01
- 최종 저작일
- 2020.09
- 6페이지/ 한컴오피스
- 가격 2,000원
목차
1, 과제설명 ( 사용자 요구사항 기술: 과제에 대한 설명 및 목표 )
2, 이론
3. 알고리즘 및 자료구조 설계 내용
4. 소스코드 설명 ( 직접 작성한 소스코드중에 핵심 부분을 발췌하여 설명 )
5. 실행결과 및 설명 ( 실행 결과를 캡쳐하여 첨부한 후 설명 )
6. 고찰 ( 과제를 진행하면서 배운점 이나, 시행 착오 내용, 기타 느낀점 )
7. 전체 소스코드 ( 글자크기 9에 줄간격을 120%로 유지하고 한 줄이 너무 길지 않게 작성 )
본문내용
2, 이론
리스트에서 노드와 노드들의 연결방식은 다음과 같다.
위의 예시는 int형의 데이터를 저장하는 단순한 노드이다. struct node *prev와 struct node *next가 있는 걸 봤을 때 이중 연결리스트 임을 알 수 있다.
리눅스 커널에서도 리스트를 이와 같은 자료구조의 형태로 관리할까? 실제 코드를 보면 알 수 있지만 그 구조는 다르다.
실제 리눅스에서는 node내에 list_head라는 자료 구조를 두어서 관리한다. 따라서 구조는 다음과 같다.
3. 알고리즘 및 자료구조 설계 내용
구조체 생성후 list_head를 통한 구조체 선언 후 LIST_HEAD를 통한 리스트 선언
-> list_add(), list_add_tail()을 통한 각각 리스트의 앞, 뒤쪽에 노드 추가
-> 매크로 list_for_each을 사용하여 리스트 순환
list_for_each 매크로의 첫 번째 인자는 순환에 사용되는 포인터 , 두 번째는 리스트의 head 이다.
-> list_head()를 포인터의 인자로 사용해 list_del을 통한 리스트 삭제
< 중 략 >
6. 고찰 ( 과제를 진행하면서 배운점 이나, 시행 착오 내용, 기타 느낀점 )
아직 리눅스 환경에 익숙하지 않다보니 이번 과제 역시 HW3과 마찬가지로 적지않은 시행착오를 겪었다. 실습과제를 할 때 코드를 그대로 입력했음에도 제대로 make가 안되는 현상이 발생하여
해당 오류코드를 구글에 검색해보기도하고 리눅스 헤더파일을 다시 설치하기도 하였으며
혹시 list.h 파일에 손상이 있나 싶어서 새로 list.h 파일을 교체해보기도 하고
ubuntu 18.04 환경에서 작동하지않자 12.04 환경에서도 실행시켜보고 했는데 해결이 안돼서
코드를 하나하나 보는데 static int hello_init(void) 내부에 list print 가 아닌
list_print 로 수정해줬더니 허탈할만큼 잘 돌아갔다.
참고 자료
없음