Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

84112
549
416224


[임베디드] 뛰어난 임베디드 리눅스 프로그래머가 되기 위한 조건 임베디드 에세이

뛰어난 프로그래머가 되기 위한 가장 중요한 덕목은 뭘까? 개인적으로;

   * 바로 부지런히 새로운 것을 배우려는 자세라고 생각한다.

일단 난 게으른 편이고 새로운 지식이나 스킬을 배우는 속도도 정말 느리다. 그래서 이런 주제에 대해 이야기하는게 정말 부끄럽다. 그런데 한 가지 내가 잘한다고 느끼는 것을 말해보까? '바로 쪼잔하다는 거다.'

   * 쪼잔하다? 그게 뭔 소리니?

쪼잔하다는 게 뭔 소리인데 풀어서 설명을 해볼까? 코드를 한 줄 추가할 때나 분석할 때 스스로 나에게 다음과 같은 질문을 던진다.

   * 배열의 인덱스가 제대로 처리되고 있나?
   * 배열을 초기화하지 않고 사용하면 문제가 되지 않을까?
   * 이 코드 구간에서 레이스 컨디션이 발생하면 어떻게 될까?
   * 지금 보는 코드가 실행 중에 Preemption이 되거나 인터럽트가 발생하면 어떻게 될까?
   * 이 함수가 실행할 때 스택은 얼마나 쓸까?
   * 지역 변수를 추가하면 스택을 얼마나 증가할까?
   * 이 코드를 추가하면 GCC는 어떤 어셈블리 코드로 변환할까?
   * 함수로 전달되는 포인터가 NULL이면 어떻게 동작할까?
   * 전달되는 메모리 포인터는 슬럽일까? 슬럽이면 어떤 슬럽 오브젝트일까?
   * likely/unlikely 와 같은 GCC 빌트인 함수를 쓰면 GCC는 어떻게 코드를 재배치할까?
   * 이 함수가 혹시 인터럽트 컨텍스트에서 실행하면 어떻게 될까? 
   * 시그널을 보냈는데 시그널을 받을 프로세스가 Preemption이 되면 어쩌지?
   * 이 코드를 실행할 때 동적 메모리의 사용량이 부족하면 어떻게 될까?

정말 코드를 피곤하게 본다고 생각할 수 있다. 그런데 여기서 그치지 않는다. 내게 던진 질문에서 한 걸음만 더 나가볼까?  

   * 배열의 인덱스가 제대로 처리되고 있는지 어떻게 알 수 있을까?
   * 배열을 초기화하지 않고 사용하면 문제가 되지는 어떻게 검출할 수 있을까?
   * 이 코드 구간에서 레이스 컨디션이 발생해 문제가 발생할 것 같으면 어떻게 방지할까?
   * 지금 보는 코드가 실행 중에 Preemption이 되거나 인터럽트가 발생해 문제가 된다면 이를 어떻게 방지할까?
   * 이 함수가 실행할 때 스택을 많이 써서 스택 오버플로가 된다는 이를 어떻게 방지하고 검출할까?  
   * 지역 변수를 추가해 스택이 많이 증가한다면 이를 어떻게 검출할까?
   * 이 코드를 추가하면 GCC가 변환된 어셈블리 코드는 어떤 모습일까?
   * 함수로 전달되는 포인터가 NULL라 문제가 발생한다면 이를 어떻게 방지할까?
   * 전달되는 메모리 포인터는 슬럽이라면 남은 슬럽 오브젝트의 갯수는 몇 개일까?
   * likely/unlikely 와 같은 GCC 빌트인 함수를 써서 GCC가 재배치하는 코드는 어떤 모습일까?
   * 이 함수가 혹시 인터럽트 컨텍스트에서 실행해 문제가 생기면 이를 어떻게 방지해야 할까? 
   * 시그널을 보냈는데 시그널을 받을 프로세스가 Preemption이 된다면 이를 어떻게 방지해야 하나?
   * 이 코드를 실행할 때 동적 메모리의 사용량이 부족해 어떤 문제가 발생할까? 

여기서 두 걸음만 나가볼까? 이제는 적기도 귀찮다.

Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자


덧글

  • qwer 2020/01/11 13:26 # 삭제 답글

    회사에서 저렇게 하며 코드짜면 욕 바가지로 먹죠. 한시간이면 짤껄 왤케 질질끄냐면서. 그래서 대충 짜고 테스트하고 나가는데 제품 품질보면 개판이고... 대한민국에서 임베디드 개발자로 크려면 배우려는 자세도 중요하지만 윗선들도 중요하다는걸 뼈저리게 느껴요.
  • AustinKim 2020/01/11 14:09 #

    그러게 말이에요.
    매니저 분들이 코드를 얼마나 빨리 작성하는가에만 신경을 쓰지, 코드의 품질이나 안정성에 고민을 하지는 않는 것 같아요.
    그래도 저 같이 너무 굼벵이 같이 코딩하는 것도 그리 좋지는 않는 것 같네요. ):
  • sheld2 2020/04/26 05:34 # 삭제 답글

    그래도 조금이라도 생각이 있는 분들은, 결과물이 조금 늦어도 나중에 보면 그 때 얘가 잘 한거구나 라고 알아주는 것 같아요.
    느려도 생각을 많이하고 설계하면 분명히 안정성 측면에서 낫거든요. 릴리즈 후에 패치를 몇번했는지를 보면 알죠..
  • AustinKim 2020/04/26 07:21 #

    저도 다행이라 생각해요. 그래도 안정성이 높은 코드를 알아주는 분이 늘어나는 것 같아요.

    Thanks,
    Austin Kim
댓글 입력 영역