리눅스

포스트: 556|아이템:리눅스(554)
Tags

Posts

556 posts

[라즈베리파이] 워크큐(Workqueue) 용어 알아보기

Guillermo Austin Kim|2018년 8월 20일

이번에는 워크큐에서 쓰이는 여러 용어를 소개합니다.많은 개발자들이 워크큐를 낯설어하는 이유는 자료구조와 그 개념을 익히기 어렵기 때문입니다. 워크와 워커쓰레드 그리고 풀워크가 자료구조가 어떤 형태로 연결되서 처리하는지 큰 그림을 그리기 어렵습니다. 각각 의미와 자료 구조를 살펴보겠습니다. 1. 워커 쓰레드우선 워커 쓰레드부터 알아보겠습니다. 워커 쓰레드는 워크를 실행하는 프로세스입니다. 리눅스 시스템에서 항상 백그라운드로 실행하는 친숙한 프로세스입니다. 프로세스 이름은 "kworker/"로 시작하며 워크큐 종류에 따라 "kworker/" 이후 번호가 붙습니다. 다음은 라즈베리파이에서 확인한 워커 쓰레드입니다.root@raspberrypi:/# ps -ely | grep kworkerS UID P

리눅스 민트 19 XFCE에서 버추얼박스 게스트 확장 및 한글 입력기 설치

반달가면|2018년 8월 20일

리눅스 민트(Linux Mint) 19 XFCE를 버추얼박스 가상머신에 설치하고 공유 폴더를 사용하기 위해 버추얼박스 게스트 확장(Virtualbox Guest Additions)을 설치하려 했으나, 오류가 발생. 상황은 대략 아래와 같다. 게스트 확장 iso 이미지를 마운트하고 설치를 진행했는데, 설치가 마무리되지 않고 오류 로그(log)를 확인하라는 메세지가 출력되었다. 오류 로그는 /var/log/vboxadd-install.log 파일에 있다. 오류 로그 파일을 열어서 내용을 살펴보니, 제일 앞부분에 /lib/modules/4.15.0-20-generic/build/include/linux/version.h 파일이 없다는(no such file or directory) 내용이 있다. 인터

[라즈베리파이] 비트 처리 __test_and_set_bit() __test_and_clear_bit() 함수 동작 원리

Guillermo Austin Kim|2018년 8월 19일

리눅스 커널과 드라이버에서 __test_and_set_bit()와 __test_and_clear_bit() 함수를 많이 씁니다. 두 함수 중 test_and_set_bit()를 써서 비트를 처리하는 코드를 보겠습니다.다음은 워크를 워크큐에 큐잉하는 queue_work_on() 함수입니다.[kernel/workqueue.c]1 bool queue_work_on(int cpu, struct workqueue_struct *wq,2 struct work_struct *work)3 {4 bool ret = false;5 unsigned long flags;67 local_irq_save(flags);89 if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_dat

[라즈베리파이] 워크큐(Workqueue) 소개

Guillermo Austin Kim|2018년 8월 16일

워크큐는 인터럽트 후반부 처리 기법으로 많이 알려져 있는데 커널 전반에서 후반부를 처리하는 기법입니다. 인터럽트 후반부는 물론이고 프로세스 컨택스트 후반부 처리 용도로도 많이 씁니다. 즉, 어떤 코드에서도 워크큐를 써서 후반부 처리를 할 수 있다는 의미입니다. 그동안 배웠던 IRQ Thread와 Soft IRQ 와 같은 인터럽트 후반부 처리 기법과 워크큐를 비교하면서 워크큐의 특징을 알아보겠습니다. IRQ Thread는 인터럽트 후반부 처리 전용 쓰레드이며 threaded IRQ 방식으로 인터럽트 후반부 처리를 할 수 있습니다. 마찬가지로 워크큐도 인터럽트 후반부 용도로 쓸 수 있습니다. 그런데 인터럽트 발생 빈도가 높거나 더 안정적인 코드 유지 보수를 위해서 IRQ Thread 기법 적용을 선호합니다.