본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/마이크로소프트
  3. Micosoft Windows에서 리눅스를 coLinux!!

Micosoft Windows에서 리눅스를 coLinux!!

· 댓글개 · 바다야크

정말 대단한 coLinux

와! 간만에 눈이 확 커지는 프로그램을 알게 되었습니다. coLinux. 정말 대단하다고밖에 말이 안 나오는군요. 궁금해하실 것 같아서 어떤 프로그램인지 먼저 말씀드리겠습니다. VMware와 같이 하나의 컴퓨터에 또 다른 OS를 사용할 수 있게 해주는 프로그램입니다. 프로그램 이름에서 느낄 수 있듯이 현재는 ArchLinux, Debian, Fedora, GUbuntu와 그 유명한 Gentoo까지 리눅스만 실행할 수 있습니다. 그러나 앞으로 유능하고 헌신적인 프로그래머에 의해 더욱 다양한 OS를 즐길 수 있을 것이라고 기대합니다.

가상 컴퓨터 프로그램

리눅스를 이용하는 것이 어디 개발 분야뿐이겠습니까마는 리눅스 시스템이 필요하다면 가장 좋은 방법은 리눅스 용으로 컴퓨터를 따로 설치하는 것입니다. 그러나 비용 문제나 다른 사정으로 PC 한 대만 가용하거나 노트북만 이용해야 한다면 대안으로 가상 컴퓨터 프로그램을 이용하는 방법이 있습니다.

여러 가지 가상 프로그램이 있습니다만 제 경험상으로 가장 신뢰하는 프로그램은 VMware입니다. Virtual PC를 오래 사용해 보고 Virtual Box도 사용해 보았지만, 안정성뿐만 아니라 시리얼 포트와 같이 외부 장치 사용에도 아무 이상 없이 사용할 수 있었던 것은 VMware 뿐이었습니다.

VMware를 처음 사용했을 때 한참 동안 넋을 잃고 쳐다보던 화면입니다. 도대체 어떻게 만들었을까? 정말 신기했습니다. 물론 프로그램에서 CMOS 모습을 흉내 낸 것이지만, 전체적으로 작동하는 모습이 정말 컴퓨터 한 대를 그대로 사용하는 듯한 착각에 충분히 빠지게 합니다.

가상이지만 그야말로 완전히 독립된 컴퓨터로 CMOS 설정부터 OS 설치까지 일반 컴퓨터를 사용하는 방법과 똑같으며, 시리얼 포트나 USB 장치와 같이, 함께 공유할 수 없는 자원은 같이 쓸 수 없다 뿐이지 모체가 되는 원래의 PC에는 전혀 영향을 미치지 않습니다. 그래서 어떤 프로그램을 검사해 보거나 잠시 테스트할 때에는 VMware의 가상 컴퓨터를 이용하기도 합니다만, 다른 컴퓨터와 함께 연동해야 할 경우, 그 다른 컴퓨터를 VMware로 구성하여 사용할 수 있습니다.

시스템 사양만 받추어 준다면 이런 가상 PC를 한 번에 3대, 4대, 또는 그 이상으로 여러 컴퓨터를 동시에 실행하여 사용할 수 있습니다. 정말 대단하지 않습니까?

리눅스 이뮬레이터 Cygwin

이렇게 좋은 VMware에 단점을 지적하라고 한다면 아무래도 무겁다는 것을 말씀드리지 않을 수 없습니다. 가상의 컴퓨터도 컴퓨터 이기 때문에 CPU 사용률뿐만 아니라 미리 가상 컴퓨터가 사용할 메모리를 뚝 떼어 주어야 하기 때문에 전체적으로 시스템이 느려지고 둔해지는 느낌을 받습니다. 그나마 요즘 컴퓨터가 많이 빨라져서 예전과는 달리 이런 불편이 많이 줄었습니다만, 구형 PC나 노트북 같은 경우 부담되는 경우가 많습니다.

이런 경우, 사용할 OS가 리눅스라면 VMware 대신에 Cygwin과 같은 리눅스 이뮬레이터를 사용할 수 있습니다. Cygwin은 VMware처럼 완벽한 가상 컴퓨터를 제공하는 것이 아니라 이뮬레이터로, Microsoft Windows 안에서 리눅스 프로그램과 파일을 사용할 수 있도록 해주는 말 그대로 이뮬레이터입니다.

그래서 VMware처럼 CMOS 환경 설정과 같은 것은 없고 메모리 할당 같은 것도 없습니다. 그냥 실행하면 리눅스 콘솔이 뜨고, 그 콘솔을 이용하거나 텔넷으로 연결하여 마치 리눅스를 사용하듯이 사용할 수 있습니다.

