U E D R , A S I H C RSS

VM Ware/OS Implementation Test

2. ์ž‘์„ฑํ•œ ์ด์œ 

OS๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์— ๋ฌด์ž‘์ • ๋›ฐ์–ด ๋“ค์—ˆ๋Š”๋ฐ ๋Œ€๋ถ€๋ถ„ ํ™˜๊ฒฝ์€ ๋ฆฌ๋ˆ…์Šค์ƒ์ด
gcc์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” windows ํ™˜๊ฒฝํ•˜์˜ vc ๊ฐœ๋ฐœ์„ ์ฃผ๋กœ ํ•ด์™”์œผ๋ฏ€๋กœ ๋ฌด์ฒ™
๋ถˆํŽธ(?)ํ–ˆ์Šต๋‹ˆ๋‹ค. Djgpp ๋ผ๋Š” dos์šฉ gcc ํฌํŒ… ๋ฒ„์ „๊ณผ ์œˆ๋„์šฐ์šฉ cygwin ํŒจํ‚ค์ง€๋ฅผ
์‚ฌ์šฉํ•˜๋ฉด ์—ญ์‹œ ๋™์ผํ•˜๊ฒŒ gcc๋ฅผ ์œˆ๋„์šฐ์—์„œ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๊ทธ๋ž˜๋„ ์ €๋Š” vc์˜
์—๋””ํŒ… ํ™˜๊ฒฝ์ด ๋ง˜์— ๋“ค์–ด์„œ ๋””๋ฒ„๊น…๊นŒ์ง€๋Š” ํž˜๋“ค๊ฒ ์ง€๋งŒ (์–ด์ฐจํ”ผ ์ปค๋„ ๋””๋ฒ„๊น…ํ•˜๋ ค๋ฉด
์Šค์Šค๋กœ ์ž์‹ ์˜ ์ปค๋„ ๋””๋ฒ„๊ฑฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ) ์—๋””ํŒ…๊ณผ ์ปดํŒŒ์ผ
๊ทธ๋ฆฌ๊ณ  ๋ง์ปค๋ฅผ vc6๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์—ˆ๊ณ  ๊ทธ๋ž˜์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋ ค
ํ•ฉ๋‹ˆ๋‹ค.

3. ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ์‚ฌ์ดํŠธ๋“ค

์–ด๋ ค์šด ์˜๋ฌธ OS๊ฐœ๋ฐœ๋ฐฉ๋ฒ•์„ ํ•œ๊ธ€ํ™” ํ•ด์ฃผ๋Š” ๊ณ ๋งˆ์šด ์‚ฌ์ดํŠธ
Chobits os์˜ ์†Œ์Šค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌด์ฒ™ ์ข‹์€ Protected mode์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์†Œ์Šค๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์‚ฌ์ดํŠธ
http://www.nondot.org/sabre/os/articles
-
OS์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์ž๋ฃŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
http://www.osdever.net/
-
Bona Fide OS ๊ฐœ๋ฐœ ํŠœํ† ๋ฆฌ์–ผ ์‚ฌ์ดํŠธ
http://mega-tokyo.com/osfaq2/
-
OS FAQ
http://www.osdev.org/
-
์†Œ์Šค๊ฐ€ ๊ณต๊ฐœ๋œ ์—ฌ๋Ÿฌ os๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
http://www.bellona2.com
-
ํ˜ผ์ž์„œ GUI OS๋ฅผ ๋งŒ๋“œ์‹œ๊ณ  ์ฑ…๋„ ์ถœํŒํ•˜์‹  ๋ถ„์˜ ์‚ฌ์ดํŠธ
http://ksyspro.org
-
ํ•œ๊ตญ ์ž„๋ฒ ๋””๋“œ ๊ฐœ๋ฐœ์ž ๋ชจ์ž„

4. Protected i386 OS๋ฅผ ์œ„ํ•œ 잛์€ ์„ค๋ช…

