'2008/12'에 해당되는 글 3건

  1. 2008/12/27 장인정신 2008 크리스마스 이승철 콘서트(Crazy Night) - 20081225
  2. 2008/12/15 장인정신 Slab Allocator(슬랩 할당자)
  3. 2008/12/04 장인정신 거의 10년만에 찾아온 몸살감기...
2008년 크리스마스를
나와 결혼을 약속한 예비신부와 함께 뜻깊게 지내기 위해서
2달전에 콘서트 예매를 했다.

그리고 드디어 이승철 콘서트를 가게 되었다~ 두둥~~~

콘서트 장소는 잠실실내체육관!

오~우~ 날씨가 무지 추웠다. 바람도 불고... 떡볶이+잔치국수 로 추위를 달래보았지만
잠깐뿐이었다. 콘서트 시작을 기다리는 동안 우리둘은 너무 추워서 자동차안에서 추위를 달랬다.

크리스마스 이브날 자동차극장에서 둘이 늦게까지 영화를 봐서 둘다 약간은 피곤했었지만
콘서트입장하고부터는 피곤함이 쏵~ 없어졌다.


콘서트틑 못보신 분들을 위해서 사진 몇컷 찍었다. 하지만 사진은 의미가 없다. 중요한건 노래소리인거지... 못본 사람들은 2009년도 크리스마스날을 기약해야 한다. ㅎㅎ 오래 기다려야 겠다. ㅋㅋ



사용자 삽입 이미지
한컷 찍었다. 우리 좌석은 2층 맨 앞좌석을 선택했다.
꽤 밝은 무대였는데 막상 찍어보니 어둡다 ㅡㅡ;



사용자 삽입 이미지
하나둘씩 자리를 매워서 입장하고 있다.
관객이 다 입장 완료했을때는 역시 이승철 공연답게 전좌석 매진이라서 열기가 뜨거웠다.



사용자 삽입 이미지
사진촛점이 전부 이런식이다... 카메라 전문가가 아니기 때문에 촛점은 거의 불가능하다 ㅋ


사용자 삽입 이미지
좀 촛점이 맞나?



사용자 삽입 이미지
알아볼수 없는 촛점사진들... 줄줄이 찍히고 ㅋㅋㅋ


사용자 삽입 이미지
이제 관객이 거의 꽉 들어찼다.


사용자 삽입 이미지
점점 매워져 가는 관중석...



사용자 삽입 이미지
무대조명은 점점 초조한 기다림을 달래보고 있는데....



사용자 삽입 이미지
나와라~ 콘서트 대왕이여~
안내맨트로 사진촬영은 플래시만 터뜨리지 않으면 괜찮단다~ 하하~ 역시 좋았어!


사용자 삽입 이미지
엇? 누군가 나온다?



사용자 삽입 이미지
이승철씨의 첫 의상은 하얀색이다~ 줌을 해서 찍었건만... 알아보기 힘들다...


사용자 삽입 이미지
정말로 사진 촛점이 안된다.



사용자 삽입 이미지
자~ 좀 알아볼듯 하다.. ㅋ




사용자 삽입 이미지
노래는 시작되고.....




사용자 삽입 이미지
옷갈아입고 노래 부르는 콘서트 대왕~ 정말로 노래 잘부른다...



사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
레이저쇼! 이건 2008월 1월 1일날 남산에서 보던 레이저쇼보다 멋지다.



사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
이렇게 콘서트는 끝나갈 시간이 됐다. 약 2시간여에 걸쳐서 시간가는줄 모르고 노래를 듣고 있자니 너무 좋았고 아쉽기도 했다.



사용자 삽입 이미지
사용자 삽입 이미지




크리스마스의 추억으로는 이승철의 콘서트가 제격이다.
콘서트에서의 노래도 좋지만 역시 이승철 노래는 레코드판으로 들을때 더 좋은거 같다.
왜냐하면 집에서 레코드판으로 들을때의 선율이 자꾸 떠오르니까 말이다...






크리에이티브 커먼즈 라이센스
Creative Commons License
2008/12/27 00:40 2008/12/27 00:40
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/300

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/300

트랙백 주소 :: http://blog.minzkn.com/trackback/300

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/300

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/300

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/300
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/300

Slab Allocator에 대해서 정리중인거.... 원본은 http://wiki.minzkn.com/index.php/slab_allocator?action=print 에서 정리중...
사본은 http://www.asmlove.co.kr/wiki/wiki.php/slab_allocator 에 배포중...




