Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

784223
1016
122600


[리눅스커널] 리눅스소개: 리눅스와 리눅스커널은 왜 배워야 할까? 1. Introduction to Linux

이번 시간에는 리눅스를 왜 배워야 하는지 생각해보는 시간을 갖겠습니다. 

저는 리눅스 세미나에서 다음 질문을 종종 받곤 합니다. 

   리눅스를 배워야 하는 이유가 무엇인가요?

특히 리눅스를 처음 접하는 분들이 많이 던지는 질문이었습니다. 이런 질문을 받고는 리눅스를 과연 왜 배워야 할까 곰곰히 생각해봤습니다. 여러 생각 끝에 내린 필자인 저는 다음과 같은 결론을 내리게 됐습니다.

   여러분들이 소프트웨어 개발을 하려고 한다면 리눅스는 반드시 알아야 합니다. 

이번에 먼저 리눅스를 왜 배워야 하는지 설명하는 시간을 갖겠습니다.

리눅스는 왜 배워야 할까?  
요즘에 학부 과정에서 리눅스 시스템 프로그램을 배울 수 있습니다. 또한 대학원 프로젝트 과제도 리눅스 환경에서 수행하고 있습니다.  이번에는 우리가 리눅스를 왜 배워야 하는지 생각해보는 시간을 갖겠습니다.

첫째, 리눅스는 IT 산업 전반에서 쓰는 운영체제입니다.
휴대폰, 클라우드 서버 및 네트워크 장비는 물론 전기자동차와 IoT 디바이스까지 리눅스를 채택하고 있습니다.

둘째, 네트워크, 브라우저, WAS 웹 어플리케이션 프로그램이 리눅스 기반에서 동작합니다.
리눅스 기반에서 구동하는 프로그램을 돌리고 세부 동작 원리를 파악하기 위해서 리눅스를 알 필요가 있습니다.

셋째, 리눅스는 오픈 소스 기반 운영체제입니다.
리눅스는 하드웨어를 제어하는 리눅스 커널과 그 위에서 돌고 있는 리눅스 유틸리티로 구성돼 있습니다. 그런데 리눅스 커널은 물론이고 대부분 리눅스에서 실행하는 프로그램의 소스 코드는 공개돼 있습니다.

소스 코드가 공개돼 있으니 소스 코드를 분석해 동작 원리를 파악할 수 있습니다.

리눅스 커널은 왜 배워야 할까?  
어떤 분이 '우리가 프로그래머로 일하려면 리눅스는 배워야 한다.'라고 말한다면 대부분 수긍할 것입니다. 하지만 누군가'리눅스 커널도 배워야 한다' 주장한다면 바로 납득하기는 어려울 것입니다. 이번 소절에는 '리눅스 커널을 배워야 하는 이유'에 대해서 이야기를 해보려고 합니다.

이 블로그가 리눅스 커널을 다루고 있지만 저는 솔직히 말씀드리고 싶습니다.

   여러분이 반드시 리눅스 커널을 배울 필요는 없습니다.

임베디드 리눅스나 리눅스 시스템을 개발할 때 '커널 소스'를 읽지 않고 '리눅스 명령어'를 입력하고 '커널 로그'를 읽으면서 개발할 수도 있습니다. 커널에 대한 깊히 있는 지식 없이도 개발자로 캐리어를 유지할 수도 있습니다.

하지만 저는 다음과 같이 말씀 드리고 싶습니다.

   여러분이 리눅스 고급 개발자 또한 엔지니어로 실력을 인정 받고 오랫동안 개발을 하고 
    싶다면 리눅스 커널은 반드시 배워야 합니다.

이제부터 '리눅스 커널'을 배워야 하는 이유에 대해서 이야기를 해보겠습니다. 

첫째, 여러분이 임베디드 리눅스 혹은 BSP(Board Support Package) 개발자로 디바이스 드라이버 개발을 맡고 있다면 리눅스 커널을 잘 알아야 합니다. 그 이유는 간단합니다.

    디바이스 드라이버는 커널 함수를 호출하는 방식으로 구현돼 있기 때문입니다.

우리가 C 프로그래밍을 잘 하려면 strcpy, strcmp, printf와 같은 라이브러리 함수의 용법을 잘 알아야 합니다. 리눅스 디바이스 드라이버도 마찬가지입니다. 디바이스 드라이버 개발을 잘 하려면 커널이 제공하는 함수 동작 원리를 파악하고 있어야 합니다.

둘째, 여러분이 고급 리눅스 시스템 프로그래머가 되려면 리눅스 커널을 알아야 합니다.

리눅스 시스템 프로그램은 다음 함수로 구성돼 있습니다. 
 - open(), read(), write(), close(): 파일 처리 관련 함수 
 - fork(), getpid(), exit(): 프로세스 처리 관련 함수
 - sigaction(), pause(): 시그널 처리 관련 함수

위 목록에 보이는 함수를 호출하면 리눅스 라이브러리 함수가 이를 처리할 것이라 생각할 수 있습니다. 하지만 실제 동작은 리눅스에서 제공하는 라이브러리의 도움으로 POSIX 시스템 콜을 호출해 커널이 동작합니다. 

   리눅스 시스템 프로그램을 실행하는 주체가 커널인 것입니다.

따라서 커널을 배우면 리눅스 시스템 프로그램의 동작 원리를 더 깊게 알 수 있습니다.

셋째, 운영체제의 핵심 원리를 소스 코드 분석으로 배울 수 있습니다.
스케줄링, 시스템 콜, 시그널, 가상 파일시스템, 메모리 관리 등등 운영체제 커널 핵심 구현 방식을 소스 코드로 배울 수 있습니다. 

넷째, IT 산업을 이루는 제반 기술의 세부 구현 방식을 알 수 있습니다.
파일시스템, 메모리 관리, 네트워크, 이더넷 등등 기술들은 커널에서 소스 코드로 만날 수 있습니다.

이번 시간에 언급한 '리눅스 커널을 배워야 하는 이유'를 한 문장으로 정리하면 다음과 같습니다. 

   고급 리눅스 개발자가 되려면 커널을 배워야 한다.


"혹시 궁금점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답글 올려드리겠습니다!"








핑백

덧글

  • brw 2019/11/21 13:37 # 삭제 답글

    잘보고갑니다.
  • AustinKim 2019/11/23 18:29 #

    자주 오셔서 유용한 정보 얻어 가셨으면 좋겠습니다. 감사합니다.
댓글 입력 영역