BOTTOMHALF

포스트: 3|아이템:BOTTOMHA(3)
Tags

Posts

3 posts
[라즈베리파이] Soft IRQ 서비스는 누가 언제 처리하나? [2] - __do_softirq() 분석

[라즈베리파이] Soft IRQ 서비스는 누가 언제 처리하나? [2] - __do_softirq() 분석

Guillermo Austin Kim|2018년 7월 15일

이제 Soft IRQ 의 핵심 코드인 __do_softirq 함수를 분석할 차례입니다. 전체 코드는 다음과 같습니다.1 asmlinkage __visible void __softirq_entry __do_softirq(void)2{3unsigned long end = jiffies + MAX_SOFTIRQ_TIME;4unsigned long old_flags = current->flags;5int max_restart = MAX_SOFTIRQ_RESTART;6struct softirq_action *h;7bool in_hardirq;8__u32 pending;9int softirq_bit;10//...1112pending = local_softirq_pending();13account_

[라즈베리파이] Soft IRQ 소개

[라즈베리파이] Soft IRQ 소개

Guillermo Austin Kim|2018년 6월 28일

Soft IRQ는 리눅스 커널 시스템 핵심 기능 중 하나입니다. 리눅스 커널의 타이머, 스케쥴링은 물론 네트워크 시스템과 연관돼 있죠. 그만큼 Soft IRQ는 구조가 복잡해서 전체적인 큰 그림을 그리며 개념을 익히기 힘듭니다. 하지만 Soft IRQ 핵심 개념은 뭐니해도 인터럽트 후반부 처리라고 할 수 있습니다. 그래서 이번 절에서는 Soft IRQ를 인터럽트 후반부 처리 중심으로 알아볼 예정입니다. 이 개념을 정확히 익힌 다음 Soft IRQ에서 프로세스, 타이머 혹은 네트워크 시스템을 어떻게 처리하는지 알아보는 것이 좋습니다. Soft IRQ에 대해 알아보기 전에 우선 Soft IRQ를 왜 알아야 하는지 생각해 봅시다.1. 리눅스 커널 입문자를 벗어나 중급 수준 개발자가 되려면 Soft IR

[라즈베리파이]인터럽트 후반부 처리(Bottom Half) 소개 #CS

Guillermo Austin Kim|2018년 6월 12일

리눅스 커널이 인터럽트를 어떻게 처리하는지 배운 내용을 잠깐 복습해볼까요? 핵심 개념은 다음과 같습니다.첫째, 인터럽트가 발생하면 커널은 실행 중인 프로세스를 멈추고 인터럽트 벡터를 실행해서 인터럽트 핸들러를 실행합니다.둘째, 인터럽트 핸들러는 짧고 빨리 실행해야 합니다.셋째, 인터럽트를 처리하는 구간이 인터럽트 컨택스트인데 이를 in_interrupt 매크로가 알려줍니다. 욕심이 지나쳐 인터럽트 핸들러에서 많은 일을 하고 싶을 때가 있습니다. 가령 유저 공간에 인터럽트가 발생한 사실을 알리거나 다른 프로세스에게 일을 시키고 싶은 경우죠. 그런데 인터럽트 핸들러에서 이런 동작을 실행하면 어떻게 될까요? 이럴 때 시스템이 아주 느려지거나 커널이 오동작 할 수 있습니다. 그래서 인터럽트 컨택스트에서 많은 일을