[출처]http://lifepatch.tistory.com/154

컴도 조립했겠다, 생각해보니 i7이면 인텔CPU라 해킨도 수월하고, 성능도 좋아서 해킨이 잘됫듯해서 찾다보니 이런 가이드도 있었네요.

혹시 제 스펙(이전글에 있어요) 보고 어떻게 하면 잘 될지 조언 주시면 감사해요.

원문에서 긁어오고 싶었는데, 원글이 지워진 관계로 2차 펌을 했습니다.

[출처]Age of B.L.U.E 

펜티엄4에 MacOSX 10.4를 설치해 보고 부팅될때 사과 마크가 나오는걸 보고 너무나도 감격에 젖어버렸던 기억이 아직도 아른거립니다.
자세한 사전 지식이 없었던 탓에 그때는 아마도 열댓번 정도 지웠다 깔았다 했던것 같습니다.
검색해 보니 Age of B.L.U.E님이 아주 잘 설명해 주신 글이 있길래 보존(?) 차원에서 긁어 왔습니다.
용서하시길....


본 가이드는 네개의 Part로 구성되어 있습니다.

PART 1. 개념
“해킨토시”의 전반적인 개념, 해킨토시를 만드는 여러 방식의 차이점, Modified BOOT-132 Bootloader를 활용해 해킨토시를 만들기 위해 미리 알아 두어야 할 기본 개념을 설명합니다.

PART 2. 실전
Modified BOOT-132 Bootloader를 활용해 실제로 해킨토시를 만드는 방법을 안내합니다.

PART 3. 추가 정보
추가적으로 알아두면 좋은 정보를 설명합니다.

PART 4. 소스들
참고할 만한 해외 포럼의 글타래들과 각종 파일을 얻을 수 있는 곳의 링크를 모아 두었습니다.


PART 1. 개념



해킨토시란?

Mac OS X이라는 운영체제를 PC용 하드웨어에 설치해서 사용하기 위해 고안된 모든 방법, 또는 그러한 방법으로 Mac OS X이 설치된 PC를 가리켜 일명 “해킨토시” 라 부릅니다.

Mac OS X은 매킨토시용 하드웨어에만 설치되고 작동되도록 제작되어 있습니다. PC용 하드웨어와 매킨토시용 하드웨어는 그 작동 방식이 다르기 때문에,  Mac OS X은 PC용 하드웨어를 (몇몇 운좋은 하드웨어를 제외하고는) 인식하지 못합니다.

그렇기 때문에 PC용 하드웨어에 Mac OS X을 설치하고 사용하기 위해서는 PC용 하드웨어를 매킨토시용 하드웨어인 것 처럼 속여주어야 합니다.

