IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
한국 developerWorks   >  dW Column  > developerworks
개발자 책꽂이

여름나기 책 2선: OS와 최적화의 상승 작용 엿보기



박재호박재호 jrogue@gmail.com

임베디드 소프트웨어 개발자로 일하고 있다. 블로그 '컴퓨터 vs. 책'과 '프로젝트 관리'를 운영하고 있으며, "조엘 온 소프트웨어"를 비롯한 IT 전문서적 번역가로 활동 중이다.



2007년 8월 14일


더위가 한창이다. 이번에 소개할 책은 컴퓨터 소프트웨어 분야 중에서도 하드웨어에 가까운 부분을 다룬다는 공통점이 있다. 우선 각 책에 대한 개별 내용을 살펴본 다음에, 두 권을 엮어 상승 작용을 얻는 방법에 대해 한 번 생각해 보자.

1번 타자
GREAT CODE 제2권: 로우레벨을 고려한 프로그램 최적화
란달 하이드 지음, 이건호/안병규/박철현/임중근/심지웅 옮김, 에이콘출판 2007년 출간

GREAT CODE 제2권 요즘 컴퓨터와 소프트웨어 성능이 워낙 좋기 때문에 프로그램을 작성할 때 ‘최적화’라는 단어를 아예 머리에서 지워버리라는 이야기를 접하곤 한다. 예를 들어, “설익은 최적화는 모든 악의 근원이다(Premature optimization is the root of all evil)”라는 도널드 카누스 교수의 말은 ‘최적화’ 작업이 무의미하다는 사실을 강조하는 문구로 자주 인용되었다. 하지만 혹시 이 문구 앞에 “We should forget about small efficiencies, say about 97% of the time:”라는 가정이 붙어있다는 사실을 알고 있는가? 3%에 대해서는 결국 최적화와 효율성을 생각하지 않을 수 없는 상황이다. 하지만 프로그램을 최적화해야 하는 방법에 대한 속 시원한 해법을 눈 씻고 돌아다녀봐도 찾기 어렵다. 결국 최적화를 달성하려면 시행 착오가 최선의 방법이란 말인가?

다행스럽게도 최적화를 다루는 책이 한 두 권씩 등장하기 시작했다. 에이콘 출판사에서 나온 번역서인 ‘임베디드 메모리 최적화 기법’(주의: 제목과는 달리 x86을 대상으로 메모리 최적화 기법을 다루고 있다. 이 책 부록을 보면 컴파일러 별로 최적화 기법에 대한 재미있는 설명이 등장한다), 사이텍 미디어에서 나온 번역서인 ‘ARM System Developer's Guide 한국어판’과 같은 책이 가뭄에 목 마른 개발자에게 단비를 내려주긴 했다.

하지만 책 전체 페이지를 할애하여 본격적인 최적화만 다루는 책이 등장하면 얼마나 좋을까? 이런 개발자들의 바람을 만족시키는 책이 바로 ‘GREAT CODE 제2권: 로우레벨을 고려한 프로그램 최적화’다. ‘GREAT CODE 제2권’은 소프트웨어 공학도를 위한 알기 쉬운 서적인 ‘Great Code Vol.1: 하드웨어의 이해’의 후속 작품으로 책 제목이 의미하듯이 고급 언어로 작성한 원시 코드가 컴파일러를 거치면서 어떻게 기계어 코드로 바뀌어 수행되는지 책 한 권을 몽땅 투자해 집중적으로 다룬다. 고급 언어를 활용해 좋은 기계어 코드가 나오도록 만들기 위해 컴파일러를 통한 변환 과정을 최적화와 효율이라는 관점에서 설명하고 있으므로 아키텍처와 어셈블리 언어를 이해하고 있는 일부 고급 개발자만 본능적으로 이해하고 있었던 최적화 기법이 속 시원하게 드러난다.

이 책에서 다루는 CPU는 크게 인텔 x86 계열과 파워PC 계열이지만, 각각 CISC와 RISC 아키텍처를 대표하는 CPU이므로 인텔과 파워PC 이외 다른 CPU에 적용할 경우에도 어느 정도 도움을 받을 수 있다. 물론 ARM이나 MIPS와 같은 CPU까지 다뤘더라면 특히 최적화에 목숨을 걸어야 하는 임베디드 개발자에게 더 큰 도움이 되리라는 아쉬움이 있긴 하지만 말이다.

이 책 특성상 컴파일러 결과물을 어셈블리어로 바꿔 설명하므로, 비록 어셈블리어 프로그램을 작성하지는 못하더라도 어느 정도 읽을 수는 있어야 한다. x86 어셈블리어는 비교적 개발자들 사이에서 많이 알려졌으므로 x86용 예제는 이해하기에 어려운 점은 없지만, 상대적으로 개발자들 사이에 덜 알려진 파워PC용 예제는 다소 이해하기 어렵다는 사실도 문제점으로 다가올지 모르겠다. 파워PC 아키텍처에 익숙하지 않다면, 이 책을 읽기 전에 어셈블리어 프로그램을 위한 파워PC 초보자 가이드를 짚고 넘어가기 바란다.

