내부 핵 에서 병발 하여 취한 조치
1. 자 회전 자물쇠 와 상호 배척 체
먼저 임계 구역 의 개념 을 파악 하고 임계 구역 은 공유 자원 을 방문 하 는 코드 구역 이다.자 회전 자물쇠 (spin lock) 와 상호 배척 체 (mutex, matual exclusion) 는 커 널 을 보호 하 는 두 가지 기본 적 인 메커니즘 이다.
1) 자전 자 물 쇠 는 같은 시각 에 하나의 스 레 드 만 임계 구역 에 들 어 갈 수 있 도록 확보 할 수 있 으 며, 다른 들 어 가 려 면 방출 을 기 다 려 야 한다. 물론 스 레 드 는 커 널 스 레 드 가 아니 라 실 행 된 스 레 드 를 말한다.
:
#include <linux/spinlock.h>
spinlock_t mylock = SPIN_LOCK_UNLOCKED;
spin_lock(&mylock);
/* .... Critical Section code ... */
spin_unlock(&mylock); /* Release the lock */
2) 상호 배척 체 는 점용 되 는 임계 구역 에 들 어가 기 전에 제자리 에서 맴 돌 지 않 고 현재 스 레 드 를 수면 상태 로 들 어가 게 한다.
:
#include <linux/mutex.h>
static DEFINE_MUTEX(mymutex);
mutex_lock(&mymutex);
/* .... Critical Section code ... */
mutex_unlock(&mymutex); /* Release the mutex */
그래서 사용 할 때 어떻게 선택해 야 하나 요?
1) 임계 구역 에서 수면 이 필요 하 다 면 상호 배척 체 만 선택 할 수 있다.
2) 인 터 럽 트 함수 에 서 는 자 회전 자물쇠 만 사용 할 수 있 습 니 다.
2. 원자 조작
원자 조작 은 경량급 의 한 번 만 수행 하 는 데 쓰 인 다.카운터 수정, 조건 부 증가 치, 위치 설정 등에 자주 사용 된다.원자 조작 은 동작의 직렬 화 를 확보 할 수 있 으 며, 자물쇠 로 병발 을 보호 할 필요 가 없다.
구체 적 인 조작 인 터 페 이 스 는 include / asm - xxx - arch / atomic. h 를 볼 수 있 습 니 다.
3. 읽 기와 쓰기 자물쇠
모든 실행 장치 가 임계 영역 에 접근 할 때 읽 거나 쓰 거나 동시에 접근 하지 않 았 을 때 이 항목 을 선택 할 수 있 습 니 다.
(Read):
rwlock_t myrwlock = RW_LOCK_UNLOCKED;
read_lock(&myrwlock);
/* .... Critical Section code ... */
read_unlock(&myrwlock); /* Release the lcok */
(Write):
rwlock_t myrwlock = RW_LOCK_UNLOCKED;
write_lock(&myrwlock);
/* .... Critical Section code ... */
write_unlock(&myrwlock); /* Release the lcok */
같은 인 터 럽 트 처리 에 사용 되 는: readlock_irqsave()、read_unlock_irqstore()、write_lock_irqsave()、write_lock_irqstore。
1) 현재 새로운 커 널 에는 읽 기 보다 많은 순서 잠 금 (seqlock) 이 존재 합 니 다.
기본 동작:
do{
read_seqbegin(&xtime_lock);
/* .... Critical Section code ... */
}while(read_seqretry(&xtime_lock,seq);
2) 커 널 에는 또 다른 메커니즘 인 RCU (Read -- Copy -- Update) 가 있다.이 메커니즘 은 쓰기 동작 보다 읽 기 동작 이 훨씬 많은 성능 을 향상 시 키 는 데 쓰 인 다.기본 적 인 이념 은 읽 기 스 레 드 에 자 물 쇠 를 추가 할 필요 가 없 지만 스 레 드 를 쓰 는 것 이 복잡 해 져 야 한다. 먼저 한 부 를 복사 한 다음 에 복 사 된 이 데이터 구조 에서 업데이트 작업 을 해 야 한다.읽 기 작업 의 완성 을 보장 하기 위해 서 복사 본 은 모든 RCU 의 컨 텍스트 전환 을 일치 하 게 유지 합 니 다.구체 적 으로 는 Documentation / RCU / * 를 참고 할 수 있 습 니 다.
4. 디 버 깅 도구
1) 일반적인 자동 잠 금 오 류 를 출력 하기 위해 (CONFIG DEBUG SPINLOCK) 설정 할 수 있 습 니 다.
2)Lockmeter(http://oss.sgi.com/project/lockmeter/) 도 구 는 핸드폰 자물쇠 와 관련 된 통계 정보 에 사용 할 수 있다.
3) 자 물 쇠 를 신청 하면 풀 어야 한 다 는 것 을 명심 해 야 한다. 자 물 쇠 는 흔히 볼 수 있 는 문제 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다. 이 스 레 드 가 독립 된 Runnable 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.