본문 바로가기

전체 글77

9.2 지연 작업 9.2 지연 작업9.2.1 커널 타이머커널 타이머를 이용하면 일정 시간 후에 정해진 작업을 할 수 있다. 또는 정해진 작업 사이에 시간 간격을 줄 수 있다.이 때 호출되는 함수가 타이머 핸들러인데, 타이머 핸들러는 비동기적으로 실행되는 인터럽트 문맥이다.따라서 인터럽트 핸들러와 같이 제약이 있다. 이를테면 sleep과 스케줄링이 불가능하다는 것.하지만 인터럽트 핸들러와 다르게 하드웨어 인터럽트는 활성화되어있는 상태임! 9.2.2 커널 타이머 APIstruct timer_list;unsigned long expires;jiffies가 expires에 도달하면 타이머 핸들러 호출. void (*function)(unsigned long);타이머 핸들러를 가리킨다. unsigned long data;타이머 핸.. 2018. 7. 6.
9.1 시간처리 9.1 시간처리9.1.1 jiffies 카운터리눅스에서 사용하는 전역 system timer. 시스템에 내장된 타이머에서 주기적 인터럽트가 발생하는 것.jiffies 는 부팅 시에 0으로 초기화되고, 1초에 HZ만큼 증가한다.예를 들어, HZ가 100이라면 jiffies는 1초에 100씩 증가한다. 9.1.2 Long Delayjiffies로 표현하는 지연. Busy Waitingt1 = jiffies + HZ;while(time_before(jiffies, t1)) cpu_relax(); cpu_relax() 는 cpu가 쉬는 것.지연시간이 정확하지만, 성능 저하가 발생한다는 단점이 있다. 양보하기t1 = jiffies + HZ;while(time_before(jiffies, t1)) schedule(.. 2018. 7. 6.
8.1 인터럽트 8.1 인터럽트8.1.1 인터럽트 핸들러CPU가 커널 코드를 실행 중일 때는 프로세스 문맥이나 인터럽트 문맥으로 구분된다. 프로세스 문맥프로세스와 관련된 커널 동작임. 프로세스 문맥인 경우는, 1) 유저 영역에서 실행 중인 프로세스 또는 스레드가 시스템콜에 의해 커널에 진입한 경우.2) 커널 스레드를 실행 중인 경우. 인터럽트 문맥인터럽트 발생 시 실행되는 커널 동작임.인터럽트 문맥의 특징은, 1) sleep 불가. 따라서 wait(), kmalloc(), 세마포어, 뮤텍스 등 sleep이 가능한 함수를 사용할 수 없다.2) 스케줄링 불가. 따라서 schedule() 등 함수를 사용할 수 없다. (타이머 인터럽트 비활성화 상태이기 떄문)3) 인터럽트 핸들러와 공유되는 자원은 원자 변수나 스핀락으로 보호되.. 2018. 7. 6.
Pull Down 저항, Pull up 저항 Pull Down 저항Open Drain 출력 상태에서 스위치가 Released 상태일 때 floating 상태(Hi-Z state)가 되는데, 이 floating 상태를 0으로 바꿔주는 방법이다. 저항을 통하여 GND에 연결하면 된다.스위치가 눌리지 않은 상태이면 0이 되게 하되, Short가 되면 안된다. Pull Up 저항Open Drain 출력 상태에서 Pull Down 저항과 반대로 Released 상태일 때 저항을 통해 Vcc에 연결되고,floating 상태를 1로 바꿔주는 방법이다.스위치가 눌리지 않은 상태일 때 1이 되고, Short가 되면 안된다. 2018. 7. 6.