Slab Allocator(슬랩 할당자)

  • 작성자
  • 고친과정
    2008년 12월 13일 : 김기오(gurugio)씨의 Offline study 개진
    2008년 12월 15일 : 처음씀

읽기전에

여기서 나오는 용어 및 변수명등은 실제 범용적인 이론책에 나온 용어해석과 다를수도 있습니다.
또한 알고리즘의 기본을 강조하고 이해도를 높이기 위하여 실제 보강되어야 할부분들이 제거되어 소개됩니다.

유래 및 특징

Slab Allocator(슬랩 할당자)는 1994년 Sun Microsystems의 Solaris 2.4라는 운영체제에서 구현된 "Slab allocator"라는 할당전략에서 유래되었습니다.

이 할당전략의 주요 특징으로는 다음과 같은 점이 있습니다.

  1. 유지에 필요한 자료구조와 함께 생성자(Constructor), 소멸자(Destructor)를 구현함으로써 일종의 객체로서의 접근을 구현합니다. (하지만 일부 운영체제에서는 객체관점으로 바라보기는 하지만 생성자, 소멸자를 사용하지 않는 경우도 많이 있습니다.)
  2. 객체를 불필요하게 반복 초기화 하는 현상을 회피하기 위하여 할당후에 해제되는 객체를 즉각 폐기하지 않고 메모리에 그대로 유지하려는 속성을 가지고 있습니다.
  3. 비슷한 크기의 객체를 캐시하는 유사구조를 사용하기 때문에 일반적으로 발생할수 있는 단편화 문제를 해소합니다.
  4. 리눅스의 경우 커널에서 사용하는 일련의 구조중에 매우 빈도가 높은 반복할당객체에 대해서 Cache로 바라보고 그에 맞도록 Slab을 구현합니다.
  5. 하드웨어 캐시에 정렬될수 있고 컬러링기법이 적용되기 때문에 캐시성능을 높일수 있습니다.

기본구조(Base layout)

  • 다음은 기본적인 Slab Allocator의 기본구조를 그림으로 나타내어 보았습니다.
    크게 slab + nft[slab.objects] + object[slab.objects] 구조로 구성됩니다.
    사용자 삽입 이미지