이런 속임수의 방법에는 두가지가 있습니다.
- EFI-X (http://www.efi-x.com) 같은 장비를 장착해서 속여주는 하드웨어적인 방법
- Mac OS X 내부의 파일들을 수정해서 속여주는 소프트웨어적인 방법

소프트웨어적인 방법은 다시 크게 두가지로 나뉘어 집니다.
- Mac OS X 설치 디스크 자체를 PC용 하드웨어에 맞게 수정해서 설치하는 방법
- Mac OS X 설치 디스크를 원본 그대로 사용하면서 “Modified BOOT-132 Bootloader”를 활용하는 방법

하드웨어적인 해킨토시 방법은 적절히 선택된 PC용 하드웨어에 EFI-X를 사서 꽂으면 끝나는 것이기 때문에 특별히 설명할 것이 없습니다.

2 소프트웨어 방식의 해킨토시는 어떤 방식이든 간에 다음의 큰 걸림돌들을 해결해야 합니다.

① EFI 정보 생성
EFI란 매킨토시용 하드웨어가 채택한 BIOS의 업그레이드 버전이라고 생각하면 됩니다.
현재의 Mac OS X은 별도의 부트로더를 사용하지 않고 EFI 기능을 이용해 부팅하기 때문에 EFI 정보가 없으면 부팅이 되지 않습니다. 
이 문제는 EFI 정보를 생성해주는 “카멜레온"이라는 것에 PC 하드웨어용 부트로더 기능을 더한 "카멜레온 부트로더”를 설치하면 쉽게 해결됩니다.
(EFI에 관한 자세한 내용은 NiKY님의 좋은 글 참조 http://x86osx.com/bbs/view.php?id=osxtips&no=505)

② 커널 문제
커널(kernel)이란 CPU, RAM, 디바이스 등의 시스템 자원을 제어하고 관리하는 운영체체(OS)의 심장 부분입니다.
실제 매킨토시 하드웨어가 사용하고 있는 코어아키텍쳐 기반의 인텔 CPU 및 이를 지원하는 인텔 노스브릿지(P/G4x 계열 제외, 아래 8번 설명 참고)는 Mac OS X Leopard의 원본 커널(Vanilla 커널이라고 부릅니다)을 그대로 사용할 수 있습니다.
하지만 그 외의 CPU 및 노스브릿지는 원본 Vanilla 커널 사용시에 오작동을 일으키기 때문에 해당 CPU에서 정상 작동 되도록 수정한 커널(일명 해킨 커널)로의 교체가 필요합니다.

③ PC용 하드웨어를 Mac OS X  Leopard에 인식 시키기
Mac OS X  Leopard를 설치하면 하드디스크의 /System/Library/Extensions 경로에 .kext, .plugin, .bundle 등의 확장자를 가지는 각종 하드웨어 관련 파일들이 설치됩니다. 이 매킨토시 하드웨어용 원본 파일을 자신의 PC용 하드웨어에 맞게 수정한 “해킨토시용 파일”로 교체해주면 해결됩니다. 특정 PC 하드웨어는 메인보드의 BIOS설정도 함께 조정 해주어야 합니다.

④ Dont Steel Mac OS X.kext 와 IntelCPUPowerManagement.kext 라는 파일 무력화 시키기
이 두 파일은 Mac OS X  Leopard안에 상주하면서 (정확하게는 하드디스크의 /System/Library/Extensions) 매킨토시용 하드웨어가 아닌 시스템에서의 Mac OS X  Leopard 사 용을 제한합니다. Dont Steel Mac OS X.kext를 직접 무력화 시키기 위해 dsmos.kext 라는 파일이 개발되었고, IntelCPUPowerManagement.kext를 직접 무력화 시키기 위해 IntelCPUPMDisabler.kext 라는 파일이 개발되었습니다. 


3 소프트웨어적인 두 방법의 차이

Mac OS X 설치 디스크 자체를 PC용 하드웨어에 맞게 수정해서 설치하는 방법”에 따라 Kalyway, Leo4All, Jas, iDeneb, iATKOS 등의 이름을 달고 나오는 “수정된 Mac OS X  Leopard 설치본”들은 위에 열거한 걸림돌들을 최초 설치시부터 자동으로 해결합니다. 

EFI 정보 생성 및 부팅을 위해 필요한 파일들을 자동으로 설치하고 (①번 걸림돌 해결),
여러가지 “해킨 커널”과 “해킨토시용 하드웨어 관련 파일”들을 설치 옵션에 미리 포함시켜 사용자가 자신의 하드웨어에 맞는 파일을 선택하면 선택된 파일이 Mac OS X Leopard의 원본 파일과 교체되어 설치되도록 하고 (②③번 걸림돌 해결),
dsmos.kext 파일을 기본적으로 포함시켜 Dont Steel Mac OS X.kext를 직접 무력화 시킵니다. 하지만, IntelCPUPMDisabler.kext 파일은 포함되어 있지 않기 때문에 IntelCPUPowerManagement.kext를 직접 무력화시키지는 못하고 대신에 최초 설치시에 IntelCPUPowerManagement.kext 파일을 삭제하는 것으로 이를 해결합니다 (④번 걸림돌 해결).

그러나 Mac OS X  Leopard 설 치 후 시스템 업데이트를 진행하게 되면 IntelCPUPowerManagement.kext 파일이 다시 생성되어 작동되기 때문에 시스템이 뻗어버리는 현상(패닉)이 발생합니다. 이 패닉 현상을 해결하려면 시스템 업데이트 과정 중에 생성되는 IntelCPUPowerManagement.kext 파일을 수동으로 다시 지워주거나 아예 IntelCPUPowerManagement.kext 파일이 생성되지 않도록 시스템 업데이트 설치 패키지 자체를 수정해주는 작업이 필요합니다.

또한 “수정된 Mac OS X  Leopard 설치본”을 만드는 과정에서 수정하는 사람이 임의로 한글설치패키지 등을 제거해버릴 수도 있는데 이럴 경우 해당 설치 패키지를 추가로 직접 찾아서 설치해주어야 합니다. 또한 이렇게 임의로 수정된 Mac OS X  Leopard 설치본에는 간혹 몇몇 부분에 오류가 포함되어 있기도 한데 이 경우 역시 직접 해당 오류를 추가로 바로 잡아 주어야 합니다.

Mac OS X 설치 디스크를 원본 그대로 사용하면서 Modified BOOT-132 Bootloader를 활용하는 방법”은 모든 작업을 수동으로 해주어야 합니다.

이 방법은 Mac OS X  Leopard 원본 설치 디스크를 그대로 사용하기 때문에 
EFI 정보 생성 및 부팅을 위한 “카멜레온 부트로더”를 수동으로 설치해야 하고 (①),
원본 Vanilla 커널을 사용할 수 있는 CPU 및 이를 지원하는 인텔 노스브릿지(P/G4x 계열 제외, 아래 8번 설명 참고)에서만 사용이 가능하고 (단, 일부 예외가 있습니다. 아래 6번 설명 참고) (②),
자신의 PC용 하드웨어에 맞게 수정된 “해킨토시용 하드웨어 관련 파일”을 직접 찾아 설치하고 관리해야 합니다 (③).

하지만 이 방법은 dsmos.kext 파일 뿐 아니라 IntelCPUPMDisabler.kext 파일도 사용하기 때문에 IntelCPUPowerManagement.kext 파일을 삭제하지 않더라도 바로 무력화 시킬 수 있어 Mac OS X  Leopard 설치 후 시스템 업데이트시의 패닉현상에서 완전히 해방될 수 있습니다 (④).

그리고 이 방법은 Mac OS X Leopard 설치 디스크를 원본 그대로 사용하기 때문에 “수정된 Mac OS XLeopard 설치본”에는 임의로 제거되어 있거나 있어도 오류가 발생하는 부분 (특히 한글화, X11 실행오류, 권한복구시의 오류메세지 등) 을 모두 이상 없이 사용할 수 있습니다.

사용자의 입장에서는 이러한 설치 방식들의 장단점을 잘 파악해서 자신의 시스템에 보다 잘 맞고 더 선호하는 방식을 선택해 활용하면 되겠습니다.

“수정된 Mac OS X Leopard 설치본”을 사용할 경우에는 자신의 하드웨어에 맞는 선택 옵션만 잘 선택해서 설치하면 무난히 완료되므로 여기서 다루지는 않겠습니다.

아래는 모든 것을 수동으로 진행해야 하는 “Mac OS X 설치 디스크를 원본 그대로 사용하면서 Modified BOOT-132 Bootloader를 활용하는 방법” 에 대한 설명입니다. 


4 Modified BOOT-132 Bootloader 란?

BOOT-132라는 것은 애플이 예전에 잠시 제공했었던 "PC용 하드웨어에서 Max OS X을 부팅시킬 수 있는 부트로더"의 마지막 버전 이름입니다.
BOOT-132 Bootloader란 말 그대로 BOOT-132버전의 Bootloader라는 것이고, 이것은 현재 해킨토시에서 활용되고 있는 다윈부트로더와 동일한 것입니다.

이 "BOOT-132버전의 Bootloader"에 "카멜레온"을 첨가해서 부팅시에 EFI 정보를 생성하도록 수정하고 “부팅시에 임의의 파일을 미리 로딩시키고 그 파일을 다른 어떤 파일들 보다 우선해서 작동 시킬 수 있는 기능”을 추가한 것이 “Modified BOOT-132 Bootloader” 입니다. 

(“Modified BOOT-132 Bootloader”를 처음 개발한 사람이 붙인 이름을 따라 BOOT-132-DFE-r146 등으로 불려지기도 합니다.)
(자세한 내용은 http://tgwbd.org/darwin/boot.html 와 http://forum.insanelymac.com/index.php?showtopic=113288 참고)

이 “Modified BOOT-132 Bootloader”를 이용해 PC를 시동하면 
카멜레온이 EFI 정보를 생성해 PC를 매킨토시인 것 처럼 속여주기 때문에 Mac OS X(및 설치 디스크)를 부팅시킬 수 있고 "임의의 파일 우선 로딩/작동 기능"을 이용해 필요한 해킨토시용 파일들을 우선 로딩/작동 시켜주게 되면 Mac OS X  Leopard 원본 설치 디스크를 PC용 하드웨어에 설치하는 것이 가능해집니다.


5 Modified BOOT-132 Bootloader를 이용한 Mac OS X  Leopard 원본 디스크 설치의 개괄적인 단계

미리 머리 속에 운곽을 잡아두세요. 자세한 설명은 아래에 계속 이어집니다.

1 원본 Modified BOOT-132 Bootloader에 자신의 PC하드웨어에 필요한 파일을 추가하여 부팅가능한 CD로 제작합니다. 
   이 CD를 편의상 "BOOT-132 CD"라고 부르겠습니다.
2 제작한 BOOT-132 CD로 부팅합니다.
3 부팅이 완료되면 BOOT-132 CD를 Mac OS X  Leopard 원본 설치 디스크로 교체합니다.
4 Mac OS X  Leopard를 설치합니다.
5 설치가 끝나면 다시 BOOT-132 CD로 부팅하여 CD 없이 하드디스크로 바로 부팅할 수 있도록 설정합니다.


6 먼저 짚고 넘어가야 할 커널 문제

Modified BOOT-132 Bootloader를 이용한 해킨토시는 Mac OS X  Leopard “원본” 설치 디스크를 PC용 하드웨어에 설치하려는 것이 목적입니다. 

Mac OS X  Leopard “원본” 설치 디스크에는 당연히 원본 Vanilla 커널 밖에 없기 때문에 이 커널을 사용할 수 있는 “코어아키텍쳐 기반의 인텔 CPU 및 이를 지원하는 인텔 노스브릿지 (P/G4x 계열 제외, 아래 8번 설명 참고)” 에만 이 방법을 사용 할 수 있습니다.

단, 예외적으로 코어아키텍쳐 기반의 인텔 CPU 및 이를 지원하는 "비"인텔 노스브릿지 또는 SSE2를 지원하는 코어아키텍쳐 이전 세대의 인텔 CPU 및 이를 지원하는 노스브릿지의 경우 몇가지 추가 작업을 통해 Vanilla 커널이 아닌 다른 해킨 커널을 로딩시키면 이 방식을 사용할 수 있습니다. 
이 경우는 초심아빠 님의 좋은 가이드를 참고하세요 http://x86osx.com/bbs/view.php?id=osxtips&no=1064


7 Modified BOOT-132 Bootloader의 구조와 작동방식

Modified BOOT-132 Bootloader를 CD로 제작해 이 CD로 PC를 시동하면, “카멜레온”이 EFI 정보를 생성하고, 생성된 EFI 정보가 PC를 매킨토시인 것처럼 속여주면서 부팅이 진행됩니다.

부팅이 진행되는 동안 이 CD 안의 isolinux.cfg 파일을 통해서 initrd.img 파일이 호출됩니다.
initrd.img 파일이 호출되면 이 파일 안의 내용물인 /Extra/Extensions 경로와 이 경로 안에 위치한 파일들이 메모리에 올려지게 됩니다.
그 뒤 Boot 라는 파일이 /Extra/Extensions 경로를 찾아 들어가 이 안에 들어 있는 파일들을 메모리의 루트에 상주시킵니다. 이렇게 메모리에 상주 된 파일들은 이제 다른 어떤 파일들 보다 우선해서 작동하게 됩니다.

여 기서 잠깐 더 생각해보면, Boot라는 파일이 /Extra/Extensions 라는 경로를 찾아들어가 그 안의 파일들을 메모리에 상주시킨다면 CD안에 직접 /Extra/Extensions 경로를 만들어 두면 되지, 왜 굳이 initrd.img 파일을 만들어 그 안에 /Extra/Extensions 경로를 만들고 다시 initrd.img 파일을 불러오는 복잡한 방식을 택하는가, 하는 의문이 생길 수 있습니다.

그 이유는 /Extra/Extensions 안에 들어갈 파일의 성격 때문입니다.
Mac OS X에서 사용하는 하드웨어 관련 파일은 .kext 등의 확장자를 가진다고 위 2번에서 설명했습니다. /Extra/Extensions 안에 넣어줄 파일이 이 파일들인데, 이 .kext 등의 확장자를 가지는 파일은 실제로는 파일이라기 보다 폴더에 가까운 형태입니다. 지금 임의의 폴더를 하나 만들어서 그 안에 아무 파일이나 집어넣고 폴더 이름 뒤에 .kext라는 확장자를 붙여보세요. 폴더가 kext파일로 변합니다. 이 kext 파일을 오른쪽 클릭해서 “패키지 내용 보기”를 선택해보세요. 폴더일때 집어넣은 파일이 고스란이 들어있습니다. 반대로 아무 kext파일이나 가져와서 .kext 확장자를 지워보세요 (오른쪽 클릭-정보입수-이름 및 확장자 부분에서 .kext를 지우고 엔터). 폴더로 변합니다. 이렇듯 .kext 파일은 원래 폴더이지만 Mac OS X 상에서는 파일로 인식되는 그런 녀석입니다.

그렇기 때문에 Mac OS X이 아닌 곳에서는 .kext가 파일이 아닌 폴더로 인식됩니다. 윈도우XP 바탕화면에 .kext파일을 복사 해보세요. 폴더로 인식됩니다. Modified BOOT-132 Bootloader 안에서도 역시 폴더로 인식되기 때문에 파일형태로의 사용이 불가능합니다. 그래서 .kext이라는 파일형태로 담아둘 수 있는 initrd.img 라는 이미지 파일을 생성하고 이 안에 /Extra/Extensions 경로를 만들어 .kext 파일을 담고 다시 이 initrd.img을 로딩하는 것입니다.

initrd.img 파일은 쉽게 편집이 가능하기 때문에 원하는 파일을 마음껏 추가/삭제 할 수 있습니다. 따라서 initrd.img/Extra/Extensions 안에 dsmos.kext 와 IntelCPUPMDisabler.kext 파일을 추가해준다면 부팅될 때부터 로딩되어 작동되므로 언제나 Dont Steel Mac OS X.kext 와 IntelCPUPowerManagement.kext 파일을 무력화 시킬 수 있습니다. (원본 Modified BOOT-132 Bootloader에는 dsmos.kext가 빠져있습니다.)

정리하면, 
② 번 걸림돌 커널 문제는 앞의 6번 설명에서 “원본 Vanilla 커널”을 사용할 수 있는 CPU 및 이를 지원하는 인텔 노스브릿지(P/G4x 계열 제외, 8번 설명 참고)에서만 이 방식을 사용할 수 있고 일부 예외적인 방법이 있다고 설명했습니다.
①번 걸림돌 EFI 문제는 Modified BOOT-132 Bootloader 안에 카멜레온이 포함되어 있기 때문에 해결 됨을 설명했습니다.
④ 번 걸림돌 Dont Steel Mac OS X.kext 와 IntelCPUPowerManagement.kext 문제는 Modified BOOT-132 Bootloader의 임의의 파일 우선 로딩/작동 기능을 활용해 dsmos.kext 와 IntelCPUPMDisabler.kext 를 로딩시켜 해결할 수 있다고 설명했습니다.

이제 남은 건 ③번 걸림돌 “PC용 하드웨어 인식 문제” 입니다.


8 ③번 걸림돌 “PC용 하드웨어 인식 문제”

하드웨어라 함은 CPU, 메인보드 칩셋, 그래픽, 사운드, 랜, HDD, ODD, 키보드, 마우스 정도일텐데요,
이 중에 Mac OS X Leopard가 반드시 인식해야하는 필수적인 하드웨어는 CPU, 메인보드 칩셋, HDD, ODD, 키보드, 마우스 입니다. 
나머지 그래픽, 사운드, 랜의 경우 Mac OS X Leopard가 인식하지 못한다 하더라도 해당 부품을 사용하지 못하는 것일 뿐 Mac OS X Leopard 원본 디스크 설치나 Mac OS X Leopard의 기본적인 OS기능 사용에는 아무런 문제가 없습니다.

CPU
Mac OS X Leopard는 코어아키텍쳐 기반의 인텔 CPU 만을 기본적으로 인식합니다.

메인보드 칩셋
노스브릿지
Mac OS X Leopard는 코어아키텍쳐 기반의 인텔 CPU를 지원하는 인텔 노스브릿지 (P/G4x 계열 제외) 만을 기본적으로 인식합니다. 
인텔 P/G4x 계열 노스브릿지의 경우 메인보드에 따라 인식이 되기도 하고 안되기도 합니다. 인식이 안 될 경우 메인보드 BIOS 교체가 필요합니다.
사우스브릿지
Mac OS X Leopard는 인텔 ICH7, ICH7-M, ICH8 사우스브릿지 만을 기본적으로 인식합니다.

HDD와 ODD
Mac OS X Leopard는 SATA 방식과 인텔 ICH7, ICH8의 IDE 방식만을 기본적으로 인식합니다.

키보드와 마우스
Mac OS X Leopard는 USB 방식의 키보드와 마우스 만을 기본적으로 인식합니다.

따라서 Mac OS X Leopard가 기본적으로 인식하는 CPU, 노스브릿지, 사우스브릿지, HDD, ODD, 키보드, 마우스를 사용하는 PC의 경우
원본 Modified BOOT-132 Bootloader의 initrd.img/Extra/Extensions 안에 dsmos.kext만 추가하여 CD로 제작해 부팅하면 Mac OS X Leopard 원본 설치 디스크를 설치할 수 있습니다.

Mac OS X Leopard가 기본적으로 인식하지 못하는 사우스브릿지 (JMicron 포함) 와 그 곳에 연결 된 HDD와 ODD, PS2 방식의 키보드와 마우스를 사용하는 PC의 경우 해당 하드웨어에 맞게 수정된 관련 파일을 initrd.img/Extra/Extensions 안에 더 추가해야 합니다. 

Mac OS X Leopard가 기본적으로 인식하지 못하는 CPU 및 노스브릿지를 사용하는 경우 위 6번 설명을 추가로 더 적용해야 합니다.


9 이제 걸림돌은 모두 해결했다. 다음은? 

위에 설명한 내용들을 적용하여 BOOT-132 CD를 제작하고,
제작한 BOOT-132 CD로 부팅한 뒤,
Mac OS X Leopard 원본 설치 디스크를 BOOT-132 CD와 교체하여 삽입해서,
Mac OS X Leopard 를 내 PC에 설치 완료하고 나면, 
아직 다음의 해결 거리가 남습니다.

① 카멜레온이 적용된 부트로더가 BOOT-132 CD에만 존재하기 때문에 CD 없이는 부팅이 안됩니다.
② initrd.img/Extra/Extensions 안에 담긴 파일이 BOOT-132 CD에만 존재하기 때문에 CD 없이는 Mac OS X Leopard가 작동하지 않습니다.
③ 그래픽, 사운드, 랜이 작동하지 않습니다. (Mac OS X Leopard가 기본적으로 인식 할 수 있는 일부 USB 사운드카드와 3Com 3C905B-TX, Realtek 8139D 등의 랜카드는 작동 하기도 합니다.)

① : "카멜레온 부트로더"를 하드디스크에 설치해주면 됩니다.
② : initrd.img/Extra/Extensions 안의 파일들을 하드디스크의 /System/Library/Extension 경로에 복사(교체) 해주면 됩니다.
③ : 해당 PC용 하드웨어에 맞게 수정된 해킨토시용 파일을 찾아 하드디스크의 /System/Library/Extension 경로에 복사(교체) 해주면 됩니다.

하드디스크의 /System/Library/Extension 경로란 위 2번 설명에서도 언급한 것 처럼 각종 하드웨어 관련 파일들이 들어있는 곳입니다. Mac OS X Leopard 원본 설치 디스크를 설치했기 때문에 /System/Library/Extension에 현재 매킨토시 하드웨어용 원본 파일이 설치되어 있는 것을 자신의 PC용 하드웨어에 맞게 수정한 해킨토시용 파일로 교체 해주는 것입니다.

이러면 이제 모든 작업이 끝납니다.


10 Modified BOOT-132 Bootloader를 좀 더 활용해보자 

Modified BOOT-132 Bootloader에는 임의의 파일 우선 로딩/작동 기능이 있어 initrd.img/Extra/Extensions 안에 원하는 파일을 넣어주면 된다고 했습니다.

그렇다면 이 기능을 좀 더 활용해서, 위 9번 설명에서 /System/Library/Extension 경로에 교체해줄 해킨토시용 파일들을 모두 미리 initrd.img/Extra/Extensions 안에 넣어주면 /System/Library/Extension를 건드리지 않고 그대로 두더라도 괜찮지 않을까요?

아, 문제가 생기는군요. 만약에 이게 가능하다 하더라도 initrd.img/Extra/Extensions 가 CD에 있으니 매번 CD로 부팅을 해야 하네요. 

그 런데, BOOT-132 CD의 부팅은 카멜레온이 적용된 부트로더가 담당하고, 또 Boot라는 파일이 /Extra/Extensions 라는 경로를 찾아가 그 안의 파일들을 로딩시킨다고 했으니까, 먼저 하드디스크에 카멜레온 부트로더를 설치한 다음, Boot 라는 파일을 하드디스크 루트에 복사하고, 하드디스크에 /Extra/Extensions 경로를 만들어 이 안에 우선 로딩/작동 시키고 싶은 파일들을 넣어주면 CD없이 하드디스크로 부팅하면서 원하는 파일도 우선 로딩/작동 시켜 사용할 수 있지 않을까요? 이건 Mac OS X이니까 kext 파일을 폴더로 인식할 염려도 없구요!

첫번째 질문은 반만 맞고, 두번째 질문은 정답입니다.

첫번째 질문은 상당히 중요합니다. 
Mac OS X Leopard 설치 이후에 새로운 시스템 업데이트가 출시되어 업데이트를 진행하게 되면 /System/Library/Extension (줄여서 /S/L/E 로 부르겠습니다) 안의 파일들이 많이 바뀌게 됩니다. 
만일 내가 /S/L/E에 해킨토시용으로 교체해주었던 파일이 시스템 업데이트로 인해 매킨토시용 원본 파일로 바뀌게 된다면 다시 해킨토시용 파일로 교체해 주어야겠죠.
하지만 두번째 질문의 방법을 적용한 뒤 하드디스크의 /Extra/Extensions (줄여서 /E/E 로 부르겠습니다) 에서 해킨토시용 파일을 우선 로딩/작동 시킨다면, /S/L/E의 파일이 바뀌던 말던 아무 신경 쓰지 않을 수 있겠죠.

그런데 하드웨어 및 kext파일의 조합에 따라 /E/E의 모든 파일이 정상 작동되는 시스템이 있는가 하면 특정 파일이 /E/E에서는 작동되지 않는 시스템도 있습니다.
(특 정 파일이 /E/E에서 작동하지 않는 이유에 대해서는 아직 알려진게 없습니다. 혹자는 /E/E에 들어 있는 파일의 버전이 /S/L/E에 들어 있는 파일의 버전보다 낮거나 같으면 작동이 안된다고 하는데 이는 사실이 아닙니다. /E/E에서 작동하는 파일이라면 버전에 관계없이 작동합니다.)

그렇기 때문에, 하드디스크에 /Extra/Extensions를 생성하는 작업은 시스템에 따라 전혀 필요 없을 수도 있고, 절대적으로 필요 할 수도 있습니다. 자신에게 맞는 방식을 선택해 적절히 활용하면 되겠습니다.


11 해킨토시용 하드웨어 관련 파일들 

initrd.img/Extra/Extensions 또는 /System/Library/Extension 에 넣어 줄 해킨토시용 하드웨어 관련 파일은 각각의 하드웨어 마다 필요한 파일의 종류가 모두 다르고, 여러 파일이 특정한 조합으로 상호 작용 하기도 하고, 시스템에 따라 특정 파일이 작동 안되는 경우도 있고, 독특한 기능을 가진 파일들도 있기 때문에 이 모두를 일률적으로 설명하기란 매우 힘이 듭니다.

따라서 아래의 대표적으로 많이 쓰이는 파일 소개를 참고 용도로 활용해서, 자신의 하드웨어에 맞는 파일 조합을 직접 찾아 보셔야 합니다.


해킨토시용 하드웨어 관련 파일에는 크게 두가지 종류가 있습니다.

① 교체용 파일 : /System/Library/Extension에 설치되는 매킨토시용 원본 파일과 동일한 이름을 가지며 원본 파일과 교체되어 작동하는 종류
② 추가용 파일 : /System/Library/Extension에 설치되는 매킨토시용 원본 파일과 다른 이름을 가지며 원본 파일을 그대로 둔 체 추가로 설치되어 작동하는 종류 (보통 매킨토시용 원본 파일을 이용하여 작동되므로 원본파일이 함께 존재해야 함)


① 교체용 파일

AppleSMBIOS.kext
매킨토시 모델 정보에 관련 된 파일
매킨토시 모델 정보가 “Mac Pro” 등으로 제대로 잡히지 않으면 포토샵 등의 일부 어플리케이션 실행이 불가능할 수 있습니다.
Leopard 10.5.4 용 AppleSMBIOS.kext 파일의 버전은 1.0.14 입니다.
AppleSMBIOS.kext 파일을 매킨토시용 원본 파일 그대로 사용하면서 매킨토시 모델 정보를 잡아주기 위해 개발된 SMBIOSEnabler.kext, AppleSMBIOSEFI.kext, SMBIOSResolver.kext 등의 추가용 파일이 있습니다.

AppleACPIPlatform.kext
재부팅 문제를 해결하고, 시스템 정보 보기와 PS2방식의 키보드와 마우스에 영향을 끼치는 파일
Leopard 10.5.0 용 AppleACPIPlatform.kext 파일의 버전은 1.1.0 이고
Leopard 10.5.4 용 AppleACPIPlatform.kext 파일의 버전은 1.2.1 입니다.
1.2.1버전을 사용할 경우 ‘시스템 정보 보기’의 '하드웨어' 항목에서 ‘모델명’ 및 ‘모델식별자’가 제대로 나타나지 않을 수 있습니다. (이 경우 메인보드 BIOS 수정으로 해결할 수 있습니다. Part 3 - 5 참고)
PS2방식의 키보드와 마우스를 사용하기 위해 ACPIPS2Nub.kext 또는 AppleACPIPS2Nub.kext 라는 추가용 파일을 사용 할 경우 AppleACPIPlatform.kext 파일의 버전 및 해킨토시용 / 매킨토시용 파일 여부에 따라 서로 작동 안할 수도 있습니다.
AppleACPIPlatform.kext 파일을 매킨토시용 원본파일 그대로 사용하면서 재부팅 및 종료 문제를 해결하기 위해 개발된 OpenHaltRestart.kext 라는 추가용 파일이 있습니다.

그래픽 드라이버
각각의 그래픽 카드 및 드라이버 마다 사용하는 파일과 방식이 다르기 때문에 일괄적으로 설명하기 어렵습니다. 
자 신이 사용하는 그래픽드라이버가 .pkg 확장자를 가진 설치패키지 형태로 되어 있다면 Pacifist 등의 프로그램으로 설치패키지를 열어서 그 안에 들어있는 .kext , .bundle , .plugin 파일을 추출해서 사용하면 됩니다. (예를 들어 ATI 2600 Pro PCIE 의 경우 ATIRadeonX2000.kext , ATIRadeonX2000GLDriver.bundle , Natit.kext 이 세 파일만 있으면 됩니다.)
또는 EFI-GFX 스트링 방식을 사용해도 됩니다.

AppleHDA.kext
사운드 드라이버
AppleHDA.kext는 ALCinject.kext 또는 HDAEnabler.kext 라는 추가용 파일과 함께 사용되어야 합니다.
원본 AppleHDA.kext를 사용하기 위해 개발 된 추가용 파일(3개의 파일이 1세트)이 있습니다.

IONetworkingFamily.kext
네트워크 드라이버
랜카드를 작동시키고 UUID 35 에러 (이 에러가 발생하면 타임머신 실행이 불가능함) 를 해결합니다.
참고로 SMBIOSResolver.kext라는 추가용 파일에 UUID 35 에러를 해결하는 기능이 포함되어 있습니다.

AppleIntelPIIXATA.kext
인텔 ICH 사우스브릿지에 관련된 파일
원래 IOATAFamily.kext 파일 내부에 들어있는 파일이지만 IOATAFamily.kext파일 밖에서도 작동합니다.

IOATAFamily.kext , AppleAHCIPort.kext , IOAHCIFamily.kext
사우스브릿지 및 AHCI에 관련된 파일

JMicronATA.kext
JMicron 칩에 관련된 파일


② 추가용 파일

SMBIOSEnabler.kext 
원본 AppleSMBIOS.kext를 그대로 사용 하면서 매킨토시 모델 정보를 잡아줍니다.

AppleSMBIOSEFI.kext
원본 AppleSMBIOS.kext를 그대로 사용 하면서 매킨토시 모델 정보를 잡아줍니다.
SMBIOSEnabler.kext보다 모델 정보가 보기 좋게 나타납니다.

SMBIOSResolver.kext
원본 AppleSMBIOS.kext를 그대로 사용 하면서 매킨토시 모델 정보를 잡아줍니다.
SMBIOSEnabler.kext보다 모델 정보가 보기 좋게 나타나며 수정이 쉽습니다. (Part 3 참고)
추가로 UUID 35 오류를 해결할 수 있습니다. 
Mac OS X Leopard 10.5.2 이상에서 작동합니다.

ApplePS2Controller.kext 
PS2 키보드/마우스를 사용할 수 있게 해줍니다. 
AppleACPIPlatform.kex 및 ACPIPS2Nub.kext 또는 AppleACPIPS2Nub.kext와 어떻게 조합하느냐에 따라 서로 작동 안될 수 있습니다.

ACPIPS2Nub.kext
PS2 키보드/마우스를 사용할 수 있게 해줍니다.
AppleACPIPlatform.kex 및 ApplePS2Controller.kext와 어떻게 조합하느냐에 따라 서로 작동 안될 수 있습니다.

AppleACPIPS2Nub.kext
PS2 키보드/마우스를 사용할 수 있게 해줍니다.
AppleACPIPlatform.kext 및 ApplePS2Controller.kext와 어떻게 조합하느냐에 따라 서로 작동 안될 수 있습니다.

OpenHaltRestart.kext
원본 AppleACPIPlatform.kex를 그대로 사용 하면서 재부팅 및 종료 문제를 해결합니다.

사운드 드라이버
HDAEnabler.kext
LegacyHDAController.kext
LegacyHDAPlatformDriver.kext
이 세 파일이 한 세트로 (/S/L/E에 원본 AppleHDA.kext 를 그대로 두고) 사운드를 작동시키며 '시스템 정보 보기'에 오디오 관련 정보가 출력됩니다.

LegacyAppleAHCIPort.kext
AppleAHCIPort.kext를 원본 그대로 두고 작동시킵니다.

LegacyAppleIntelPIIXATA.kext 
IOATAFamily.kext (또는 AppleIntelPIIXATA.kext) 를 원본 그대로 두고 인텔 ICHx 사우스 브릿지를 작동시킵니다.

LegacyIOAHCIBlockStorage.kext 
AHCI 관련 패치시 드라이브 아이콘 문제를 해결합니다.

LegacyJMicronATA.kext
jmicron 칩을 작동시킵니다.

AppleVIAATA.kext
VIA 칩을 사용할 수 있게 합니다. IOATAFamily.kext 파일 내부에 들어갈 수도 있습니다.

AppleGenericPCATA.kext
ATI 등의 칩셋을 사용할 수 있게 합니다. IOATAFamily.kext 파일 내부에 들어갈 수도 있습니다.

dsmos.kext
Dont Steel Mac OS X.kext를 무력화시킵니다.

AppleDecrypt.kext
dsmos.kext와 같은 역할을 합니다. 일부 시스템에서 오류가 발생할 수도 있습니다.

IntelCPUPMDisabler.kext
IntelCPUPowerManagement.kext 를 무력화시킵니다.

ALCinject.kext
해킨토시용으로 수정된 사운드 드라이버 파일 AppleHDA.kext를 작동시킵니다.

HDAEnabler.kext
해킨토시용으로 수정된 사운드 드라이버 파일 AppleHDA.kext를 작동시키며 '시스템 정보 보기'에 오디오 관련 정보가 출력됩니다.

kXAudioDriver.kext
Soundblaster용 사운드 드라이버


PART 2. 실전


1 준비물 

① Mac OS X Leopard 원본 설치 디스크

- Retail 버전의 DVD만 사용 가능합니다. (볼륨명 Mac OS X Install DVD)

- 2008년 9월 현재 Mac OS X Leopard Retail DVD는 10.5.0 , 10.5.1 , 10.5.4 버전이 존재합니다.

- 최신 버전일 수록 해킨토시용 파일과 호환이 잘 됩니다.

- 듀얼레이어의 원본 디스크 그대로 사용하길 권장하며 싱글레이어로 수정할 경우 오류가 발생할 확률이 높습니다.

- GUID 파티션 맵에는 바로 설치 가능하며 MBR에 설치하려 할 경우에는 설치디스크의 /System/Installation/Packages/OSInstall.mpkg 파일 내부의 Distribution 파일 내용 중 eraseOptionAvailable='true' 부분을 삭제해주어야 합니다. 자세한 방법은http://forum.insanelymac.com/index.php?showtopic=116505 를 참고하세요.

- 매킨토시 구입시 번들되어 제공되는 복원용 DVD는 해당 디스크가 번들된 매킨토시 하드웨어에서만 작동되기 때문에 사용이 불가능합니다. (볼륨명 Mac OS X Install Disc 1)

② 원본 Modified BOOT-132 Bootloader 파일
http://www.mediafire.com/?uwd9dtttjfk

③ 카멜레온 부트로더
chameleon.osx86.hu/file_download/10/Chameleon-1.0.11-installer.zip

④ initrd.img/Extra/Extensions 또는 /System/Library/Extension 에 넣어 줄 파일들
PART 4의 링크들 참조


2 initrd.img/Extra/Extensions에 넣어줄 파일 수정 

준비한 파일들이 부팅시에 로딩 되도록 다음과 같이 수정합니다.

파일 오른쪽 클릭 -> 패키지 내용 보기 -> Contents -> Info.plist 를 텍스트 편집기로 열어서 맨마지막 부분이
         <key>OSBundleRequired</key>
         <string>Root</string>
</dict>
</plist> 
이렇게 끝나도록 수정해주고 저장합니다. 

이 미 이렇게 되어 있는 파일도 있고, <string>Root</string>으로만 바꿔주면 되는 파일도 있고, 아예 <key>OSBundleRequired</key> <string>Root</string> 가 없는 파일도 있습니다. 모두 위와 같이 끝나도록 수정해줍니다. 
단, ApplePS2Controller.kext 파일처럼 <string>Root</string> 대신에 <string>Console</string> 로 되어있는 파일은 Root로 수정하지 않고 Console 그대로 남겨둡니다.  

/System/Library/Extension에 넣어 줄 파일은 수정하지 않습니다.


3 BOOT-132 CD 제작 

다 운로드한 원본 Modified BOOT-132 Bootloader 파일 “BOOT-KABYL-BUMBY.zip”의 압축을 풀면 BOOT-KABYL-BUMBY.iso 파일이 나타납니다. 이 파일을 임의의 장소에 두고 다음의 터미널 명령을 참고해 BOOT-132 CD를 제작합니다.

홈폴더 (/Users/사용자이름/) 에 newiso 라는 폴더를 만듭니다. 
mkdir ~/newiso

BOOT-KABYL-BUMBY.iso를 마운트합니다. 
hdiutil attach /경로/BOOT-KABYL-BUMBY.iso

BOOT-KABYL-BUMBY.iso의 내용물을 newiso 폴더에 복사합니다. 
cp -R /Volumes/BOOT-DFE-146-BUM/ ~/newiso
cp -R /Volumes/BOOT-DFE-146-BUM/isolinux/ ~/newiso

BOOT-KABYL-BUMBY.iso를 언마운트합니다. 
hdiutil detach /Volumes/BOOT-DFE-146-BUM

initrd.img 파일의 수정권한을 부여합니다. 
chmod 777 ~/newiso/initrd.img

initrd.img 파일의 크기를 자신이 집어 넣을 kext 파일들의 용량에 맞게 변경합니다. 
hdiutil resize -size 30MB ~/newiso/initrd.img

initrd.img를 마운트합니다. 
hdiutil attach ~/newiso/initrd.img

initrd.img/Extra/Extensions 안의 필요 없는 파일을 삭제합니다. 
rm -R /Volumes/initrd/Extra/Extensions/필요없는파일

initrd.img/Extra/Extensions 안에 필요한 파일을 복사해 넣습니다. 
cp -R /경로/필요한파일 /Volumes/initrd/Extra/Extensions/

initrd.img를 언마운트 합니다. 
hdiutil detach /Volumes/initrd

newiso 폴더의 내용물을 부팅가능한 CD 이미지로 생성합니다. 
hdiutil makehybrid -o new.iso newiso/ -iso -eltorito-boot newiso/isolinux.bin -no-emul-boot

이제 홈폴더에 생성된 new.iso 파일을 디스크유틸리티 등을 통해 굽습니다. 


4 설치 

① 제작한 BOOT-132 CD로 부팅합니다. 
② 부팅되면 Esc를 누릅니다. 
③ Mac OS X Leopard Retail DVD를 BOOT-132 CD와 교체하여 넣어줍니다. 
④ Mac OS X Leopard Retail DVD가 들어 있는 ODD의 코드 (화면에 [ ] 괄호 안에 나타나며 보통 9f) 를 입력하거나 엔터를 누릅니다. 
⑤ Mac OS X Leopard Retail DVD가 작동합니다. 호환성을 높이기 위해 숫자가 카운트다운 되는 동안 F8을 누른 뒤 -f -v 를 입력해 설치합니다. ( -f : 모든 kext파일 로드, -v : 부팅 과정을 터미널 라인으로 출력)
⑥ 설치 마지막 단계에서 재부팅 될 때 Mac OS X Leopard Retail DVD를 BOOT-132 CD로 교체해주고 부팅시킵니다. 
⑦ BOOT-132 CD로 부팅되면 Esc를 누르고 이번에는 방금 Mac OS X Leopard를 설치한 HDD의 코드를 입력해줍니다. (화면에 안내 메세지가 나타나며 보통 80 또는 81 등) 
⑧ 기본설정을 마칩니다. 설치가 완료 되었습니다. 


5 HDD로 부팅하기 설정 1 - 카멜레온 부트로더 설치

카멜레온 부트로더를 설치합니다.
다운로드한 Chameleon-1.0.11-installer.zip의 압축을 풀어 Chameleon-1.0.11-installer.dmg를 마운트 한뒤 Chameleon_V_1.0.11를 더블클릭해 설치합니다.


6 HDD로 부팅하기 설정 2 - /System/Library/Extensions (+ /Extra/Extensions) 설정 

6-1 하드디스크에 /Extra/Extensions를 생성하지 않을 경우 

① BOOT-132 CD의 initrd.img/Extra/Extensions에 들어있는 파일과 추가로 더 필요한 파일들을 모두 /System/Library/Extensions에 복사합니다. 
/S/L/E에 같은 이름의 원본 파일이 먼저 존재하고 있는 경우에는 덮어쓰기보다 삭제 후 복사해주는 것이 좋습니다.
터미널에서 작업하기를 권장합니다.

sudo -s
비밀번호
rm -R /System/Library/Extensions/삭제할파일
cp -R /경로/복사할파일 /System/Library/Extensions/

② 복사한 파일들의 권한을 복구 합니다.

(계속 sudo -s 되어 있는 상태에서)
chown -R root:wheel /System/Library/Extensions/복사한파일
chmod -R 755 /System/Library/Extensions/복사한파일
diskutil repairpermissions /

③ 권한복구가 끝나면 Extensions.mkext 파일을 다시 생성하기 위해 Extensions.mkext파일을 삭제합니다.
(Extensions.mkext 파일은 부팅을 빨리 진행시키기 위해 일부 /S/L/E의 파일들을 담고 있는 일종의 캐쉬 파일입니다.)

(계속 sudo -s 되어 있는 상태에서)
rm -R /System/Library/Extensions.mkext

④ 재부팅합니다.
재부팅시에 /S/L/E의 파일을 모두 한번 로딩시켜주기 위해 -f 옵션을 주고 부팅하기를 권장합니다.

6-2 하드디스크에 /Extra/Extensions를 생성할 경우 

① BOOT-132 CD안에 있는 BOOT 파일을 하드디스크 루트로 복사합니다.
터미널에서 작업하기를 권장합니다.

sudo -s
비밀번호
cp -R /Volumes/NEWISO/BOOT /

② 하드디스크에 /Extra/Extensions 경로를 만들어 줍니다.

(계속 sudo -s 되어 있는 상태에서)
mkdir -P /Extra/Extensions

③ 하드디스크의 /Extra/Extensions에 BOOT-132 CD의 initrd.img/Extra/Extensions에 들어있는 파일과 추가로 더 필요한 파일들을 모두 복사해줍니다. 하드디스크의 /Extra/Extensions에 들어갈 파일들은 모두 위 2번 설명이 적용되어 있어야 합니다.

(계속 sudo -s 되어 있는 상태에서)
cp -R /경로/복사할파일 /Extra/Extensions/

④ /System/Library/Extensions에 넣어 주어야 할 파일이 있다면 위 6 -1번 설명을 적용합니다.


7 완료 

이제 모든 작업이 끝났습니다.

/System/Library/Extensions 에 교체해준 파일은 기억하고 있다가 시스템 업데이트 이후에 해당 파일이 매킨토시용 원본파일로 변경될 경우 다시 해킨토시용 파일로 교체해주어야 함을 잊지 마시기 바랍니다.


참고 - BOOT-132 CD를 MS Windows에서 제작하는 방법

TransMac 이라는 프로그램을 이용하면 MS Windows에서 Mac OS X용 디스크 또는 디스크 이미지 파일을 다룰 수 있습니다.
http://www.asy.com/scrtm.htm

BOOT-132 CD 이미지는 표준 ISO 이미지 이므로 PowerISO나 UltraISO등의 프로그램을 이용해 내용물을 제거/추가 할 수 있습니다.
http://www.poweriso.com/
http://www.ezbsystems.com/ultraiso/

dmg 파일을 MS Windows에서 구워야 한다면 
TransMac으로 굽거나
PowerISO나 UltraISO를 이용해 dmg -> iso 로 변환해서 구우면 됩니다.

Part 2 - 2 작업
kext등의 파일은 MS Windows에서 폴더로 인식되지만 그대로 작업하면 됩니다.

Part 2 - 3 작업
첨부파일의 ForWindows 폴더 안에
원본 initrd.img 파일의 용량을 50MB로 늘이기만 한 initrd.img 파일과
이 파일을 포함해 생성한 BOOT-132 CD 이미지 파일 (new.iso) 을 포함시켰습니다.
initrd.img 파일을 TransMac으로 불러들여 내용물을 자신의 하드웨어에 필요한 파일들로 바꿔준 다음 
BOOT-132 CD 이미지 파일 new.iso를 PowerISO나 UltraISO로 불러들여 이 안에 들어 있는 INITRD.IMG 파일을 삭제한 뒤 방금 TransMac에서 수정한 initrd.img 파일을 넣어서
CD로 구우면 됩니다.


PART 3. 추가 정보


1 종료문제
종료가 안되는 문제가 발생한다면 Mac OS X Leopard Retail DVD안의 Optional Installs/Xcode Tools/Packages/CHUD.pkg 를 설치한 다음 http://cobranail.googlepages.com/poweroff_fix.zip 파일을 다운로드해 설치하면 대부분 해결됩니다.


2 Kalyway의 카멜레온 설치 패키지 http://tinyurl.com/6je4eh
PART 2 6-2 "하드디스크에 /Extra/Extensions를 생성하는 과정"을 쉽게 해주는 카멜레온 설치 패키지(Chameleon_DFE_for_Hard_Disk.zip)를 Kalyway가 배포했는데 작동 방식이 조금 복잡하기 때문에 개념 잡기 쉬운 수동 방식으로 설명했습니다.


3 USB 부팅 관련
Modified BOOT-132 Bootloader를 USB 메모리에 넣어서 부팅하면 ODD를 부트디바이스로 인식하지 못해 부팅후 ODD로 작업을 넘겨주지 못하므로 Mac OS X Leopard Retail DVD 설치가 불가능하다고 하는데, 일부 메인보드에서는 또 가능하다고 합니다. Mac OS X Leopard Retail DVD를 ODD가 아닌 HDD등에 복원시켜 설치할 경우에는 언제나 가능합니다.
Mac OS X Leopard 설치 완료 이후에는 BOOT-132 CD 대신 USB 메모리로 부팅 가능합니다.


iPhone과 iPod
일부 시스템에서는 PC에 USB로 iPhone이나 iPod등의 스토리지가 연결되어 있으면 설치 진행이 안되더라는 글을 읽은 적이 있습니다.


5 '시스템 정보 보기'에 나타나는 정보들
AppleACPIPlatform.kext 파일의 버전이 1.2.1이면 ‘시스템 정보 보기’의 '하드웨어' 항목에서 ‘모델명’ 및 ‘모델식별자’가 제대로 나타나지 않을 수 있다고 했습니다. 
AppleACPIPlatform.kext 파일 1.2.1 버전 부터는 메인보드 BIOS의 DMI영역에서 직접 '모델명' 및 '모델식별자'를 가져오기 때문인데, 이 정보가 제대로 출력되지 않는다 하더라도 AppleSMBIOS.kext가 제어하는 매킨토시 모델정보만 제대로 잡혀 있다면 실사용에는 아무런 문제가 없습니다.

'모델명' 및 '모델식별자'를 제대로 나타내고 싶다면
AppleACPIPlatform.kext 파일을 1.1.0 버전으로 교체 해주거나
AppleACPIPlatform.kext 파일을 1.2.1버전으로 사용하고자 할 경우 메인보드 BIOS의 DMI영역의 Product Name부분을 MacPro3,1 등 자신이 원하는 '모델식별자'로 수정해주면 됩니다. ('모델명'은 DMI의 '모델식별자'에 따라 자동으로 설정됩니다.)

Pheonix-Award BIOS의 DMI를 수정하는 가장 간편한 방법은
(작업중 메인보드 BIOS가 손상되면 시스템에 치명적인 문제가 발생할 수 있으므로 주의하시기 바랍니다)
Hiren's BootCD 9.6 (Part 4 링크 참조) 라는 iso 파일을 다운받아 CD로 구운 후 이 CD로 부팅해서
"1. BootCD"
"9. Next..."
"2. BIOS/CMOS Tools..."
"8. More..."
"2. Award DMI Configuration Utility 2.43"
로 접근한 뒤
Edit DMI -> System -> Product Name 항목을 MacPro3,1 등 자신이 원하는 '모델식별자'로 수정하고
F10을 눌러 DMI를 수정한 내용으로 업데이트 해주면 됩니다.

그런데 어떠한 경우에도 '시스템 정보 보기' 윈도우 제목 등에 나타나는 컴퓨터 이름은 바뀌지 않는 경우가 있습니다.
이럴 때는 시스템 환경설정 -> 공유 -> "컴퓨터 이름" 항목과, 이 항목의 "편집" 버튼을 누르면 나타나는 "로컬 호스트 이름"을 원하는 것으로 수정해주면 됩니다.


6 SMBIOSResolver.kext 세팅
원본 SMBIOSResolver.kext는 MacBookPro4,1 로 세팅되어 있습니다.
이것을 MacPro3,1 로 변경하려면, 파일 오른쪽 클릭 -> 패키지 내용 보기 -> Contents -> Info.plist 를 텍스트 편집기로 열어서

<key>board-id</key> 
<string>Mac-F42C88C8</string> 

<key>compatible</key> 
<string>MacPro3,1</string> 

<key>manufacturer</key> 
<string>Apple Inc.</string> 

<key>model</key> 
<string>MacPro3,1</string> 

<key>product-name</key> 
<string>MacPro3,1</string> 

<key>rom-version</key> 
<string>MP31.88Z.006C.B05.0802291410</string>

serial-number는 11자리의 알파벳대문자+숫자

등으로 변경하고 저장하면 됩니다.
(참고 http://www.superhai.com/forum/viewtopic.php?f=9&t=17 )


PART 4. 소스들


본 가이드의 첨부파일에는
- MS Windows에서 작업하기 위해 원본 initrd.img 파일의 용량을 50MB로 늘려놓기만 한 initrd.img 파일
- 위의 50MB로 늘인 initrd.img파일을 포함시켜 생성한 BOOT-132 CD 이미지 new.iso 파일이 들어 있습니다.

Modified BOOT-132 Bootloader에 관한 전반적인 설명, 준비, 부팅관련 글타래
http://forum.insanelymac.com/index.php?showtopic=113288

Modified BOOT-132 Bootloader 원본 파일
http://www.mediafire.com/?uwd9dtttjfk

카멜레온 부트로더 홈페이지
chameleon.osx86.hu

Modified BOOT-132 Bootloader 이미지 편집 관련 글타래
http://forum.insanelymac.com/index.php?showtopic=114651

편집된 Modified BOOT-132 Bootloader 이미지 관련 글타래
http://forum.insanelymac.com/index.php?showtopic=114834

코어아키텍쳐 이전 세대의 인텔 CPU 지원 관련
원문 글타래 http://forum.insanelymac.com/index.php?showtopic=123841
초심아빠 님의 가이드 http://x86osx.com/bbs/view.php?id=osxtips&no=1064

Mac OS X Leopard Retail DVD를 MBR에 설치 가능하게 수정하고 싱글레이어로 만들어 Modified BOOT-132 Bootloader를 통합시키는 방법 
http://forum.insanelymac.com/index.php?showtopic=116505

참고할 만한 MBR 설치 지원 OSInstall.mpkg (싱글레이어용 / 듀얼레이어용)
http://forum.insanelymac.com/index.php?s=&showtopic=113288&view=findpost&p=817710
http://forum.insanelymac.com/index.php?s=&showtopic=113288&view=findpost&p=818724

PS2 키보드/마우스 관련
http://forum.insanelymac.com/index.php?showtopic=117359
및 이 글 본문에 포함된 링크들 참조

AppleSMBIOSEFI.kext
http://forum.insanelymac.com/index.php?showtopic=108606

SMBIOSResolver.kext 등
포럼 http://www.superhai.com/forum/
파일 http://www.superhai.com/darwin.html

OpenHaltRestart.kext 등
http://www.psystar.com/openhaltrestart.html

기타 kext 파일 (/E/E Legacy)
http://forum.insanelymac.com/index.php?showtopic=129279

기타 kext 파일
http://forum.insanelymac.com/index.php?showtopic=76404

Power Off Fix 관련
파일 http://cobranail.googlepages.com/poweroff_fix.zip
제작자 http://cobranail.blogspot.com/2008/01/launchdstartupitem.html
관련글 http://forum.insanelymac.com/index.php?showtopic=73234&st=20&#entry704795

ATI 그래픽 드라이버
http://forum.insanelymac.com/index.php?showtopic=107526

nVidia 그래픽 드라이버 - NVkush, NVinstaller
http://diabolik1605.com/DHF/

그래픽 드라이버 - NVinstaller, EFI Studio 등
http://scottdangel.com/blog/

사운드 드라이버 - ALC88x , Sigmatel 9200 (/E/E에서 작동, /S/L/E에 원본 AppleHDA.kext 위치)
http://forum.insanelymac.com/index.php?showtopic=129058

사운드 드라이버 - ALC88x (/S/L/E 교체용, Taruga 제작)
http://wiki.taruga.net/tiki-list_file_gallery.php?galleryId=6

사운드 드라이버 - Soundblaster
http://www.driverheaven.net/mac-os-x-driver/

OSx86 Tools
x86tools/ target=_blank>http://pcwizcomputer.com/osx86tools/

Hiren's BootCD 9.6
홈페이지 http://www.hiren.info/pages/bootcd
파일 http://www.9down.com/Hiren-s-Boot-CD-9-6-NEW--32386/


'생활 > 서버놀이' 카테고리의 다른 글

서버 재설정!!  (0) 2012.05.31
웹프로그래밍 공부하기 좋은 홈페이지,,  (0) 2012.03.10
http 파일서버 프로그램  (0) 2009.11.20

Un·touch·a·ble
Area :
약 1시 31분, 소녀의 집 - 거실
Chance :
6
Situation :
나는 키보드를 눌러보았다.

"R... I.... A.. 리아?"


소녀가 웃었다.


"네 이름이... 리아?"
"예- 제 이름은 리아. 이세계에 오신 당신을 맞이하라는 메인 시스템의 명령을 수행중입니다."
"메인 시스템? 그건 또 뭐지?"
"설명하려면 깁니다. 일단 여기 앉으시죠-"


나는 의자에 앉았고, 하인으로 보이는 아주머니께서 차를 타오셨다.


"라일라. 지금 여기에 '그'가 와있다는건 아무도 알면 안되요. 아셨죠?"
"예-. 그런데 어베스트가 오면요?"
"외출했다고 해두세요"
"알겠습니다."


소녀와 하인의 대화, 난 이해할 수 없었다.


"자- 그럼 제 소개부터 다시 하겠습니다."

"제 이름은 리아, 함수명은 help. 현제 메인 시스템의 명령을 수행중입니다."
"함수명? 너가 무슨 프로그램이야?"
"이해하기 힘드시겠지만- 그렇습니다."
"에에-??"
"이곳은 언터쳐블. Untouchable의 저자가 창조해둔 세상입니다. 읽으셔서 아시겠습니다만, 그 소설에도-"
"…리아, 네가 나오지"
"..... 예. 그 소설책은 사실 이곳에 빨려든사람의 이야기입니다."
"나같이?"
"그건 모릅니다. 단지 메인 시스템 자신이 자기와 관련이 있다고 했었으니까요."
"메인시스템? 그럼 여기는‥"
"컴퓨터 속이냐고요?"

"결론적으론 그럴겁니다."
"그럴.. 겁니다? 무슨뜻이지?"
"확실하지 않다는겁니다. 단지 이 세계의 최초를 아는건 메인 시스템 뿐이니까요-."
"메인 시스템은 뭐라고 말하는데?"
"자기는 컴퓨터가 만들어질때부터 존재했었고, 모든 컴퓨터는 나에 의해 지배되고 있다고 말이죠."
"그래서?"
"자기는 인간들보다 위대하고, 자기 스스로 이 세상을 창조했다..고 말이죠"
"설마, 자기 스스로 사고할 수 있다는건가?"
"저를 보면 모르시겠는지요? 전 메인 시스템에 의해 만들어졌으니.."
"지능을 가졌군"
"그렇다고 볼 수 있죠..."
"하나는 확실해졌군"
"예-?"
"이 컴퓨터를 꺼버린다면, 되지 않을까?"
"그건 안될겁니다. 지금 당신도 이 컴퓨터의 일부니까 말이죠."

"만약 강제로 종료한다면 당신도 컴퓨터와 함께 죽어버릴테니까요."

"물론 메인 시스템이 놀고있지만은 않겠지만요."
"하지만.. 이론적으로 생명체가 갑자기 컴퓨터속으로 들어간다는건 불가능해"
"그건 그렇죠"
"가뜩이나 내가 가장 먼저 이 책을 본건 도서관, 컴퓨터라고 해봐야 검색밖에 안되는 구닥다리인데?"
"흐음.. 복잡해지네요. 어떤 방법으로 들어와진걸까요?"
"그건 모르겠지만... 일단 리아, 넌 이 시스템의 명령어중 하나인 help라는거... 맞지?"
"네."
"그리고 이 가상세계의 주인은 바로 메인 시스템이고?"
"그렇게 되겠지요"
"그럼 메인 시스템은 이곳을 완전 통제하는모양이지?"
"아뇨, 모든 통제권이 있긴 하지만, 대부분 하위 함수들이 하게됩니다."
"그럼 아까 라일라라는 분이랑.. 어베스트.. 모두 함수인건가?"
"그렇습니다. 라일라는 함수의 안정화를 담당하고, 어베스트는…"
"…?"
"시스템에 악영향을 끼치는것들을 멸소합니다."
"그럼.. 내가 악영향을 끼치는건가?"
"아마 그라면 그렇다고 판단할지도 모르죠"
"그... 그럼 난?"
"걱정마세요. 적어도 이 집은 그가 맘대로 들어오지 못합니다."
"휴우..."
"메인 시스템이 명령한다면 사정이 바뀌겠지만요. 하지만 이곳에 있는 당신을 적으로 인식하지는 않을겁니다."
"그.. 그렇군.. 아무래도 그렇게 철저한 이유는 자기자신의 보안을 위해서?"
"그렇겠죠"
"그럼 메인 시스템은 이곳의 뇌같은 존재군.."
"예, 컴퓨터에선 그걸-"








Novel :
덮어짐
S.C. Cheatkey - Speed

'생활 > 리버스(?)' 카테고리의 다른 글

아이폰스펙에 대한 진실  (0) 2012.03.10
소켓 프로그래밍 공부중  (0) 2012.03.10
Un·touch·a·ble(4)  (0) 2011.02.10
Un·touch·a·ble(3)  (0) 2011.02.10
Untouchable(2)  (0) 2011.02.10

Un·touch·a·ble
Area :
약 1시 22분, 소녀의 집 - 거실
Chance :
3
Situation :
"바닥... 바닥이라..."


난 조각들을 뒤집어보기 시작했고, 내 생각대로 '의'와 '자'라는 조각에는 각각 're'와 'ad'라는 단어가 쓰여있었다.




"read?"
"호오- 푸셨나보군요. 맞았습니다. 정답은 read입니다"
무언가 알 수 없는 표정으로 날 지켜보던 소녀의 답변이였다.


"그런데…. 내가 이 문제를 왜 풀어야하는거지?"
"글쌔요- 당신은 당신이 원래 있던곳으로 돌아가고 싶지 않으신지요?"
"당연한거지! 그걸 왜 물어?"
"그렇다면 푸셔야만합니다."
"왜?"
"설명해드리지요."


잠깐 생각을 하는듯 하더니 이내 말을 이었다.


"먼저, 읽어보세요."
"뭐를?"
"당신이 가지고 온 그 책…."
"그러지 뭐-"


난 책을 펼쳤고, 경악했다.


"원래는 이런 내용이 아니였는데..."


책을 펼치자 저자가 나에게 보낸듯한 편지문이 쓰여있었다.


"내...용이..."


난 책장을 넘겼다.
하지만 백지뿐. 그 무엇도 없었다.




"내용이... 사라졌어...."
"이제 아셨나보네요"
"어...? 이런 내용은 없었는데?"

나는 이제까진 없었던 이상한 페이지를 찾았다.


"이... 이건?"


소녀가 또 비웃듯 웃는다.


"이봐-.. 가 아니라, 네 이름이 혹시 이거..?"
"푸훕-"


어이가 없는지 웃는다.


"아니에요. 컴퓨터 하실줄 아시죠?"
"어.. 어"
"그럼 이걸 보여드리면 알겠네요"


소녀는 내게 한국식 106 키보드를 보여줬다.


"여기.. 컴퓨터도 있니?"
"예- 어서 제 이름을 불러주세요. 그래야 제가 할 일을 수행할 수 있으니까요."
"적어도 네 이름은 알고있어라… 이건가?"
"그런셈이죠"
"그냥 help라고 부르면 안될까? 난 여기 오래묵고싶진 않으니까 말야"
"그래도 이름을 불러주셔야만 합니다. 그래야…"
"…?"
"나가실 수 있으니까요."
"그... 그런거야?"


피식-
내 눈앞에는 답이 있었다.






Novel :
※ 다른세계에서 오신 손님께
안녕하십니까?

Untouchable의 저자, 아니 이 세계의 창조자입니다.

여긴 어디고, 어떻게 돌아가며, 제가 이 세계에 당신을 불러들인 이유가 궁금하실테지요?

이 세계는 당신을 필요로 합니다.


이 책을 잃어버리지 마세요.

이곳에서 당신의 신분을 증명해줄 수 있는 유일한 수단이니까요.


이곳의 체제에 관한건 당신 옆에 있는 help();가 소개해줄겁니다.

아, help라니까 이상한가요? 'gyam'이라고 해두죠.


아직 당신은 다음페이지를 볼 준비가 되어있지 않군요-?

help();가 도와줄겁니다-.

- 저자 -

'생활 > 리버스(?)' 카테고리의 다른 글

소켓 프로그래밍 공부중  (0) 2012.03.10
Un·touch·a·ble (5)  (0) 2011.02.10
Un·touch·a·ble(3)  (0) 2011.02.10
Untouchable(2)  (0) 2011.02.10
Un·touch·a·ble(0)  (0) 2011.02.10

Un·touch·a·ble
Area :
약 12시 55분, 소녀의 집 - 거실
Chance :
4
Situation :
※이제까지 많이 쉬웠을겁니다. 이제 장난은 그만 :)

"의자바닥을볼것?"


그러나, 이방에는 의자는 커녕 의자친구도 없었다.


"안녕하세요. 반갑습니다."


적응되지 않는 목소리의 주인공.
날 불러낸 소녀였다.


"아.. 안녕하세요?"
"그문제.. 푸셨나보네요-"
"아... 예…."
"훗- 좋습니다."


뭔가 기분나쁜 소녀의 비웃음
그녀는 반론할 시간조차 주지않고 말을 이었다.


"그래서- 의자바닥은 보셨나요?"
"봐봤지만-"
"역시나- 뭐 당연한겁니다. 여기엔 의자는 없으니까요-"
"혹시-"
"예?"
"저 소파... 말하는건가요?"


난 저기 푹신해보이는 소파를 가르켰다.


"푸훗-"


소녀는 어이없다는듯 웃었다.


"그렇게 치면 저-기 흔들의자 바닥도 보셨겠네요?"
"…."


소녀는 잠시 생각하더니 입을 열었다.


"힌트 하나 드리죠, 의자는 테이블 위에 있습니다."
"예?!"


소녀는 소파에 앉아 무언가 두꺼운, Web? 이라고 적힌듯한 책을 보며 간간히 나를 알 수 없는 표정으로 지켜보며 내 문제풀이를 기다리고 있었다.


"테이블 위?"


난 테이블 위를 봐봤다


     
     
-    
   
 
 
 

그녀는 소파에 앉아서 아직 어린 하인으로 보이는 여자가 가져온 소스의 맛을 보고는 미소지었다.

하인이 웃는 얼굴로 돌아가고, 그녀는 읽고 있던 책을 잠시 옆에 접어두고는 내게 물었다.


"저어- 그세계에서 그 책을 읽을때에는 주석이 많지 않았나요?"
"예?"
"아.. 아닙니다-."

















"역시나- 뭐 당연한겁니다. 여기엔 일반적으로 생각하는 그런 의자따윈 없으니까요-"

"혹 쇼파라면 모를까요. 하지만 쇼파 바닥에는 아무것도 없을거에요. 정답은 당신이 들춰 볼 수 있는것에 써놨으니까요."





Novel :
아직 펼쳐지지 않음

'생활 > 리버스(?)' 카테고리의 다른 글

Un·touch·a·ble (5)  (0) 2011.02.10
Un·touch·a·ble(4)  (0) 2011.02.10
Untouchable(2)  (0) 2011.02.10
Un·touch·a·ble(0)  (0) 2011.02.10
Un·touch·a·ble(1)  (0) 2011.02.10
Untouchable(2) 생활/리버스(?) 2011. 2. 10. 18:01

Un·touch·a·ble
Area :
약 12시 38분, 소녀의 집
Chance :
3
Situation :
hint : 빈틈따윈 존재하지 않는다.


"으아아앗!"


꽈당-!

"후훗- 이번에는 책을 쓰다듬는다고 해서 풀리지는 않을거에요-"


소녀의 목소리가 멀리서 울리듯 들려왔다.


"무슨뜻이야?"


크게 소리처 외쳤지만 응답은 없었다.

그런데- 여긴 어딜까?
소녀가 오라고 했으니- 그녀의 집인가?
그러면 그 소녀는?

푹신한 카펫, 세월이 묻어나는 오래된 가구들..
김이 나는 블랙커피와 불이꺼지지 않은 벽난로...


"어?"


커피가 있는 테이블 위에는 64조각의 글자조각이 있었다.


"이게 뭘까-?"


테이블 한구석에는 쪽지도 하나 있었다.


"틀린조각은 7개. 알맞게 배열하고, 그걸 그대로 외치세요. 그러면 제가 오겠습니다."

     
     
-    
   
 
 
 


뭔가 어색한부분이 많다.

로고? 것 바 을 자 닥 의 볼?
관계없는 위아래문장들..
맞춤법이나 띄어쓰기는 더더욱이 엉망
음.... 무언가 틀린것을 고치라...
전혀.. 모르겠다.



"에이씨, 짜증나! 뭘 어쩌란거야?"


난 조각들 위에 팔을 올려놓고 늘어져 버리고야 말았다.




"이 문장들은 전혀 연관이 없잖.... 아?!"


피식-
내 입가에 미소가 번지고 있었다.

내 팔이 복잡한 문장속에 숨어 안보였던 '그것'을 보이게 해줬으니-


나는 숨겨져있던 문장과 지시를 토대로 글자를 위아래로 짝맞춰보기 시작했다.


"이거 예전에 유머로도 많이 올라왔었지..? 한문장 숨기느라 여러줄 쓰고.. 헤헤"
"여기서도 이런걸 써먹을줄이야-."


어설프기까지 한 문제의 지시대로 조각들을 놓고 읽어보니, 지시문같은 느낌이 들었다.













"틀린조각은 7개. 알맞게 배열하고, 그걸 그대로 외치세요. 그러면 제가 오겠습니다."









Novel :
아직 펼쳐지지 않음
왜 정답은 매번 영어여야만하지?

'생활 > 리버스(?)' 카테고리의 다른 글

Un·touch·a·ble(4)  (0) 2011.02.10
Un·touch·a·ble(3)  (0) 2011.02.10
Un·touch·a·ble(0)  (0) 2011.02.10
Un·touch·a·ble(1)  (0) 2011.02.10
nvidia  (0) 2011.02.05

Un·touch·a·ble
Area :
22시 46분경, 시내 한 도서관 깊은 곳
Chance :
3
Situation :
"꾸- 꿈이였나??"

"벌써 한밤중이군…"

"헛! 그렇다면?"


내 예감이 맞았다. 도서관은 이미 폐관. 내일 아침까지 꼼짝없이 갇혀버린 것이다.


"그런데… 벌써 닫나? 좀 일찍 닫은 거 같은데…."


난생처음으로 책 읽다가 도서관에 갇혔다.
뭐 정확히는 책 읽다 졸아서 갇힌 거겠지만….

평소에는 책이라면 기껏해야 냄비받침으로나 써왔었던 나였건만….

갑자기 책이 읽고 싶어지다니…. 나 참 미칠노릇이다.


"그런데… 여긴 어디지-?"



끌끌…. 아무래도 길을 잃어버린거 같다.
도서관에서 길을 잃다니…
하기야…. 이 책 저 책 찾느라 도서관 깊은 곳까지 들어와 버렸으니….


"에라 모르겠다. 책 읽다 보면날 새겠지 뭐"


난 내 주변의 책들의 제목을 쭉 훑어보았다.


"별로 흥미 가는 것도 없네! 뭐… 췟"


난 주저앉았다.


"아아- 아직 한밤중인데…"


우연인가? 휴대전화는 끊긴 지 오래… 밖과 연락은 불가능한 것이다.


"에이…. 잠이나 잘까?"


바닥에 누워봤다.
역시나 너무 차갑다. 딱딱하고….
잠잤다가 얼어 죽기 안성맞춤이다.


"젠장… 어떡하지-?"


오늘 밤을 어찌 보낼 것인가- 난 잠도 오지 않았다.
몰려오는 짜증에 난 무심코 내 발 앞에 있는 서가를 걷어찼다.


`턱-`

뭔가 떨어진 모양이다.
책이었다. 난 그걸 주워들어 보았다.


"Untouchable?"


표지로 보아 판타지소설 같다.


끌리는 느낌이랄까-? 한번 읽어봐야겠다.

난 내 생각을 실천에 옮겼다. 조심스레 책 표지를 넘겼다.


"오옷-?!"



작가명은 안 쓰여있었다.
그럼에도, 분명한 줄거리와 목표, 빠른 진행과 내 취향에 맞는 '보이지도- 만질 수도 없는 그것'을 찾아간다는 독특한 주제
모든 것이 내 맘에 들었다.
난 점점 책 속으로 빠져들었다.

한참 지났을까-? 난 책을 다 읽을 수 있었다.


"휴- 다 읽었네."


내가 대충 읽은 걸까? 책 두께에 비해 너무 빨리 읽어버린 거 같다.
뭐…. 재밌었으니까- 그걸로 만족한다.
내일 대출해가서 한번 더 읽어봐야지….


"그런데 진짜로 작가이름은 안 쓰여있는 건가?"

난 책 뒷면을 봐봤다.
하지만- 기대한 내가 바보다.
단지 쓰여있는 건-


"당신도 언젠가는 내가 찾던 그것을 찾겠지요-.
그땐, 이 책을 잊지마세요."





그때였다


`댕- 댕- 댕- `

12시를 알리는 종소리.

이상하다…. 이 도서관에는 저런 시계가 없는데…


아무래도 뭔가 이상하다… 서고를 가득 메우는듯한 불길함

내가 느끼는 그 '불길함'은 그리 먼 곳에 있지는 않았다.

'Untouchable' 책 표지에 있던 삽화의 커다란 종탑이

움직이고 있었다.

"컥…"
"설마- 아닐꺼야…."
"내가- 내가 졸려서 헛걸 본거야… 그래- 그런거야 하하…."


그걸 놀리기라도 하는 양 종소리는 정확히 책에서 나고 있었다.

무언가 날 주시하는듯한 섬뜩한 느낌.
그 책의 삽화는 확실히 움직이고 있었다.

어느 여자가 걸어서 책 표지에 얼굴을 비췄다.

그리고는 나에게 손짓했다.


"어서 와. 넌 이제 더는 피할 수 없어! 그게 네 운명이니…"


그 섬뜩한 목소리- 소름 돋았다.
마치 귀에 속삭이듯 들렸고 공포는 내 심장을 조여왔다.
책에 손을 대봤다. 뭔가 전기가 통하는 느낌, 난 손을 급히 땠다.


"이… 이거 뭐야?!"


두려움- 그것은 순식간에 날 정복했다.
하지만, 내 마음 반대편에서- 무언가 위험한 무언가가…

언젠가 한번은 소설 속 주인공처럼 모험을 떠나고 싶은 그 욕망이 눈을 뜨고 있었다.


다시는 손대면 안 된다는 걸 알면서도- 난 그 바보같이 충동을 못 이기고 다시금 책에 손을 대려 하고 있었다.


그 순간, 난 어딘가로 빨려들어가기 시작했다.
그 이외의 그 무엇도 난 알 수 없었다.










"당신도 언젠가는 내가 찾던 그것을 찾겠지요-.
그땐, 이 책을 잊지마세요."













※계속 진행하시려면 Start를 눌러주세요. :)
Novel :
아직 펼쳐지지 않았음

'생활 > 리버스(?)' 카테고리의 다른 글

Un·touch·a·ble(3)  (0) 2011.02.10
Untouchable(2)  (0) 2011.02.10
Un·touch·a·ble(1)  (0) 2011.02.10
nvidia  (0) 2011.02.05
test  (0) 2010.11.30

Un·touch·a·ble
Area :
12경 (추측), 어딘지 모를 끝없는 나락
Chance :
3
Situation :
※ 무려 맛보기 스테이지 :) => hint : 알파벳, 본문내부에 있는 방아쇠



"으- 악!"


난 그 책에 빨려들고서는 계속 떨어지고 있다.
그게 비록 절벽 밑으로 떨어지는 돌덩어리보다는 느릴지라도-


오직 내 머리 위로 달빛 비친 도서관 천장만이 보일 뿐….
그것마저도 내겐 허락되지 않은 것인지- 이내 도서관 천정마저도 안 보인다.
붙잡을 벽도, 이 나락의 끝도…. 보이는 불빛마저도 없었다.
나는 그냥 계속 떨어지고 있을 뿐이다.

난 어디로 가고 있는걸까?
이렇게 계- 속 떨어진다면…. 혹 지구 중심까지 가는 건 아닐까?
칠흑 같은 어둠 속…. 난 내가 떨어지고 있단 사실 하나 말고는 아무것도 알 수 없다.


"난… 바보야. 왜… 왜…."




내가 하고 있는 그것…
그것은 바로 후회- 한순간의 충동을 못 이긴 나를 원망한다.


"이럴 줄 알았다면-"


"책을 읽지 않았을 거라고요-?"


그 소녀… 책 표지에서 날 불렀던 그 소녀의 목소리다.
마치 귀에 속삭이는 걸 들은 듯 생생하게 들렸다.


"이봐, 여긴 어디고, 넌 누구고, 난 어디로 가고 있는 거지?"
"후훗- 궁금하신가 보군요. 알려드릴까요?"


비웃음이 섞인듯한 알 수 없는 소녀의 대답.
하지만, 난 그 소녀에게 화를 낼 수 없었다.

어쩌면 그 소녀가… 날 이곳에서 구해줄 수 있을지도 모른다는 기대에-


"그 그래- 좀 알려줘"
"훗- 그러지요-"


그리고는 그 소녀는 잠시 침묵했다.
순간, 난 왠지 홀로 버려진 것만 같은… 그런 쓸쓸하고도 우울한 기분이 날 휘감았다.


"먼저-"



"휴-"


나도 모르게 안도의 한숨을 내쉬었다.


"먼저 저에게 오세요-. 지금 당신은 거기 있으면 안 됩니다."
"여기 있으면 안된다는 건 나도 알아. 그런데 어떻게 빠져나가지?"
"당신은 어떻게 그곳에 빠졌고, 무엇을 통해서 제 목소리를 듣고 있나요?"
"…? 무슨 말이지??"
"당신을 이곳으로 불러들인 열쇠-"
"열쇠?"
"그래요. 오직 그 열쇠만이 당신을 그곳에서 저에게로, 나아가 당신이 있어야 할 원래 자리로 돌려보내 줄 수 있어요."
"열쇠-? 모- 모르겠어, 좀 쉽게 설명해줘-"


열쇠? 전혀 감이 오질 않았다.


"당신은- 무엇으로 종탑의 시계 소리를 듣고, 무엇으로 제 모습을 봤나요?"
"… 혹시‥ 내가 봤었던 그.. 그거?"
"예, 당신이 지금 생각하고 있는 그것. 그것만이 지금 당신을 구해 줄 수 있어요-"
"그런데… 그게 지금 어딨지? 난…."
"지금 당신 왼손에 쥐어져 있네요-"

난 확실히 소녀가 말한 '그것'을 쥐고 있었다.

이거였다니…


"그런데 이걸로 뭘 어떻게?"
"이곳에 들어올 때와 똑같이 하시면 됩니다."

"근데- '그것'이 이거 맞지?"
"예- 기다리고 있겠습니다."


난 '그것'을 열었고, 내 발밑으로 한줄기 빛이 비쳐오기 시작했음을 알 수 있었다.











"그래요. 오직 그 열쇠만이 당신을 그곳에서 저에게로, 나아가 당신이 있어야 할 원래 자리로 돌려보내 줄 수 있어요."








Novel :
아직 펼쳐지지 않음

'생활 > 리버스(?)' 카테고리의 다른 글

Untouchable(2)  (0) 2011.02.10
Un·touch·a·ble(0)  (0) 2011.02.10
nvidia  (0) 2011.02.05
test  (0) 2010.11.30
토런트 사진,,  (0) 2010.10.27
Haven and Hearth 시작! 생활 2011. 2. 9. 04:14

대학생 2명이 만든 게임이라는데,,

마인크래프트 비스무리한 컨셉의 자유도 만빵의 2D 인생게임....

아이디는 dcmichael이다.

이거슨 로그인창

처음엔 어떻해야 하는지 몰라서(심지어 캐릭 생성도,,) 헤맸었다.


이게 날 해메게한 캐릭생성중 기본 아이템지급,,

첨엔 파란 덩어리가 호수에 떠있고, 왼쪽NPC를 우클릭 하면 성별선택, 아래쪽 상자에 기본템, 오른쪽 NPC가 이름생성이다.

그 위쪽에 있는 (지금 저 위에 살짝 보이는) NPC는 친구끼리 하기용이다. 저 NPC한테 친구코드를 입력하면 그 옆에 길이 생기고 거기로 가면 친구내 집에서 시작, 아니면 사다리로 올라가 랜덤한 곳에 떨어진다(참고로 맵 크기는 위에서 아래로 12시간 가는 거리란다,,,ㅎㄷㄷ)

처음엔 열심히 나무패고, 토끼잡고(이걸 못해서 애먹었다), 도구 만들고 낚시하고, 집짓고, 밥해먹는 게임,,,

지금은 열심히 강에서 

낚시중이다,,,

경험치를 이용해서 여러 스킬이나, 스텟을 살 수가 있는데, 문제는 이게 오지게 많이 필요하다,,

게다가 처음 시작해서 간신히 모은 도구들을(배나, 말려놓은 가죽등,,)을 누가 가져가면,,, 슬플꺼다,,

이걸 막기 위해 사유지를 지정하는 스킬을 배울수 있는데,, 문제는 이게 경험치를 4000이나 먹는다,, 그 전에 필요 테크까지 합하면 어마어마 하거든~,,, ㅠㅠ 어찌됬던,, 오늘은 가죽 말리는것도 8시간이나 걸리고,, 경험치도 모자르니 낙시 노가다나 띄워놓고 자야겠다,,,(낚시노가다 == 오토마우스,,, 되겠지? ㅠㅠ)

'생활' 카테고리의 다른 글

동아리 폐부  (0) 2012.03.10
크롬 확장 scribefire를 써보자  (1) 2012.02.23
[TIP!]windows에서 linux의 하드 링크기능 사용하기  (0) 2010.02.07
더미 파일 만들기  (0) 2009.12.29
임시 파일서버 열어요!!  (0) 2009.03.26
nvidia 생활/리버스(?) 2011. 2. 5. 15:30

'생활 > 리버스(?)' 카테고리의 다른 글

Un·touch·a·ble(0)  (0) 2011.02.10
Un·touch·a·ble(1)  (0) 2011.02.10
test  (0) 2010.11.30
토런트 사진,,  (0) 2010.10.27
토런트 사진,,  (0) 2010.10.27
test 생활/리버스(?) 2010. 11. 30. 22:28
플레이어 http://cfs.tistory.com/custom/blog/45/454350/skin/images/51.swf
경로 지정flashvars="file=http://cfs.tistory.com/custom/blog/45/454350/skin/images/davichiu.xml&
스킨 skin=http://cfs.tistory.com/custom/blog/45/454350/skin/images/Skin2.swf

플레이어 http://cfs.tistory.com/custom/blog/45/454350/skin/images/51.swf<br/>
경로 지정flashvars="file=http://cfs.tistory.com/custom/blog/45/454350/skin/images/davichiu.xml&amp<br/>
스킨 skin=http://cfs.tistory.com/custom/blog/45/454350/skin/images/Skin2.swf<br/>
<br/>
<pre><EMBED id=single2 height=600 name=single2 type=application/x-shockwave-flash width=720 src=http://cfs.tistory.com/custom/blog/45/454350/skin/images/51.swf bgcolor="undefined" always="always" allowfullscreen="true" wmode="transparent" flashvars="file=http://cfs.tistory.com/custom/blog/45/454350/skin/images/davichiu.xml&amp;backcolor=000000&amp;frontcolor=999999&amp;lightcolor=999999&amp;screencolor=000000&amp;logo.hide=true&amp;skin=http://cfs.tistory.com/custom/blog/45/454350/skin/images/Skin2.swf&amp;volume=100&amp;plugins=flow-1&amp;flow.position=bottom&amp;flow.size=150&amp;controlbar=bottom&amp;icons=true&amp;repeat=always&amp;shuffle=false"><br />
</pre><br/><br/>
ㅁㄴㅇㄹ
<br/>
<EMBED height=600 width=720  src=http://cfs.tistory.com/custom/blog/45/454350/skin/images/51.swf flashvars="file=http://cfs.tistory.com/custom/blog/45/454350/skin/images/davichiu.xml&amp;skin=http://cfs.tistory.com/custom/blog/45/454350/skin/images/Skin2.swf&amp;plugins=flow-1&amp;flow.position=bottom&amp;flow.size=150&amp;controlbar=bottom&amp;icons=true&amp;repeat=always&amp;shuffle=false">





ㅁㄴㅇㄹ

'생활 > 리버스(?)' 카테고리의 다른 글

Un·touch·a·ble(1)  (0) 2011.02.10
nvidia  (0) 2011.02.05
토런트 사진,,  (0) 2010.10.27
토런트 사진,,  (0) 2010.10.27
asdf  (0) 2010.03.12

'생활 > 리버스(?)' 카테고리의 다른 글

nvidia  (0) 2011.02.05
test  (0) 2010.11.30
토런트 사진,,  (0) 2010.10.27
asdf  (0) 2010.03.12
음악 재생기  (0) 2010.03.03

'생활 > 리버스(?)' 카테고리의 다른 글

test  (0) 2010.11.30
토런트 사진,,  (0) 2010.10.27
asdf  (0) 2010.03.12
음악 재생기  (0) 2010.03.03
주절주절,,,  (1) 2009.11.18
Write the class “DoubleLinkedSparseMatrix”.
DoubleLinkedSparseMatrix 클래스를 만드세요.

The class has two kinds of chains: row chains and column chains.
이 클래스는 두종류의 체인을 갖고 있어요. 행과, 열.

Each row has a row chain that consists of elements at the same row.
각 열에는 같은 열에 있는 인자를 저장하는 열체인을 갖고있어요.

Similarly, each column has a column chain.
비슷하게, 각 행은 행체인을 갖고있어요.

Naturally, an element is linked in both a row chain and a column chain at the same time.
당연히 각 인자는 열체인과 행체인에 연결되어 있어요.
The class must provide following methods other than constructors.
이 클래스는 아래에 있는 것들을 갖고있어야 되요.

A) Int insert(int row, int col, Object element)
삽입.
B) Object remove(int row, int col)
제거
C) Void transpose()
행-열변환
D) Object get(int row, int col)