Intel์€ ๋‹ค๋ฅธ cpu ๋ฒค๋”๋ณด๋‹ค ์—ญ์‚ฌ๊ฐ€ ์˜ค๋ž˜๋˜์–ด์„œ 4bit microprocessor์ธ 4004์—์„œ
์ถœ๋ฐœํ•ด์„œ 8bit cpu 8008, 8080, 16๋น„ํŠธ 8086, 80186, 80286, 32๋น„ํŠธ 80386, 80486,
80586 (๋˜๋Š” P5 ๊ทธ๋Ÿฌ๋‚˜ ์ˆซ์ž๋Š” ์ €์ž‘๊ถŒ ๋ณดํ˜ธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค๊ธธ๋ž˜ ์ดํ›„์— Pentium์œผ๋กœ
๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค ). ์ด๋ ‡๊ฒŒ ๊ธด ์—ญ์‚ฌ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณดํŽธ์ ์ธ cpu 8080 ๋˜๋Š” 8086 ํ†ตํ‹€์–ด
intel x86 cpu์—์„œ ๋Œ๋˜ ํ”„๋กœ๊ทธ๋žจ๋„ 586์—์„œ๋„ ์ˆ˜ํ–‰๋˜๋„๋ก ํ•˜์œ„ํ˜ธํ™˜์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ํ•˜์œ„ํ˜ธํ™˜ ๋•Œ๋ฌธ์— ์•„๋ฌด๋ฆฌ ์ตœ์‹  ์ปดํ“จํ„ฐ๋„ ์ฒ˜์Œ ๋ถ€ํŒ…์‹œ์—๋Š” ๋น ๋ฅธ x86 ์ฒ˜๋Ÿผ
์ˆ˜ํ–‰๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€ํŠธ์„นํ„ฐ์—์„œ ์ด ๋น ๋ฅธ x86์—์„œ ์ตœ์‹ ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š”
i386+ ํ™˜๊ฒฝ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์ ์–ด๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ORG 0x7C00 - PC๊ฐ€ ๋ฆฌ์…‹๋˜๋ฉด ๋ถ€ํŒ…๋  ๋””๋ฐ”์ด์Šค์˜ ์ฒซ๋ฒˆ์งธ ์„นํ„ฐ(512๋ฐ”์ดํŠธ)๋ฅผ
์ฝ์–ด ๋ฉ”๋ชจ๋ฆฌ 0x7C00์— ์˜ฌ๋ ค ๋†“์€ ํ›„ ์ด ์ฝ”๋“œ๋กœ ์ ํ”„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ€ํŠธ์„นํ„ฐ
์ฝ”๋“œ๋Š” ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ์ง€์ •ํ•ด์•ผ ํ• ๊ฒƒ์ž…๋‹ˆ๋‹ค.

A20 enable - ์˜ˆ์ „์—๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌํฌ๊ธฐ๊ฐ€ ํฌ์ง€ ์•Š์•„ 1M ์ดํ•˜๋งŒ ์ ‘๊ทผํ•˜๋„๋ก
์„ค๊ณ„๋˜์—ˆ๋Š”๋ฐ ์ด์   ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 1M์ด์ƒ ๋˜๋Š” ๊ฒƒ์ด ๋งŽ์•„ 1M ์ด์ƒ์„ ์‹ค์ œ ์ ‘๊ทผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ
ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Protected mode - ์ฒ˜์Œ ๋ถ€ํŒ…ํ• ๋• x86 Real Mode๋ผ๋Š” ์„ธ๊ทธ๋จผํŠธ:์˜คํ”„์…‹
์ง€์ • ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋˜์ง€๋งŒ 80286์ด์ƒ์—์„œ๋Š” ๋ณดํ˜ธ๋ชจ๋“œ๊ฐ€ ์ง€์›๋˜์—ˆ๊ณ  (์ตœ๋Œ€16M๊ฐ€๋Šฅ)
80386์—์„œ๋Š” 4G๊นŒ์ง€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ปค๋„๋กœ๋“œ - ๋ถ€ํŠธ์„นํ„ฐ ์ฝ”๋“œ๋Š” C๋กœ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ปค๋„์„ ์—ฌ๋Ÿฌ ์„นํ„ฐ์—์„œ
์ฝ์–ด์„œ ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ๋ฒˆ์ง€์— ๋กœ๋“œํ•œ ํ›„ ๊ทธ ์‹œ์ž‘ ํ•จ์ˆ˜ (์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ ํ•จ์ˆ˜)๋กœ ์ ํ”„ํ•˜๊ฒŒ
๋ฉ๋‹ˆ๋‹ค.

5. ์ค€๋น„๋ฌผ


VC6,
- ์ปค๋„์˜ ์ปดํŒŒ์ผ ๋ฐ ๋งํ‚น์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
- ์šฐ๋ฆฌ๋Š” ๋””์Šค์ผ“๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ปดํŒŒ์ผํ•ด์„œ ์ด๋ฏธ์ง€๋กœ ๋œฌ ํ›„ VMWare๋กœ
๋กœ๋“œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ( no ํ”Œ๋กœํ”ผ ๋ถ€ํŒ…๋””์Šค์ผ“, no ๋ฆฌ๋ถ“, no test machine )