정리하여 다시 말씀드리면 Cygwin은 VMware 비해서 매우 가볍다는 점입니다. 느린 시스템에서도 부담 없이 리눅스를 운영할 수 있다는 것이죠. 그러나 완벽한 리눅스는 아니어서 프로그램 코딩에서도 제약이 있습니다.

지금은 어떤지 모르겠습니다만, 저도 한 때 Cygwin을 이용하려고 부단히 노력한 적이 있습니다만 fork()나 공유 메모리를 사용할 수 없어서 포기했습니다. 사용한다면 크로스 컴파일러를 사용하는 정도로만 사용했습니다.

그리고 또 하나, Cygwin의 리눅스는 어떤 리눅스? 젠투? 데비안? 페도라? 글쎄요. 또 하나의 리눅스라고 생각됩니다. 그래서 문제가 발생하면 웹에 제공되는 수많은 정보를 제대로 사용하지 못하는 그런 문제가 있더군요. 물론 제가 몰라서 그럴 수 있겠지만, 입문자에게 어렵다면 쉬운 시스템이라고 말하기는 어렵습니다.

그렇다면 coLinux는?

죽입니다!! 끝내줍니다!! VMware처럼 완전히 독립된 컴퓨터 환경을 제공하는 것은 아니지만, Cygwin처럼 가볍고, 그러면서도 Cygwin에서 안 되었던 fork() 함수나 공유 메모리를 아무 이상 없이 사용할 수 있었습니다. 아울러 자기가 애용하는 리눅스를 선택하여 사용할 수 있고, 그 리눅스에 맞추어서 제공되는 정보나 지식을 그대로 이용할 수 있습니다. 예를 들어 페도라나 CentOS의 system-configure-network를 이용하여 네트워크 환경을 수정할 수 있습니다.

VMware의 장점과 Cygwin의 장점을 하나로 합쳐진 모습으로 완벽한 독립 컴퓨터 시스템을 제공하지 않지만 현재 배포되는 리눅스를 그대로 사용할 수 있도록 해주면서 Cygwin처럼 가볍게 사용할 수 있다,라고 정리할 수 있겠습니다.

사용한 지 얼마 안 되지만 짬짬이 coLinux를 이용하여 개발환경을 구축하려고 노력 중입니다. 그래서 정리될 때마다 제가 운영하고 있는 FALINUX 포럼에 글을 올리고 있습니다.

아직 글로 정리하지 못해 강좌 글에 올리지 못했지만, 이미 gcc를 설치하고 걱정되는 몇 가지를 이미 테스트해 보았습니다. 앞서 언급했던 fork() 함수와 공유 메모리를 이상 없이 사용할 수 있었습니다.(야호~!) 그리고 시스템 통신에 약방의 감초격인 rs-232c 통신을 이상 없이 사용할 수 있었습니다.(굳~드!)

보실까요? ^^ 저는 CentOS를 애용하고 있기 때문에 Fedora 이미지를 선택했습니다. 그리고 yum을 이용하여 gcc와 g++을 설치했습니다. 예전 같으면 gcc 소스를 내려받아 어렵게 환경 설정하고 여러 가지 단계를 거쳐 설치했겠지만, yum으로 간단하게 설치했습니다.

]# yum instll gcc
]# yum install gcc-c++

fork() 함수 사용 가능

그리고 아래의 코드를 이용하여 fork() 함수 사용을 확인해 보았습니다.

#include  <stdio.h>
#include  <unistd.h>

int main()
{
   int    counter  = 0;
   pid_t  pid;

   printf( "작식 프로세스 생성");
   pid   = fork();
   
   switch( pid)
   {
   case -1  :
      {
         printf( "자식 프로세스 생성 실패\n");
         return -1;
      }
   case 0   :
      {
         printf( "저는 자식 프로세스로 디스카운트하겠습니다.\n");
         while( 1 )
         {
            printf( "자식: %d\n", counter--);
            sleep( 1);
         }
      }
   default :
      {
         printf( "저는 부모 프로세스로 카운트하겠습니다.\n");
         printf( "자식 프로세스의 pid는 %d입니다.\n", pid);
         while( 1 )
         {
            printf( "부모: %d\n", counter++);
            sleep( 1);
         }
      }
   }
}

이상 없이 실행되었습니다.

]$ ./test
작식 프로세스 생성자는 자식 프로세스로 디스카운트하겠습니다.
자식: 0
작식 프로세스 생성저는 부모 프로세스로 카운트하겠습니다.
자식 프로세스의 pid는 2695입니다.
부모: 0
자식: -1
부모: 1
자식: -2
부모: 2
자식: -3
부모: 3
     :

