pml4_set_page()
를 통해 pml4(page table)에 추가vm_alloc_page()
로 페이지(유저영역)를 할당할 때, 실제로 4kB를 할당하는 것이 아니라, supplemental page table에 페이지 객체를 추가한다.vm_try_handle_page_fault()
함수를 통해, 페이지 폴트를 핸들링한다.vm_do_claim_page()
를 호출하여 실제로 페이지를 할당해준다.hash_next()
를 호출하며 다음요소 순회. struct hash_iterator i;
hash_first (&i, h);
while (hash_next (&i)) {
struct foo *f = hash_entry (hash_cur (&i), struct foo, elem);
...do something with f...
}
hash_first()
로 iterator를 초기화한다.hash_next()
를 호출하며, hash_next()
의 리턴값이 null이 될때까지 반복문 수행for x in arr1:
print(x)
for x in string1:
print(x)
iterable object는 iterator를 가지고 있는 객체다. 순회할 대상이 iterable이기만 하면, string, list, dictionary 등 어떤 타입이더라도 같은 문법으로 순회할 수 있다. 위의 python 예시에서는 iterable object(arr1
, string1
)가 __iter__()
메서드를 구현했기 때문에(iterator를 가지고 있기 때문에) 가능한 것이다.
arr1 = [1,2,3,4,5] # <- iterable object
iter1 = iter(arr1) # <- iterator
python에서 iterable의 iterator는 iter()
함수를 통해 얻을 수 있다.
frame table을 구현할 때 자료구조로 처음에 List를 골랐다. 그런데 예상치 못한 버그가 발생했다. 디버깅에 너무 오랜시간이 걸렸고, 결국 Array로 자료구조를 바꿨다. 이후 커널 패닉이 없어지기는 했다만, List 구조를 사용하면서 버그를 잡은 것이 아니라 아쉽다. 팀 회의 때 malloc 대신 calloc을 써보는게 어떻냐는 제안을 받았는데, 나중에 시간이 난다면 테스트해봐야겠다.