저자 : 한동훈 / ddoch@hitel.kol.co.kr
|
||||||||||||||||||||
1. 들어가면서 알파...
2. 알파 리눅스는 64비트인가? 그렇다. 예전에 처음으로 알파 리눅스 커널이 나올 때는 32비트였다. 이때는 디지털 사에서 인텔 리눅스와 동일한 데이터 타입을 사용하여 포팅하였으며, 소스 코드를 리눅스 공동체에 기부하였다. 이때 나온 알파 리눅스 커널 1.0은 ECOFF라는 특이한 목적 파일 포맷을 가지고 있어서, 실행 파일의 크기가 장난이 아니였다고 한다. 이후에 리누스는 매드독씨를 만나게 되고, 그에게서 Jensen 머쉰 (알파 계열의 일종)을 빌려서, 포팅 작업을 시작하게 된다. 1994년 10월 24일, 커널 버전 1.1.60 에 드디어 include/asm-alpha 디렉토리가 커널에 추가되었다. 이때 리누스는 알파 리눅스 커널을 만들기 위해 gcc를 사용하지 않고, 알파 리눅스에서 전혀 수정할 필요가 없었던 디지털 유닉스에 있던 컴파일러를 사용했었다. gcc가 아직 리눅스에 포팅이 되기 전의 일이었다. 같은 시간에 디지털사의 리눅스 지원팀에서는 XFree86이 제이 이스타 브룩(Jay Eastabrook)에 의해 작성이 완료되어서, 64-bit 리눅스의 기본 설치에 필요한 작업들이 일차적으로 마무리 되었다. 이들은 다시 외부에서 지원자를 받게 된다. 여기에는 C 라이브러리를 64비트로 포팅한 밥 맨슨(Bob Manson)과 여러 확장 시스템을 개발한 데이비드 모스버거탕(David Mosberger-Tang)이 포함되어 있었다. 마침내 시간은 흘러 커널 버전이 1.2로 올라가게 되고, 런타임 라이브러리와 GNU 개발 툴이 완벽한 64비트에서 수행되었다. 처음에 알파 리눅스의 바이너리 형식은 ECOFF였지만,
1996년 7월을 기해 GNU libc에 기반한 ELF 시스템으로 전면 전환하여
공유 라이브러리를 자연스럽게 사용할 수 있었다.
3. 알파란 무엇인가? 알파는 Digital Equipment Corporation의 알파
프로세서 시리즈이다. 알파 CPU는 일반적인 인텔 CPU의 CISC 아키텍쳐가
아닌, 조금 다르지만 약간 더 진보적인, 완전한 RISC 64비트 프로세서이다.
92년에 처음으로 21064 계열의 150MHz가 나타난데 이어 현재에는
21164 600MHz까지 출시되었다. 조만간 21264 계열로 옮아가면서
GIGA MHz를 넘어서 끝도 없이 속도 높이기로 나아갈 것 같다. 현재
가까이서 접할 수 있는 PC 서버급의 알파시스템은 21164 466~533MHz를
탑재한 PC164LX와 21164PC 기종을 탑재한 PC164SX 등이 있으며 곧
이어 나올 것으로 보이는 UX,ZX 등도 곧 접할 수 있을 것 같다.
이외에도 디지털사에서 판매하는 고가의 본격 워크스테이션급의
머쉰들도 다수 있다.
4. 알파 레드햇 리눅스의 설치 1) 지원하는 하드웨어
지원하는 하드웨어를 잠깐 살펴보자. PC164LX와 PC164SX는 최근에 나온 기종이라서 레드햇 5.0 부터 지원된다. 하지만 MILO 이미지만 추가로 들어있는 것 빼고는 시스템 아키텍쳐 면에서 특별히 달라진 것은 없으므로 4.2 버전을 가지고 있다 하더라도 별 상관없다. SCSI 콘트롤러는 NCR 810, NCR 850, BusLogic PCI, Adaptec AHA2940 계열, Qlogic 1020 ISP, Jensen AHA1740 등이 잘 돌아간다. 랜카드는 PCI 방식의 디지털 제품이 무난하고, 3Com, NE2000 호환 랜카드도 잘 돌아간다. 그래픽 카드는 일반적인 S3 칩이 무난하고, 밀리니엄 MGA II 가 레드햇 5.0부터 돌아간다는 것을 제외하고는 인텔 리눅스와 거의 동일하다.
2)
알파 레드햇 리눅스의 설치 알파 리눅스의 설치는 초기 과정만 제외하고는
인텔 리눅스 설치와 동일하다. 현재 알파 리눅스에서 쉽게 접할
수 있고, 관리 상의 잇점도 얻을 수 있는 레드햇을 기준으로 설명하겠다.
레드햇사에서 발매하는 상용버전은 대략 50$ 정도 한다. 리눅스
배포본을 미러링하는 사이트에서 공개용을 받아서 설치하는 것도
좋다. 단 공개용 알파 레드햇 리눅스의 경우에는 인텔 바이너리가
가끔 섞여 있는 경우가 있으므로 주의하는 것이 좋다. (필자의 경우에는
공개 레드햇 4.2에서 lp계열의 명령어와 기타 유틸리티들 중에 인텔
실행파일이 일부 섞여 있었으며, 레드햇 5.0에서는 기본 라이브러리가
인텔 형식으로 패키징되어 있어서 설치조차 불가능했다. 미러링
받아서 시디로 구울 때 발생한 문제점일 가능성도 배재하지 못하겠지만...) 이것을 알파 바이오스라고도 하는 데, 한가지 주의할 점은 기본 알파 바이오스는 NT 바이오스로서 NT 설치의 편리성을 제공하기 위한 목적으로 설계되어 있어서, 리눅스 사용자에 대한 배려가 없다는 점이다. 이점이 디지털의 마케팅 전력을 읽을 수 있는 지점이 아닐까 생각한다. 리눅스 공동체에 대한 지원을 간헐적으로 하면서도 자사의 머쉰에서 NT 만큼이나 많은 사용자들이 리눅스를 사용하고 있음에도 불구하고, NT 만을 배려하는 것은 그리 공평한 처사가 아니라고 본다. 어찌되었는지 다들 MS 사의 마케팅을 대신 해주지 못해 안달인 것 같아 씁쓸한 마음을 지울 수 없다. 조금 옆길로 샛지만 어쨌던 알파에서 리눅스를 부팅하는 방법에는 여러가지가 있다. ☞ MILO 이미지 : MILO(MiniLoader)는 알파 리눅스를
적재하는 역할을 하며, 다른 OS를 ▶ MILO 이미지 디스크 만들기 (리눅스 커널
적재를 위한 것)
MILO 디스크 만들기 MILO 플로피를 만들기 위해서는 리눅스나 디지털 유닉스 시스템에서 dd 명령을 사용하거나, 마이크로소프트 윈도우즈 NT나 MS-DOS 시스템에서 레드햇 시디에 들어있는 rawrite.exe 프로그램을 사용할 수 있다. dd를 사용하려면, 먼저 CD를 마운트하고 (/mnt/cdrom에 마운트하는 것으로 가정하겠다.), milo/image/ 에서 여러분의 시스템에 맞는 이미지를 선택한다. 몇몇 최신기종의 MILO 이미지는 레드햇 4.2에 없으므로 5.0 시디에서 구하던지, 아니면 레드햇 미러링 사이트에서 alpha MILO를 구할 수 있다. ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader/latest-Images/ 여기에는 항상 최근의 MILO 이미지가 올라온다. FAT으로 포맷된 플로피에 여기에서 구한 MILO 이미지와 CDROM에 있는 linload.exe를 복사해서 넣으면 된다. ftp://ftp.redhat.com/pub/redhat/redhat-5.0/alpha 레드햇 사이트와 레드햇의 미러링 사이트에는
최신 버전이 있는 디렉토리에 항상 MILO 이미지가 비교적 새로운
것이 들어있다. cd/mnt/cdrom rawrite를 사용하려면, 여러분의 시스템에 맞는 적당한 이미지를 선택한 다음, 다음과 같이 사용한다. (시디롬 드라이브가 d: 라고 가정한다.) d: rawrite는 먼저 디스켓 이미지 이름을 물어볼
것인데, 여기에서 여러분의 시스템에서 사용할 MILO 이미지의 이름을
입력한다. (예 : lx164.img) 그리고 이미지를 쓸 디스켓 드라이브를
물어보면 a: 라고 입력한다.
커널 (Boot) 디스크 만들기 MILO 플로피 디스크를 만든 후에, 자신의 시스템
타입에 맞는 적당한 Linux/Alpha 커널이 들어가는 부트 플로피를
만들어야 한다. 커널 이미지는 레드햇 CD의 images/ 디렉토리에
들어있다. cd/mnt/cdrom (윈도우 NT나 MS-DOS 에서) rawrite를 사용하셔도 무방하다. d: rawrite를 실행하면, 먼저 디스켓 이미지 이름을
물어오는데 시스템에서 사용할 커널 이미지의 이름을 입력한다.
(예 : lx164.img) 그리고 이미지를 쓸 디스켓 드라이브를 물어보는데,
일반적으로 a:를 입력하면 된다. ☞ PC164LX 와 PC164SX 의 경우에 적당한 커널 이미지가 없다면 eb164.img을 사용하면 무난하게 설치할 수 있다. 이떄에서는 시스템 타입이 정확하게 맞지 않기 때문에 약간의 문제가 발생할 수 있으므로 설치 후 커널을 재컴파일하기 바란다.
램 디스크 만들기 램 디스크 이미지는 레드햇 CD의 images/ramdisk.img 이다. 램디스크 이미지도 MILO 플로피나 부트 플로피를 만들 때와 마찬가지로 dd나 rawrite를 사용하며 만들면 된다. (Linux 나 UNIX 상에서) dd를 사용한다면... cd/mnt/cdrom rawrite를 사용한다면... d: rawrite는 디스켓 이미지 이름을 물어보는데,
ramdisk.img를 입력한다. 그리고 이미지를 쓸 디스켓 드라이브를
물어보면, 일반적으로 a: 라고 입력하면 된다.
알파 바이오스 내부 설정 알파에서는 디스켓만 집어 넣는다고 부팅되는 것은 아니다. 부팅을 위해서는 바이오스를 제대로 설정해야 한다. 부팅 시의 처음에는 그래픽 카드에 대한 정보를 보여주고, AlphaPowered라는 문구와 함께 못생긴 컴퓨터 그림이 하나 나온다. 그 다음에는 각종 장치를 찾아내어서 초기화하는 과정에 들어간다. 필자가 사용하고 있는 시스템은 Digital Alpha 21164 533Mhz와 AlphaPC164LX이다. 화면에 나타나는 메시지는 다음과 비슷할 것이다.
초기화 과정이 끝나고 나면, 선택 메뉴로 들어간다. 설치가 완료된 필자의 시스템에서는 다음과 같다.
우리는 아직 설치를 하지 않았기 때문에 아무런 메뉴가 나타나지 않는다. <F2>를 눌러서 AlphaBIOS SETUP 화면으로 들어가 보자. 먼저, CMOS Setup 으로 들어가서 시간을 정확히 맞춰 놓도록 하자. 시간이 잘못되어 있으면, 설치시에 문제가 생길 수도 있다. 그리고 아래쪽의 Auto Start Count는 자동 부팅시까지의 여유시간이다. 설치를 하고 나서 엔터키를 일일이 치는 것이 번거롭다면 이후에 설정해보는 것도 좋을 것이다. 그 다음 Network Setup 메뉴를 잠깐 보자. 부팅시에 네트웍을 초기화할 때, DC21X4 카드일 경우에는 별 문제 없지만, 다른 랜카드를 사용할 경우에는 별 의미가 없다. 괜히 시간만 낭비하므로 Network Setup 메뉴에서 Network을 disable 시키면 빠르게 부팅할 수 있다. 물론 리눅스에서 네트웍을 다시 초기화하므로 전혀 상관이 없다. DC21X4 카드를 사용할 경우에는 Network 설정 메뉴에서 여러 가지 값을 정확히 자신의 네트웍 사양에 맞춰 설정해주면 될 것이다. 네트웍 사용이 용이하지 않다면 그냥 무시해도 좋다. 이제 Linux 부팅 설정을 위해서 'Utilites' 메뉴의 'OS selection Setup...' 메뉴로 들어가보자. 아무런 선택 메뉴 항목이 없거나 있더라도 Windows NT 메뉴가 하나 달랑 있을 것이다. 없으면 메뉴를 새로 하나 만들고, 설치하지 않은 OS의 메뉴가 있다면 수정을 선택해서,
이렇게 편집해보자. Boot Name은 자기 마음대로 지정해도 상관없다. OS Options는 이후에 MILO에서 리눅스 커널을 자동으로 읽어들이도록 설정하는데 사용하면 유용하다. 지금은 그냥 넘어가자. 이제 변경된 내용을 저장하고, 빠져 나와서 재부팅을 시키자. 바이오스의 내용이 변경하고 나서 재부팅을 하지 않으면 리눅스로 부팅이 되지 않으므로 주의하는 것이 좋다. 이제 Linux 라는 OS 부팅 메뉴가 하나 생겼을 것이다.
설치하기 이제 MILO 디스크를 끼워넣고, 엔터키를 누르면 펌웨어에서 MILO를 읽어들이면서 화면이 바뀐다. 아무런 이상이 없다면 MILO> 라는 프롬프트가 떨어질 것이다. 이제 커널 이미지 디스크를 플로피 드라이브에 끼워 넣고, 다음의 내용을 입력하자. MILO> boot fd0:vmlinux.gz root=/gev/fd0 load_ramdisk=1 prompt_ramdisk=1 MILO는 부트 디스크에서 리눅스 커널을 읽어서 그것을 실행시킬 것이다. 커널이 부트한 다음에, 램디스크를 넣으라는 메시지가 나올 것인데, 이때 미리 만들어 둔 램디스크 플로피를 플로피 드라이브에 끼워 넣고 Enter를 누르자. 플로피를 모두 다 읽어들였으면 이제 어디서 본 듯한 화면이 나타날 것이다. 여기서 부터는 인텔 리눅스 설치와 동일하므로 편안한 마음으로 커피를 한잔하면서 설치 과정을 따라하면 될 것이다. 리눅스를 부팅하려면 MILO 이미지가 필요한데, 언제까지 플로피를 사용할 수만은 없으므로 파티션 설정시에 첫 번째 파티션에 6메가(최소 2메가) 정도로 FAT 분할을 잡아두도록 하자. 앞서도 이야기했지만 AlphaBIOS에서 FAT과 ISO9660 파일 시스템만을 읽어들일 수 있기 때문이다. 리눅스에서 사용하는 FAT 파티션 이름은 "DOS 16-bit>=32"이다. 한가지 더 생각해야 할 점은 시간설정시에 ARC 콘솔에서 읽어오도록 설정하는 것이다. 이후에 이것은 /sbin/timeconfig 명령으로 다시 설정할 수 있다. 설치과정의 제일 마지막에는 앞서 사용한 커널 플로피를 하드디스크로 복사하는 과정이므로 커널 플로피를 넣어주어야 한다. 필자와 같이 무턱대고 엔터키만 치다가는 마무리 과정에서 실수를 하여 말짱 도루묵으로 만들 가능성이 있으므로 주의하는 것이 좋다. :) 혹시나 램디스크 이미지를 넣어둔 채로 엔터키를 쳤다면 설치를 처음부터 다시 시작해야 한다. (레드햇 4.2의 경우) 네크웍에 물려있지 않은 컴퓨터일 경우에는 yp 시리즈 패키지와 amd를 설치 도중에 제외 시켜주는 것이 좋다. 이들은 네크웍 패키지 부분에 있는데, 시스템을 설정하기 힘들 정도로 방해를 한다. 물론 네트웍을 물려 놓으면 정상적이다.
부팅 과정을 자동화하기 설치가 끝났다면 리눅스로 재부팅 해보자. 앞서 이야기한 MILO 이미지를 저장할 분할 공간을 FAT으로 파일 시스템을 만들지 않았다면 만들어보자. 물론 이미 FAT 파일 시스템을 만들었다면 안해도 된다. 여기에서는 /dev/hda1을 예로 든다. mkfs.msdos /dev/hda1 (장치명에 따라 다름) 이제 마운트 하고, MILO 플로피에 든 내용을 복사한다. mount -t msdos /dev/hda1/mnt/dos linload.exe와 milo 두 개의 파일이 복사될 것이다.
MILO> boot sda2:vmlinux.gz root=/dev/sda2 이것은 SCSI 하드디스크의 두 번째 파티션의 예이다. vmlinux.gz 이라는 이름 말고도 다른 이름의 커널을 적재할 수도 있다. 시스템에 문제가 생겨서 single 모드로 들어가려면 마지막에 single을 적어 주면 된다. MILO> boot hda2:vmlinux.exit.gz root=/dev/hda2 single
Linux 와 NT 와의 멀티부팅 알파에서 Linux 와 NT의 멀티 부팅이 가능하다.
NT는 바이오스에서 제공하는 NT 설치 메뉴를 누르지만 하면 모두
설치해준다. 하지만 NT 가 제멋대로 잡는 경향이 있으므로 리눅스를
먼저 설치하기를 권한다. 그렇지 않으면 NT에서 확장 파티션까지
잡아 버려서 이후에 리눅스 설치가 곤란해진다. NT 설치 도중에도
약간의 분할 공간이 필요하다. NT OS Loader가 여기에 저장된다.
이것도 FAT을 요구하기 때문에 멀티부팅을 하려면, MILO를 저장하기
위해 분할한 6MB 공간을 NT 부팅시에도 함께 사용할 수 있으므로
매우 효율적이다. 프라이머리 E-IDE 타입의 대략 3.2GB 용량의 하드에
설치한다고 가정했을 때, 대략 다음과 같이 파티션을 잡을 수 있을
것이다.
여기에서 hda1은 리눅스 자동 부팅을 위한 milo 이미지와 milo 로더인 linload.exe가 저장되는 공간이며, 동시에 NT에서 사용할 기동 파일과 몇몇 중요 파일을 저장하는 공간으로 사용할 수 있다. 파일 시스템에 FAT 이기 때문에 동시 사용이 가능한 것이다.
5. 알파 리눅스에서의 커널 컴파일 리눅스 커널은 하나에 모든 아키텍쳐에 필요한
소스들이 들어가 있다. 기본적으로 인텔 리눅스 사용자들이 월등히
많기 때문에 Makefile에 arch = i386 이라는 구문이 들어가 있다.
아키텍쳐에 의존적인 부분은 /usr/src/linux를 기준으로 했을 경우에,
include와 arch 디렉토리에 모여있다. 아마도 리눅스를 표준으로
설치하였다면 /usr/src/linux에 커널 소스가 들어가 있을 것이다.
없다면 때묻지 않은 (누군가에 의해 이후에 패치되지 않은) 커널
소스를 sunsite 같은 곳에서 구해서 표준 디렉토리(/usr/src)에서
풀어놓자. 필자는 커널 버전 2.0.32를 권장한다. 아무래도 2.0.32
이전 것은 fragment 버그가 아직 패치되지 않았기 때문이다. ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Kernels/alpha-patches-2.0.32-0.1.gz gatekeeper 사이트의 같은 디렉토리에 보면 2.0.30에
대한 커널 패치도 함께 있으니 참고하기 바란다. cd/usr/src/ 이제 준비 과정은 끝났으므로 커널 컴파일에
들어가 보자. cd/usr/src/linux 커널 설정시에 시스템 타입으로는 자신의 아키텍처에 맞는 항목으로 지정해야 한다. 그렇지 않으면 컴파일에 실패하거나 이후의 정상적인 사용에 지장을 줄 수 있다. ☞ 에러1 : 시간이 맞지 않다는 메시지 find/usr/src/linux -type f -exec touch {} \; ☞ 에러2: PYXIS에서 에러가 발생 /usr/src/linux/include/linux/autoconf.h 이 파일에서, #define CONFIG_ALPHA_PYXIS 1 을 찾아서 다음으로 수정한다. #under CONFIG_ALPHA_PYXIS autoonf.h 파일은 커널 설정을 마친 이후에 특정
기능의 포함 유무를 결정하기 위해 자동으로 생성되는 헤더
파일이다. ☞ 에러3 : 새롭게 만든 커널이 부팅이 안된다면 MILO> boot hda3:vmlinux.old root=/dev/hda3 커널 컴파일을 다시 시도한다. ☞ 에러4 : 화면에 다음과 같은 트랩 에러와
관련된 지저분한 메시지가 나타난다면
6. EM86으로 x86 바이너리 돌리기 EM86이란 무엇인가? ftp://ftp.digital.com/pub/DEC/Linux-Alpha/em86/v0.2/
EM86을 위한 커널패치 여기에서 kernel-patches 디렉토리의 alpha-patches-2.0.30-0.2a.gz을 가져온다. 먼저 EM86 적용을 위한 커널 패치를 해보자. ▶ 변형되지 앟은 원래의 2.0.30 커널 소스를
sunsite 같은 곳에서 받아서 /usr/src/ 에 푼다.
EM86을 위한 소프트웨어의 설치 커널 패치 이외에 EM86을 지원하는 소프트웨어와 라이브러리들은 RPMS 디렉토리에 rpm으로 묶여있다. 여기에 있는 소프트웨어를 모두 설치할 필요는 없다. 반드시 필요한 것은 다음의 3개이다. ▶ em86-0.2-1.alpha.rpm : 실제 EM86 에뮬레이터이다. 이후에 설명하는 소프트웨어는 선택적으로 설치할
수 있다. for in \ls em86*rpm : do rpm -Uvh ─ignorearch ─force ─nodeps $i ; done 레드햇 4.0을 포함한 이전 버전에서는 아키텍쳐
식별자로 alpha가 아닌 axp를 사용하므로, 4.0 버전에서 설치하려면
모두 ─ignorearch를 명시하여 설치하여야 한다. for i in rpm -qa | grep em86 ; do rpm -e ─nodeps $i ; done 지금까지 수행한 커널 패치와 EM86 소프트웨어와 라이브러리를 설치하였다면 x86용 프로그램을 하나 가져와서 실행시켜 보자. 커널 패치가 적용되지 않았다면 프로그램 실행시에 다음과 같은 에러가 발생할 것이다. Your kernel dose not support 31-bit addressing!
x86 리눅스용 넷스케이프를 테스트 해본 결과 아주 잘 돌아갔다. 속도가 느린게 좀 흠이다. x86용 hwp는 테스트 해본 결과 돌아가지 않았다. x86에서 사용되는 시스템 호출 중 몇 개가 아직 알파 커널에서 구현되지 않은 것으로 보인다. 이와 같은 특정한 이유가 아니면 대부분 잘 돌아갈 것으로 보인다. 최신 버전의 알파 시스템인 PC164LX 및 PC164SX 같은 경우에는 원본 리눅스 커널에는 포함되어 있지 않으므로 시스템 타입을 맞추기 위해서는 패치를 해야함을 앞에서 이야기하였다. 마찬가지로 EM86 커널 패치는 커널 버전 2.0.30에 적용되며 모든 아키텍쳐에 공통된다. 따라서 EM86 커널 패치가 지원하는 버전에서 자신의 아키텍쳐를 지원하지 않는다면 둘 중 하나를 포기하는 수밖에 없다. 이럴 경우에 하나의 방법은 EM86 커널과 자신의 시스템 타입에 맞춘 커널을 따로 준비하여 필요에 따라 적절한 커널로 부팅하는 방법이 있긴 하지만 여전히 불편하다. 둘 중 하나를 포기해야 한다면 EM86을 포기하는 것이 좋다. EM86은 추가적인 기능이지만 아키텍쳐를 정확히 맞추는 것은 커널 최적화의 기본 방법이기 때문이다. EM86은 현재 버전 0.2까지 나와 있다. 사실 리눅스에서 사용하는 대부분의 프로그램은 소스와 함께 배포되는 경우가 많아서 직접 컴파일하여 사용하면 되므로 EM86을 사용해야 할 경우는 비교적 적다. EM86도 이제 점차로 좋은 성능을 보여줄 것으로 기대된다.
7. 포팅시의 주의해야 할 점 알파 리눅스는 64비트라는 것을 앞에서 이야기했다. gcc와 glibc도 64비트로 이미 포팅이 되었다. 따라서 인텔 리눅스에서 알파 리눅스로 포팅하는 작업이 쉽다고만은 할 수 없다. 필자가 보기에는 인텔 리눅스에서 알파 리눅스로 포팅하는 것은 타 UNIX OS로 포팅하는 작업과 비슷한 작업이 필요한 것 같다. 같은 리눅스 기종이라는 공통점 때문에 쉬운 점도 있지만 아키텍쳐의 상이함에서 나오는 감당 못할 일도 더러 발생한다. 프로그램 중에서 특히 아키텍쳐와 밀접한, 그래서 커널의 헤더 파일을 바로 포함하여 사용하는 프로그램의 경우에는 포팅에 상당히 주의를 기울여야 한다. 이제 몇 가지 주의해야 할 점을 살펴보도록 하자.
long 과 void* 형의 크기는 64비트 C 프로그래밍을 조금이라도 해본 분이라면 int
자료형은 아키텍쳐에 따라 정의되는 것으로 알고 있다. 그래서 int
자료형의 크기는 도스는 16비트, 인텔 리눅스는 32비트, 알파 리눅스는?
뜻밖에 32비트이다. 사실 int, short int, long int 등의 자료형에
대한 특별한 규정은 없다. 다만 여러 가지의 상황을 고려하여 신중하게
채택되었을 뿐이다. int8_t : 8비트
크기의 부호있는 정수
struct termio와 struct termios는 다르다 리눅스 프로그램을 작성할 때 struct termio와 struct termios를 그냥 섞어서 사용할 경우가 더러 있다. 이 둘의 인터페이스는 역사적인 이유 때문에 서로 호환이 되지 않는다. 따라서, struct termio를 사용하려면 TCGETA, TCSETAF, TCSETAW, TCSETA를 사용하여야 하고, struct termios를 사용하려면 TCGETS, TCSETSF, TCSETSW, TCSETS를 사용하여야 한다.
시스템의 기본 word 보다 적은 바이트를 읽고 쓸 때 발생할 수 있는 문제점 보통 머쉰의 최소 데이터 처리단위(word)는 원자화된다. 즉, 이러한 데이터를 메모리에서 한번 읽거나 쓰는 작업은 단 한번의 CPU 명령으로 처리되기 때문에 그 사이에 다른 적업이 끼어 들 수 없다. 특히, 이전에 출시 된 알파 칩에서는 8비트(byte)나 16비트(short)를 읽고 쓰는 명령은 단 하나의 명령으로 원자화되지 못했다. 이러한 구조는 장치나 인터럽트를 동기화시킬 때 문제점을 발생시킬 수 있다. 이와 관련하여 사용자 공간에서 공유 메모리를 통해 여러 프로세스가 데이터를 공유할 때에도 문제점이 발생할 수 있다.
8. 시스템 성능과 현황 요즘은 533MHz 정도의 알파 PC가 많이 알려져 있고 600MHz도 이미 개발이 끝나 있어서 곧 시판될 것으로 보인다. 알파 CPU의 개발은 현재 21164에서 21264로 넘어가면서 1GHz 까지 나아갈 것같다. Intel Pentium II 300MHz와 Alpha 533MHz 정도를 비교하면 정수 연산에서는 1.5배, 부동 소숫점 연산에서는 3배 정도로 Alpha가 빠른 것으로 SpecFp95와 SpecInt95가 벤치마크 결과에 나와있다. 리눅스 상에서 CPU 성능의 빠르기로 측정되는 단위인 Bogmips는 Pentium Pro 200이 200인데 비해 Alpha 533은 535 정도이다. 다음은 필자가 사용하고 있는 LX164의 CPU 정보를 보기 위해 proc 파일 시스템을 참조한 것이다. EM86으로 컴파일 하느라 CPU 정보가 조금 달려져 있다. 필자가 몇 달간 알파 시스템을 사용해 본 결과는 아주 만족스러웠다. 무엇보다도 속도면에서 시원스러움을 느끼게 해주었다. 커널 컴파일 시에도 담배 한 대를 끝까지 태울 시간적인 여유를 주지 않는다. 하지만 알파 리눅스에도 문제는 있다. 가장 큰 문제점은 알파용 바이너리의 빈곤을 들 수 있다. 얼마 전에 CD 라이터 프로그램을 gopher에서 찾을려고 했는데, rpm 파일은 모두 I386 바이너리였다. 국내에서도 점차로 알파 사용자가 늘어나고 있는 추세이므로 사용하기 편리해질 것으로 기대한다. 두 번째 문제는 커널 컴파일의 어려움이다. 커널 컴파일의 경우에는 의존성을 다시 설정하는 번거로운 작업을 거쳐야 할 경우가 한번씩 있다. 어떠한 추가 장치를 하나 인식시키려면 커널 컴파일을 보통 다시 하는데 이럴 경우에 인텔 리눅스에서 커널 컴파일에 익숙하다고 하더라도 조금 힘든 점이 없지 않아 있다. 이런 부분들도 점차로 알파 쪽 커널이 발전되어감에 따라 해결될 것으로 보인다. ▶ 참고사이트 |