공유 메모리 사용 가능

공유 메모리인 만큼 두 개의 프로그램을 작성하여 테스트했습니다. 테스트 방법은 FALINUX 포럼에 올려진 "shmget() 공유 메모리 생성" 글에 소개된 예제를 이용했습니다.

공유 메모리를 생성하고 계속 카운터를 증가시키는 counter.c입니다. 공유 메모리의 변수 값을 증가시킬 뿐 화면에 출력하는 것은 없습니다.

#include   <stdio.h>      // printf()
#include   <unistd.h>     // sleep()
#include   <sys/ipc.h>
#include   <sys/shm.h>

#define    KEY_NUM     9527
#define    MEM_SIZE    1024

int main( void)
{
   int    shm_id;
   void   *shm_addr;
   int    count;
   
   if( -1 == ( shm_id = shmget( (key_t)KEY_NUM, MEM_SIZE, IPC_CREAT¦0666)))
   {
      printf( "공유 메모리 생성 실패\n");
      
      return -1;
   }

   if( ( void*)-1 == ( shm_addr = shmat( shm_id, ( void*)0, 0)))
   {
      printf( "공유 메모리 첨부 실패\n");
      
      return -1;
   }
   count = 0;
   while( 1 )
   {
      sprintf( ( char *)shm_addr, "%d", count++);       // 공유 메모리에 카운터 출력
      sleep( 1);
   }
   return 0;
}

counter.c에서 계속 증가시키는 공유 메모리의 값을 아래의 show_counter.c로 출력합니다.

#include    <stdio.h>      // printf()
#include    <unistd.h>     // sleep()
#include    <sys/ipc.h>
#include    <sys/shm.h>

#define     KEY_NUM     9527
#define     MEM_SIZE    1024

int main( void)
{
   int    shm_id;
   void   *shm_addr;

   if( -1 == ( shm_id = shmget( (key_t)KEY_NUM, MEM_SIZE, IPC_CREAT¦0666)))
   {
      printf( "공유 메모리 생성 실패\n");
      return -1;
   }
   
   if( ( void*)-1 == ( shm_addr = shmat( shm_id, ( void*)0, 0)))
   {
      printf( "공유 메모리 첨부 실패\n");
	  return -1;
   }

   while( 1 )
   {
      printf( "%s\n", (char *)shm_addr);    // 공유 메모리를 화면에 출력
      sleep( 1);
   }
   
   return 0;
}

역시 실행이 너무 예쁘게 잘 되었습니다. 아우~ 죽겠다!!

]$ ./counter &
[1] 2697
]$ ./show_counter
3
4
5
6
7
  :

시리얼 통신도 이상 없이 사용 가능

coLinux에서 리눅스를 실행할 때 아래의 옵션을 추가하면 /dev/ttyS0 장치를 사용할 수 있습니다.

  • ttys0=COM1,"BAUD=115200 PARITY=n DATA=8 STOP=1 dtr=on rts=on"

등록 문장이 ttyS0가 아니라 ttys0로 소문자 s 임에 주의하세요. 자, 이렇게 환경에 추가하여 리눅스를 실행하면 이렇게 시리얼 통신도 훌륭하게 실행됩니다. 아우~ 좋다~!!

시리얼 통신 테스트
시리얼 통신 테스트

결언

fork()나 공유 메모리, 시리얼 통신 외에도 확인해야 될 것이 많습니다. 현재 가장 궁금한 것은 Frame Buffer 출력을 어떻게 확인하느냐 하는 점입니다. 요즘 Frame Buffer를 이용하여 그래픽 라이브러리를 만들고 있거든요.

아직 확인할 것이 있으면서도 소개를 드린 것은 프레임 버퍼가 안 되더라도 매우 유용한 프로그램임에 틀림없다는 생각에서 입니다. 이렇게 좋은 프로그램은 많은 분이 알고 사용해 주어야 한다고 생각되며, 아울러 제가 고심하는 부분이나 다른 분의 정보를 구걸하기 위함입니다. 이번 기회에 coLinux를 사용해 보시고, 또 애용하고 계신다면 좋은 정보를 알려 주시면 감사하겠습니다. 부탁드립니다.

'컴퓨터 > 마이크로소프트' 카테고리의 다른 글

Microsoft Windows7 괜찮은걸  (24) 2009.01.13
폴더 동기화 Microsoft SyncToy  (18) 2009.01.07
IE8 나오면 선택해야할 이유 하나  (41) 2009.01.05
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.