Nasm
- Netwide Asm์œผ๋กœ at&t ๊ณ„์—ด ๋ฐ intel ๊ณ„์—ด ๋‘˜๋‹ค ์ง€์›ํ•˜๊ณ  target format๋„
๋งŽ์ด ์ง€์›ํ•˜๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์„ค์น˜๊ณผ์ •์—†์ด ๊ทธ๋ƒฅ nasm.exe ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

6. ์†Œ์Šค ํŒŒ์ผ๋“ค

bootsect.asm
- ๊ฐ„๋‹จํ•œ ๋ณดํ˜ธ๋ชจ๋“œ(์„ธ๊ทธ๋จผํ…Œ์ด์…˜๋ฐฉ์‹) ์ง„์ž… ๋ฐ ์ปค๋„ ๋กœ๋“œ ๋ถ€ํŠธ๋กœ๋”

main.c
- VC๋กœ ์ปดํŒŒ์ผ๋  ์ž‘์€ ์ปค๋„

Makeboot.exe
- ๋ถ€ํŠธ์„นํ„ฐ์™€ ์ปค๋„์ด๋ฏธ์ง€๋ฅผ mergeํ•˜๋Š” ๊ฐ„๋‹จํ•œ makeboot.c ์ปดํŒŒ์ผํ•ด์„œ ์ž์‹ ๋งŒ์˜
๋ถ€ํŠธ ์ด๋ฏธ์ง€ ๋œจ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๋ฉด๋œ๋‹ค.

7. ์†Œ์Šค

7.1. bootsect.asm

[BITS 16]       ; We need 16-bit intructions for Real 
mode

[ORG 0x7C00]    ; The BIOS loads the boot sector into memory location 
0x7C00

reset_drive:

        mov ah, 0               ; RESET-command

        int 13h                 ; Call interrupt 13h

        or ah, ah               ; Check for error code

        jnz reset_drive         ; Try again if ah != 0

        ;vc์—์„œ /base 10000 ๋กœ 헀๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋กœ๋“œ
        ; ํ•ด์•ผ ํ•œ๋‹ค. ES:BX ๋กœ 1000:0000h ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์ฒ˜๋Ÿผ ํ•œ๋‹ค.

        mov ax, 1000h           ; es:bx <-- 1000:0000h 

        mov es, ax
        mov bx, 0h          ; Destination address = 0000:1000

        mov ah, 02h             ; READ SECTOR-command

        ; ๋‘๋ฒˆ์งธ ์„นํ„ฐ๋ถ€ํ„ฐ 3์นธ์„นํ„ฐ๊ฐ€ ์ปค๋„์ด๋ฏธ์ง€ ์„นํ„ฐ๋‹ค.

        mov al, 3h             ; Number of sectors to read = 1

        mov ch, 0               ; Cylinder = 0

        ; ํ˜„์žฌ ์ฒซ๋ฒˆ์งธ์„นํ„ฐ512 ์ด๋ฉฐ ๋‘๋ฒˆ์งธ ์„นํ„ฐ๋ถ€ํ„ฐ 3๊ฐœ ์„นํ„ฐ๊ฐ€ ์ปค๋„์ด๋ฏธ์ง€๋‹ค

        mov cl, 02h             ; Sector = 2

        mov dh, 0               ; Head = 0

        int 13h                 ; Call interrupt 13h

        or ah, ah               ; Check for error code

        jnz reset_drive         ; Try again if ah != 0

A20Address:    ; Set A20 Address line here

    CLI

    CALL enableA20

    STI
    JMP Continue

enableA20:
        call enableA20o1

        jnz short enableA20done

        mov al,0d1h

        out 64h,al

        call enableA20o1

        jnz short enableA20done

        mov al,0dfh

        out 60h,al

enableA20o1:

        mov ecx,20000h

enableA20o1l:

        jmp short $+2

        in al,64h

        test al,2

        loopnz enableA20o1l

enableA20done:

        ret

Continue:   

        cli                 ; Disable interrupts, we want to be alone

        xor ax, ax

        mov ds, ax              ; Set DS-register to 0 - used by lgdt

        lgdt [gdt_desc]         ; Load the GDT descriptor

        mov eax, cr0            ; Copy the contents of CR0 into EAX

        or eax, 1               ; Set bit 0

        mov cr0, eax            ; Copy the contents of EAX into CR0

        jmp 08h:clear_pipe      ; Jump to code segment, offset clear_pipe

[BITS 32]                       ; We now need 32-bit instructions

