계획 수정과 2권 시작!
·
디버깅을 통해 배우는 리눅스 커널의 구조
이번주는 워크 큐를 마치고자 했지만 코드가 너무 복잡하고 너무 어려웠다. 그래서 계획도 지키지 못했다. 사실 저번주도 어거지로 계획을 채웠다. 이대로 가다간 배우는 것도 없고 흥미만 잃게 될 것 같아 워크큐는 좀 다음으로 미뤄야겠다. (나중에 워크큐를 다 배우고 나면 이미 올린 포스트에 수정해서 올릴예정) 또 원래는 스터디 계획표 작성을 워크스프레드 시트로 했지만 앞으로는 블로그에 정리해서 올려야 겠다. 워크큐를 건너뛰게 되면 바로 2권으로 넘어간다. 귀요미 펭귄이 한마리 더 생겼다. 2권도 잘 읽자!
워크큐 (Workqueue)
·
디버깅을 통해 배우는 리눅스 커널의 구조
워크큐란? 워크큐는 인터럽트 후반부를 처리하는 기법으로 쓰인다. 다른 인러텁트 후반부 처리 기법이랑 다른점이라면 워크큐는 프로세스 레벨에서 인터럽트 후반부를 처리한다. 워크큐에는 워크, 워크스레드, 워커 풀, 풀워크큐로 이루어져있다. 워크란? 워크는 워크큐의 실행단위다. 자료구조는 아래와 같다. struct work_struct { atomic_long_t data; struct list_head entry; work_func_t func; #ifdef CONFIG_LOCKDEP struct lockdep_map lockdep_map; #endif }; data : 워크 실행상태를 나타낸다 entry : 워크 연결리스트 노드 변수 (list_head는 다음을 참고) func : 실행할 함수 아래 두 매크..
스터디 계획(4주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
부터 까지
리눅스 커널 스터디 결산 (3주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
Soft IRQ Soft IRQ는 인터럽트 후반부 기법으로 쓰이는 방법중 하나다. Threaded IRQ는 스레드를 하나 만들고 스케줄링되서 처리하는 개념이지만, Soft IRQ는 인터럽트가 끝나고 나서 바로 처리된다. 1. 서비스 등 2jun0.tistory.com ksoftirqd 스레드 soft IRQ는 인터럽트가 실행되고 난 뒤, 바로 __do_softirq에서 실행된다. 그런데 soft IRQ 서비스가 오래 실행되거나, soft IRQ 컨텍스트에서 soft IRQ 서비스를 요청해서 자원을 계속해서 잡아먹고 있다면 2jun0.tistory.com 태스크릿 Tasklet 당장 Soft IRQ 서비스를 사용하고 싶다면 커널을 수정해서 Soft IRQ 서비스를 추가해야 할까? 아니다. 태스크릿을 이용하..
태스크릿 Tasklet
·
디버깅을 통해 배우는 리눅스 커널의 구조
당장 Soft IRQ 서비스를 사용하고 싶다면 커널을 수정해서 Soft IRQ 서비스를 추가해야 할까? 아니다. 태스크릿을 이용하면 된다. 태스크릿이란? 태스크릿은 Soft IRQ 서비스 중 하나이다. const char * const softirq_to_name[NR_SOFTIRQS] = { "HI", "TIMER", "NET_TX", "NET_RX", "BLOCK", "IRQ_POLL", "TASKLET", "SCHED", "HRTIMER", "RCU" }; 위의 코드에서 "TASKLET"가 있다. HI, TIMER 와 같은 Soft IRQ 서비스이다. 태스크릿은 어떻게 실행될까? 태스크릿은 기본적으로 Soft IRQ 서비스이기 때문에 __do_softirq에서 서비스 핸들러가 호출되어 돌아간다. 태..
ksoftirqd 스레드
·
디버깅을 통해 배우는 리눅스 커널의 구조
soft IRQ는 인터럽트가 실행되고 난 뒤, 바로 __do_softirq에서 실행된다. 그런데 soft IRQ 서비스가 오래 실행되거나, soft IRQ 컨텍스트에서 soft IRQ 서비스를 요청해서 자원을 계속해서 잡아먹고 있다면 어떡할까? 그럴때 필요한게 ksoftirqd 스레드다. ksoftirqd 스레드 란? ksoftirqd 스레드는 커널 스레드로 Soft IRQ를 스레드 레벨에서 처리해준다. static struct smp_hotplug_thread softirq_threads = { .store= &ksoftirqd, .thread_should_run= ksoftirqd_should_run, .thread_fn= run_ksoftirqd, .thread_comm= "ksoftirqd/%u"..
스터디 계획(3주차)
·
디버깅을 통해 배우는 리눅스 커널의 구조
부터 까지
Soft IRQ
·
디버깅을 통해 배우는 리눅스 커널의 구조
Soft IRQ는 인터럽트 후반부 기법으로 쓰이는 방법중 하나다. Threaded IRQ는 스레드를 하나 만들고 스케줄링되서 처리하는 개념이지만, Soft IRQ는 인터럽트가 끝나고 나서 바로 처리된다. 1. 서비스 등록 인터럽트 처럼 사전에 서비스를 등록해야 한다. open_softirq()를 통해 Soft IRQ 서비스 핸들러 함수를 softirq_vec에 등록한다. 2. 인터럽트 처리 인터럽트에서 Soft IRQ 서비스를 요청해야 실행된다. 요청하는 함수는 raise_softirq(id)이다. raise_softirq는 실행중인 cpu라인의 인터럽트를 비활성화 하고 raise_softirq_irqoff를 실행한다. raise_softirq_irqoff에선 아래와 같이 irq_stat.__softir..
2jun0
'디버깅을 통해 배우는 리눅스 커널의 구조' 카테고리의 글 목록