안녕하세요. 두가지 질문 드립니다.
1.
include/linux/list.h:26 |
static inline void INIT_LIST_HEAD(struct list_head *list) { WRITE_ONCE(list->next, list); list->prev = list; } |
list_head 초기화 시 prev, next를 null이 아닌 자기자신을 가리키도록 하는 특별한 이유가 있나요?
2.
start_kernel -> page_address_init -> spin_lock_init에서
spinlock_check 구현을 보면 아래와 같이 1줄로 되어 있는데
return &lock->rlock;
위와 같은 구문에서 spinlock의 무엇을 어떻게 “check”하는지 이해가 잘 되지 않습니다
댓글 3
.
안녕하세요? 문c블로그(http://jake.dothome.co.kr)의 문영일입니다.
1. list_head 초기화 시 prev, next를 null이 아닌 자기자신을 가리키도록 하는 특별한 이유가 있나요?
-> 리스트의 종류는 간단하게 다음과 같고, 그 중 리눅스는 노드의 추가 삭제가 용이한
4)번 A circular doubly linked list를 채택하고 있고 설계 특성상 prev와 next는 null을 가지지
않고 비어(empty) 있다 하더라도 자기 자신을 가리키게 합니다.
각 리스트 종류들 간의 장단점 비교는 생략합니다.
1) A singly linked list
2) A doubly linked list
3) A circular singly linked list
4) A circular doubly linked list
2. start_kernel -> page_address_init -> spin_lock_init에서
spinlock_check 구현을 보면 아래와 같이 1줄로 되어 있는데
return &lock->rlock;
위와 같은 구문에서 spinlock의 무엇을 어떻게 “check”하는지 이해가 잘 되지 않습니다
-> 인자로 받은 lock이 spinlock_t(typedef struct spinlock) 타입인지 컴파일 타임에 확실히 체크하기 위해서입니다.
감사합니다.