clear_pipe:

        mov ax, 10h             ; Save data segment identifyer

        mov ds, ax              ; Move a valid data segment into the data segment register

        mov ss, ax              ; Move a valid data segment into the stack segment register

        mov esp, 090000h        ; Move the stack pointer to 090000h

        ; 10200h๋กœ ์ ํ”„ 200h๋Š” vc๋กœ ๋งํ‚นํ•˜๋ฉด ๊ธฐ๋ณธ PEํ—ค๋”(200h)๋ฅผ ๋ถ™์—ฌ์„œ ๋”ํ–ˆ๋‹ค.

        ; 10200h ์ฆ‰ 1000:0200h ๋กœ ์ ํ”„

        ;jmp 1000:0200h

        jmp 10200h

        

gdt:                    ; Address for the GDT

gdt_null:               ; Null Segment

        dd 0

        dd 0

gdt_code:               ; Code segment, read/execute, nonconforming

        dw 0FFFFh

        dw 0

        db 0

        db 10011010b

        db 11001111b

        db 0

gdt_data:              ; Data segment, read/write, expand down

        dw 0FFFFh

        dw 0

        db 0

        db 10010010b

        db 11001111b

        db 0

gdt_end:		; Used to calculate the size of the GDT

gdt_desc:               ; The GDT descriptor

        dw gdt_end - gdt - 1    ; Limit (size)

        dd gdt                  ; Address of the GDT

times 510-($-$$) db 0           ; Fill up the file with zeros

        dw 0AA55h                ; Boot sector identifyer
์•„๋ž˜์ฒ˜๋Ÿผ ์–ด์…ˆ๋ธ” ํ•˜์—ฌ ์˜ค๋ธŒ์  ๋ถ€ํŠธ๋กœ๋” ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์–ป์–ด๋‚ด์•ผ
ํ•ฉ๋‹ˆ๋‹ค.

nasm -f bin bootsect.asm -o bootsect.bin

๋‹ค์Œ์€ ๋ถ€ํŠธ๋กœ๋”์™€ ์ปค๋„ ์ด๋ฏธ์ง€๋ฅผ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ๋ถ€ํŒ…์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” makeboot.c
์ž…๋‹ˆ๋‹ค. ๋”ฐ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ„๋‹จํžˆ ์ปดํŒŒ์ผํ•ด์„œ makeboot.exe๋ฅผ ๋งŒ๋“ค๋„๋ก
ํ•ฉ๋‹ˆ๋‹ค.
#include 

int 
main(int argnr, char *args[])