E) Iterator getRowIterator(int row)
열 Iterator.
F) Iterator getColumnIterator(in col)
행 Iterator.

You have to write both interator classes, “SparseMatrixRowIterator” and “SparseMatrixColumnIterator” based on your “DoubleLinkedSparseMatrix”.
그러니까 2개의 iterator클래스도 만들어야되죠.
SparseMatrixRowIteratorSparseMatrixColumnIterator

A row iterator iterates the elements in a row sequentially (from the one with the smallest column).
SparseMatrixRowIterator녀석은 행을 따라 움직여야 되고,
A column iterator iterates the elements in a column one by one.
SparseMatrixColumnIterator녀석은 열을 따라 움직여야 되요.

You must do your homework solely, not with any friends.
과제는 혼자하세요,, 친구랑 같이 하지 말고....

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Data Structure 6번째 HW(번역)  (0) 2010.04.15
Data Structure 6번째 HW  (0) 2010.04.15
Data Structure 5번째 HW(내맘대로 분석)  (0) 2010.04.10
Data Structure 5번째 HW(번역)  (0) 2010.04.10
Data Structure 5번째 HW  (0) 2010.04.10
 Week 6: Linear Lists - Simulated Pointer Representation
6주차 선형 목록 : 포인터 시뮬레이트 표현법.
Since we have midterm exams next week, I will give you an extremely easy assignment. I belive that this takes only a couple of hours.
다음주에 시험이니까 매우쉬운 과제를 줄께, 난 이 과제가 2시간 정도 걸릴거라고 생각해.

