LINUXKERNEL

포스트: 40|조회수: 0|ORGANIZATION
Items

Posts

40 posts

[리눅스커널] 프로세스 별로 파일 디스크립터(파일 객체)는 어떻게 관리하나?

Guillermo Austin Kim|2020년 2월 18일

아래 포스팅을 읽은 방문자님께서 댓글로 남겨 주신 질문에 대답하려고 합니다. [리눅스커널][가상파일시스템] 파일 객체: write 연산 세부 동작 분석 질문 서로 다른 프로세스에서 f1파일을 열었으니 fd가 가르키는 시스템 파일 테이블의 파일이 다를텐데어떻게 내용이 삭제되거나 섞이지도 않는지 알수 있을까요? 답신 사실 이 부분은 커널을 디버깅해봐야 알 수 있는 내용입니다. 커널 디버깅 툴 중 많이 사용되는 크래시 유틸리티로 이 내용을 확인해보겠습니다. 다음은 프로세스가 저장하고 있는 파일 디스크립터 목록을 출력해주는 'files 1' 명령어를 입력한 결과입니다. crash> files 1PID: 1 TASK: cf930f40 CPU: 0 COMMAND: "systemd"ROO

[리눅스커널] GCC 지시어

Guillermo Austin Kim|2019년 12월 21일

[부록-A] GCC 지시어 리눅스 커널 코드를 읽다 보면 낯선 구문을 만날 가능성이 높습니다. 이 중 하나가 GCC 컴파일러 지시어입니다. 이번 시간에는 리눅스 커널에서 자주 쓰는 GCC 지시어를 소개합니다. 1. __init과 __section() __init 키워드가 함수 선언부에 있으면 해당 함수는 init.text 섹션에 위치합니다. 이해를 돕기 위해 __init 키워드로 선언된 함수를 봅시다. void __init lockup_detector_init(void)02 {03 set_sample_period(); 01번째 줄과 같이 lockup_detector_init() 함수 옆에 보이는 __init 구문입니다. 함수 선언부에 __init 키워드가 보이면 부팅 과정에서 1번 호출되는 함수라고

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

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 @@

[Crash-Utility] Radix Tree 디버깅: 'tree -t radix -N (struct radix_tree_node *) 구조체 주소'

Guillermo Austin Kim|2019년 9월 30일

이번 시간에는 크래시 유틸리티로 라덱스 트리를 디버깅하는 방법을 소개합니다. 라딕스 트리(Radix Tree)를 보기 위한 명령어 크래시 유틸리티로 라덱스 트리 노드를 보기 위한 명령어 포멧은 다음과 같습니다. tree -t radix -N (struct radix_tree_node *) 구조체 주소 예제 명령어 및 결과 ( struct radix_tree_node 구조체 주소가 0xFFFFFFFF3A806E79 인 경우) crash> tree -t radix -N 0xFFFFFFFF3A806E79ffffffff3f53c180ffffffff3f53c4c0ffffffff3f555180ffffffff3f5554c0ffffffff3f56e180ffffffff3f56e4c0ffffffff3f5