이 책에서는 기초적인 최적화 컴파일러 동작 원리, 컴파일러 출력물 분석 방법을 시작으로 고급 언어에서 상수/변수/배열/문자열 저장 방식, 고급 포인터 동작 원리, 레코드/유니온/클래스 자료형 저장 방식, 산술/논리 연산, 분기/반복 제어 구조, 고급 언어의 함수와 프로시저 호출 규칙에 이르기까지 효율을 높이기 위한 최적화 원리에 대한 전반적인 원리를 소개한다.

이와 같은 지식으로 무장하고 있다면, 심지어 똑 같은 알고리즘과 프로그래밍 언어를 사용하는 상황에서도 CPU나 컴파일러에 맞춰 최적화가 가능하도록 만드는 훌륭한 프로그래밍 기법을 활용하여 다른 개발자보다 효율적으로 동작하는 프로그램을 작성할 수 있다. 코딩 단계에서 성능이 우수한 코드를 작성하는 비법을 알려준다니, 정말 구미가 당기지 않는가? 이 책을 통해 아무쪼록 해당 고급 언어의 표준에 맞춰 원시 코드 가독성도 높으면서, 최종 CPU 아키텍처에서 부드럽게 돌아가도록 목적 코드 최적화도 잘 되어 있는 소프트웨어를 개발하기를 기원한다.

주의사항> 책을 읽다 보면 코드/설명 오류가 종종 튀어나오는데, 원서 대조를 해보면 원서 쪽 오류로 보이는 경우도 있어서 일단 역자들에게 문제점을 문의해 놓은 상태다. http://www.acornpub.co.kr/book/great-code-vol2에서 정오표를 확인해 의심스러운 부분은 확인하고 넘어가기 바란다. 특히 본문에 나오는 원시 코드 이름이 대부분 t.c라는 사실은 상호 참조 과정에서 치명타를 가하므로 본문에서 특정 코드를 지칭할 경우 어떤 코드인지 각별히 신경을 써가며 추적할 필요가 있겠다.



위로


2번 타자
OS 구조와 원리: OS 개발 30일 프로젝트
카와이 히데미 지음, 이영희 옮김, 한빛미디어 2007년 출간

OS 구조와 원리: OS 개발 30일 프로젝트 개인적으로 여기저기 고양이가 등장하는 아기자기한 그림/내용과 더불어 지면을 최대로 활용해 온갖 자투리 정보를 다 넣는 컴퓨터 관련 일본 서적을 정신이 사납다는 이유로 그다지 선호하지 않는다. 하지만 이번에 휴가(?) 기간 동안 심심풀이로 일본 서적을 번역해 놓은 책을 한 권 읽어보았는데, 나름 도움이 되고 재미있는 구석이 있어 독자들에게 소개하기로 마음먹었다. 바로 다양한 실험 정신으로 충만한 아마추어 일본 개발자가 운영체제 개발을 경험 삼아 집필한 책이다.

흔히 운영체제를 다루는 책이라고 하면 머리가 지끈할 정도로 복잡한 이론 설명이나 어셈블리어와 C 프로그래밍 언어의 정수를 보여주는 복잡한 원시 코드를 떠올리기 쉽다. 이론을 소개하는 운영체제 교과서 대부분은 현실과 동떨어진 먼 나라 이야기를 늘어놓기에 컴퓨터 공학과 학부 과정에서 수업 시간에 몇 줄 읽어보고는 영원히 책장에서 잠드는 경우가 대부분이다. 운영체제를 실질적으로 파헤치는 교과서 역시 복잡하기는 이론 교과서와 막상막하를 달린다.

일례로 리누스 토발즈가 리눅스 개발에 영감을 받았다고 알려진 타넨바움 교수가 쓴 미닉스(MINIX) 운영체제를 설명하는 책인 “Operating Systems: Design and Implementation”의 부록 E 미닉스 원시 코드 부분을 보면 어느 정도 프로그램을 잘 짠다는 친구들이 봐도 정신이 하나도 없을 정도로 복잡한 구조체와 알고리즘이 여기저기에서 아우성을 치고 있다. 따라서 이런 책을 보면 취미로 운영체제를 개발하려다 사람 잡는 일이 생길지도 모르겠다는 걱정이 앞선다.

하지만 이번에 소개하는 “OS 구조와 원리: OS 개발 30일 프로젝트”는 기존 운영체제 서적과는 조금 색다른 접근 방법을 사용하고 있다. 시행착오를 겪으면서 간단한 운영체제를 만들어 나가는 과정을 일기 방식(유식한 용어로 말하자면 엔지니어링 노트 방식)으로 작성해서, 떡 하니 완성된 운영체제 원시 코드를 줄줄이 나열하는 대신 운영체제에 필요한 기능을 조금씩 추가하고 삭제하고 고쳐가는 과정을 생생하게 묘사하고 있다. 저자도 후기에서 명시적으로 밝히고 있듯이 이 책은 ‘실패로부터 배운다’는 철학을 토대로 만들어졌기에 일반적인 책에서 찾아보기 어려운 ‘문제점을 극복해 나가는 과정 자체’가 가장 큰 특징이라고 보면 된다.