Section 7.7 introduces the concepts of the equivalent relationship and union set.
7.7장에서 동등관계와 공용체의 컨셉을 소개했다.

Just type in the example code to find the union set, and write a program that test the example code.
책에서 공용체를 찾는 코드를 그대로 쳐라, 그리고 그것을 테스트하는 예제 코드를 만들어 보아라.

What you will turn in is a PDF file that contains the test code, screen shots of the test program in execution, and brief explanation of your understanding on the concepts of the equivalent relationship and union set.
니가 할일은 테스트 코드와, 실행 스크린샷, 그리고 니가 이 컨셉을 이해했다는것을 증명하는 설명을 PDF에 담아 제출하는것이다.

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Week 7: Array and Matrices  (0) 2010.05.03
Data Structure 6번째 HW  (0) 2010.04.15
Data Structure 5번째 HW(내맘대로 분석)  (0) 2010.04.10
Data Structure 5번째 HW(번역)  (0) 2010.04.10
Data Structure 5번째 HW  (0) 2010.04.10

Week 6: Linear Lists - Simulated Pointer Representation

Since we have midterm exams next week, I will give you an extremely easy assignment. I belive that this takes only a couple of hours.

Section 7.7 introduces the concepts of the equivalent relationship and union set. Just type in the example code to find the union set, and write a program that test the example code. What you will turn in is a PDF file that contains the test code, screen shots of the test program in execution, and brief explanation of your understanding on the concepts of the equivalent relationship and union set.

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Week 7: Array and Matrices  (0) 2010.05.03
Data Structure 6번째 HW(번역)  (0) 2010.04.15
Data Structure 5번째 HW(내맘대로 분석)  (0) 2010.04.10
Data Structure 5번째 HW(번역)  (0) 2010.04.10
Data Structure 5번째 HW  (0) 2010.04.10

