LINUX
Posts
477 posts![[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(2)](https://img.zoomtrend.com/2018/09/09/c0246238_5b933ef12662e.png)
[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(2)
From: 워크를 워크큐에 어떻게 큐잉할까?(1)에서 계속... 이번에는 28줄 코드를 보겠습니다.28last_pool = get_work_pool(work);struct work_struct 구조체인 work 변수로 get_work_pool() 함수를 호출해서 struct worker_pool 구조체 주소를 last_pool 지역변수로 읽습니다. get_work_pool() 함수는 조금 후 분석할 예정입니다. 이 코드만 보면 이해하기 쉽지 않으니 다음 그림을 같이 보겠습니다. 워크를 실행한 적이 있으면 struct work_struct.data 란 멤버 변수에 풀워크 주소를 저장합니다. get_work_pool() 함수는 위 그림에서 [1],[2] 번호와 같이 동작하면서 워커풀 주소를 가져옵니다.
[라즈베리파이] 커널 타이머 - 동적 타이머 실습 및 로그 분석(1)
이전 시간에 소스 코드 분석으로 커널 시스템 타이머 동작에 대해 알아봤습니다. 코드를 읽고 이해하는 과정도 중요하지만 배운 내용을 자신의 것으로 만들려면 분석한 코드가 리눅스 시스템에서 실제 어떻게 실행하는지 확인해야 합니다. 한 걸음 나아가 코드를 수정하면서 라즈베리파이에서는 커널 타이머 자료구조 데이터가 어떤 값인지도 확인할 필요도 있습니다. 이번에 소개하는 패치 코드를 입력하고 ftrace 로그를 분석하는 과정을 거치면 배운 내용이 훨씬 더 오랫동안 기억에 남을 것이라 확신합니다. 먼저 전체 패치 코드를 소개합니다.diff --git a/kernel/softirq.c b/kernel/softirq.c--- a/kernel/softirq.c+++ b/kernel/softirq.c@@ -424,10 +
리눅스에서 여러개로 분할된 tar 압축 파일 풀기
우선 tar 압축 파일 만들기/풀기에 대한 기본적인 내용은 이전 게시물을 참고하자. 여기로 tar 압축 파일을 split 명령으로 여러개로 분할해 놓았을 경우(split에 대한 내용은 이전 게시물을 참고하자. 여기로), 하나의 파일로 합친 후에 압축을 풀어야 한다. 아래의 예시를 보자. # 압축 파일 확인 ls my_data.tar.gz.aa my_data.tar.gz.ab my_data.tar.gz 파일을 2개로 나누어 놓은 상황이다. cat 명령으로 두 파일을 하나로 합쳐서 my_data.merged.tar.gz 파일을 만들고 압축을 풀면 된다. # 파일 합치기 cat my_data.tar.gz.* > my_data.merged.tar.gz # 압축 해제, ./re
[라즈베리파이] 커널 타이머 -동적 타이머는 누가 언제 호출하나? (2)
커널 타이머는 타이머 인터럽트가 발생 후 동작을 시작합니다. 다음 그림은 커널 시스템 타이머 전체 흐름도 중 1단계 부분입니다. [그림] 커널 타이머 전체 흐름도 1단계 타이머 인터럽트가 발생하면 인터럽트 핸들러 함수인 arch_timer_handler_phys() 가 실행하고 HZ (100)만큼 jiffies를 증감시키는 tich_sched_timer() 함수를 호출합니다. 이후 update_process_times() 함수를 호출하고 나서 run_local_timers() 함수가 run_local_timers() 함수를 호출합니다. 먼저 update_process_times() 함수를 봅시다.1 void update_process_times(int user_tick)2 {3struct ta



