커 널 타이머 프로 그래 밍:
시계 펄스: soc 의 중요 한 지표 와 성능 매개 변수 입 니 다.커 널 사용 (프로 세 스 스케줄 링, 시간 계산).시계 인 터 럽 트 라 고도 하 는데 보통 운영 체제 의 0 번 인 터 럽 트 입 니 다.
jiffies:
커 널 에 서 는 시스템 이 작 동 된 이래 모두 몇 차례 의 시계 펄스 가 발생 했 는 지 를 나타 낸다. HZ:
커 널 에 서 는 1 초 에 몇 번 의 시계 펄스 가 발생 하 는 지 나타 낸다 .
Tick:
커 널 에 서 는 두 번 의 시계 펄스 간 의 시간 간격 을 나타 낸다. 커 널 은 소프트웨어 차원 에 있다.일련의 데이터 구조 와 함 수 를 제공 하여 바 텀 구동 시간 계산 프로 그래 밍 을 제공 합 니 다.
단계:
1. 정의: struct timer_list xxx; 2. 초기 화: init_timer(&xxx);
xxx.function = do_my_xxx;
xxx.data = (unsigned long)ooo;
xxx.expeirs = jiffies + 400;
3. 사용: 3.1 등록 및 타이머 시작: add_timer(&xxx); 3.2 타이머 리 셋 함수 완성: void do_my_xxx(unsigned long data)
{
.......
}
3.3 타이머 지연 시간 을 수정 하고 시작 합 니 다. mod_timer(&xxx,jiffies + );
3.4 타이머 로그아웃: del_timer(&xxx);
동시 제어:
여러 프로 세 스 가 동시에 임계 자원 구역 을 방문 하 는 것 은 경쟁 현상 을 일 으 킬 수 있 기 때문에 우 리 는 이런 현상 을 통제 해 야 한다. 바로 병행 통제 이다.병발 제어 에서 자주 사용 하 는 수단 은 자물쇠 다. 링크 ux 커 널 에서 제공 하 는 자물쇠:
1. 차단 중단 (강력 추천 사용 하지 않 음) 2. 원자 조작 (사용 하지 않 고 어 셈 블 리 에서 흔히 볼 수 있 으 며 보통 아주 짧 은 할당 문 일 뿐) 3. 자전거 자물쇠 3.1 읽 기 및 쓰기 잠 금 읽 기 프로 세 스 병행, 읽 기 및 쓰기 프로 세 스 상호 배척, 쓰기 프로 세 스 상호 배척 3.2 순서 로 읽 기 프로 세 스 를 잠 그 고 읽 기 프로 세 스 를 병행 하 며 쓰기 프로 세 스 가 서로 배척 합 니 다 3.3 RCU 읽 기 프로 세 스 병행, 읽 기 프로 세 스 병행, 쓰기 프로 세 스 병행 4. 신 호 량 이 pv 신 호 를 조작 하 는 자물쇠 로 그 사용 장면 은 상호 배척 체 와 유사 하지만 효율 이 상호 배척 체 보다 낮 기 때문에 상호 배척 체 로 대체 된다 .
5. 상호 배척 체 자 회전 자물쇠 와 상호 배척 체 사용 의 3 대 원칙:
1. 임계 자원 구역 이 시간 에 비해 자전 자 물 쇠 를 사용 하고 임계 자원 구역 이 비교적 클 때 상호 배척 체 를 사용한다.자전 자물쇠 가 직면 하 는 것 은 자전 대기 cpu 자원 소모 이 고, 상호 배척 체 는 프로 세 스 전환 의 자원 소모 이기 때문이다. 2. 임계 자원 구역 에 수면 을 일 으 키 는 함수 가 있 을 때 상호 배척 체 만 사용 할 수 있다.프로 세 스 상하 문 에서 상호 배척 체 가 실행 되 기 때문이다.인 터 럽 트 컨 텍스트 에서 자동 잠 금 이 실 행 됩 니 다. 인 터 럽 트 컨 텍스트 에 서 는 프로 세 스 스케줄 을 절대 피 합 니 다. 그렇지 않 으 면 시스템 붕 괴 를 일 으 킬 수 있 습 니 다. 3. 임계 자원 구역 에 중단 이 있 을 때 자 회전 자물쇠 만 사용 할 수 있 고 상호 배척 체 를 사용 할 수 없다.상호 배척 체 는 프로 세 스 상하 문 에서 실행 되 기 때문이다.인 터 럽 트 중 프로 세 스 스케줄 링 을 금지 하고 상호 배척 체 를 사용 하면 컨 텍스트 를 잃 어 버 릴 수 있 습 니 다. 1. 원자 조작:
1. 정의 및 초기 화 atomic_t xxx = ATOMIC_INIT(1); 2. 사용: atomic_dec_and_test(&xxx); atomic_inc(&xxx); 또는: atomic_inc_and_test(&xxx); atomic_dec(&xxx); 2. 자전거 자물쇠: 1. 정의: spinlock_t xxx; 2. 초기 화: spin_lock_init(&xxx); 3. 사용: 3.1 잠 금: spin_lock(&xxx); 3.2 잠 금 해제: spin_unlock(&xxx); 3. 신 호 량: 1. 정의: struct semaphore xxx; 2. 초기 화: sema_init(&xxx,1); 3. 사용: 3.1 잠 금: down(&xxx); 3.2 잠 금 해제: up(&xxx); 4. 상호 배척 체: 1. 정의: struct mutex xxx; 2. 초기 화: mutex_init(&xxx); 3. 사용: 3.1 잠 금: mutex_lock(&xxx); 3.2 잠 금 해제: mutex_unlock(&xxx);