Swap operation 중의 page lock
절차
- swap-in 중 kernel은 prefetching을 시도
- Prefetching을 위해 새 page를 할당
- 새로 할당된 page는 초기에 lock이 걸려있는 상태
- Data가 없는 상태에서 스레드가 접근하면 동시성 에러 발생
- Swap-in operation 동작이 끝난 후 page unlock
- 만약 unlock 하기 전, 스레드가 해당 page에 접근하면 커널은 다음과 같은 처리를 진행
- Page wait table에 스레드를 추가
- 접근한 스레드를 대기 큐나 블록 큐로 상태 전이
- Swap operation 완료 후 page wait table을 통해 해당 페이지에 접근하려 했던 스레드들을 레디 큐로 전이
- Kernel의 scheduling 알고리즘에 따라 다시 스레드 실행
page wait table
- Page address를 기준으로 스레드를 저장하는 해시 테이블 구조체
- Lock 중인 page에 접근하는 모든 스레드를 저장
mm/filemap.c
참조
page structur
- long flags bit를 활용하여 page의 상태 표시
- flags는
include/linux/page_flags.h
참조
관련 함수
lock_page()
: page lock 설정
unlock_page()
: page lock 해제
PageLocked()
: page lock 검사
trylock_page()
: page lock 검사