[ Section 3 ] 리눅스 커널의 구조와 원리 1부-1

hyejinkwon·2024년 4월 22일

Linux Kernel

목록 보기
4/11
post-thumbnail

디버깅이란?

디버깅 은 debug와 -ing의 합성어로 버그를 잡는 과정
누군가 "디버깅하고 있다" ➡ "버그를 수정하고 있다"

디버깅 : 리눅스 커널Driver가 정상 동작할 때 자료구조와 함수 호출 흐름까지 파악하는 과정

  • 문제 해결 능력
  • 커널 코드 학습 능력

커널 디버깅은 문제 해결 능력 그 자체이다.

  • 부팅 도중 커널 Crash 발생
  • 인터럽트 핸들러를 설정했는데 인터럽트 핸들러가 호출되지 않음
  • 시스템 응답 속도가 매우 느려짐
  • 파일 복사가 안 됨

커널 로그와 메모리 덤프를 정확히 분석해야 문제 발생의 원인을 분석할 수 있다!


버그와 관련된 개발자가 디버깅을 함

자신이 작성한 코드의 논리적 문제점을 분석하고 해당 코드를 작성한 엔지니어가 버그를 잡았다.

커널로그나 메모리 덤프로 함수나 자료구조를 분석할 때는 자신이 작성한 코드보다

다른 개발자가 작성한 커널 코드를 만날 가능성이 매우 높다!

But 난이도가 높은 문제 일수록 커널 내부 함수를 분석할 가능성이 높아진다!


프로세스 소개

리눅스 시스템 개발자 입장에서 프로세스란 무엇인가?

  • 프로세스는 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름
  • 프로세스를 관리하는 자료구조이자 객체

프로세스란 무엇일까?

  • 리눅스 커널 소스 코드를 실행하는 주인공은 프로세스
  • 모든 함수는 프로세스의 Stack 공간에서 실행됨

유저 공간과 커널 공간

유저 프로세스의 실행 영역

유저공간 Task Descriptor 내 mm Field(Memory Descriptor/가상 메모리 공간)가 존재함

커널 프로세스는 유저 공간에서 실행하지 않음
커널 프로세스의 mm Field = NULL

유저 프로세스와 커널 프로세스를 구분지을 수 있는 자료구조는?

mm FieldNULL인지 확인하면 된다.


유저 프로세스를 생성할 때 실행 흐름

유저 프로세스의 생성 흐름도

  • 유저 공간에서 fork() 함수를 호출하면 리눅스에서 제공하는 Utility Library의 도움을 받아 커널에게 프로세스 생성 요청
  • fork() 함수에 대응하는 System Call Handler인 _arm64_sys_clone() 함수 실행

커널 스레드란?

Kernel Thead의 정의

  • 커널 프로세스는 커널 공간에서만 실행되는 프로세스
  • 데몬과 같이 백그라운드로 실행되면서 시스템 메모리나 전원을 제어하는 동작을 수행

Kernel Thead의 특징

  • 커널 스레드는 커널 공간에서만 실행되며, 유저 공간과 상호작용하지 않음
  • 커널 스레드는 실행, 휴면 등 모든 동작을 커널에서 직접 제어 관리
  • 대부분의 커널 스레드는 시스템이 부팅할 때 생성되고 시스템이 종료할 때까지 백그라운드로 실행

0개의 댓글