Linux 2.6 커 널 의 새로운 잠 금 메커니즘 - RCU

유래:
Linux 원본 에 첨부 된 문서
http://www.ibm.com/developerworks/cn/linux/l-rcu
요약:
RCU(Read-Copy Update)。RCU 에 의 해 보 호 된 공유 데이터 구조 에 대해 독 자 는 어떠한 자물쇠 도 얻 지 않 아 도 접근 할 수 있 지만 작성 자 는 이 를 방문 할 때 먼저 복사 본 을 복사 한 다음 에 복사 본 을 수정 하고 마지막 으로 하나의 반전 (callback) 체 제 를 사용 하여 적당 한 시기 에 원래 의 수 거 를 가리 키 는 지침 을 새로운 수 정 된 데 이 터 를 다시 가리킨다.이 때 는 이 데 이 터 를 인용 한 모든 CPU 가 공유 데 이 터 를 종료 하 는 것 입 니 다.
독자 들 은 RCU 가 보호 하 는 공유 데이터 에 접근 하 는 동안 차단 되 어 서 는 안 된다.
작성 자 는 RCU 가 보호 하 는 공유 데 이 터 를 방문 할 때 독자 와 어떠한 자물쇠 도 경쟁 할 필요 가 없 으 며, 한 명의 작성 자 보다 많은 경우 에 만 어떤 자 물 쇠 를 얻어 다른 작성 자 와 동기 화 해 야 한다.작성 자 는 데 이 터 를 수정 하기 전에 먼저 수 정 된 요소 의 사본 을 복사 한 다음 에 사본 에서 수정 을 한 다음 에 쓰레기 회수 기 에 리 셋 함 수 를 등록 하여 적당 한 시기 에 진정한 수정 작업 을 수행 하도록 한다.적절 한 시 기 를 기다 리 는 이 시 기 를 grace period 라 고 하 는데 CPU 에서 컨 텍스트 전환 이 발생 하면 quiescent state 라 고 합 니 다. grace period 는 모든 CPU 가 quiescent state 를 한 번 겪 는 데 필요 한 기다 림 시간 입 니 다.쓰레기 수집 기 는 grace period 이후 작성 자가 등록 한 리 셋 함 수 를 호출 하여 진정한 데이터 수정 이나 데이터 방출 작업 을 완성 하 는 것 입 니 다.
함수 요약:

/*      RCU                       。*/
rcu_read_lock()


/*
    rcu_read_lock    ,             。               "     "(read-side critical section)。         ,  3,   2       1 。
*/
rcu_read_unlock()


/*
    RCU    ,      ,    grace period ,               ,            。     RCU       ,      grace period       。
*/
synchronize_rcu()


/*
   call_rcu    RCU     ,        ,            softirq   ,  synchronize_rcu、synchronize_kernel  synchronize_shced           。        func     RCU      ,      。      CPU            ,                       。   head          func,          RCU             ,                 。      ,   synchronize_rcu           call_rcu。
*/
void fastcall call_rcu(struct rcu_head *head,
                                void (*func)(struct rcu_head *rcu))

/*
    ,     p    v。
*/
rcu_assign_pointer()
typeof(p) rcu_assign_pointer(p, typeof(p) v);

/*
    p     
*/
rcu_dereference()
typeof(p) rcu_assign_pointer(p, typeof(p) v);



좋은 웹페이지 즐겨찾기