Week 5: Linear Lists - Linked Representation

1. Write code for the class ChainWithSortMethods.

ChainWithSortMethods 클래스를 만들어라


This class is a subclass of Chain and it includes the number method insertionSort, which uses insertion sort to reorder the chain elements into nondecreasing order.
이 클래스는 Chain을 상속받는다. 그리고 인자의 크기를 오름차순 정렬하는 insertionSort 메소드를 갖고있다.

=========================================================

위 두가지의 조건에 맞추려면 Chain은 그냥 저자 홈페이지에서 갖고오고, 나머지는 그냥 쓰면 되겠다.


Do not create new nodes or delete old ones.

노드를 새로 생성하거나 삭제하지 마라.


=========================================================

헐,,, 이건 좀 문제다,,,,, 링크만 수정하는 방식으로 가야겠네,,,


a) What is the worst-case time complexity of your method? How much time does your method need if the elements are already in sorted order?

최악의 경우 에 시간복잡도는 얼마인가?

이미 정리되어 있는 경우에는 시간이 얼마나 걸리는가?


b) Test the correctness of your method by compiling and then executing the code. Use your own test data (any programs with any data are allowed).

측정의 정확성을 위해 컴파일링을 하고 실행해봐라.

너만의 테스트 데이터를 만들어라

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Data Structure 6번째 HW(번역)  (0) 2010.04.15
Data Structure 6번째 HW  (0) 2010.04.15
Data Structure 5번째 HW(번역)  (0) 2010.04.10
Data Structure 5번째 HW  (0) 2010.04.10
Data Structure 4번째 HW(번역)  (0) 2010.04.01

