2013-09-01 5 views
1

은 내가 example에서, 그것은해야을 플로피 부팅 이미지를 만들어 원하는 것을하지 않습니다 그것은 bochs와 함께, 그것을 죽일 때까지 100 % CPU를 소모합니다.2 바이트 운영 체제 내가

 
$ hd floppy.img 
00000000 fa f4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 
* 
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 
* 
00168000 

분해 된 이미지 :

여기 플로피 이미지

 
$ objdump -b binary -D floppy.img -m i386 

floppy.img:  file format binary 


Disassembly of section .data: 

00000000 : 
     0: fa      cli  
     1: f4      hlt  
    ... 
    1fe: 55      push %ebp 
    1ff: aa      stos %al,%es:(%edi) 

Bochs output (페이스트 빈).

bochsrc.txt :

 
romimage: file=/usr/share/bochs/BIOS-bochs-latest, address=0xe0000 
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest 
floppya: 1_44=floppy.img, status=inserted 
boot: a 
log: OSDev.log 
mouse: enabled=0 
megs: 32 
display_library: sdl 

내가 실행 Bochs와이 방법은 : 나는 그것을 죽일 때까지

그러나, 나는 Bochs와 함께 시작하면, 그것은 100 %의 CPU를 소비한다.

$ bochs -f bochsrc.txt 

Bochs와 버전 : 2.4.6-4, 우분투 12.04는 i686에서 실행.

내가 뭘 잘못하고 있니?

+0

는 재부팅 후 무엇을 할 것인가? 다시 부팅 하시겠습니까? –

+3

'hlt'가 재부팅되지 않습니다. 그것은 그것이 무엇을위한 것이 아닙니다. 인터럽트가 해제 될 때까지 인터럽트가 도착할 때까지 프로세서를 일시 중지합니다 .... –

+0

@ ChrisJester-Young 그러면 에뮬레이터가 100 % CPU를 소비하는 이유는 무엇입니까? –

답변

2

hlt 재부팅되지 않습니다. 그건 그게 아니야. 인터럽트가 도착할 때까지 프로세서를 일시 중지하고 인터럽트를 비활성화 했으므로 아무 것도하지 않고 그냥 앉아있을뿐입니다.

에뮬레이터가 100 % CPU를 소비하는 이유는 아마도 에뮬레이터가 구현 된 방식 때문일 수 있습니다. Linux (일부 버전)에서는 hlt이 다음 타임 슬라이스까지 프로세서를 유휴 상태로 유지하는 데 사용되므로 물론 프로세서를 사용 중으로 대기시키지 않습니다. :-)

1

CLI 때문에, 코드를 다음은 여전히 ​​더 NMI (마스크 가능하지 인터럽트)를 사용하지 않습니다 : Bochs와 100 %의 CPU 부하를주는 이유

.loop: 
    cli 
    hlt 
    jmp .loop 

그것은 분명하지 않다. 이 하중을 어떻게 확인하고 있습니까? 실제 CPU로드 또는 Bochs는 자체 CPU로드 표시기가 있습니까?

QEMU와 같은 다른 가상 머신을 사용해 보시기 바랍니다.

따라서 위 코드는 부팅 후 잠자기 상태가됩니다. 의도가 컴퓨터를 다시 부팅하는 경우, 다음 코드는 웜 리 스타트를 들어 콜드 재시작

jmp $ffff:$0000 

을 수행해야합니다

mov [$472], 1234h 
    jmp $ffff:$0000 
+0

이 코드는 또한 OP가하려고하는 것을 수행하지 않습니다. –

+0

답변이 편집되었으며 지금도 마찬가지입니다. – johnfound