{

  FILE 
*output, *input;

  int 
i, bytes_read, sectors_read, bytes_from_file;

  char 
buffer[512];

  if 
(argnr < 4) {

    printf("Invalid 
number of parameters.\n\n");

    printf("USAGE: 
%s [output] [input 1] [input 2] ... [input n]\n", args[0]);

    printf("Example: 
%s a.img bootsect.bin kernel.bin");

    exit(0);

  }

  output 
= fopen(args[1], "r");

// 
๋ฎ์–ด ์“ฐ๊ธฐ ํ• ๊บผ๋ƒ๊ณ  ๋ฌผ์–ด๋ณด๋Š” ์ฝ”๋“ ๋ฐ ๊ทธ๋ƒฅ ๋ฎ์–ด์“ฐ์ž. --

  if 
(output != NULL) {

    buffer[0] 
= 0;

  }

  fclose(output);

  output 
= fopen(args[1], "wb");

  for 
(i = 2; i < argnr; i++) {

    input 
= fopen(args[i], "rb");

    if 
(input == NULL) {

      printf("Missing 
input file %s. Aborting operation...", args[i]);

      fclose(output);

      exit(1);

    }

    bytes_read 
= 512;

    bytes_from_file 
= 0;

    sectors_read 
= 0;

    while(bytes_read 
== 512 && !feof(input)) {

      bytes_read 
= fread(buffer, 1, 512, input);

      if 
(bytes_read == 0)

        break;

      if 
(bytes_read != 512)

        memset(buffer+bytes_read, 
0, 512-bytes_read);

      sectors_read++;

      fwrite(buffer, 
1, 512, output);

      bytes_from_file 
+= bytes_read;

    }

    printf("%d 
sectors, %d bytes read from file %s...\n", sectors_read, bytes_from_file, 

args[i]);

    fclose(input);

  }

  fclose(output);

  return 
0;

}

๋‹ค์Œ์€ ์ปค๋„ ์†Œ์Šค์ž…๋‹ˆ๋‹ค.


// 
bro (bro@shinbiro.com)2004-02-17 - initial ( vc dev envronment setting )

// 
starting function

void 
start()

{   

    char* 
hello = "Hello OS!";

    unsigned 
char* vidmem = (unsigned char*)0xB8000;

    while( 
*hello != '\0' )        

    {

        *vidmem++ 
= *hello++;

        *vidmem++ 
= 7;        // ๋ฌธ์ž ๊ธฐ๋ณธ ์†์„ฑ

    }   

    

    // 
์ปค๋„์ด ๋๋‚˜๋ฉด ์•ˆ๋œ๋‹ค. ๊ณ„์† ๋Œ์•„์•ผํ•œ๋‹ค.   

    for(;;);

}

7.2. Visual C++ ์ปดํŒŒ์ผ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ธฐ


์œ„์˜ ์ปค๋„ ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ VC ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด๋ณด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € Win32 Console Application์œผ๋กœ ๊ฐ„๋‹จํžˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊น…์€ ๋ชปํ•˜๋‹ˆ ๊ทธ๋ƒฅ Release ๋ชจ๋“œ๋กœ ์„ ํƒํ•œ ํ›„ C++ ์„ธํŒ…์„ ์•„๋ž˜์ฒ˜๋Ÿผ ํ•ฉ๋‹ˆ๋‹ค.
/nologo /G4 /Zp1 /ML /W3 /vmg /vd0 /GX /Od /Gf /FAc /Fa"Release/" /Fo"Release/" /Fd"Release/" /FD /c
Linkํƒญ์˜ ์˜ต์…˜์€ ์•„๋ž˜์ฒ˜๋Ÿผ ํ•ฉ๋‹ˆ๋‹ค.
/nologo /base:"0x10000" /entry:"start" /subsystem:console /incremental:no /pdb:"Release/testos.pdb" /map:"Release/testos.map" /machine:I386 /nodefaultlib /out:"testos.bin" /DRIVER /align:512 /FIXED
๋˜ํ•œ ์ปดํŒŒ์ผ ์ž‘์—…์—์„œ ๋ฐ”๋กœ ๋ถ€ํŠธ์„นํ„ฐ๋„ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปดํŒŒ์ผ ๋๋‚˜๋ฉด ๋ฐ”๋กœ ๋ถ€ํŠธ ์ด๋ฏธ์ง€๋„
๋งŒ๋“ค๋„๋ก Pre-Link์™€ Post-Build๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ์„ ํ•ด๋ด…๋‹ˆ๋‹ค.
Deleting intermediate files and output files for project 'testos - Win32 Release'.
--------------------Configuration: testos - Win32 Release--------------------
Compiling...
main.c
Linking...
LINK 
: warning LNK4096: /BASE value "10000" is invalid for Windows 95; image may 
not run 1 sectors, 512 bytes read from file bootsect.bin...
3 sectors, 1536 bytes read from file testos.bin...
testos.bin 
- 0 error(s), 1 warning(s)

8. VMWare ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ธฐ

์ปดํŒŒ์ผ์„ ๋งˆ์น˜๊ณ  ๋‚˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํƒ์ƒ‰๊ธฐ ๋ชจ์Šต์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์…์„ฑ๋œ testos.img ๊ฐ€ ์šฐ๋ฆฌ์˜ ์ปค๋„ ์ด๋ฏธ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
zeropage:VMWareOSImplementationTest01.gif
Partcopy.exe ํˆด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€ํŒ… ๋””์Šค์ผ“์— ๋†“์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ VMWare์—์„œ ์ง์ ‘ ์ด๋ฅผ ๋””์Šค์ผ“ ์ด๋ฏธ์ง€๋กœ ๋กœ๋“œํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
zeropage:VMWareOSImplementationTest02.gif
๋ฌด์กฐ๊ฑด ๊ทธ๋ƒฅ ๊ธฐ๋ณธ์œผ๋กœ Next ํ•ฉ๋‹ˆ๋‹ค.
zeropage:VMWareOSImplementationTest03.gif
์ œ์ผ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๊ฐ€์ƒ testos ์˜ ํ”Œ๋กœํ”ผ ๋””์Šค์ผ“ ๋ถ€ํŒ… ์„ค์ •์ž…๋‹ˆ๋‹ค.
zeropage:VMWareOSImplementationTest04.gif
Use Floppy Image์— ํ•ด๋‹น img ํŒจ์Šค ๋งž์ถ”๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์‹คํ–‰ํ•ด๋ด…๋‹ˆ๋‹ค.
zeropage:VMWareOSImplementationTest05.gif
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:21
Processing time 0.0105 sec