RadarURL

유닉스/리눅스
2012.11.30 06:16

Micosoft Windows에서 리눅스를 coLinux!!

조회 수 5130 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

정말 대단한 coLinux

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

가상 컴퓨터 프로그램

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

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

99-vmware.png

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-01.png

정리하여 다시 말씀드리면 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 임에 주의하세요. 자, 이렇게 환경에 추가하여 리눅스를 실행하면 이렇게 시리얼 통신도 훌륭하게 실행됩니다. 아우~ 좋다~!!

coLinux-10.png

결언

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

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

 

 

출처 : http://jwmx.tistory.com/1427

?

공부 게시판

공부에 도움되는 글을 올려주세요.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 928102
2473 연애 폭소클럽 제36회 - 즉석미팅 1 (김제동) file JaeSoo 2003.08.18 18981
2472 연애 폭소클럽 제37회 - 즉석미팅 2 (김제동) file JaeSoo 2003.08.18 17808
2471 연애 폭소클럽 제38회 - 방학특집 연애특강 1 (김제동) 1 file JaeSoo 2003.08.18 16361
2470 연애 폭소클럽 제39회 - 방학특집 연애특강 2 (김제동) file JaeSoo 2003.08.18 17828
2469 연애 폭소클럽 제40회 - 방학특집 연애특강 3 (김제동) file JaeSoo 2003.08.18 16842
2468 웹 프로그래밍 이미지 특정 부분에 링크 만들기 처누 2003.08.24 15624
2467 웹 프로그래밍 게시판에 자신의 FTP 자료 올리기 3 처누 2003.08.25 13135
2466 동식물 고양이 클리닉 - 고양이 기르기 file JaeSoo 2003.10.10 13693
2465 동식물 고양이 클리닉 - 고양이 품종 file JaeSoo 2003.10.10 13427
2464 동식물 고양이 클리닉 - 2개월에서 4개월령 고양이 관리 file JaeSoo 2003.10.11 13428
2463 동식물 고양이 클리닉 - 4개월에서 9개월령 고양이 관리 file JaeSoo 2003.10.11 13132
2462 동식물 고양이 클리닉 - 다자란 고양이 file JaeSoo 2003.10.13 13922
2461 동식물 고양이 클리닉 - 나이든 고양이 file JaeSoo 2003.10.13 13679
2460 동식물 고양이 클리닉 - 고양이의 영양 file JaeSoo 2003.10.13 13429
2459 동식물 고양이 먹이와 주의사항 file JaeSoo 2003.10.13 13902
2458 동식물 아기 고양이의 식사 file JaeSoo 2003.10.13 11821
2457 동식물 고양이 사료 급여량 file JaeSoo 2003.10.13 12880
2456 기타 편지봉투 쓰는 법 file JaeSoo 2003.10.21 16993
2455 웹 프로그래밍 제로보드 로그인 실패시 이유를 메세지로 알려주기 처누 2003.11.04 8459
2454 웹 프로그래밍 최근 게시물 출력시 링크게시물에 스타일시트 적용하기 처누 2003.11.06 7927
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 124 Next
/ 124


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너