도와주세요!!
글 수 15,339
2008.01.25 07:56:30 (*.146.214.99)
8397
i386/mm/pageattr.c 에 change_attr_page() 함수 주석문을 보면, 이 함수 사용 뒤에는 반드시 global_flush_tlb() 함수를
사용하라고 적혀있는데요,( Caller must call global_flush_tlb() after this. )
TLB는 선형 주소에서 물리 주소로 변환할 때 빠르게 참조하기 위해 존재하는 것으로 알고 있습니다.
change_attr_page()를 사용할 때에는 첫 번째 인자값으로 선형 주소의 page 구조체를 넘겨 주어야 하기 때문에
virt_to_page() 함수를 사용하는 과정에서 TLB가 이용되는 것 같구요,
그런데 왜 change_page_attr() 사용 뒤에는 global_flush_tlb()로 TLB를 비워라고 명시되어 있는지 잘 모르겠습니다.
꼭 global_flush_tlb()를 호출하지 않아도 이상은 없던데(물론 호출하는것이 더 안정되고 보장된 방법이겠지만),
더군다나 global_flush_tlb()는 전체 TLB 엔트리를 비우는 것으로 알고있는데요..
아, 어쩌다 보니 질문이 난해해 졌네요..
다시 정리하면, 왜 change_attr_page() 함수 뒤에는 global_flush_tlb()함수를 호출해야 하는가.. 에 대해 의문을 가지고 있습니다.
읽어주셔서 감사합니다. 좋은하루되시길 ^^;;
사용하라고 적혀있는데요,( Caller must call global_flush_tlb() after this. )
TLB는 선형 주소에서 물리 주소로 변환할 때 빠르게 참조하기 위해 존재하는 것으로 알고 있습니다.
change_attr_page()를 사용할 때에는 첫 번째 인자값으로 선형 주소의 page 구조체를 넘겨 주어야 하기 때문에
virt_to_page() 함수를 사용하는 과정에서 TLB가 이용되는 것 같구요,
그런데 왜 change_page_attr() 사용 뒤에는 global_flush_tlb()로 TLB를 비워라고 명시되어 있는지 잘 모르겠습니다.
꼭 global_flush_tlb()를 호출하지 않아도 이상은 없던데(물론 호출하는것이 더 안정되고 보장된 방법이겠지만),
더군다나 global_flush_tlb()는 전체 TLB 엔트리를 비우는 것으로 알고있는데요..
아, 어쩌다 보니 질문이 난해해 졌네요..
다시 정리하면, 왜 change_attr_page() 함수 뒤에는 global_flush_tlb()함수를 호출해야 하는가.. 에 대해 의문을 가지고 있습니다.
읽어주셔서 감사합니다. 좋은하루되시길 ^^;;
감사합니다. 해결했습니다.