컴퓨터가 POWER-ON 되어 처음 실행하는 주소는 0 번지

박한범 2011.05.04 16:06 조회 수 : 10436


안녕하세요. 오랜만에 쓰는 글이 뻘글입니다.


갑자기 지난 기억이 떠올라서 그냥 한번 그적거려 보겠습니다.


꽤 묘한 작업을 진행하던 중에 우연히 알게 됐습니다. 

묘한 작업이라는 것은 BIOS를 두번 실행하는 것 이죠. ㅎㅎ;


저는 그 전부터 0번지라는 것은 알고 있었습니다. 우스운건 그 이유는 까먹고 있었다는 것이죠.

이래서 사람은 기록을 해야 됩니다. 


바이오스를 두번째 실행하면 시스템이 리셋되어 버리는데 그와 관련된 바이오스 코드의 의사표현은 대충 이렇습니다.


1. 키보드상태를읽는다.

2. 상태비트와 0x4 비교

3. 2번에서 0x4 와의 비교값에 따라 PCI BUS를 ACPI 로 설정, 커맨드를 날린다.


이 커맨드는 ACPI 의 스펙에서는 SYS_RST#으로 정의하고 있습니다.

흥미로운 얘기로 보안 프로그램에서는 닥리셋 = 닥치고 리셋용 루틴이 있습니다.

디버깅 시도등이 감지될때 강도높은 프로그램은 시스템을 통채로 리셋해버리기도 합니다.

이 방법도 그를 위해서 사용되기도 하나 보더군요. 


키보드 상태비트가 0x4라는 뜻은 키보드 상태 flag중에 sys flag가 세팅되어야 하는 경우를 의미합니다.

  • SYS (System flag) - Post reads this to determine if power-on reset, or software reset
  • 0: Power-up value - System is in power-on reset. 
    1: BAT code received - System has already beed initialized.
이로 미뤄보건데 시스템이 bios를 실행하는 경우는 두 가지로 나뉜다는걸 알 수 있었습니다.
Power-on Reset과 BAT code received 라고 불리는 software Reset입니다.

그럼 여기서 의문이 하나 생깁니다.

왜 POWER-ON RESET과 SOFTWARE RESET을 구분해야 하는 걸까? 
제가 생각하기에는 이렇습니다.

POWER-ON RESET 시에는 CPU나 메모리는 백지와 같습니다.
하지만 SOFTWARE RESET 시에는 어떨까요? 이미 이곳저곳에 이런저런 내용이 있을겁니다.
그러면 어떻게 해야 할까요? CPU 와 메모리를 모두 초기화해줘야 합니다.
가장 간단한 방법으로 잠시 전력 공급을 끊어서 방전시키는게 아닐까? 라는 것 입니다.

그럼 0 번지는 무슨 얘기냐,
이것은 위의 과정을 생각해보니, power-on이 될 때도 Reset이 된다는 것에서 출발합니다.

처음 컴퓨터에 전원이 들어가면 보통은 bios가 실행되기 때문에 bios 코드가 실행될 것이라고 생각합니다.
하지만 cpu라는 것은 클럭마다 ip에서 instruction을 읽어 실행하는 단순한 놈입니다.
전원이 인가되고 bios를 바로 실행할 수 있는 녀석이 아니라는 뜻 입니다.

그렇기 때문에 POWER-ON이 되었을때, cpu는 모든 값이 0인 백지상태일 것이며, 
계속해서 0번지를 실행하려고 할 것입니다. 하지만 ram설정이 끝나기 전에 0번지는 존재하지 않죠.

저는 간단히 이와같은 형식일 것이라고 결론을 내렸습니다.

bios가 실행되는 것은, 전원이 인가되고 나서 cpu가 받는 명령에 RESET 이 있으며, 
이럴 경우에 0xFFFFFFF0 번지의 RESET VECTOR로 뛰게 되고 
이 주소는 BIOS에 맵핑되어 있으므로 BIOS의 RESET VECTOR의 코드를 수행하게 되는 것 입니다.


제 생각은 여기서 끝이고,
틀린 내용이나 자세한 내용은 아랫 분이 계속 해주실 겁니다. ^^


번호 제목 글쓴이 날짜 조회 수
공지 [공지] IAMROOT 19차 커널 스터디 오리엔테이션 (zoom 접속 안내) [5] 문c(문영일) 2022.05.07 879
공지 [공지] IAMROOT 18차 커널 스터디 오리엔테이션 안내 [마감] [2] 문c(문영일) 2021.05.17 1249
공지 커널 스터디를 위한 문c 가이드입니다. [10] 문c(문영일) 2021.04.27 6471
397 워크홀릭인지 미친건지... [4] 정현철 2011.08.02 6301
396 [반공지] 소스 분석하실때 encoding을 utf-8로 통일하십시요. 백창우 2011.08.02 7349
395 비밀 게시판에 제가 하고 싶은 이야기를 적어 놓았습니다. [5] 백창우 2011.07.30 6510
394 최장 몇일까지 밤세워 보셨는지요? [11] 백창우 2011.07.29 8111
393 다들 무사하신가요? [4] Jason 2011.07.27 6101
392 괜찮은 교육 과정(2011 Heterogeneous Computing 여름학교 ) 소개합니다. [4] myskan 2011.07.22 11248
391 세미나를 슬슬 준비해볼까 합니다. ^^ [14] 백창우 2011.07.10 7492
390 다들 모기를 어떻게 대처하십니까? [9] 정현철 2011.07.09 6831
389 [구인] 한국과학기술연구원에서 SW 연구개발 인재를 모집합니다. [1] 백창우 2011.07.05 11238
388 안녕하세요!! [9] 안종현 2011.07.04 7146
387 kernel summit 2011 [17] 김남형 2011.06.28 11233
386 [설문조사] 비밀 게시판을 각 그룹별로 따로 만들어 드릴까요? [4] 백창우 2011.06.28 8410
385 [알림] 비밀 게시판 접근 권한을 변경해드렸습니다. [1] 백창우 2011.06.24 8039
384 애플이 정전방식의 터치스크린에 대한 특허를 땄다는데....ㅡ,.ㅡ [2] 김영일 2011.06.24 8705
383 안녕하세요, 인사드립니다. [6] 이경문 2011.06.07 9506
382 도대체 스펙은 하나같이 왜 이렇게 긴 겁니까? 김성현2 2011.05.24 8832
» 컴퓨터가 POWER-ON 되어 처음 실행하는 주소는 0 번지 [2] 박한범 2011.05.04 10436
380 [fastboot] 리눅스를 0.3초안에 부팅시키네요 헐헐 김윤기 2011.04.29 17686
379 제 버릇 남 못주네요..ㅡ,.ㅡ... [4] 김영일 2011.04.29 8737
378 드뎌 안드로이드 눈 띄웠네요...ㅡ,.ㅡ;;; [2] 김영일 2011.04.26 14469
XE Login