Week 5: Linear Lists - Linked Representation

1. Write code for the class ChainWithSortMethods.

ChainWithSortMethods 클래스를 만들어라


This class is a subclass of Chain and it includes the number method insertionSort, which uses insertion sort to reorder the chain elements into nondecreasing order.
이 클래스는 Chain을 상속받는다. 그리고 인자의 크기를 오름차순 정렬하는 insertionSort 메소드를 갖고있다.
Do not create new nodes or delete old ones.

노드를 새로 생성하거나 삭제하지 마라.


a) What is the worst-case time complexity of your method? How much time does your method need if the elements are already in sorted order?

최악의 경우 에 시간복잡도는 얼마인가?

이미 정리되어 있는 경우에는 시간이 얼마나 걸리는가?


b) Test the correctness of your method by compiling and then executing the code. Use your own test data (any programs with any data are allowed).

측정의 정확성을 위해 컴파일링을 하고 실행해봐라.

너만의 테스트 데이터를 만들어라

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Data Structure 6번째 HW  (0) 2010.04.15
Data Structure 5번째 HW(내맘대로 분석)  (0) 2010.04.10
Data Structure 5번째 HW  (0) 2010.04.10
Data Structure 4번째 HW(번역)  (0) 2010.04.01
Data Structure 4번째 HW  (0) 2010.04.01

