[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (1) @process_one_work
By Guillermo Austin Kim | 2018년 9월 11일 |
워크를 워크큐에 큐잉하면 다음 그림과 같이 insert_work() 함수에서 wake_up_worker() 이란 함수를 호출해서 워커 쓰레드를 깨웁니다. 이 동작 흐름은 위 그림과 같이 3단계로 분류할 수 있습니다. 1 단계워크를 워크큐에 큐잉합니다. 2 단계wake_up_worker() 함수를 호출해서 워커 쓰레드를 깨웁니다. 커널 스케줄러에게 워커 쓰레드를 깨워달라는 요청입니다. 3 단계스케줄링 정책에 따라 워커 쓰레드가 실행할 순서가 되면 커널 스케줄러가 워커 쓰레드를 실행합니다. 워커 쓰레드 핸들 함수는 worker_thread() 입니다. 이 함수에서 process_one_work() 함수를 호출해서 워크 핸들러를 호출하는 겁니다. 이번 소절에서는 process_one_work() 함
rsyslog를 이용한 syslog 포워딩
By JH의 컴퓨터세상 | 2019년 10월 16일 |
syslog 및 rsyslog 데몬을 이용하여 대상 서버로 로컬에서 발생한 syslog를 전송할 수 있습니다.예를들어 로그 통합 서버를 구축하여 syslog 및 rsyslog 데몬을 이용하여 로그 통합 서버로 보내 관리를 할 수 있습니다. Fedora 10 이후에는 rsyslog가 기본 데몬으로 설치되기 때문에 Linux OS 에서는 rsyslog를 많이 볼 수 있습니다. Unix OS에는 syslog를 이용 할 수 있습니다. 기본적으로 rsyslog의 설정파일 경로는 /etc/rsyslog.conf 에 위치하고,syslog의 설정파일 경로는 /etc/syslog.conf 에 위치합니다.포트는 514번 포트를 사용하며 UDP, TCP 방식으로 전송이 가능합니다. ㅁ 로컬서버에서 rsyslog 사용하기
[라즈베리파이] 시그널 - 커널 공간 시그널 함수 분석 - do_sigaction()
By Guillermo Austin Kim | 2018년 12월 12일 |
다음으로 살펴볼 코드는 do_sigaction() 함수입니다. 먼저 do_sigaction() 함수는 선언부를 봅시다.int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact); do_sigaction() 함수에 전달하는 인자 속성은 다음과 같은데 sys_rt_sigaction() 함수에 전달된 인자 유형과 같습니다.int sig: 설정한 시그널 번호struct k_sigaction *act: 새롭게 설정하는 시그널 속성struct k_sigaction *oact: 이전에 설정했던 시그널 속성 do_sigaction() 함수 인자를 알아봤으니 코드를 분석할 차례입니다.1 int do_sigaction(int sig, struc
[리눅스커널] 비트 마스크를 어셈블리 코드로 빨리 읽는 방법 - HARDIRQ_MASK, SOFTIRQ_MASK, NMI_MASK
By Guillermo Austin Kim | 2019년 5월 11일 |
이번에는 비트 마스크를 C 코드가 아닌 어셈블리 코드로 읽는 방법을 소개합니다. in_interrupt() 함수 소개 in_interrupt() 함수는 현재 프로세스가 인터럽트 컨택스트인지 알려주는 기능입니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/preempt.h]#define in_interrupt() (irq_count()) in_interrupt() 함수 코드를 보면 irq_count() 함수로 치환됩니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/preempt.h]#define irq_count() (preempt_count() & (HAR