리눅스커널

포스트: 154|조회수: 0|TERM
Items

Posts

154 posts

[리눅스커널] 익명 페이지 메모리 누수(Memory Leak) 디버깅 - TRACE32

Guillermo Austin Kim|2019년 12월 16일

많은 리눅스 시스템 개발자들은 자신이 개발하고 있는 리눅스 커널의 버전이 주류였으면 하는 바램이 있다. 하지만 현실은 다르다. 현재 리눅스 커널의 최신 버전인 4.19(LTS 기준)으로 개발하고 있어도 이전 리눅스 커널 버전에서 다뤘던 자료 구조에 대해 알고 있어야 한다. 이번에는 커널 3.10 버전에서 struct anon_vma 구조체와 struct address_space 구조체의 관계에 대해 알아보겠다. 먼저 다음 TRACE32 명령어를 입력해 3번째 프레임의 페이지 디스크립터를 확인하자. $(TRACE32 명령어) v.v %d %t %h %i (struct page[0x7FFF])*mem_map (static struct page [32767]) (struct page[0x7FFF])*me

[리눅스커널] 커널 동적 타이머를 사용해 실행 시각을 측정해보기

Guillermo Austin Kim|2019년 12월 8일

이번에는 조금 더 재미있는 패치 코드를 같이 볼까요? 다음은 패치 코드의 내용입니다. diff --git a/kernel/workqueue.c b/kernel/workqueue.cindex cd8b61b..128c998 100644--- a/kernel/workqueue.c+++ b/kernel/workqueue.c@@ -49,7 +49,7 @@ #include #include #include -+#include #include "workqueue_internal.h" enum {@@ -2029,6 +2029,18 @@

리눅스 커널 기여2 (Contribution)-패치 작성 반영(Contribution) 확인(1/3)

Guillermo Austin Kim|2019년 10월 3일

패치 코드 작성 전 커널 코드 분석하기 이 포스팅을 올리는 주인공인 'Austin'은 리눅스 커널의 vmalloc 서브 시스템 내 __vmalloc_area_node() 함수 코드를 분석했습니다. 자, 그럼 소스 코드를 같이 볼까요? 특히 07~13번째 코드를 눈여겨봅시다. 01 static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,02 pgprot_t prot, int node){03 struct page **pages;04 unsigned int nr_pages, array_size, i;...05 area->nr_pages = nr_pages;06 /* Please no

[리눅스커널] 워크큐: 워커 스레드 핸들 worker_thread() 함수 분석하기 (2/2)

Guillermo Austin Kim|2019년 10월 1일

2단계: “전처리” 단계 워커 스레드의 “전처리” 단계 코드를 분석할 차례입니다. 다음 24번째 줄 코드를 보겠습니다. 24 recheck:25/* no more worker necessary? */26if (!need_more_worker(pool))27goto sleep; need_more_worker() 함수는 다음 동작을 수행합니다.struct worker_pool 구조체 worklist 필드에 접근해 이미 큐잉한 워크가 있는지 체크struct worker_pool 구조체 nr_running 필드에 저장된 실행 중인 워커 스레드 갯수를 점검 워크를 워크큐에 큐잉한 적이 없다면 워커 스레드를 실행할 필요가 없습니다. 따라서 goto sleep; 구문을 실행해 다시 휴면에 진입합니다.