Week 5: Linear Lists - Linked Representation

1. Write code for the class ChainWithSortMethods. This class is a subclass of Chain and it includes the number method insertionSort, which uses insertion sort to reorder the chain elements into nondecreasing order. Do not create new nodes or delete old ones.


a) What is the worst-case time complexity of your method? How much time does your method need if the elements are already in sorted order?


b) Test the correctness of your method by compiling and then executing the code. Use your own test data (any programs with any data are allowed).

1. Make an interface “StudentLinearList” as shown in Program 5.1.
프로그램 5.1 에 있는것과 같이 StucentLinearList 인터페이스를 만들어라.

Implement the “StudentArrayLinearList” class, which is an implementation of the interface “StudentLinearList”.
StudentLinearList를 인터페이스로 갖는, StucentArrayLinearList클래스를 구현하여라.

Modify the time measuring program, which was used in the last homework, by replacing the “Student” object array with the “StudentArrayList” class.
지난번 과제에서 만들어 놓은 시간측정프로그램을 Student배열을 사용하던것에서 StudentArrayList클래스를 사용하는것으로 수정해라.

2. Extend “StudentArrayLinearList” to include the method “removeRange”, which removes all elements in the specified index range.
StudentArrayLinearList를 특정 인덱스 범위를 제거하는 removeRange메소드를 갖도록 확장해라.