예제를 통한 Slab Allocator의 접근

  • 예제에서는 다음과 같은 구조를 설계안(초기화과정: mzslab_init)으로 설정하고 구현하였습니다. 설계안에서는 생성자(Constructor), 소멸자(Destructor)를 고려하였으나 예제코드 구현에서 이 부분은 적절한 객체의 표면화된 예시까지 제시할 필요가 없기 때문에 생략되었습니다.
    사용자 삽입 이미지


  • Slab 자료구조

    /*
     Copyright (C) JAEHYUK CHO
     All rights reserved.
     Code by JaeHyuk Cho <mailto:minzkn@minzkn.com>
    */
    
    /* object index의 단위를 나타내는 변수형입니다.
       object수가 65536이상인 경우 이것은 좀 키워야 겠죠. */
    typedef unsigned short int __mzslab_index_t;
    #define mzslab_index_t __mzslab_index_t
    
    #pragma pack(push,8)
    typedef struct mzslab_ts {
        /* object 의 크기를 나타냅니다. */
        size_t object_size;
        /* object를 모두 합친 크기를 나타냅니다.
           런타임에서 계산할수는 있으나 미리 계산해두는것이 속도가 좋을듯 해서... */
        size_t objects_size;
        /* object 수를 나타냅니다. */
        size_t objects;
        /* 첫 object 의 포인터입니다.
           이 또한 런타임에 계산 가능하지만 미리... */
        unsigned char *entry;
        /* 첫번째 해제된 Object 의 index를 저장합니다.
           만약 이 값이 objects보다 같거나 크게 되면 할당가능한 object가 없게 됩니다. */
        mzslab_index_t f;
    }__mzslab_t;
    #define mzslab_t __mzslab_t
    #pragma pack(pop)
    

  • mzslab_t 의 초기화

    mzslab_t * mzslab_init(void *s_page, size_t s_page_size, size_t s_object_size)
    {
        size_t s_index;
    
        mzslab_t *s_slab;
        mzslab_index_t *s_nft; /* next free table */
        
        /* 넘겨받은 page의 첫 부분을 slab 구조체로 유지합니다. */
        s_slab = (mzslab_t *)s_page;
        
        s_slab->object_size = s_object_size;
        
        s_slab->objects_size = 
            s_page_size - (sizeof(mzslab_t) +
                 ((((s_page_size - sizeof(mzslab_t)) / s_slab->object_size)) * sizeof(mzslab_index_t)));
        s_slab->objects = s_slab->objects_size / s_slab->object_size;
    
        /* 이 시점에서 
          (s_page_size - 
           ((s_slab->objects * 
             sizeof(mzslab_index_t)) + 
               s_slab->objects_size)) 가 0보다 큰값을 같게 되면 
          넘겨받은 page_size가 slab 구조와 정렬이 제대로 이루어지지 않아서
          남은 짜투리 메모리 크기가 됩니다.
         효율적인 구현을 위해서는 0이 되도록 해야 겠죠. */
    
        /* 여기서 (&s_slab[1]) 는 slab 의 다음 항목을 가르키게 되므로
           NextFreeObjectIndex table(nft) 을 가르키게 됩니다. */
        s_slab->entry = ((unsigned char *)(&s_slab[1])) + (s_slab->objects * sizeof(mzslab_index_t));
    
        s_slab->f = (mzslab_index_t)0u;
        
        s_nft = (mzslab_index_t *)(&s_slab[1]);
        for(s_index = ((size_t)0u);s_index < s_slab->objects;s_index++) {
            s_nft[s_index] = s_index + ((size_t)1u);
        }
    
        return(s_slab);
    }
    

  • 할당

    void * mzslab_alloc(mzslab_t *s_slab)
    {
        mzslab_index_t *s_nft = (mzslab_index_t *)(&s_slab[1]);
        void *s_result;
    
        if(s_slab->f >= s_slab->objects) {
            /* 이 경우 메모리에 할당가능한 object가 없다고 판단하면 되겠습니다. */
            s_result = (void *)0;
        }
        else { /* 할당가능한 object가 있으므로 이를 반환합니다. */
            s_result = (void *)(&s_slab->entry[s_slab->f * s_slab->object_size]);
            s_slab->f = s_nft[s_slab->f];
        }
    
        return(s_result);
    }
    

  • 해제

    /* 원래 s_slab은 전역 cache테이블로 감추고
       s_ptr만으로 추출할수 있도록 구현하는게 바람직하지만
       현재 예제를 들기 위한 부분이기에 그냥 인자로 넘겨 받도록 하여 소개합니다. */
    void * mzslab_free(mzslab_t *s_slab, void *s_ptr)
    {
        mzslab_index_t *s_nft = (mzslab_index_t *)(&s_slab[1]);
        size_t s_index;
    
        s_index = (size_t)(((unsigned char *)s_ptr) - s_slab->entry) / s_slab->object_size;
    
        s_nft[s_index] = s_slab->f;
        s_slab->f = s_index;
    
        return((void *)0);
    }
    
Retrieved from "http://wiki.minzkn.com/index.php/slab_allocator"
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/12/15 22:02 2008/12/15 22:02
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/299

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/299

트랙백 주소 :: http://blog.minzkn.com/trackback/299

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/299

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/299

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/299
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/299

어제(12월 3일)부터 목이 근질근질 하더니

오늘 아침 일어날때 몸에 기운이 쏵 빠져서 못일어나겠더라....

10년넘게 감기한번 안걸렸다가 회사사람들이 감기를 하나둘씩 걸리더니
결국 나도 걸려버렸다.

온몸이 왜 이렇게 쑤시기까지... 젊은나이에 쑤시는게 말이 되나? 에휴~~~~

여친을 보고 싶었지만 여친에게 행여나 감기 옮길까봐 참았다. 에휴~~~~

약국에 약을 사러갔더니 몇봉지에 5,000원이란다.. 뭐이리 비싸. 에휴~~~~
약국아저씨왈~ "이 일대에 비슷한 증상을 가지신분들이 급증하는군요."

기침때문에 기운이 빠져서 일하는데도 정신집중이 안되더라. 에휴~~~~



아~ 온몸이 쑤시고 기침을 하도 해서 기운이 없고... 눈은 출혈되고...
내 꼴이 이만저만이 아니다. 다시는 감기 걸리지 말자. 감기야! 물렀거라!!!!! 에비!
크리에이티브 커먼즈 라이센스
Creative Commons License
2008/12/04 19:29 2008/12/04 19:29
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://blog.minzkn.com/rss/response/298

댓글+트랙백 ATOM :: http://blog.minzkn.com/atom/response/298

트랙백 주소 :: http://blog.minzkn.com/trackback/298

트랙백 RSS :: http://blog.minzkn.com/rss/trackback/298

트랙백 ATOM :: http://blog.minzkn.com/atom/trackback/298

댓글을 달아 주세요

댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/298
댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/298