운영체제 제작을 30일 분량으로 나누어, 매일 특정 목표를 잡고 이를 달성해 나가는 과정에서 부딪히는 문제와 이를 하나 둘씩 해결해 나가는 저자의 좌충우돌 경험담이 상당히 자연스럽게 기술되어 있으므로 운영체제 이론을 잘 모르는 병아리 개발자라도 이 책을 읽고 나면 겁 없이 운영체제에 도전할 용기가 생긴다.

운영체제 제작 관점에서 살펴보자면, 이 책은 하리보테 OS라는 자작 운영체제를 만들기 위해 부트섹터, IPL, 32비트 모드 전환(x86이라는 사실을 잊지 말자!), 화면 표시, GDT/IDT 초기화, 인터럽트 처리, 마우스와 키보드 제어, 메모리 관리, 간단한 윈도우 시스템, 타이머, 태스크 관리, 콘솔, FAT, 운영체제 시스템 API, 운영체제 예외 처리, 애플리케이션 제작, 애플리케이션 보호, 운영체제 파일 압축을 다루고 있다. 물론 디바이스 드라이버, 본격적인 파일 시스템, 시그널과 터미널 세션, 프로세서 간 통신과, 가상 메모리와 같은 정말 쓸만한 운영체제를 만들기 위한 기본적인 요소가 빠져 있으므로, 본격적인 운영체제를 기대하고 이 책을 구입한 독자라면 조금 실망할 가능성도 있다.

하지만 평상시 손수 간단한 운영체제를 만들어 보고 싶어하는 호사가라면 개발 과정에서 출발점으로 이 책을 참고하면 도움이 되리라는 생각이다. 거의 900페이지에 가까운 두꺼운 책을 처음부터 끝까지 읽을 자신이 없다면 부록에 들어있는 CD를 활용해 실제로 자그마한 운영체제를 여러분 PC나 가상 기계에 올려보고 관련 코드를 살펴보기 바란다. ‘백문이 불여일견’을 목표로 만든 책이니 이렇게 접근해도 큰 문제가 없을 것이다.

   소셜 북마크

   mar.gar.in mar.gar.in
    digg Digg
    del.icio.us del.icio.us
    Slashdot Slashdot

주의사항> 초보적인 어셈블리어와 C 구문 설명이 사족처럼 중간 중간에 나오는 반면, 반드시 이해하고 넘어가야 하는 이론적이거나 복잡한 개념 설명은 구렁이 담 넘듯이 슬쩍 넘어가는 경향이 있으므로, 이 책을 읽고 나서 뭔가 부족하다는 느낌이 들었다. 초보자를 위해 난이도를 조정하느라 일부로 의도했는지 모르겠지만, 이와 같은 서술 방식의 문제점은 이 책을 읽는 도중 넘어야 할 큰 산이 아닌가 싶다.

  • 특별 보너스
  • 이제 약속한 바와 같이 두 책을 동시에 읽어 상승 작용을 누려보자. “OS 구조와 원리: OS 개발 30일 프로젝트”를 읽다 보면 중간에 최적화 때문에 고생고생하며 코드를 수정하는 부분이 여러 곳에 등장한다. 컴파일러 최적화 옵션 때문에 죽은 코드 제거로 인해 원하는 방식대로 동작하지 않는 예(9장 2절과 3절)를 비롯하여 for 루프나 if 문을 줄이기 위해 이런 저런 트릭을 활용하는 예가 등장한다. 하지만 경험과 시행 착오를 앞세워 설명하다 보니, 왜 그렇게 되는지 정확한 이유도 모른 채 그냥 책에 질질 끌려 다닐 가능성이 높다. 이럴 때 바로 “GREAT CODE 제2권: 로우레벨을 고려한 프로그램 최적화”를 처음부터 끝까지 독파하고 다시 “OS 구조와 원리: OS 개발 30일 프로젝트”로 돌아와보자. 책 중간 중간에 계속 나오는 어셈블리어 코드를 봐도 그렇게 두렵지 않으며, 최적화를 위해 반드시 짚고 넘어가야 하는 부분 등이 어렵지 않게 눈에 들어오기 시작할 것이다.



    위로


    [지난 developerWorks Column 보기]

    
    사이트 여행

    dW 커뮤니티
    포럼 | 블로그 | Spaces
    dW Student Community

    로컬 컨텐츠

    행사 및 세미나

    기획 기사

    개발자 입문

    튜토리얼 및 교육

    TOP 10 인기자료

    SW 다운로드

    RSS 피드

    뉴스레터
      
    자바스크립트가 작동이 중지되었습니다. 이 기능을 수행하시려면 브라우저에서 자바스크립스트를 작동시켜 주시거나 이곳을 클릭해주세요.
    Special offers
    IBM SOA Sandbox 시험판
    dW Student Community
    로보코드
    코드 트레이닝
    

        IBM 소개 개인정보 보호정책 문의