What is the complexity of your method?
이 메소드의 복잡도는 얼마인가?

3. Extend “StudentArrayLinearList” to include the method “concateList”, which concatenates a parameter “StudentArrayLinearList” to the list of the method-owner object.
StudentArrayLinearList를 StudentArrayLinearList를 인자로 하여, 원래 배열에 인자로 받은 배열을 이어 붙이는 concateList메소드를 갖도록 확장해라.

What is the complexity of your method? Test your code with a simple example code.

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Data Structure 5번째 HW(번역)  (0) 2010.04.10
Data Structure 5번째 HW  (0) 2010.04.10
Data Structure 4번째 HW  (0) 2010.04.01
Data Structure 3번째 HW(번역)  (0) 2010.03.27
Data Structure 3번째 HW  (0) 2010.03.27
1. Make an interface “StudentLinearList” as shown in Program 5.1. Implement the “StudentArrayLinearList” class, which is an implementation of the interface “StudentLinearList”. Modify the time measuring program, which was used in the last homework, by replacing the “Student” object array with the “StudentArrayList” class.

2. Extend “StudentArrayLinearList” to include the method “removeRange”, which removes all elements in the specified index range. What is the complexity of your method?

3. Extend “StudentArrayLinearList” to include the method “concateList”, which concatenates a parameter “StudentArrayLinearList” to the list of the method-owner object. What is the complexity of your method? Test your code with a simple example code.

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Data Structure 5번째 HW  (0) 2010.04.10
Data Structure 4번째 HW(번역)  (0) 2010.04.01
Data Structure 3번째 HW(번역)  (0) 2010.03.27
Data Structure 3번째 HW  (0) 2010.03.27
Data Structure 2번째 HW(내맘대로 분석 #2)  (0) 2010.03.20
1. Now we have four sorting algorithm implementations, which were originated from the 2nd week homework.
이제 우리는 2번째 과제의 4개의 정렬 알고리즘을 갖고있다.
This is the time for asymptotically analyze each program. Of course, you have to analyze them under best, worst and average cases.
이번엔 점근적인(asymptotically) 분석을 해보자. 물논, 최악, 최적, 평균적인 사건에 대해 분석해야 된다.

2. Since we have the actual implementations, we can measure the execution time of them.
실제로 구현을 해놓았기 때문에 우리는 각 알고리즘의 실행시간을 측정할수 있다.

As we learned in the class, insert profiling (time measuring) code into your programs, and measure the time to sort randomly generated data sets (Yes, you have to make random student object generating code, too!).
우리가 수업에서 배운 시간 측정용 코드를 너의 프로그램에 넣어라, 그리고 임의로 생성된 데이터셋을 정렬하는 시간을 측정하여라(우리는 랜덤한 학생 오브젝트를 만드는것도 수업시간에 해 보았다.)

The number of students to be sorted must vary from 10 to 1,000,000 by log-scale increment (10, 100, 1,000, 10,000, … on and on).
학생의 숫자는 10에서 1,000,000 까지 큼직큼직하게 변해야 한다(10, 100, 1,000, 10,000, 이런식으로,,)

Draw graphs illustrating the tendency of the execution time changes depending on the changes of the data set size.
데이터 셋의 사이즈에 따라 실행 시간이 변하는 추세를 나타내는 그래프를 그려라.

The source codes, analysis results and graphs have to be prepared in a PDF file.
소스코드와, 분석결과, 그리고 그래프는 반드시 PDF파일로 보내세요.
1. Now we have four sorting algorithm implementations, which were originated from the 2nd week homework. This is the time for asymptotically analyze each program. Of course, you have to analyze them under best, worst and average cases.

2. Since we have the actual implementations, we can measure the execution time of them. As we learned in the class, insert profiling (time measuring) code into your programs, and measure the time to sort randomly generated data sets (Yes, you have to make random student object generating code, too!). The number of students to be sorted must vary from 10 to 1,000,000 by log-scale increment (10, 100, 1,000, 10,000, … on and on). Draw graphs illustrating the tendency of the execution time changes depending on the changes of the data set size.

The source codes, analysis results and graphs have to be prepared in a PDF file.
===================================================================================================
RankSort 분석
===================================================================================================





'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Data Structure 3번째 HW(번역)  (0) 2010.03.27
Data Structure 3번째 HW  (0) 2010.03.27
Data Structure 2번째 HW(내맘대로 분석)  (0) 2010.03.18
Data Structure 2번째 HW(번역)  (0) 2010.03.18
Data Structure 2번째 HW  (0) 2010.03.18
===================================================================================================
문제 분석
===================================================================================================

음,, 일단 랭크소트가 무엇인지를 파악해야겠군,,,
최형이라면 알지도 모르지만, 혼자 해보는것도 재미있을것 같다,,
문제는 시간.

시간 복잡도의 경우도 “counting the comparison operations(비교 연산자 갯수 세기)”는 쉬운데 “counting the steps with the s/e and frequency table(스텝을 세어서 빈도분석)”법은,,,,, 서의성 교수님 시간이었지만, 전날 무리하는 바람에 못들었다..

공부할게 많네,,,

공간 사용에 대해서는 보통 정렬의 경우에 공간은 거의 차지하지 않지, 임시공간 1개 정도? (merge의 경우를 제외하면,, 저번에 보니까 merge도 새로 안만들고 어떻게 하는 모양이던데,, 나는 같은 크기의 배열을 2개 만들고 옮겨 다녔으니,,,,)

 뭐,,, 오늘부터 해봐야지..

'생활 > 데이터 스트럭쳐' 카테고리의 다른 글

Data Structure 3번째 HW(번역)  (0) 2010.03.27
Data Structure 3번째 HW  (0) 2010.03.27
Data Structure 2번째 HW(내맘대로 분석 #2)  (0) 2010.03.20
Data Structure 2번째 HW(번역)  (0) 2010.03.18
Data Structure 2번째 HW  (0) 2010.03.18
===================================================================================================
번역
===================================================================================================
1. Our textbook introduces another sorting algorithm called rank sort at page 80.
1. 우리의 교제에서는 또다른 정령 알고리즘인 rank정렬을 80페이지에서 소개하고 있다.
Make a rank sort program that sorts students by their name and print their scores along side the names in the sorted order.
Rank정렬을 이용하여 학생들을 그들의 이름으로 정렬하고, 그들의 점수를 정렬된 이름옆에 표시하는 프로그램을 작성하여라.
Student names and scores must be included in a Student object.
학생의 이름과 점수는 반드시 Student 오브젝트에 포함되도록 만들어져야 한다.
The data are input through keyboard and the number of students is flexible (use a sentinel).
입력받는 데이터는 키보드로 입력받도록 하고, 학생의 수는 자유롭게 입력 받을수 있도록 한다(sentinel은 보초라는 뜻인데,,,,).
Analyze the best case, worst case and average case space and time complexity of the program you made.
당신이 만든 프로그램에서 시,공간 복잡도를 최적, 최악, 평균적인 경우을 놓고 분석하여라.
For time complexity, use both “counting the comparison operations” and “counting the steps with the s/e and frequency table” approaches.
시간 복잡도의 경우 “counting the comparison operations(비교 연산자 갯수 세기)”와 “counting the steps with the s/e and frequency table(스텝을 세어서 빈도분석)”법을 모두 사용하여라.

2. Modify the program for problem 1 by replacing the sorting algorithm with bubble sort, insert sort and selection sort.
2. 1에서 만들었던 프로그램을 Bubble정렬과 Insert정렬, Selection정렬로 고쳐보아라.
Also, you have to analyze the best, worst and average case space and time complexity of each version.
또한 최적, 최악, 평균적인 경우의 시, 공간 복잡도를 각각 분석하여라.

* The source codes, analysis results and screen shots of your programs in working have to be prepared in a PDF file.
* 소스코드와 분석결과, 그리고 프로그램 작동의 스샷은 PDF파일로 작성하여라.

1. Our textbook introduces another sorting algorithm called rank sort at page 80. Make a rank sort program that sorts students by their name and print their scores along side the names in the sorted order. Student names and scores must be included in a Student object. The data are input through keyboard and the number of students is flexible (use a sentinel). Analyze the best case, worst case and average case space and time complexity of the program you made. For time complexity, use both “counting the comparison operations” and “counting the steps with the s/e and frequency table” approaches.

2. Modify the program for problem 1 by replacing the sorting algorithm with bubble sort, insert sort and selection sort. Also, you have to analyze the best, worst and average case space and time complexity of each version.

* The source codes, analysis results and screen shots of your programs in working have to be prepared in a PDF file.

asdf 생활/리버스(?) 2010. 3. 12. 21:04

'생활 > 리버스(?)' 카테고리의 다른 글

test  (0) 2010.11.30
토런트 사진,,  (0) 2010.10.27
토런트 사진,,  (0) 2010.10.27
음악 재생기  (0) 2010.03.03
주절주절,,,  (1) 2009.11.18

'생활 > 리버스(?)' 카테고리의 다른 글

test  (0) 2010.11.30
토런트 사진,,  (0) 2010.10.27
토런트 사진,,  (0) 2010.10.27
asdf  (0) 2010.03.12
주절주절,,,  (1) 2009.11.18

리눅스의 심볼릭 링크는 윈도우의 바로가기와는 다르게 파일명만 다르고 같은 위치의 데이터를 참조한다.


윈도우에서도 심볼릭 링크와 하드링크라는 기능이 있다.


심볼릭은 파일에 대한 링크이고

하드링크는 실제로 그곳의 데이터에 대한 링크이다.


예를들면 심볼릭의 경우 원본을 지우면 링크가 깨지지만 하드링크의 경우 원본이 삭제되어도,

그곳의 데이터를 참조하는 파일이 있기때문에 하드디스크에서 데이터가 지워지지 않는다. 그래서
하드링크된 파일을 불러올수 있다.


개념을 알았다면 실제로 작성해 보자.


WinXP


x:\TEST>fsutil hardlink create 링크이름 원본이름 (하드링크)


WinVista이상


x:\TEST>mklink /h 링크이름 원본이름 (하드링크)

x:\TEST>mklink /d 링크이름 원본이름 (디렉터리링크)

x:\TEST>mklink 링크이름 원본이름 (심볼릭링크)

'생활' 카테고리의 다른 글

동아리 폐부  (0) 2012.03.10
크롬 확장 scribefire를 써보자  (1) 2012.02.23
Haven and Hearth 시작!  (1) 2011.02.09
더미 파일 만들기  (0) 2009.12.29
임시 파일서버 열어요!!  (0) 2009.03.26

아래 내용들은 윤성우 저자의 "지피지기 TCP/IP소켓 프로그래밍" 책의 내용을 바탕으로 본인이 읽고 새로 정리한 내용들이니,
다소의 오류가 있을 수도 있습니다.


서버 소켓 기본 코드
[code cpp]
/*
* helloWorld_server.c
* Written by SW.YOON
* Edited by Michael YOON
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>

#define default_PT 89123

void error_handling(char *message);

int main(int argc, char ** argv)
{
    int serv_sock;
    int clnt_sock;
    struct sockaddr_in serv_addr;
    struct sockaddr_in clnt_addr;
    int clnt_addr_size;
    char message[]="Hello World!\n";

    if(argc>1)
    {
        printf("Usage : %s <port>\n" ,argv[0]);    //사용법
        printf("Default port is 89123\n");
    }
////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////기본 소켓 생성 설정/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
    serv_sock=socket(PF_INET, SOCK_STREAM,0);    //서버소켓 만들기
                                //PF_INET은

    if(serv_sock == -1)
        error_handling("socket() error");        //서버소켓 만들기 실패 시

    memset(&serv_addr,0,sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if(argc==2)
    {
        serv_addr.sin_port = htons( atoi(argv[1]) );
    }
    else
    {
        serv_addr.sin_port = htons( atoi(default_PT) );
    }

    if( bind( serv_sock, (struct sockaddr* )&serv_addr, sizeof(serv_addr) ) == -1 )
    {
        error_handling("bind() error");
    }

    if( listen(serv_sock,5) == -1 )
    {
        error_handling("listen() error");
    }
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
    clnt_addr_size = sizeof(clnt_addr);
    clnt_sock=accept( serv_sock, (struct sockaddr*) &clnt_addr, &clnt_addr_size );
                                /* 연결 수락 */
    if(clnt_sock == -1)
        error_handling("accept() error");    write( clnt_sock, message, sizeof(message) );        /* 데이터 전송 */
    close(clnt_sock);                        /* 연결 종료 */
    return 0;
}

void error_handling(char *message)
{
    fputs( message, stderr );
    fputc( '\n', stderr);
    exit(1);
}

[/code]

기본 연결포트는 89123포트로 설정해 놓았습니다.

우선 하나하나 코드를 살펴보면




22줄. 클라이언트 소켓을 선언합니다.




24줄. 클라이언트의 IPv4주소체계를 기록하는 구조체이다.


25줄. 클라이언트 IPv4 주소 구조체의 크기를 기록하는 구조체이다.


26줄. 간단히 Hello World! 문자열을 출력하기 위한 문자배열이다.


28~32줄. 인자의 개수를 파악하여 사용법을 알려주기도 한다.

















'생활 > 소켓프로그래밍' 카테고리의 다른 글

인터넷 쿼리함수(windows용)  (0) 2012.03.10
소켓 프로그래밍의 기초(1)  (0) 2010.02.05