KR100232314B1 - 컴퓨터 시스템 - Google Patents

컴퓨터 시스템 Download PDF

Info

Publication number
KR100232314B1
KR100232314B1 KR1019950028931A KR19950028931A KR100232314B1 KR 100232314 B1 KR100232314 B1 KR 100232314B1 KR 1019950028931 A KR1019950028931 A KR 1019950028931A KR 19950028931 A KR19950028931 A KR 19950028931A KR 100232314 B1 KR100232314 B1 KR 100232314B1
Authority
KR
South Korea
Prior art keywords
state
power
cpu
task
routine
Prior art date
Application number
KR1019950028931A
Other languages
English (en)
Other versions
KR960011695A (ko
Inventor
티.크럼프 드웨인
티.판코우스트 스티븐
이.노리스 두안
에이치. 벤슨 4 세 파울
Original Assignee
포만 제프리 엘
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=23166459&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=KR100232314(B1) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by 포만 제프리 엘, 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 포만 제프리 엘
Publication of KR960011695A publication Critical patent/KR960011695A/ko
Application granted granted Critical
Publication of KR100232314B1 publication Critical patent/KR100232314B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/30Means for acting in the event of power-supply failure or interruption, e.g. power-supply fluctuations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/325Power saving in peripheral device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Power Sources (AREA)

Abstract

본 발명의 컴퓨터 시스템은 정상 동작 상태, 대기 상태, 중지 상태 및 오프 상태의 4가지 전력 관리의 상태를 포함한다. 제어 장치는 다양한 상태간의 전이를 제어한다. 대기 상태는 운영 체제 및 컴퓨터 상에서 실행되는 응용 프로그램에 명백한 저전력 모드로 배치되는 비디오 제어기 및 하드 드라이브와 같은 장치를 특징으로 한다. 중지 상태는 인터럽트되는 코드를 실행하는 것을 특징으로 하고, 컴퓨터 시스템의 상태가 하드 드라이브에 보관된 후 시스템 전력이 제거될 수도 있는 방식으로 하드 드라이브상의 파일로 보관되는 컴퓨터 시스템의 상태를 실행하는 것을 특징으로 한다. 그후, 시스템 전력이 회복된 후, 컴퓨터 시스템의 상태는 하드 드라이브를 판독하고, 운영 체제 및 응용 프로그램이 좋지않은 영향을 끼치지 않는 방식으로 로딩함으로써 재개된다. 정상 동작 상태 및 오프 상태는 보다 종래의 컴퓨터 시스템의 전형적인 온/오프 상태에 대응한다. 단일 스위치가 다양한 상태간의 전이를 야기할 수 있다. LED와 같은 시각 피드백 장치가 컴퓨터 시스템의 상태를 표시하기 위해 사용되었다. 전력 관리 드라이버가 활동적이지 않는 동안, 제어 장치는 적절한 전력 관리 드라이버가 활동적일 때까지 상태 전이를 지연시킨다.

Description

컴퓨터 시스템
제1도는 본 발명이 구현될 수 있는 퍼스널 컴퓨터의 사시도.
제2도는 샤시, 커버, 전기기계 직접 액세스 저장 장치 및 플래이너 보드를 포함하는 제1도의 퍼스널 컴퓨터의 구성 요소와 이들 구성 요소간의 소정 관계를 예시하는 전개 사시도.
제3(a)도 및 제3(b)도는 제1도 및 제2도의 퍼스널 컴퓨터의 소정 구성 요소간의 관계를 나타내는 블럭도.
제4도는 정상, 대기, 중지 및 오프의 4가지 시스템 상태를 도시하는 본 발명의 시스템의 상태도.
제5도는 전원의 관련 부분을 도시하는 블럭도.
제6(a)도는 본 발명의 전력 관리 회로의 개략도.
제6(b)도는 내장 모뎀에 대해 전력 관리 회로의 접속을 도시하는 전기적인 개략도.
제6(c)도는 전력 관리 회로의 리세트 회로내의 각종 신호를 도시하는 파형도.
제6(d)도는 전원 고장 검출 및 정정 회로의 제2실시예를 도시하는 개략도.
제7도는 본 발명의 전력 관리 프로세서에 의해 유지되는 스위치 상태 중 하나의 상태를 도시하는 상태도.
제8도는 본 발명의 파워업 루틴을 개략적으로 도시하는 흐름도.
제9(a)도는 대략 매초마다 운영 체제내의 APM 장치 드라이버에 의해 호출되는 감독 루틴을 상세히 도시하는 흐름도.
제9(b)도는 APM 작업 최종 요구 루틴을 상세히 도시하는 흐름도.
제9(c)도는 APM 거절 최종 요구 루틴을 상세히 도시하는 흐름도.
제10도는 본 발명의 중지 루틴을 상세히 도시하는 흐름도.
제11도는 본 발명의 부트업 루틴을 상세히 도시하는 흐름도.
제12도는 본발명의 재개 루틴을 상세히 도시하는 흐름도.
제13도는 본 발명의 보관 CPU 상태 루틴을 상세히 도시하는 흐름도.
제14도는 본 발명의 회복 CPU 상태 루틴을 상세히 도시하는 흐름도.
제15도는 본 발명의 보관 8959 상태 루틴을 상세히 도시하는 흐름도.
제16도는 본 발명의 동적 보관 화일 할당 루틴을 상세히 도시하는 흐름도.
제17도는 본 발명의 퇴장 대기 루틴을 상세히 도시하는 흐름도.
제18도는 본 발명의 진입 대기 루틴을 상세히 도시하는 흐름도.
제19도는 본 발명의 전력 관리 프로세서 루틴을 상세히 도시하는 흐름도.
* 도면의 주요부분에 대한 부호의 설명
11: 모니터 12: 키보드
17 : 전원 21: 스위치
21: 스위치 23 : LED
40 : 마이크로제어기 44 : 수치 코프로세서
48 : 메모리 제어기 50 : 어드레스 MUX
52: 데이타 버퍼 56 : 비디오 제어기
62: 캐쉬 제어기 68 : 디코더를 갖는 래치/버퍼
70 : 버스 제어기 72: DMA 제어기
74 : 버퍼 78 : 입/출력 슬롯
84 : 8277 디스켓 어댑터 86 : IDE 디스크 제어기
82: 인터럽트 제어기 94 : RS-232UART
96 : CMOS NVRAM 98 : CMOS 클럭
100 : 병렬 어댑터 102: 타이머
104 : 키보드 제어기 106 : 전력 관리 회로
900 : 내장 모뎀 902: 외장 모뎀
904 : 트랜스 포머 906 : 클럭 신디싸이저
본 발명은 전반적으로 컴퓨터 시스템 구조(computer system architecture)에 관한 것으로, 특히 시스템 중단/재개 능력(system suspend/resume capability)과 각종 전력 관리 상태간의 전이를 용이하게 하는 전력 관리 프로세서를 갖춘 데스크탑 컴퓨터 시스템(desktop computer system)에 관한 것이다.
퍼스널 컴퓨터의 시스템은 본 기술 분야에서 잘 알려져 있다. 일반적으로, 퍼스널 컴퓨터 시스템, 특히, IBM 퍼스널 컴퓨터는 오늘날 현대 사회의 많은 분야에 컴퓨터 파워(computer power)를 제공하기 위해 광범위하게 사용되어 왔다. 퍼스널 컴퓨터는 전형적으로 데스크탑(desktop), 플로워 스탠딩(floor standing) 및 휴대용 마이크로 컴퓨터(potable microcomputer)로 정의될 수 있는데, 이들은, 단인 중앙 처리 장치(CPU), RAM 및 BIOS ROM을 포함하는 휘발성 메모리(volatile memory) 및 비휘발성 메모리(non-volatile memory), 시스템 모니터, 키보드, 하나 이상의 플로피 디스켓 드라이브(flexible diskette devices), 고정 디스크 저장 장치 드라이브(fixed disk storage drive)(“하드 디스크”로도 알려짐), 소위 “마우스(mouse)”로 일컬어지는 포인팅 장치(pointing devices), 그리고 선택사양적 프린터(optional printer)를 포함한다. 이러한 시스템의 두드러진 특징중의 하나는 이들 구성 요소를 함께 전기적으로 접속하기 위하여 마더보드(motherboard) 혹은 시스템 플래이너(system planar)를 사용한다는 것이다. 또한, 이러한 시스템은 주로 단일 사용자에게 독립적인 계산 능력(computing power)을 제공하도록 설계되었으며, 개인이나 혹은 소규모 사업체가 구입할 수 있는 낮은 가격으로 책정된다. 이러한 퍼스널 컴퓨터 시스템의 예로는 IBM사의 “PERSONAL COMPUTER AT” 및 IBM사의 “PERSONAL SYSTEM/1(IBM PS/1)”등이 있다.
퍼스널 컴퓨터 시스템은 전형적으로 소프트웨어(software)를 실행하여, 워드프로세싱(word processing), 스프레드시트(spread-sheets)를 통한 데이타의 조작(manipulation of data), 데이타베이스를 이용한 데이타 수집 및 관계 설정, 그래프 디스플레이(display of graphics), 시스템-설계 소프트웨어(system-design software)를 사용한 전기적 혹은 기계적 시스템 설계와 같은 다양한 동작들을 수행한다.
전술한 관련 출원 중에서 처음 네 개의 출원서[“DESKTOP COMPUTER HAVING A SINGLE SWITCH SUSPEND/RESUME FUNCTION”이란 명칭으로 1993년 7월 23일 출원된 미국 특허 출원 제08/097,334호, “DESKTOP COMPUTER HAVING ZERO VOLT SYSTEM SUSPEND”란 명칭으로 1993년 7월 26일 출원된 미국 특허 출원 제08/097,250호, “METHOD OF SAVING AND RESTORING THE STATE OF A CPU EXECUTING CODE IN A PROTECTED MOD”란 명칭으로 1993년 7월 23일 출원된 미국 특허 출원 제08/097,246호 “DESKTOP COMPUTER SYSTEM HAVING MULTI-LEVEL POWER MANAGEMENT”란 명칭으로 1993년 7월 23일 출원된 미국 특허 출원 제08/097,251호]에는 네 개의 전력 관리 상태(power management states), 즉 정상 동작 상태(normal operating state), 대기 상태(standby state), 중지 상태(suspend state) 및 오프 상태(off state)를 포함하는 컴퓨터 시스템이 개시되어 있다. 오프 상태, 정상 동작 상태와 중지 상태간의 변경은 하나의 스위치를 사용하여 행하여진다.
본 발명의 컴퓨터 시스템의 정상 동작 상태는 모든 전형적인 데스크탑 컴퓨터의 정상 동작 상태와 사실상 동일하다. 사용자는 응용프로그램을 사용할 수 있으며, 기본적으로 이 컴퓨터를 다른 컴퓨터와 마찬가지로 취급할 수 있다. 하나의 차이점은 백그라운드(background)에서 (BIOS 및 운영체제에서) 실행되고 사용자에게 투명한(transparent) 방식으로 실행되는 전력 관리 드라이버(power management driver)가 존재한다는 점이다. 운영 체제(operating system:OS)내의 전력 관리 드라이버 부분은 인텔 사 및 마이크로소프트사에 의해 작성된 고급 전력 관리 장치(Advanced Power Management:APM)고급 프로그래밍 인터페이스(advanced programing interface)로서, 인텔사의 80X86 계열의 프로세서(processor)상에서 동작하도록 작성된 대부분의 운영 체제에 존재한다. BIOS내 전력 관리 장치 부분(APM BIOS)은 APM OS 드라이버와 통신한다. APM OS 드라이버 및 APM BIOS 루틴은 함께 다른 세 가지 상태로 그리고 다른 세 가지 상태로부터의 컴퓨터의 상태 전이를 제어한다.
제2상태, 즉 대기 상태는 정상 상태보다 적은 전력을 사용하지만, 실행중인 모든 응용 프로그램은 전과 다름없이 실행되도록 남겨둔다. 일반적으로, 대기 상태에서는 장치를 제각기 저전력 모드에 둠으로써 전력이 절약된다. 예를 들면 대기 상태에서는 하드 드라이브내 고정 디스크(fixed disk)의 회전을 중단시키고, 비디오 신호의 발생을 중단시킴으로써 전력이 절약된다.
제3상태는 중지 상태이다. 중지 상태에서, 컴퓨터의 시스템은 극히 적은 양의 전력만을 소비한다. 중지된 컴퓨터는 벽명 아울렛(wall outlet)으로부터 거의 전력을 소비하지 않는다. 소비되는 전력은 단지 컴퓨터 시스템 내의 (시스템이 AC 전력을 수신하지 않는 경우) 배터리로부터 발생되거나 또는 (시스템이 AC 전력을 수신하고 있는 경우) 전원에 의해 보조 전력선에서 발생되는 적은 양의 전력으로서 스위치를 감시하는 회로를 유지하는 데 사용되는 적은 양의 전력뿐이다.
이러한 적은 양의 전력 사용은 전원이 턴“오프”되기 전에 고정 디스크에 저장장치(하드 드라이브)로 컴퓨터 시스템의 상태를 보관(save)함으로써 성취된다. 중지 상태로 진입하기 위해, 컴퓨터 시스템은 모든 실행중인 코드(any executing code)를 인터럽트(interrupt)하고, 컴퓨터의 제어를 전력 관리 드라이버로 전달한다. 전력 관리 드라이버는 컴퓨터 시스템의 상태를 확인하고, 확인된 컴퓨터 시스템의 상태를 고정 디스크 드라이브 저장 장치에 기록한다. CPU 레지스터, CPU 캐쉬, 시스템 메모리, 시스템 캐쉬, 비디오 레지스터, 비디오 메모리 및 기타 장치의 레지스터의 상태는 모두 고정 디스크에 기록된다. 시스템의 전체 상태는 코드 응용 프로그램이 인터럽트에 의해 악영향을 받는 일없이 회복될 수 있는 방식으로 보관된다. 그 후, 컴퓨터는 비휘발성 CMOS 메모리에 데이터를 기록하여 시스템이 중지되었음을 표시한다. 최종적으로, 컴퓨터는 전원의 전력 발생을 중단 시킨다. 컴퓨터의 전체 상태는 고정 디스크 저장 장치에 안전하게 보관되고, 시스템 전력은 “오프”되며, 컴퓨터는 스위치를 감시하기 위해 전원으로부터 단지 소량의 조절 전력(regulated power)만을 수신하여 회로에 공급한다.
제4상태, 즉 최종 상태는 오프 상태이다. 이 상태에서, 전원은 시스템으로 조절 전력을 제공하지 않지만, 컴퓨터 시스템의 상태는 고정 디스크에 보관되어 있지 않다. 오프 상태는 통상의 방식으로 턴오프된 전형적인 데스크탑 컴퓨터와 사실상 동일하다.
상태에서 상태로의 스위칭은 전력 관리 드라이버에 의해 처리되며, 전형적으로 단일 스위치에 폐쇄 이벤트(closure event), 플래그, 비활동 대기 타이머(inactivity standby timer) 및 비활동 중지 타이머(inactivity suspend timer)의 두 개의 타이머에 기초한다. 시스템은 하나의 전력 버튼을 갖는다. 이 버튼은 컴퓨터 시스템을 턴온시키고, 시스템의 상태를 중지시키고, 시스템의 상태를 회복시키며, 시스템을 턴오프시키는 데 사용될 수 있다.
중지/재개 시스템의 한 중요한 특징은 사용자 수용(user acceptance)에 있다. 사용자가 각종 상태간의 전이를 위해 사용되는 사용자 인터페이스를 성가시고 혼란스러운 것이라고 느끼면, 사용자는 시스템의 부가적인 전력 절약 기능들 조차도 사용하지 않을 것이다. “DESKTOP COMPUTER HAVING A SINGLE SWITCH SUSPEND/RESUME FUNCTION”이란 명칭으로 1993년 7월 23일 출원된 미국 특허출원 제08/097,334호에 개시된 시스템은 전력 관리 상태간의 전이시 사용자의 혼란을 감소시키는데 커다란 기여를 했다. 그러나 이 시스템에 있어서는, 전력 버튼을 누른 후 중지 상태로 진입하기까지는 수십초의 시간이 소요될 수 있다. 전력 버튼을 누르는 즉시 시스템을 즉각적으로 중지시키는 방법이 필요하다.
즉각적인 중지에 따른 하나의 문제점은 상기 시스템의 토대가 되는 고급 전력 관리장치(APM) 드라이버가 어떠한 APM도 동작하지 않는 시간 주기를 갖는다는 점이다. 특히, 도스/윈도우(DOS/Window) 환경에 있어서, 하나의 APM 장치 드라이버가 분리(disconnect)되고, 다음의 APM 드라이버가 아직 접속(connect)되지 않은 상황이 존재한다. 예를 들면, 시스템이 운영 체제를 도스에서 윈도우로 또는 이와 반대로 변경하고, 운영 체제를 윈도우 표준 모드(Windows Standard Mode)로부터 풀 스크린 도스 세션(full screen DOS session)으로 변경할 때(이들은 모두 매우 통상적인 전이이다.), 하나의 APM 드라이버가 분리하는 시간과 다른 APM 드라이버가 재접속하는 시간 사이의 APM 커버리지(APM coverage)애는 갭(gap)이 존재한다.
상기 사용자 인터페이스의 또다른 문제점은 대기 상태동안 비디오 디스플레이가 블랭크(blank)된다는 것이다. 시스템을 사용하고자 하는 사용자는 시스템이 중지 상태거나 오프 상태라고 생각하여, 모니터가 블랭크되었음을 인지하여 시스템을 정상 동작 상태로 진입시키기 위해 전력 버튼을 누를 수도 있다. 그러나, 전력 버튼을 누르면 시스템은 중지 상태 또는 오프 상태로 진입하여, 사용자는 사용자의 의도와는 정반대로 컴퓨터를 턴오프시키거나 또는 중지시킨 것이 된다. 상기 사용자 인터페이스의 또다른 문제점은, 시스템이 중지 상태 또는 오프 상태인 때, (음성우편(voicemail) 모뎀 및 소프트웨어가 사용되었다고 가정하여) 팩스 또는 음성우편(voicemail)이 수신되고, 컴퓨터가 스스로 턴오프 또는 중지되면, 현재로는 아이템이 수신되었으며 처리를 기다리고 있음을 사용자가 알 도리가 없다는 것이다.
본 발명에 따르면, 전력 관리 프로세서가 시스템에 추가되며, 이 전력 관리 프로세서는 전력 버튼을 누르면 시스템이 오프 상태, 중지 상태, 혹은 대기 상태로부터 정상 동작 상태로 전이되도록 구성된다. 따라서, 대기 상태에 있는 동안, 전력 버튼을 누르면 시스템은 대기 상태에서 정상 동작 상태로 변경된다. 상태 전이는 전력 관리 프로세서내에 구현된 고장안전 타이머(failsafe timer)의 종료시 결정(condition)된다. 고장안전 타이머가 종료된 경우, 전력 버튼을 누르면 즉시 상태 전이를 야기한다.
APM 드라이버내의 갭은 APM 커버리지내에 갭이 있을 때 즉각적인 상태 전이가 발생하지 않도록 함으로써 해결된다. 오히려, 시스템은 각종 APM 드라이버의 접속 및 분리를 감시하고, APM내에 갭이 존재할 경우 상태 전이를 야기하지 않도록하는 전력 관리 프로세서를 구성한다. 이것은 전력 관리 프로세서내의 고장안전 타이머를 상태 전이 논리(state transition logic)가 APM내의 갭을 “브리지”할 수 잇는 소정의 값으로 재시작(restart)시키는 형태를 취하는 것이 바람직하다.
또한, 본발명에 따르면, 마이크로제어기(microcontroller)는 발광 다이오드(light emitting diode:LED) 또는 다른 적절한 시각적인 표시기(visual indicator)를 제어하여 사용자에게 컴퓨터 시스템의 상태에 관해 시각적인 피드백을 제공한다. 전력 LED(power LED)가 사용되는 것이 바람직하다. 메시지가 수신되었고, 이어서 시스템이 턴오프되는 경우, LED는 플래쉬(flash)될 수 있으며, 따라서 메시지가 대기중이라는 것을 사용자에게 통보할 수 있다. LED는 사용자가 부재중인 동안 수신된 메시지의 수를 표시하기 위해 깜박일 수 있다. 각종 응용프로그램은 BIOS 호출에 의해, 예를 들어, LED에 의해 플래쉬되는 플래쉬의 시퀀스에 1을 가산함으로써, 피드백 LED의 상태에 영향을 끼칠 수 있다.
본 발명의 상술한 장점 및 다른 장점들은 본 발명의 바람직한 실시예의 상세한 설명으로부터 명백하게 이해될 것이다.
본 발명에서 구현되어 본 명세서의 일 부분을 구성하는 첨부 도면에서, 본 발명의 실시예들이 예시되었으며, 전술한 본 발명의 일반적인 설명 및 하기한 본 발명의 상세한 설명과 함께 첨부 도면을 참조함으로써 본 발명의 원리를 이해할 수 있을 것이다.
비록, 본 발명이 본 발명의 바람직한 실시예가 도시된 첨부도면을 참조하여 이하 상세히 기술될 것이지만, 당업자라면 본 발명의 바람직한 결과를 얻으면서도 다양한 변경을 가할 수 있음을 이해하여야 할 것이다. 따라서, 다음의 설명은 당업자를 대상으로 광범위한 설명적인 내용을 담고 있으며, 본 발명을 제약하려는 것은 아님을 이해하여야 할 것이다. 본 발명은 단지 컴퓨터 구조 설계에만 한정되지 않으며, 디지탈 설계, BIOS 설계, 보호 모드 80486 코드 설계(protected mode 80486 code design), 응용 코드 설계, 운영 체계 코드 설계, 및 고급 전력 관리 고급 프로그래밍 인터페이스 사용을 포함하는 컴퓨터 시스템의 완전한 설계(complete design)를 다루고 있다. 본 출원서는 컴퓨터 시스템의 모든 면에 대해 잘 알고 있는 이들을 대상으로 작성되었다.
이제 첨부 도면을 보다 상세히 참조하면, 본 발명을 구체화한 마이크로컴퓨터 시스템이 참조 번호(10)(제1도)로 도시되어 있다. 전술한 바와 같이, 컴퓨터(10)는 연관된 디스플레이 모니터(11), 키보드(12), 마우스(13), 그리고 프린터 혹은 플로터(14)를 구비하고 있다. 컴퓨터(10)(제2도)는 샤시(chassis)(19)와 함께 밀봉되고 차폐된 용적을 정의하는 장식용 외부 부재(16)와 내부 차폐 부재(inner shield member)(18)로 형성된 커버(15)를 구비하며, 밀봉되고 차폐된 용적내에 디지탈 데이타를 처리하고 저장하기 위한 데이타 처리 및 저장 구성 요소를 가진다. 적어도 소정의 이들 구성 요소는, 샤시(19)상에 장착되어, 상술한 구성 요소 및 플로피 디스크 드라이브(floppy disk drives), 각종 유형의 직접 액세스 저장 장치, 액서서리 어댑터 카드 혹은 보드등과 같은 다른 연관된 요소들을 포함하는 컴퓨터(10)의 구성 요소들을 전기적으로 상호 접속하는 수단을 제공하는 다층플래이너(20) 혹은 마더보드에 장착된다. 차후에 보다 상세히 기술되는 바와 같이, 마이크로컴퓨터의 동작 구성 요소로/로부터 입력/출력 신호를 전송하기 위한 수단이 플래이너(20)에 제공된다.
컴퓨터 시스템은 전원(17), 이하 스위치(21)로 지정되는 전력 버튼(21) 및 전력/피드백 LED(23)를 구비한다. 이하 설명되는 바와 같이, 전형적인 시스템의 통상적인 전원 스위치와는 달리, 전력 버튼(21)은 전원(17)으로/로부터 비조절 라인 전력(unregulated line power)을 스위칭하지 않는다. 샤시(19)는 베이스(base)(22), 전면 판넬(front panel)(24), 후면 판넬(rear panel)(25)(제2도)을 가진다. 전면 판넬(24)은 적어도 하나의 개방된 베이(open bay)(도시된 형태에서는 네 개의 베이)를 정의하여 자기(magnetic) 혹은 광학(optical) 디스크용 디스크 드라이브, 테이프 백업 드라이브등과 같은 데이타 저장 장치를 수용한다. 예시된 형태에서는 한 쌍의 상부 베이(26, 28), 한 쌍의 하부 베이(29, 30)가 제공되어 있다. 하나의 상부 베이(26)는 (3.5인치 드라이브로 알려진) 제1크기의 주변드라이브(peripheral drive)를 수용하는데 적합하며, 다른 상부 베이(28)는 (3.5와 5.25인치와 같은) 두가지 크기중 선택된 하나의 크기의 드라이브를 수용하는데 적합하다. 하부 베이들은 단지 한가지 크기(3.5인치)의 장치를 수용하는데 적합하다. 제1도에 도시된 플로피 디스크 드라이브(27)는 착탈형 매체 직접 액세스 저장 장치(removable medium direct access storage device)이며, 일반적으로 알려진 바와 같이, 그 속에 디스켓을 삽입할 수 있으며, 이 디스켓을 사용하여 데이타를 수신, 저장 및 전송할 수 있다. 하드 디스크(31)은 알려진 바와 같이, 데이타를 저장 및 전송할 수 있는 고정 매체 직접 액세스 저장 장치이다.
상술한 구조를 본 발명과 관련짓기에 앞서, 퍼스널 컴퓨터 시스템(10)의 일반적인 동작에 대한 개용를 검토하는 것이 좋을 것이다. 제3(a)도 및 제3(b)도를 참조하면, 플래이너(20)에 장착된 구성 요소, 플래이너를 I/O 슬롯에 접속하는 접속부 및 퍼스널 컴퓨터의 여타 하드웨어를 포함하는 각종 구성 요소를 예시하는, 퍼스널 컴퓨터 시스템의 블럭도가 도시되어 있다. 플래이너에 접속된 시스템 프로세서(40)[본 명세서에서, CPU(40)]는 마이크로프로세서로 되어 있으며 고속 CPU 로컬 버스(42)에 의해 메모리 제어 장치(46)에 연결되고, 또한 이 메모리 제어 장치(46)을 통해 휘발성 랜덤 액세스 메모리(RAM)(53)에 연결된다. 메모리 제어 장치(46)는 메모리 제어기(48), 어드레스 멀티플렉서(50) 및 데이타 버퍼(52)를 포함한다. 메모리 제어 장치(46)는 네 개의 RAM 모듈(54)로 표시된 랜덤 액세스 메모리(53)에 접속된다. 메모리 제어기(48)는 마이크로프로세서(40)로/로부터의 어드레스를 특정 RAM(53) 영역으로 매핑(mapping)하는 논리를 포함한다. 이 논리는 앞서 BIOS에 의해 점유된 RAM을 회수(reclaim)하는 데 사용된다. 메모리 제어기(48)는 ROM 선택 신호(ROMSEL)를 발생하여 ROM(88)을 인에이블(enable) 혹은 디스에이블(disable)시킨다. 시스템 프로세서(4)는 임의의 적절한 마이크로프로세서가 사용될 수 있는데, 한 가지 적당한 마이크로프로세서를 들자면 인텔 사의 80486이다. 인텔 80486은 내부캐쉬(internal cache)를 가지므로, CPU(40)가 인텔 80486이라면 CPU 캐쉬(41)를 구비할 것이다.
본 발명은 특히 제3(a)도 및 제3(b)도의 시스템 블럭도를 참조하여 기술되겠지만, 본 발명에 따른 장치 및 방법은 플래이너 보드의 다른 하드웨어 구성에서도 사용될 수 있다. 예를 들면, 시스템 프로세서(40)는 인텔 80286 혹은 80386 마이크로프로세서일 수 있다. 본 명세서에서 사용된 80286, 80386 혹은 80486에 관한 언급은 일반적으로 인텔 사의 마이크로프로세서를 의미한다. 그러나, 최근에 다른 제조자들은 인텔 X86 구조의 인스트럭션 세트를 실행할 수 있는 마이크로프로세서를 개발해 왔으며, 상술한 용어는 이 인스트럭션 세트를 실행할 수 있는 마이크로프로세서를 포함한다. 당업자라면 알 수 있는 바와 같이, 초기의 퍼스널 컴퓨터는 전형적으로 시스템 프로세서로 유명한 인텔 8088혹은 8086 마이크로프로세서를 사용했다. 이들 프로세서는 1메가바이트(megabyte) 메모리를 어드레스(address)할 수 있는 능력을 가진다. 최근에, 퍼스널 컴퓨터는 고속 인텔 80286, 80386 및 80486 마이크로프로세서를 통상 사용하는데, 이들 프로세서는 저속 8086 마이크로프로세서를 에뮬레이트(emulate)하기 위해 가상(virtual) 혹은 실제(real) 모드에서 동작할 수 있거나, 혹은 몇몇 모델의 경우 어드레스 지정 범위를 1메가바이트에서 4기가바이트(Gigabyte)로 확장하는 보호모드(protected mode)에서 동작할 수 있다. 본질적으로, 80286, 80386 및 80486의 실제 모드 특징은 8086과 8088 마이크로프로세서용으로 작성된 소프트웨어에서 하드웨어 호환성을 제공한다. 전술한 인텔 사 패밀리의 프로세서들은 주로, “486”처럼, 전체 유형명칭(type designator)에서 마지막 세자리 숫자에 의해 식별된다.
제3(a)도 및 제3(b)도를 다시 참조하면, (데이타, 어드레스 및 제어 구성 요소를 포함하는) CPU 로컬 버스(42)는 마이크로프로세서(40), [CPU(40) 자체에 제공되지 않는 경우]수치 코프로세서(math coprocessor)(144), 비디오 제어기(56), 시스템 캐쉬 메모리(60), 그리고 캐쉬 제어기(62)의 접속을 제공한다. 비디오 제어기(56)에는 모니터(혹은 비디오 디스플레이 터미널)(11) 및 비디오 메모리(58)가 연관된다. 또한, CPU 로컬 버스(42)상에 버퍼(64)가 연결된다. 버퍼(64)는 [CPU 로컬 버스(42)에 비해] 저속의 시스템 버스(66)에 연결되며, 어드레스, 데이타 및 제어 구성 요소를 포함한다. 시스템 버스(66)는 버퍼(64)와 또다른 버퍼(68)간을 연결한다. 시스템 버스(66)는 또한 버스 제어, 타이밍 장치(70) 및 DMA 장치(71)에 접속된다. DMA 장치(7)는 중앙 중재기(82) 및 DMA 제어기(72)로 구성된다. 부가적인 버퍼(74)는 시스템 버스(66)와 ISA(Industry Standard Architecture) 버스(76)와 같은 선택사양적 피쳐 버스(feature bus) 사이의 인터페이스를 제공한다. 버스(76)에는 (도시되지 않은) ISA 어댑터 카드를 수용하기 위해 다수의 I/O 슬롯(78)이 연결된다. ISA 어댑터 카드는 I/O 슬롯(78)에 플러그로 연결되어, 시스템(10)에 부가적인 I/O 장치 혹은 메모리를 제공한다.
중재 제어 버스(arbitration control bus)(80)는 DMA 제어기(72) 및 중앙 중재기(82)를 I/O 슬롯(78), 디스켓 어댑터(84) 및 IDE(Integrated Drive Electronics) 고정 디스크 제어기(86)와 연결시킨다.
마이크로컴퓨터 시스템(10)은 기본 4메가바이트 RAM 모듈(53)을 구비하는 것으로 도시되었지만, 선택사양적 고-밀도 메모리 모듈(optional higher-density memory module)(54)를 부가함으로써 추가적인 메모리가 제3(a)도 및 제3(b)도에 도시된 바와 같이 상호 접속될 수 있음을 이해해야 한다. 본 발명은 단지 예시를 위하여 기본 4메가바이트, 메모리 모듈을 참조하여 설명된다.
래치 버퍼(68)는 시스템 버스(66)와 플래이너 I/O 버스(90) 사이에 연결된다. 플래이서 I/O 버스(90)는 어드레스, 데이타, 제어 구성 요소를 포함한다. 플래이서 I/O 버스(90)를 따라서 디스켓 어댑터(84), IDE 디스크 어댑터(86), 인터럽트 제어기(92), RS-232어댑터(94), 본 명세서에서 NVRAM이라 지칭되기도 하는 비휘발성 CMOS RAM(96), CMOS 실시간 클럭(98), 병렬 어댑터(100), 다수의 타이머(102), 판독 전용 메모리(ROM)(88), 8042(104), 그리고 전력 관리 회로(106)와 같은 각종 I/O 어댑터(84)와 여타 구성 요소가 연결된다. 8042(104)는 키보드(12) 및 마우스(13)를 인터페이스시키는 슬레이브 마이크로프로세서(slave microprocessor)이다. 전력 관리 회로(106)는 전원(17)과, 전력 스위치(21)와, 전력/피드백 LED(23)와, 내부 모뎀(900) 및/또는 외부 모뎀(902)와 회로 통신(circuit communication)한다. 외부 모뎀(902)은 전형적으로 변압기(904)에 연결되며, 이 변압기는 당업자에게 잘 알려진 바와 같이 벽면 아웃렛에 연결된다. 모뎀(900, 902)은 전형적인 전화 아울렛(telephone outlet)에 연결된다. 전력 관리 회로(106)는 제6(a)도 및 제6(b)도에 도시되어 있으며, 제6(a), 6(b), 6(c) 및 제7도를 참조하여 보다 상세히 기술될 것이다. 판독 전용 메모리(88)는 마이크로프로세서(40)의 운영 체제와 I/O장치 사이를 인터페이스시키는 데 사용되는 BIOS를 포함한다. ROM(88)에 저장된 BIOS는 RAM(53)으로 복사되어 BIOS의 실행시간을 감소시킬 수 있다. ROM(88)은 또한 (ROMSEL 신호를 통해) 메모리 제어기(48)에 응답한다. ROM(88)이 메모리 제어기(48)에 의해 인에이블되는 경우, BIOS는 ROM으로부터 실행된다. ROM(88)이 메모리 제어기(48)에 의해 디스에이블되는 경우에는, ROM은 마이크로프로세서(40)로부터의 어드레스 조회(address inquiries)에 응답하지 않는다.(즉, BIOS는 RAM으로부터 실행된다.)
실시간 클럭(98)은 당일의 시간 계산에 사용되고, NVRAM(96)은 시스템 구성 데이터(system configuration data)를 저장하는데 사용된다. 즉, NVRAM(96)은 시스템의 현재 구성을 나타내는 값을 포함한다. 예를 들면, NVRAM(96)은 고정 디스크 혹은 디스켓 용량, 디스플레이의 유형, 메모리 용량, 시간, 날짜 등의 정보를 포함한다. 더우기, 세트 구성(SET Configuration)과 같은 특수 구성(special configuration) 프로그램이 실행될 때마다, 이들 데이타는 NVRAM에 저장된다. 세트 구성 프로그램의 목적은 시스템의 구성 특징을 나타내는 값을 NVRAM에 저장하는 것이다.
전술한 장치의 거의 모두는 휘발성 레지스터를 포함한다. 도면을 간단히 나타내기 위해, 특정 장치의 레지스터는 그 장치로 참조될 것이다. 예를 들면, CPU레지스터는 CPU(40) 레지스터로 칭하며, 비디오 제어기 레지스터는 비디오 제어기(56) 레지스터라 지칭될 것이다.
전술한 바와 같이, 컴퓨터는 샤시(19)와 함께 밀봉되고 차폐된 용적을 형성하는 커버를 구비하여, 마이크로컴퓨터의 상술한 구성 요소들을 포함한다. 커버(15)는 바람직하게, 주조가능한 합성물질(modable synthetic material)로 제조된 단일 주조 구성 요소인 외부 장식용 커보 부재(16)와, 장식용 커보 부재의 형상에 맞춰 형성된 얇은 금속시트 라이너(metallic thin sheet liner)(18)로 형성된다. 그러나, 커브는 다른 공지의 방식으로 제조될 수 있으며, 또한, 본 발명의 유용성은 개시관 유형의 밀봉체(enclosure)에 한정되지 않는다.
[동작상태]
이제 제4도를 참조하면, 본 발명의 컴퓨터 시스템의 상태도(state diagram)가 도시되어 있다. 본 발명의 컴퓨터 시스템(10)은 정상 동작 상태(150), 대기 상태(153), 중지 상태(154), 오프 상태(156)의 4가지를 가진다. 제4도에 도시된 상태들간의 전이(transition)는 바람직한 실시예의 설명을 위한 것일 뿐 본 발명을 한정하려는 것은 아니다. 따라서, 부가적인 이벤트가 상태 전이를 일으키는데 사용될 수 있다.
본 발명의 컴퓨터 시스템(10)의 정상 동작 상태(150)는 전형적인 데스크탑 컴퓨터의 정상 동작 상태와 사실상 동일하다. 사용자는 응용 프로그램을 사용할 수 있고, 기본적으로 임의의 다른 컴퓨터들처럼 취급할 수 있다. 사용자가 알 수 있는 하나의 차이점은 운영 체제내 전력 관리 드라이버(“APM OS 드라이버”)의 존재로서, 이 전력 관리 드라이버는 백그라운드 및 각종 APM BIOS 루틴에서 실행된다. APM BIOS 루틴은 차후에 기술될 것이며, 중지(Suspend) 루틴, 재개(Resume) 루틴), 부트-업(Boot-Up) 루틴, 감독(supervisor) 루틴 저장 CPU 상태(Save CPU State) 루틴, 그리고, 회복 CPU 상태(Restore CPU State) 루틴을 포함한다. 도면에 도시되지 않은 APM BIOS 루틴은 APM BIOS 경로 배정 루틴(APM BIOS Routing Routine)이다. APM BIOS 경로 배정 루틴은 본질적으로 APM OS 드라이버로부터의 커맨드(command)를 수신하여 적절한 APM BIOS 루틴을 송출한다. 예를 들면, APM OS 드라이버가 중지 커맨드를 발생할 때, APM BIOS 경로 배정 루틴은 중지 루틴을 호출한다. 다른 예를 들면, APM OS 드라이버가 획득이벤트 커맨드(Get Event Command)를 발생 할 때마다, APM BIOS 경로 배정 루틴은 감독 루틴을 호출한다. 이들 루틴은 BIOS내에 위치하며 BIOS가 섀도우(shadow)될 때 같이 섀도우된다. OS과 APM BIOS 루틴내 전력 관리 드라이버는 컴퓨터의 네 가지 상태간의 전이를 제어한다. 문맥에 따라 다를 수도 있지만 단어 “APM”는 일반적으로 APM OS 드라이버를 지칭한다.
제2상태, 즉 대기 상태(152)는 정상 동작 상태(150)보다 적은 전력을 사용하면서도, 응용 프로그램이 통상 실향되던 것처럼 실행되도록 한다. 일반적으로, 대기 상태(152)에서의 전력은 장치를 제각기의 저전력 모드에 두는 코드에 의해 절약된다. 바람직한 실시예에서는, 대기 상태(152)에서 고정 디스크 저장장치(31)내의 (도시되지 않은) 고정 디스크의 회전을 중단시키고, 비디오 신호의 발생을 중단시키고, CPU(40)를 저전력 모드에 둠으로써 전력을 절약하는데, 이는 차후에 보다 상세히 기술될 것이다. 그러나, 이는 본 발명을 한정하려는 것은 아니며, 전력소비 감소를 위해 CPU 클럭을 느리게 하거나 혹은 중단시키는 것과 같은 다른 방법을 사용할 수 있다.
바람직한 실시예에서, 전력은 세 가지 별도의 방식으로 절약된다. 먼저, 정상 동작 상태(150)에서, 고정 디스크 저장 장치(31)내의 고정 디스크는 예를 들어 분당 3600, 4500, 혹은 5400 회전수(RPM)로 일정하게 회전한다. 대기 상태(152)에서, IDE 디스크 제어기(86)에는 고정 디스크 저장 장치(31)를 저-전력 모드로 진입시키는(즉, 고정 디스크 저장 장치(31)내의 고정 디스크의 회전을 중단시키는) 커맨드가 주어지며, 이에 따라 고정 디스크의 회전 동안 고정 디스크 저장 장치(31)내의 (도시되지 않은) 모터(motor)가 전형적으로 소비하는 전력을 절약한다.
두 번째로, 정상 동작 상태(150)에서, 컴퓨터 시스템의 비디오 제어기(56)는 비디오 디스플레이 터미날(11)에 나타난 이미지에 대응하는 비디오 신호( 본 기술 분야에서 잘 알려진 HSYNC, VSYNC, R, G, B등)를 항상 발생한다. 대기 상태(152)에서, 비디오 제어기(56)는 비디오 신호 발생을 중단하며, 이에 따라 비디오 제어기(56)에 의해 통상 소비되는 전력을 절약한다. HSYNC, VSYNC, R, G, 및 B는 모두 대략 0.00 VDC로 구동된다. VESA 방식 모니터(Video Electronics Standards Association compliant monitor)는 스스로 턴오프되므로 전력을 더 절약할 수 있다.
세 번째로, 정상 동작 상태(150)에서, CPU(40)는 항상 커맨드를 실행하며, 따라서 전력을 소비한다. 대기 상태(152)에서는, BIOS가 APM CPU 유혹 호출(APM CPU Idle Call)에 응답하여 HALT 인스트럭션을 발생한다. HALT 인스트럭션을 실행하면, 다음 하드웨어 인터럽트가 발생할 때까지, CPU 전력 소모를 상당량 감소시킨다. CPU가 진정한 유휴 상태에 있다면, CPU는 90% 이상의 시간 동안 정지(half)된 상태로 남아 있게 된다.
몇몇 시스템은 “스크린-세이버(screen saver)”를 구비하여, 스크린(11)을 어두워지게 함으로써 비디오 디스플레이 터미날의 전면에서의 포스포 번-인(phosphor burn-in)을 방지한다. 대부분의 이러한 시스템에서, 비디오 제어기(56)는 여전히 비디오 신호를 발생한다. 단순히 어두운 스크린 혹은 동적 디스플레이(dynamic display)에 대응하는 신호를 발생한다. 따라서, 스크린-세이버를 실행하는 컴퓨터 시스템은 여전히 이 비디오 신호를 발생하는데 필요한 전력을 소비한다.
제3상태는 중지 상태(154)이다. 중지 상태(154)에서, 컴퓨터 시스템은 극히 소량의 전력을 소비한다. 바람직한 실시예에서, 중지된 컴퓨터는 벽면 아울렛으로부터 100밀리와트(milliwatt)보다 적은 전력을 소비한다. 소비되는 전력은, 전원(17)에서의 비효율성으로 인해 소비되는 소량의 전력이다.
이러한 극히 소량의 전력 사용은 전원을 “턴오프”하기에 앞서 컴퓨터 시스템의 상태를 고정 디스크 저장 장치(하드 드라이브)에 저장함으로써 성취된다. 중지 상태(154)에 진입하기 위해서, CPU(40)는 모든 응용 프로그램을 인터럽트하고 CPU의 프로그램 실행 제어를 전력 관리 드라이버로 전달한다. 전력 관리 드라이버는 컴퓨터 시스템(10)의 상태를 확인하여, 컴퓨터 시스템의 전체 상태를 고정 디스크 저장 장치(31)에 기록한다. CPU(40) 레지스터, CPU 캐쉬(41), 시스템 RAM(53), 시스템 캐쉬(60), 비디오 제어기(56) 레지스터, 비디오 메모리(58), 그리고 잔여 휘발성 레지스터 상태 모두가 고정 디스크 드라이브(31)에 기록된다. 시스템(10)의 전체 상태는 유용성을 크게 해치지 않으면서(without significant usability penalties) 회복될 수 있는 방식으로 저장된다. 즉, 사용자는 통상적인 경우 요구되는 시스템 운영체제의 로딩 그래픽 사용자 인터페이스의 로딩, 그리고 응용 프로그램의 로딩을 기다릴 필요가 없다.
그 후, 컴퓨터는 시스템이 중지되었음을 나타내는 데이타를 비휘발성 CMOS 메모리(96)에 기록한다. 마지막으로, CPU(40)는 마이크로제어기(U2)에 지시하여 전원(17)의 ±5VDC 및 ±12VDC를 통한 시스템으로의 조절 전력 공급을 중지시키도록 한다. 컴퓨터 시스템(10)은 이제 컴퓨터의 전체 상태가 안전하게 고정 디스크 저장 장치(31)에 저장 되었으므로 전력 소비를 낮출 수 있다.
“상태(state)”는 본 명세서를 통하여 유사하나 혼동될 수 있는 두 가지 의미로 사용된다. 장치는 특정 상태에 “존재(in)”할 수 있다. 네 가지 시스템 상태--정상(150), 대기(152), 중지(154) 및 오프(156)--는 본 발명의 컴퓨터 시스템의 일반적인 상태를 지칭한다. 이 “상태들”은 일반적인 방식으로 컴퓨터 시스템(10)을 설명한다. 예를 들면, 정상 동작 상태(150)에 있는 동안, CPU(40)는 여전히 코드를 실행중이며, 시스템(10)내의 다수의 레지스터를 변경한다. 마찬가지로, 유사한 활동(activity)이 대기 상태(152)에 있는 동안에도 발생한다. 따라서, 시스템(10)이 정상 동작 상태(150) 및 대기 상태(152)에 있는 동안 컴퓨터 시스템(10)의 메모리 및 레지스터 구성은 동적(dynamic)이다.
다른 장치들도 소정 상태에 “존재(in)”할 수 있다. 전력 관리 회로(106)는 각종 전력 관리 특징을 구현하기 위해서 전력 관리 프로세서로서 제6(a)도에 도시된 마이크로제어기(U2)와 같은 제2의 프로세서를 바람직하게 사용한다. 이러한 프로세서로서 적합한 다수의 프로세서가 존재한다. 본 실시예에서는 전력 관리 프로세서로서 사전 프로그램된(preprogrammed) 83C750 마이크로제어기를 사용한다. 마이크로제어기(U2)의 변수(variables) 및 핀(pins)은 제6(a)도를 참조하여 설명되는 바와 같이 여러 가지 상태로 존재할 수 있다.
전술한 의미를 “장치의 상태(the state of a device)”, 예를 들면, “컴퓨터 시스템(10)의 상태” 혹은 “CPU(40)의 상태”와 대비할 수 있다. “장치의 상태”는 특정 컴퓨터 사이클에서의 그 장치의 상황(condition)을 지칭한다. 모든 메모리위치(memory location) 및 레지스터는 특정 이진 값(particular binary values)을 갖는다. “장치의 상태”는 그 장치의 내용이 정적 이진 스냅샷(static binary snapshot)이다.
“컴퓨터 시스템(10)의 상태”는 동작상 동등물(operational equivalents)을 지칭하며 반드시 정확한 사본(exaxt copies)을 의미하지는 않는다. 예를 들면, 상태A에 있는 컴퓨터 시스템은 CPU 캐쉬(41) 혹은 시스템 캐쉬(60)내에 소정 메모리를 가질 수 있다. 어느 한 쪽의 캐쉬의 내용을 시스템 RAM(53)으로 되“플러쉬(flush)”시킴으로써 이 컴퓨터 시스템을 상태B로 두는 것이 가능하다. 순수하게 말하자면, 캐쉬와 시스템 RAM의 내용이 다르므로, 상태A에 있는 컴퓨터 시스템의 상태는 상태B에 있는 컴퓨터 시스템의 상태와 다르다. 그러나, (프로그램이 캐쉬를 이용하여 실행할 수 없기 때문에 발생되는) 시스템의 속도의 다소의 경감을 제외하고는 실행중인 프로그램에 영향을 미치지 않으므로, 소프트웨어 동작 측면에서 볼 때 상태A와 상태B는 동일하다. 즉, 비록 플러쉬된 캐쉬로 인해, 컴퓨터는 캐쉬 영역이 유용한 코드로 재로딩될 때까지 성능은 약간 떨어지겠지만, 상태A의 컴퓨터와 상태B의 컴퓨터는 소프트웨어 동작 측면에서는 동일하다.
단어 “파워(power)”도 또한 혼동이 가능한 두 가지 유사한 의미로 사용된다. 대개의 “파워”는 전기 전력에 관한 것이다. 그러나, “파워”는 또한 계산 능력(computational power)에 관한 것으로도 사용된다. 그러나, 이러한 차이는 문맥에 의해 명확히 파악할 수 있을 것이다.
“회로(circuit)”는 일반적으로 물리 전자 장치 혹은 전기적으로 상호 접속된 다수의 장치를 말한다. 그러나 “회로”는 또한, 물리적 전자 장치의 CPU 코드 동등물을 포함하도록 의도되었다. 예를 들어, 2-입력 NAND 게이트는 한편으로 74LS00에 의해 구현될 수도 있으며, 혹은 동일하게 프로그램가능 장치로 구현될 수 있다. 이들 두 장치는 물리 전자 장치이다. 다른 한편으로, CPU(40)가 두 개의 CPU-판독가능 입력 포트로부터 두 입력을 판독하도록 하고 CPU 커맨드를 사용하여 NAND 결과를 발생하도록 하고, CPU-기록가능 출력 포트를 통하여 그 결과를 출력 하도록 함으로써, NAND 게이트를 구현할 수 있다. 이러한 CPU-인터페이스 가능 포트는 본 기술 분야에서 잘 알려진 디코드된 래치들(decoded latches), 그들의 프로그램가능 장치 동등물(programmable device equivalent)처럼 단순하거나, 혹은 PIA와 같이 복잡할 수 있다. “회로”는 상술한 세 가지 NAND 게이트 구현 예들을 모두 포함하도록 넓은 의미로 해석되어야 한다. 몇몇 경우, “회로”는 단순히 전기적 경로(electronic pathway)를 지칭할 수도 있다. 전기적 경로의 유형(type of electronic pathway)은 와이어(wire), 트레이스(trace) 혹은 인쇄 회로 기관(printed circuit board)상의 비아(via)등을 포함하거나, 혹은 하나의 전기적으로 접속된 경로를 형성하는 여러 유형의 전기 경로 조합을 포함한다.
“신호(signal)”는 단일 전기 파형 혹은 다수의 파형을 지칭할 수 있다. 예를 들면, 비디오 제어기는 비디오 신호를 발생한다. 이 비디오 신호는 실제로 다수의 전기 전도체상의 (본 기술 분야에서 잘 알려진 HSYNC, VSINC, R, G, B등의)신호이다.
제4도를 다시 참조하면, 네 번째이자 마지막 상태는 오프 상태(156)이다. 이 오프 상태(156)는 통상의 의미로 턴오프된 전형적인 컴퓨터 시스템과 사실상 동일하다. 이 오프 상태에서, 전원(17)의 주/조절 장치(primary/regulation unit)(172)는 컴퓨터(10)에 [제5도를 참조하여 보다 상세히 설명되는 바와 같이, AUX5를 통한 소량의 조절 전력(regulated power)를 제외하고는] 조절 전력 공급을 중단하는데, 이 컴퓨터 시스템(10)의 상태는 고정 디스크(31)에 저장되지 않았다. 중지 상태(154) 및 오프 상태(156)는 전원(17)이 더 이상 조절 전력을 발생하지 않는다는 점에서 유사하다. 다른 점을 살펴 보면 오프 상태(156)에서는 중지 상태(154)와는 달리 컴퓨터 시스템의 상태가 하드 드라이브(31)에 저장되지 않는다는 것이다. 또한, 오프 상태(156)를 벗어날 때, 컴퓨터(10)는 마치 턴온되는 것처럼 “부팅(booting)”된다. 즉, 임의의 실행 코드는 사용자에 의해 시작되거나 혹은 AUTOEXEC.BAT 파일과 같은 수단에 의해 자동적으로 시작되어야만 한다. 그러나, 중지 상태를 벗어날 때에는 컴퓨터(10)가 인터럽트되었을 당시의 상태로부터 다시 실행을 재개한다.
제4도에는 또한 네 가지 상태간의 전이를 일으키는 이벤트의 일반적인 개략도가 도시되어 있다. 이들 이벤트는 제6내지 8도를 참조하여 상세히 설명될 것이나, 이시점에서의 약간의 설명은 도움이 될 수 있다. 전력 버튼(21), 두 개의 타이머(비활동 대기 타이머 및 비활동 중지 타이머, 제9도를 참조한 설명을 참조), 기상 대기 분 타이머(minutes to wake up timer) 중지 인에이블 플래그(suspend enable flag)(제6(a) 및 7도를 참조한 설명을 참조)의 모두는 컴퓨터가 진입하는 상태에 영향을 준다. 일반적으로, 두 개의 타이머는 하드웨어이거나 혹은 CPU에서 프로그램으로서 실행되는 CPU 코드 타이머일 수 있다. 바람직한 실시 예에서, 이들 두 개의 타이머는 BIOS 데이타 세그먼트(BIOS data segment)로부터 실행되는 CPU 코드 타이머들이다. 그러나, 이들 두 개의 타이머는 하드웨어 타이머일 수도 있는데, 이것은 시스템의 오버헤드(overhead)를 감소시킨다는 점에서 더나은 해결 방안이 될 수 있다. 이들 타이머는 제9도를 참조하여 보다 상세히 설명될 것이다. 이들 두 타이머는 컴퓨터(10)의 정상 동작 상태(150) 혹은 대기 상태(152)에 있을 때 활동화된다. 타이머들은 다른 루틴과 통신하여 어느 한 타이머의 종료(expiration)가 이하 설명된 바와 같은 전이(transition)를 유발하도록 한다. 어느 한 쪽 혹은 양쪽 타이머는, 사용자의 특정한 요구에 따라, 소정 시간 주기(a certain peroid of time) 경과 후에 종료되도록 구성될 수 있다. 바람직한 실시예에서, 비활동 대기 타이머 및 비활동 중지 타이머는 15 내지 90분 경과후에 종료되도록 설정될 수 있다. 어느 한 쪽 혹은 양 쪽 타이머는 중단될 수 있다. 즉, 절대로 종료(expire)할 수 없도록 구성될 수 있다. 타이머를 “중단시키는 것(stopping)”은 타이머의 증분 계수 동작(incremental counting action)을 실제로 멈추거나 혹은 단순히 타이머의 종료를 무시하는 형태를 취할 수 있다. 바람직한 실시예에서, 타이머 종료값으로 0을 설정하면, 타이머 종료는 테스트되지 않는다. 예를 들면, 컴퓨터가 중지 상태에 진입함으로써 LAN이 그 컴퓨터와 관련하여 실패할 수 있으므로, 네트워크 컴퓨터의 사용자는 중지 상태(154)에 진입하는 것을 원치 않을 수 있다.
이론상, 타이머들은 카운트-업(count-up) 혹은 카운트-다운(count-down) 할 수 있고, 일정한 사전결정된 상태(fixed predetermined state)로 리세트(reset)되어, 타이머가 시작(혹은 재개)될 때, 또다른 일정한 사전결정된 상태로 계수하거나, 혹은 현재값을 사용하여 종점 종료 트리커(endpoint expiration trigger)로서 합이나 차를 계산할 수 있다. 바람직한 실시예에서, 타이머가 리세트될 때, 실시간 클럭(98)으로부터 분 변수의 현재값(the present value of the minutes variables)이 저장된다. 타이머는 저장된 분값으로부터 현재의 분값을 감산하고, 이 차이값과 사용자가 선택한 값을 비교함으로써 종료 여부를 체크한다.
두 타이머는 소정 시스템 활동(certain system activity)에 의해 영향을 받는다. 예를 들면, 바람직한 실시예에서, 키보드(12) 키를 누르고, 마우스(13)를 이동시키고, 마우스(13)의 버튼을 누르는 사용자의 동작 혹은 하드 드라이브(31)의 동작에 의해 각 타이머는 재시작(restart)되며, 이는 제9도를 참조하여 상세히 설명될 것이다. 그러므로, 사용자가 키보드(12) 키를 누른다든지 혹은 마우스(13)를 사용하는 동안, 혹은 응용 프로그램이 하드 드라이브(31)를 액세스하는 동안 어느쪽 타이머도 절대로 종료되지 않는다. 또한, 타이머를 리세트시키기 위해 다른 시스템 이벤트를 이용할 수도 있다. 이와 달리, 임의의 하드웨어 인터럽트 활동이 모니터 될 수도 있다. 따라서, 프린팅(IRQ 5 혹은 IRQ 7) 혹은 COMM 포트 액세스(IRQ 2혹은 IRQ 3) 동작이 시스템의 중지 상태(154) 진입을 방지하도록 하는 것이 바람직할 수도 있다.
중지 인에이블 플래그는 마이크로제어기(U2)내의 CPU-조작가능 및 판독가능 래치(CPU-manipulable and readable latch)로서, 제6(a)도를 참조하여 상세히 설명될 것이다. 요약하면, 마이크로제어기(U2)를 하나의 모드에 설정한 채 스위치(21)를 누르면 시스템(10)은 오프 상태가 되고, 이 마이크로제어기(U2)를 다른 모드로 설정한 채 스위치(21)를 누르면 시스템(10)은 중지 상태(154)로 된다. 컴퓨터 시스템(10)이 정상 동작 상태(150)에 있고 마이크로제어기(U2)에 설정된 중지 인에이블 플래그가 클리어된 상태인 동안 전력 버튼을 누르면, 컴퓨터 시스템(10)은 참조 번호(158)에서 도시된 바와 같이 오프 상태(156)로 진입한다. 컴퓨터 시스템(10)이 오프 상태(156)일 때 전력 버튼(21)을 누르면, 참조 번호(160)에 의해 도시된 바와 같이 컴퓨터 시스템은 정상 동작 상태(150)로 진입한다. 또한, 시스템은 이하 상세히 설명되는 여러 가지 “외부 이벤트”에 의해서도 오프 상태(56)로부터 정상 동 작 상태(150)로 진입할 수 있다.
컴퓨터 시스템(10)이 정상 동작 상태(150)에 있으면, 컴퓨터(10)는 하나의 이벤트에 의해 대기 상태(150)로 진입할 수 있다. 참조 번호(163)에 도시된 바와 같이, 비활동 대기 타이머가 종료되면, 컴퓨터 시스템(10)은 대기 상태(152)로 변할 것이다. 대안적으로, 시스템은 사용자가 이 시스템을 강제적으로 즉시 대기 상태로 둘 수 있도록 대화 상자(dialog box), 스위치, 기타 입력 장치 등의 수단을 제공할 수 있다. 참조 번호(164)에 도시된 바와 같이, 컴퓨터 시스템(10)이 대기 상태(152)에 있는 동안, 사용자가 전력 버튼(21)을 누르는 것을 포함하여 전술한 종류의 어떤 시스템 혹은 사용자 활동이 있으면, 컴퓨터 시스템(10)은 대기 상태를 벗어나 정상 동작 상태로 재진입한다.
전력 버튼(21)을 누르면, 시스템은 대기 상태(152)로부터 정상 동작 상태(150)로 진입한다. 전술한 바와 같이, 대기 상태에서는 모니터(11)가 블랭크되고 전력/피드백 LED(23)는 마이크로제어기(U2)내의 플래그가 어떻게 구성되었는가에 따라 온(on)되거나 깜빡인다. 시스템을 사용하고자 이 시스템에 접근중인 사용자는 모니터(11)가 꺼져 있음을 인지하고, 이 시스템이 중지 상태(154)이거나 오프 상태(156)에 있다고 생각하여, 전력 버튼(21)을 누름으로써 이 시스템을 정상 동작 상태(150)로 진입시키려 시도할 수도 있다. 전력 버튼(21)을 누른 결과 시스템이 중지 상태(154) 혹은 오프 상태(156)로 진입했다면, 사용자는 컴퓨터를 턴오프시키거나 중지시킨 것이 되어 버리며, 이는 자신의 본래 의도와는 다른 것이다. 따라서, 대기 상태(152)에서 전력 버튼(21)을 누르면, 시스템은 대기 상태(152)로부터 정상 동작 상태(150)로 변한다. CPU(40)는 유휴 상태라도 스위치가 눌러졌음을 곧 알 수 있다. 하드웨어 인터럽트는 CPU(40)를 초당 대략 20회 정도 유휴 상태로부터 벗어나도록 하고, 그 후, 다음 APM 획득 이벤트 동안, 마이크로제어기(U2)가 조치되어 스위치(21)가 눌려졌는지 여부를 판정한다.
컴퓨터(10)가 정상 동작 상태(150)에 있다면 두 가지 이벤트가 컴퓨터를 중지 상태(154)로 진입시킬 수 있다. 첫째, 참조 번호(166)에 도시된 바와 같이, 비활동 중지 타이머가 종료되면, 컴퓨터 시스템(10)은 중지 상태(154)로 변할 것이다. 두 번째, 참조 번호(166)에 도시된 바와 같이, 마이크로제어기(U2)에 기록된 중지 인에이블 플래그가 SET인 동안 전력 버튼(21)을 누르면 컴퓨터 시스템(10)을 즉시 중지 상태(154)로 진입시킬 수 있다. 대안적으로, APM 드라이버는 추가로 중지 요구를 “설정 전력 상태:중지(Set Power State:Suspend)”커맨드를 통해 발생할 수 있는데, 이는 APM BIOS 드라이버로 하여금 중지 루틴을 호출토록 한다. 중지 상태에 있는 동안 사용자가 전력 버튼(21)을 누르면, 참조 번호(168)에 도시된 바와 같이, 컴퓨터는 정상 동작 상태(15)로 변한다.
또한, 시스템(10)을 중지 상태(154)에서 정상 동작 상태(150)로 변경[참조 번호(168)]시키거나, 오프 상태(156)에서 정상 동작 상태(150)로 변경[참조 번호(160)]시키기 위해 여러 가지 외부 이벤트를 사용할 수 있다. 예를 들면, 제6(a)도의 회로의 마이크로제어기(U2)내의 전화 링 검출 회로(telephone ring detect circuit)는 부착된 전화선이 울릴 때 시스템(10)을 오프 상태(156)이거나 중지 상태(154)로부터 정상 동작 상태(150)로 진입시키도록 구성될 수 있다. 이러한 특징은 팩스 데이타(telefax data) 혹은 디지탈 데이타(digital data)를 수신하는 시스템에 유용하다. 시스템은 전화 링에 응답하여 정상 동작 상태로 진입하여, 입력 팩스 전송을 수신하고, 파일을 업로드 또는 다운로드하고, 시스템의 원격 액세스를 허용하는 등의 사전설정된 기능을 수행하며, 비활동 중지 타이머의 종료에 응답하여 중지 모드로 재진입함으로써, 시스템이 정상 동작 상태인 동안만 전력을 소비한다.
마찬가지로 마이크로제어기(U2)는 기상 대기 분 알람 카운터(minutes to make alarm counter)를 구현하며, 이 카운터에 의해 알람형 이벤트가 시스템(10)을 중지 상태(154) 또는 오프 상태(156)로부터 정상 동작 상태(150)로 진입시킬 수 있다. 이러한 시스템은 전화 이용료가 저렴한 소정 시간에 팩스 또는 디지탈 데이타를 전송하고, 시스템 하드 드라이브(31)를 테이프 백업 시스템(tape backup system)으로 백업하는 것과 같은 시스템 유지 기능을 수행하는데 유용하다. 후자의 경우에 있어서, 기상 대기 분은 스케쥴러가 테이프 백업 프로그램을 실행시키기에 앞서 정해진 시간에 시스템을 턴온시키도록 설정된다. 대안적으로, APM BIOS 스케쥴러가 테이프 백업 프로그램의 실행을 위해 사용될 수 있다.
마지막으로, 참조 번호(170)에 도시된 바와 같이, 컴퓨터 시스템(10)이 대기 상태(152)에 있을 때 비활동 중지 타이머가 종료되면, 컴퓨터 시스템(10)은 중지 상태(154)로 변한다. 컴퓨터 시스템(10)은 중지 상태(154)에서 대기 상태(152)로 다시 변할 수 없고, 참조 번호(168)를 참조하여 설명한 바와 같이, 단지 정상 동작 상태(150)로만 전이할 수 있다.
명백하게, 컴퓨터 시스템(10)은 상태를 즉시 변경할 수는 없다. 네 가지 상태중 어느 하나로부터의 전이에서, 필요한 시스템 변경을 행하려면 소정 주기의 시간이 필요하다. 각 전이 주기에 대한 상세한 설명은 제6 내지 15도를 참조하여 상세히 기술될 것이다.
[시스템 하드웨어]
CPU(40)상에서 실행되는 코드를 상세히 설명하기에 앞서, 먼저 상기한 네 가지 상태를 성취하기 위해 필요한 하드웨어에 대해 논의하는 것이 도움이 된다. 제5도에는 전원(17)의 블럭도가 도시되어 있다. 전원(17)은 제어 장치(174) 및 주/조절 장치(172)의 두 가지 장치를 가진다. 전원(17)은 전형적인 벽면 아웃렛으로부터 115 VAC를 수신하는 라인-인(Line-in), 전원(17)의 조절 활동을 제어하는등의 다수의 입력을 가진다. 전원(17)은 AC 라인-아웃, ±5VDC, ±12VDC, AUX5, GND, 그리고 POWERGOOD등의 다수의 출력을 가진다. AC 라인-아웃은 전형적으로 비디오 디스플레이 터미날(11)의 (도시되지 않은) 전력 입력으로 전달되는 115 VAC(unregulated 115 VAC)이다. 제어 장치(174)는입력을 수신하고, POWERGOOD 출력을 생성한다. 주/주절 장치(172)는 라인-인 입력으로부터의 115VAC를 ±5, ±12VDC로 선택적으로 조절한다. 주/조절 장치(172)는, 제어 장치(174)에 의해 인터페이스되어, 전력을의 값에 따라 ±5VDC 및 ±12VDC로 조절한다. 바람직한 실시예에서, 제어장치(174)는신호를 발생하는 회로에 예를 들어 적절한 광절연체(optoisolator)와 같은 절연을 제공하여야 한다.
라인-인 입력과 AC 라인-아웃, ±5VDC, ±12VDC, GND,그리고 POWERGOOD은 본 기술 분야에서 잘 알려져 있다. 전원(17)이 “오프”, 즉 라인-인으로부터 조절 전압을 제공하지 않을 때, POWERGOOD 신호는 논리적으로 0(ZERO)이다. 전원(17)이 “온”일 때, 전원(17)은 115VAC 라인-인으로부터 ±5VDC, ±12VDC의 조절 전압을 생성한다. 이들 네 가지 조절 전압 및 이와 연관된 GND는 본 기술 분야에서 통상적으로 알려진 “시스템 전력”이다. 조절 전압 레벨이 허용가능한 공차(acceptable tolerances)내에 있다면, POWERGOOD 신호는 논리 1(ONE)로 변할 것이다. ±5, 혹은 ±12전압선이 공차를 벗어나면, POWERGOOD 신호는 논리 0으로 되어, 이러한 조건을 표시한다.
AUX5 출력은 보조 ±5VDC(auxiliary ±5VDC)를 플래이너에 제공한다. 전원(17)이 공칭 115VDC(nominal 115VAC)를 제공하는 전형적인 벽면 아웃렛에 플러그(plug)되어 있을 때, 주/조절 장치(172)는 전원의 “온” 혹은 “오프”에 상관없이, 조절 ±5VDC를 AUX5에 제공한다. 따라서, 전원이 AC 전력을 수신하는 동안, 전원(17)은 항상 공칭 ±5VDC를 AUX5에 재공한다. 주/조절 장치(172)는 전원(17)의“온”동안에만 ±5출력을 통해 조절 ±5VDC를 생성한다는 점에서 AUX5 출력과는 상이하다. 또한, 바람직한 실시예에서, 주/조절 장치(172)는 ±5출력을 통해 ±5VDC에서 수 암페어(amp)의 전류를 제공하는 반면, AUX5의 출력을 통해서는 ±5VDC에서 1암페어 미만의 전류를 제공한다는 점에서 다르다.
전형적인 종래의 전원은 고-전류 쌍투 스위치(high-amperage double- throw switch)를 사용하여 전원의 조절부(regulation section)로/로부터 라인-인 입력을 접속하고 분리한다. 본 발명의 전원(17)은 고-전류 쌍투 스위치를 사용하지 않는다. 대신에, 스위치(21)는신호를 발생하는 회로를 제어한다. 바람직한 실시예에서, 스위치(21)는 순시 단극(momentary single-pole), 단투 푸쉬버튼 스위치(single throw pushbutton)이다. 그러나, 당업자라면 제6(a)도의 회로를 단극 쌍투 스위치와 같은 다른 유형의 스위치를 사용하도록 적응(adapt)시킬 수 있을 것이다. AC 라인-인은 항상 벽면 아웃렛으로부터 주/조절 장치(172)에 접속된다.이 논리 1(대략 AUX5, 공칭 ±5VDC)일 때, 주/조절 장치(172)는 115VAC 라인-인을 ±5 혹은 ±12출력을 통해 ±5VDC 혹은 ±12VDC로 조절하지 않는다. 주/조절장치(172)는 AUX5 출력에서 저-전류량 공칭 ±5VDC를 제공한다. 반면에,이 논리 0(대략 GND)일 때, 주/조절 장치(172)는 네 개의 ±5 및 ±12출력을 통해 115VAC 라인-인을 ±5VDC 및 ±12VDC로 각각 조절한다. 따라서,이 1일 때, 전원(17)은 “오프”이고,이 0일 때, 전원(17)은 “온”이다.
보다 구체적으로는, 전술한 전원(17)처럼 AUX5 출력과입력을 구비한 전원은 보다 통상적인 전원 공급자들로부터 얻어질 수사 있다.
이제 제6(a)도를 참조하면, 제6(a)도는 본 발명의 컴퓨터 시스템(10)의 전자 회로를 개략적으로 도시한 도면이다. 제6(a)도의 회로는 스위치(21), 전력/피드백 LED(23), 전원(17), 비디오 디스플레이 터미날(11) 및 CPU(40)상에서 실행되는 코드간의 인터페이스를 담당한다.
회로는 네 개의 집적 회로(integrated circuits), 즉 제1사전 프로그램된 PAL16Lb(U1), 사전 프로그램된 83C750 마이크로제어기(U2), 당해 기술 분야에 잘 알려진 74LS05(U3) 및 제2프로그램된 PAL168L8(U4)(도시되지 않음)와 제6(a)도에 도시된 바와 같이 회로 통신하는 각종 이산 구성 요소(discrete components)를 포함한다. 일반적으로, PAL(U1) 및 (U4)(도시되지 않음)는 제3(a)도 및 제3(b)도의 플래이너 입/출력 버스(90)와 마이크로제어기(U2)간을 인터페이스시키며, 마이크로제어기(U2)는 제6(a)도의 잔여 회로(remaining circuitry)에 인터페이스되고, 스위치(21), 전원(17), 비디오 디스플레이 터미날(11) 및 프로그램 가능 클럭 신디싸이저(programmable clock synthesizer)(906)에 인터페이스된다. 클럭 신디싸이저(906)는 당업자에게 잘 알려진 다수의 클럭 씬디싸이저중 하나이다. 이러한 부품중의 하나는 크론텔(Chrontel)사에 의해 제조된 CH99055A로서 수많은 구입처로부터 쉽게 구입할 수 있다.
제6(a)도의 회로는 스위치(21), 16㎒ 크리스탈(Y1), 18개의 저항(R1-R18), 8개의 커패시터(C1-C8), 바람직한 실시예에 있어서 논리 스위치(logical switch)로 작용하는데 적합한 표준 저전류 NMOS FET인 세 걔의 N-형 MOSFET(Q1-Q3), 6개의 1N4148 소신호 다이오드(CR1-CR6)를 더 포함하며, 이들 모두는 제6(a)도에 도시된 바와 같이 구성되고 접속된다. 저항(R1-R18)은와트 저항으로 제6(a)도에 도시된 값(±5%)을 갖는다. 커패시터(C1)는 10㎌(±10&) 전해 커패시터(electrolytic capacitor)이다. 커패시터(C2& C3)는 22㎊(±10%) 탄탈늄 커패시터(tantalum capacitors)이다. 커패시터(C4-C8)는 0.1㎌(±10%) 세라믹 케패시터(ceramic capacitor)이다. 마지막으로, 커패시터(C9)는 1000㎊(±10%) 세라믹 케패시터이다.
크리스탈(Y1) 및 커패시터(C2및 C3)는 본 기술 분야에서 잘 알려진 바와 같이 동작 타이밍을 제어하기 위하여 마이크로제어기(U2)에 의해 사용되는 신호를 발생한다. 다이오드(CR1및 CR3) 및 저항(R14)은 VBAT 신호로부터 AUX5 신호를 분리시키는 동시에, AUX5 신호가 VBAT 신호를 보충하도록 허용하여 전원(17)이 AUX5 신호를 발생하는 동안에는 배터리(171)가 고갈되지 않도록 한다. AUX5 신호는 다이오드(CR1및 CR3)를 통해 단계적으로 감소되어 VBAT에 접속된 장치에 적절한 전압을 공급한다. 그렇지 않고, VBAT 라인이 AUX5 라인으로부터 분리될 수도 있다.
제2PAL(U4)(도시되지 않음)은 SA(10)에서 SA(15)까지의 어드레스 라인 및 AEN(어드레스 인에이블) 라인에 접속된다. SA(1)에서 SA(15)까지와 AEN은 제3(a)도 및 제3(b)도에 도시된 플래이너 입/출력 버스(90)의 일부이다. 제2PAL(U4)는 단순히 어드레스 디코더로서 기능하도록 프로그램되고, 사전설정된 어드레스가 어드레스 라인 SA(1)에서 SA(15)까지의 어드레스 라인상에 나타나고, AEN 라인이 활동일 때, 활성 로우 신호(active low signal) DCD#을 제공한다. 본 특정 실시예에 있어서, 제2PAL(U4)는 어드레스 OECH 및 OEDH에서 두 개의 연속적인 8비트 입/출력 포트를 디코드하도록 프로그램된다. 대안적으로, DCD# 신호는 본기술 분야에 잘 알려진 바와 같이 메모리 제어기(memory controller) 또는 ISA 제어기 칩세트(ISA controller chipset)와 같은 다른 전자 장치에 의해 발생될수 있다.
제1PAL(U1)은 (i) 커맨드 및 데이타가 CPU(40)와 마이크로제어기(U2) 사이에서 전달되도록 허용하기 위한 CPU와 마이크로제어기(U2)간의 판독/기록 인터페이스 기능, (ii) 마우스 인터럽트 INT12및 키보드 인터럽트 INT1의 논리 OR 기능 및 (iii) CPU(40)로부터 커맨드에 응답하여 마이크로제어기(U2)를 리세트하는 리세트 출력 기능과 같은 여러 기능을 제공하도록 프로그램된다.
제1PAL(U1)은 두 개의 연속적인 입/출력 포트를 사용하며, 이들 코트는 본 명세서에서 “전력 관리 포트”로도 지칭된다. 제1PAL(U1)은 플래이너 입/출력 버스(90)로부터의 8개의 입력, 즉 SD(4), SD(0), SA(0), IOW#, IOR#, RST_DRV, IRQ1및 IRQ12을 갖는다. 제1PAL(U1)은 당업자에게 잘 알려진 바와 같이 메모리 제어기(46)에 의해 발생되는 핀(7)(I6)에서의 활성 하이 신호 RST_DRV 입력에 의해 알려진 초기 상태로 리세트된다.
마이크로제어기(U2)의 리세트 라인(RST751)은 핀(9)에 존재한다. 리세트 서브회로(reset subcircuit)(920)는 RST751산호의 발생을 담당하고, 제6(a)도에 도시된 바와 같이 네 개의 저항(R4, R16, R17 및 R18), EN 개의 커패시터(C1및 C8) 및 두 개의 MOSFET(Q2및 Q3)을 포함하며, 제1PAL(U1) 및 마이크로제어기(U2)와 회로 통신한다. 리세트 서브회로(920)는 제1PAL(U1)로부터의 리세트 출력 신호(RESET)와 미이크로제어기(U2)의 리세트 입력 신호(RST751)를 인터페이스시켜 RESET 라인이 논리1이면, RST751라인은 논리 1로 되어, 마이크로제어기(U2)를 리세트 시킨다.
제1PAL(U1)은 CPU(40)가 논리 1을 제어 포트(OEDH)의 비트 0에 기록하는 것에 응답하여 마이크로제어기(U2)를 리세트시킨다. 논리 1을 제어 포트(OEDH)의 비트 0으로 기록하면 제1PAL(U1)에 의해 RESET 라인이 논리 1로 되고, 이에 따라 RST751라인이 논리 1로 되어, 마이크로제어기(U2)가 리세트된다. CPU(40)는 논리 0을 제어 포트(OEDH)의 비트 0으로 기록함으로써 리세트 요구를 클리어한다.
또한, 리세트 서브회로는 제6(c)도에 도시된 바와 같이, 전원(17)에 대한 AC 소스의 “브라운 아웃(brownout)” 또는 “블랙아웃(blackout)”이 발생하는 동안 AUX5 전압이 떨어진 후에 발생하는 바와 같이, AUX5 신호의 전압이 주어진 양만큼 상승될 때마나, RST751라인을 논리 1로 만들어 마이크로제어기(U2)를 리세트한다. 83C750의 제조자인 필립스(Philips)사는 리세트 문제를 방지하기 위해 간단한 RC 회로의 사용을 제안하지만, 간단한 RC 회로는 83C750이 전원 브라운 아웃(power supply brownout) 동안 래치업(latch up)하도록 허용할 수 있다. 제6(a)도의 특정 구성에 있어서는, AUX5 전압이 R4, R16 및 C1에 의해 결정되는 시정수보다 큰시간 주기내에 임계량(threshold amount)만큼 상승될 때, RST751라인은 R17 및 C8에 의해 결정되는 시간 주기 동안 논리 1로 된다(이에 따라 마이크로제어기(U2)가 리세트된다). 제6(a)도에 도시된 바람직한 실시예에 있어서, 임계값은 대략 1.5VDC이다.
이제 제6(c)도를 참조하면, 리세트 회로(920)의 파형이, AC 전력이 전원(17)에 인가됨에 따라 AUX5가 상승하는 시간 주기와 “브라운 아웃”이 발생하는 동안의 시간 주기에 대해 도시되어 있다. t0전에, 전원은 AUX5를 발생하지 않으며, VBAT는 대략 3.3V이므로, Q3는 도통되고 RST751라인은 접지된다. t0에서, 전원은 AUX5를 발생하기 시작하고, 전압은 AUX5에 영향을 끼치는 전원내 부하 및 커패시터에 기초한 속도로 상승을 시작한다. C1과 R4 사이의 노드인 노드 1은 AUX5와 용량적으로 결합되고, 따라서 노드 1은 AUX5의 상승에 따라서 상승된다.
t1에서, 노드 1은 대략 1.5V에 도달하며, 이것은 Q2를 트리거하기에 충분한 전압이어서, Q2는 도통되며 노드 2는 접지된다. t2에서, 노드 2가 2.5V를 통과함에 따라서, Q3는 도통을 중단하고, RST751라인은 R18을 경유해 AUX5의 레벨까지 점프하고, 대략 5V까지 AUX5와 더불어 상승한다. RST751라인이 대략 3V로 될 때, 마이크로제어기(U2)는 리세트된다.
t2에서, AUX5가 상승을 멈춤에 따라서 노드 1도 상승을 중단하고 C1및 R14에 의해 결정된 속도로 접지[제1PAL(U1)의 RESET 라인이 로우]까지 방전하기 시작한다. t4에서, 노드 1이 대략 1.5V를 통과할 때, Q2는 도통을 중단하고, 노드 2는 C8 및 R17에 의해 결정된 속도로 충전된다. t5에서, 노드 2가 대략 2.5V를 통과할 때, Q3는 도통되고, RST751라인은 접지된다. 따라서, 파워온 시점 리세트(reset on power-on)이 완료되고, 시스템은 통상적으로 AUX5는 5V, VBAT는 3.3V 노드 1은 접지, 노드 2는 VBAT인 상태에 놓인다.
t6에서, AUX5 라인에서 브라운 아웃이 시작되고, AUX5는 방전한다. AUX5에 용량적으로 결합된 노드 1은 AUX5를 추종하려 시도하지만, 추종하지 못하게 되는데, 그 이유는 제1PAL(U1)내 다이오드가 노드 1이 -0.5V보다 훨씬 낮아지는 것을 방지하기 때문이다. t7에서, AUX5는 최저 포인트이고, 다시 상승을 시작한다. 노드 1역시 AUX5를 추종하여 상승된다. t8에서, 노드 1은 대략 1.5V에 도달하고, 이는 Q2를 트리거하기에 충분한 전압이어서, Q2는 도통되며 노드 2는 접지로 된다. t9에서, 노드 2가 2.5V를 통과할 때, Q3는 도통을 중단하고, RST751라인은 R18을 경유해 AUX5의 레벨까지 점프하고, 대략 5V까지 AUX5와 더불어 상승한다. RST751라인이 대략 3V로 될 때, 마이크로제어기(U2)는 리세트된다.
t10에서, AUX5는 상승을 멈추며, 따라서 노드 1역시 상승을 멈추고 C1및 C4에 의해 결정된 속도로 접지[제1PAL(U1)의 RESET 랑인이 로우]까지 방전하기 시작한다. t11에서, 노드 1이 대략 1.5V를 통과할 때 Q2는 도통을 중단하고, 노드 2는 C8 및 R17에 의해 결정된 속도로 충전된다. t12에서, 노드 2가 대략 2.5V를 통과할 때, Q3는 도통되고, RST751라인은 접지된다. 따라서, 브라운 아웃에 기인한 리세트 사이클(brownout-induced reset cycle)이 완료된다. 이러한 특정 브라운 아웃 동안 노드 1은 3V를 초과하여 상승되지 않고, 따라서 노드 1이 RST751핀에 접속된다면, 노드 1은 마이크로제어기를 리세트시키지 않을 것이다. 그러나, AUX5의 전압은 4V 미만으로 낮아지고, 이러한 전압은 마이크로제어기(U2)를 정의되지 않은 상태(undefined)로 진입시키기에 충분할 것이다.
리세트를 트리거하기 위한 임계는 기준값으로 제한되며, 따라서 임계 전압을 상승 또는 저하시키려면, 기준값(본 경우에 있어서 VBAT)은 각각 상승 또는 하강되어야 한다. 본 리세트 회로는 마이크로제어기(U2)에 대한 증대된 리세트 보호의 잇점을 제공하는 동시에, 매우 저렴하고 마이크로제어기(U2)를 리세트하지 않는 동안에는 사실상 전력을 소비하지 않는다.
제6(a)도를 다시 참조하면, 마이크로제어기(U2)는 제1PAL(U1)을 경유해 CPU(40)에 인터페이스되고 다수의 입력, 출력 및 내부적으로 제어가능한 기능을 보유한다.
SWITCH 신호는 핀(8)(P0.0)에서 입력되고, 푸쉬버튼(21)의 현재 상태를 나타낸다. 푸쉬버튼(21)은 통상 오픈되어 있다. 푸쉬버튼(21)이 오픈되어 있는 동안, SWITCH 라인은 저항(R1)을 통해 논리 0(접지)으로 된다. 푸쉬버튼(21)이 눌러졌을 때, 폐쇄 이벤트(closure event)를 야기하여, SWITCH 라인은 저항(R13)을 통해 논리 1이 된다. 커패시터(C6)는 스위치 폐쇄 이벤트(switch closure event)를 디바운스(debounce)하도록 작용한다. 스위치(21)의 폐쇄 이벤트의 임의의 후속 디바운싱은, 당업자에세 잘 알려진 바와 같이, 스위치를 사전설정된 횟수 예를 들면 50회 판독하고, 스위치 라인이 이러한 모든 판독에 대해 동일함을 확인함으로써, 마이크로제어기(U2)내에서 수행된다.
전원(17)의 조절은 마이크로제어기(u2)에 의해 직접적으로 제어될 수 있다. 제6(a)도에서 도시된 바와 같이, ON 신호가 핀(5)(P3.0)에서 출력되고, 저항(R6)을 경유해 SWITCH내 신호와 와이어드 OR(wired-OR)되어 전원의 ON# 신호를 제어한다. ON신호가 논리 1이면, MOSFET Q1은 도통되어 ON# 라인(JP2의 핀2)을 논리 0(접지)으로 이끌며, 이에 의해 전원(17)으로 하여금 ±5VDC 및 ±12VDC 라인을 통해 시스템에 조절 전력을 제공하도록 한다. 다른 한편, ON 라인이 논리 0이면, MOSFET Q1은 도통되지 않으며, 따라서 ON# 라인(JP2의 핀2)은 저항 (R7)에 의해 논리 1로 이끌어져, 전원(17)으로 하여금 ±5VDC 및 ±12VDC 라인을 통해 시스템에 조절 전력을 제공하는 것을 중단하도록 한다.
ON 라인의 상태는 스위치(21)의 폐쇄 이벤트에 응답하여, 또한 CPU(40)에 의해 기록될 수 있는 마이크로제어기(U2)내의 기록가능 레지스터 비트(writable register bit)를 통하여 CPU(40)에 응답하여 제어된다. 마이크로제어기(U2)는 AUX5에 의해 전력을 공급 받으며, 따라서 마이크로 제어기(U2)는 항상 전력을 공급 받아 코드를 실행하고 시스템을 제어한다. 전원(17)이 ±5VDC 및 ±12VDC 라인을 통해 시스템에 조절 전력을 제공하지 않고, (i) 스위치(21_가 눌러지거나 (ii) 외부 이벤트중 하나의 이벤트가 발생한다면 마이크로제어기(U2)는 ON 신호를 단정(assert)하고, 이러한 단정에 의해 전원(17)으로 하여금 ±5VDC 및 ±12VDC 라인을 통해 시스템에 조절 전력을 제공하도록 한다. 마이크로제어기는 스위치(21)가 해제된 후 계속해서 ON 신호를 단정한다.
백업 시스템(backup system)으로서, 전원(17)은 또한 푸쉬버튼(21)을 통해 사용자의 직접적인 제어하에서 턴온될 수 있다. 이러한 옵션은 전형적으로, 전력 버튼(21)의 누름에 응답하여 파워업되지 않은 시스템에 의해 입증되는 바와 같이 마이크로제어기(U2)가 예상대로 기능하지 않는 경우에만 사용될 것이다. 제6(a)도에 도시된 바와 같이, 스위치(21)는 또한 다이오드(CR2), MOSFET Q1, 저항(R7) 및 커넥터(JP2)를 통해 전원(17)의 ON# 라인을 제어한다. 통상적으로, 푸쉬버튼(21)은 오픈이고, MOSFET Q1은 도통이 아니며, 따라서 ON# 라인(JP2의 핀2)은 레지스터(R7)에 의해 논리 1(AUX5)로 이끌리고, 전원(17)은 ±5VDC 및 ±12VDC 라인을 통해 조절 전력을 제공하지 않는다. 푸쉬버튼(21)이 사용자에 의해 눌러진 상태로 유지되면, SWITCH 라인은 논리 1로 이끌리고, MOSFET Q1은 도통되어 ON# 라인(JP2의 핀2)을 논리 0(접지)으로 이끌며, 이에 의해 전원(17)이 ±5VDC 및 ±12VDC 라인을 통해 조절 전력을 제공하기 시작한다. 버튼(21)이 계속 눌러진 상태에서, 시스템에 전력이 공급된 후, BIOS는 CPU(40)로 하여금 마이크로제어기(U2)가 아직 기능하는지를 테스트한다. 테스트 결과 마이크로제어기(U2)가 기능하지 않는 것으로 판단되면, CPU(40)는 마이크로제어기(U2)를 리세트하고, 이 마이크로제어기(U2)는 리세트된 후 스위치(21)가 계속 눌러지고 있음을 검출한다. 결과적으로, 버튼(21)이 계속 눌러진 상태에서, 마이크로제어기는 ON 신호를 단정하고, 사용자는 이제 마이크로제어기가 전원(17)울 제어하고 있음을 인식하여 결국 스위치(21)를 해제할 수 있다. 이러한 백업 옵션을 사용하기 위해, 사용자는 로고(logo)가 나타난 후 대략 2초 정도의 시간 주기 동안 버튼(21)을 눌러야만 한다.
마이크로제어기(U2)는 (i) 스위치(21)가 눌러지거나 (ii) CPU(40)가 시스템을 턴오프하도록 마이크로제어기에 지시하는 것에 응답해서만 시스템을 턴오프한다. 마이크로제어기에게는 이들 이벤트가 동일한데, 그 이유는 마이크로제어기는 스위치 누름이 스위치(21)의 폐쇄 이벤트가에 의해서도 혹은 CPU(40)에 의해서도 야기될 수 있도록(즉, 하드웨어 버튼 누름/해제(hardware button press/release)가 소프트웨어 버튼 누름/해제와 사실상 동일하게 다루어지도록) 구성되어 있기 때문이다. 마이크로제어기(U2)는 단지 마이크로제어기(U2)내의 중지 인에이블 플래그가 클리어되어 있는 경우, CPU에 의한 커맨드 없이 시스템을 중지시킨다. 이러한 경우에 있어서, 시스템에 전력이 공급되고 중지 인에이블 플래그가 클리어되어 있으면, 스위치(21)의 폐쇄 이벤트에 응답하여, 마이크로제어기(U2)는 ON 신호를 클리어시켜, 전원(17)이 ±5VDC 및 ±12VDC 라인을 통해 조절 전력을 제공하는 것을 중지시킨다. ON 신호는 스위치(21)가 해제된 후 클리어된 채로 남아 있는다.
시스템 상태가 하드 디스크 드라이브에 성공적으로 보관된(중단된) 후 명령이 내려질 때, 마이크로제어기(U2)는 CPU에 의한 커맨드에 응답하여 시스템을 또한 턴오프시킨다. 이러한 커맨드에 응답하여, 마이크로제어기(U2)는 ON 신호를 클리어시키며, 이에 의해 전원(17)이 ±5VDC 및 ±12VDC 라인을 통해 조절 전력을 제공하는 것을 중지시킨다.
또한 마이크로제어기(U2)는 또한 소정의 외부 이벤트가 야기되면, 이를 검출하고, 시스템에 영향을 끼칠 수 있다. EXT_RING 신호가 핀(7)(P0.1)에서 입력되어, 마이크로제어기(U2)가 전력이 공급된 외장 모뎀(902)으로부터의 링(ring)을 검출할 수 있도록 한다. 당업자에게 알려진 바와 같이, 전형적인 외장 모뎀은 링 신호가 팁(tip)과 링 전화선 양단에서 검출될 때 잘 알려진 RS-232C 포맷에서 논리 1로 토글되는 링 신호를 공급한다. 이 신호는 다이오드(CR6)를 경유해 마이크로제어기(U2)에 인터페이스되고, 저항(R10 및 R11)에 의해 분할되어, 최종적으로 EXT-RING 라인을 경유해 마이크로제어기(U2)로 입력된다. 토글 신호(toggling signal)는 매 25초마다 샘플링되고, 마이크로제어기(u2)에 의해 분석되어, 이러한 입력이 두 개의 연속적인 샘플 동안 논리 1일 때에는 언제나 링이 존재하는 것으로 판단한다. 이러한 조건이 충족되는 것에 응답하여, 마이크로제어기(U2)는 ON 신호를 단정하고, 이에 의해 전원(17)이 ±5VDC 및 ±12VDC 라인을 통해 조절 전력을 제공하도록 한다. 인입 전화 호출을 검출하기 위해 사용될 EXT_RING 신호를 위해서는, 외부 전력 공급형 모뎀(902)이 제공되어야 한다.
이와 달리, RS-232사양에 따라 2진 신호를 제공하는 (또는 EXT_RING 신호를단정하도록 충분히 근사한) 다른 장치가 EXT_RING 라인에 인터페이스되어, 시스템 예를 들면 모션 센서(motion sensors), 버글러 알람센서(burglar alarm sensors), 음성 활동 센서(voice activated sensors), 광센서(light sensor), 적외선 센서(infrared light sensor), “클래퍼(clapper)”형 센서 등의 시스템을 기상시키는데 사용될 수도 있다.
제6(a)도 및 제6(b)도에 도시된 바와 같이, 본 실시예는 또한 링 검출 회로(ring-detect circuit)에 기초한 광절연제(optoisolator)(OPT01)를 포함하는 내장 모뎀(900)으로부터 전화 링 신호를 검출하기 위한 수단을 포함한다. 예를 들어 휴렛-팩카드사 등에 의해 제조된 많은 적절한 광절연제를 수많은 구입처로부터 쉽게 구입할 수 있다. 내장 모뎀(900)은 시스템 플래이너(20)의 회로내에 설계되거나 확장 슬롯(expansion slots)(78)중 하나의 슬롯에 배치될 수 있다. 후자의 경우에 있어서, 모뎀(900)은 베르그(Berg) 또는 유사한 커넥터를 제공하도록 수정되어 광절연체(OPT01)로부터의 신호가 제6(a)도의 전력 관리 회로의 회로에 전기적으로 접속되도록 허용해야만 한다. 많은 모뎀 제조자는 그들의 내장 모뎀을 수정하여 본 발명의 회로와 더불어 사용하기에 적합한 커넥터를 제공한다. EXT_WAKEUP# 신호는 마이크로제어기(U2)의 핀(4)(P0.2)에서 입력되며, 링 검출 광절연체(OPT01)로부터의 신호를 내장 모뎀(900)으로 입력시키는 데 사용된다. 이 신호는 저항(R9 및 R5), 다이오드(CR6) 및 커패시터(C9)를 경유해 인터페이스되고, EXT WAKEUP# 라인을 경유해 마이크로제어기(U2)내에 최종적으로 입력된다.
내장 모뎀(900)의 임계 및 보호부(threshold and protection portion)(905)는 표준 팁 및 링 전화선에 접속되고, 모뎀 설계 분야의 당업자에게 알려진 바와 같이, (i) 뇌방전(lightening) 및 모뎀(900)에 손상을 끼칠 수 있는 다른 전기적 이벤트(electrical events)로부터 보호하고, (ii) 링 임계 전압(ring threshold voltage)을 설정한다.
광절연체(OPT01)로부터의 토글 신호는 마이크로제어기(U2)에 의해 검출 및 분석되고, EXT_WAKEUP상의 신호의 세 개의 연속적인 신호 주기가 15.1㎐와 69.1㎐ 사이의 주파수를 가질 때에는 언제나 링이 존재하는 것으로 판단한다. EXT_RING을 따라 링 신호를 제공하기 위해 전력이 공급되어야 하는 EXT_RING 신호 회로와는 달리, 내장 모뎀(900)은 EXT_WAKEUP# 라인을 따라 적절한 신호를 공급하기 위해 광절연체(OPT01)에 전력이 공급될 필요가 없으며, EXT_WAKEUP# 라인은 통상 R5에 의해 AUX5까지 이끌어진다.
CPU(40)가 시스템 관리 인터럽트(system management interrupt:SMI)를 허용하면(CPU(40)는 본 발명의 다수의 잇점을 취하는데 유용한 시스템을 위해 SMI를 포함할 필요는 없다), 마이크로제어기(U2)는 CPU의 시스템 관리 인터럽트(SMI)를 경유해 CPU(40)를 인터럽트할 수 있다. SMI_OUT# 신호는 마이크로제어기(U2)의 핀(3)(P3.2)에서 출력되고, 마이크로제어기(U2)는 이를 통하여 CPU(40)를 즉시 인터럽트 할 수 있으므로 운영 체제가 이 인터럽트를 유효로 하거나 혹은 허용할 때를 기다리지 않아도 된다. SMI_OUT# 라인의 상태는, CPU(40)에 의해 기록될 수 있으며 마이크로제어기(U2)내에 위치하는 기록가능 레지스터 비트(writable register bit)에 의해 제어된다. CPU(40)에 의해 기록될 수 있다. 또한, 마이크로제어기(U2)는 SMI_OUT# 신호를 단정할 수 있으며, 이에 의해 (i) ACTIVITY# 라인상에서 검출되는 활동에 응답하거나 (ii) 마이크로제어기(U2)가 전원(17)로 하여금 시스템에 조절 전력을 제공하는 것을 중지시키기 전에 CPU(40)를 인터럽트할 수 있다. 이들 이벤트의 어느 한 쪽 또는 양 쪽 모두는 CPU로부터 마이크로제어기(U2)로의 명령에 의해 인에이블 및 디스에이블될 수 있다.
각각의 SMI, CPU(40)내 마이크로코드(microcode)는 CPU의 상태를 메모리로/로부터의 특정 CPU 상태 보관 영역에 보관한다. 그 후, CPU(40)는 SMI 인터럽트 처리기(interrupt handler)를 실행하고, 이 처리기는 아래의 기능을 수행한다. CPU의 상태를 회복하기 위해, SMI 인터럽트 처리기는 RSM(재개) 인스트럭션을 발생하여, CPU(40)가 특정 보관 영역으로부터 자신의 상태를 회복하도록 한다.
CPU(40)가 마이크로제어기(U2)로 하여금 CPU의 SMI를 경유해 CPU(40)를 인터럽트하도록 하기에 앞서, CPU(40)는 SMI의 이유를 표시하는 CMOS NVRAM내의 변수에 기록한다. CMOS NVRAM내의 이 값은 디폴트 00H값을 가지며, 이것은, 마이크로제어기(U2)가 전원(17)으로 하여금 조절 전력을 제공하는 것을 중지시키도록 하기에 앞서 인터럽트가 발생하는 바와 같이, 마이크로제어기(U2)가 CPU(40)를 비동기적으로 인터럽트하고 있다는 것을 CPU(40)에 표시한다. 각각의 SMI후에, CPU(40)는 CMOS NVRAM내의 그 변수를 00H로 설정한다. 이러한 값에 응답하여, CPU(40)는 시스템이 마이크로제어기(U2)에 의해 긴박하게 파워 다운(power down)되고 있다는 가정하에서 소정의 태스크(tasks)를 수행한다. CPU(40)는 마이크로제어기(U2)내의 파워 다운 연장 타이머(power down extend timer)를 주기적으로 재시작함으로써 마이크로제어기(U2)가 시스템을 파워 다운시키기에 앞서 시간 주기를 연장할 수 있다.
시스템이 파워 다운되기 전의 이러한 시간 주기 동안, CPU(40)는 다수의 태스크를 수행할 수 있다. 예를 들면 사용자가 기상 알람에 영향을 끼치는 하나 이상의 파라미터를 변경시켰을 수도 있기 때문에, CPU는 기상 대기 분값을 재계산하여 마이크로제어기(U2)에 기록한다. 또한, CPU는 컴퓨터 시스템이 최종적으로 파워온된 이래로 동작한 시간 주기와 같은, 차후에 하드 드라이브(31)에 기록될 소정의 정보를 CMOS NVRAM에 기록한다.
CPU(40)에 의해 기록되는 다른 값은 CPU(40)가 참조 번호(254)에서 중지 루틴(Suspend Routine)으로 점프될 것이라는 것을 나타내는 01H, CPU(40)가 참조 번호(454)에서 재개 루틴(Resume Routine)으로 점프될 것이라는 것을 나타내는 02H 및 CPU(40)가 세그먼트 E000H 데이타 구조내 특정 CPU 상태 보관 영역(special CPU state save area)을 셋업시킬 것이라는 것을 표시하는 0FFH를 포함한다.
바람직한 실시예에 있어서, 마이크로제어기(U2)는 디스플레이(11)의 블랭크에 관한 제어를 제공한다. DISP_BLANK 신호는 마이크로제어기(U2)의 핀(1)(P3.4)을 경유해 출력되고, 디스플레이(11) 블랭킹을 직접적으로 제어한다. 두 개의 인버터(U3D 및 U3E)가 DISP_BLANK 신호와 ESYNC# 및 BLANK# 라인을 인터페이스시킨다. ESYNC# 및 BLANK# 라인이 논리 1인 상태에서, 비디오 제어기(56)는 비디오 신호를 발생한다. BLANK# 및 ESYNC#가 논리 0(접지)이면, 비디오 제어기(56)는 비디오 신호 발생을 중지시킨다. DISP_BLANK 라인의 상태는 CPU(40)에 의해 기록되며 마이크로제어기(U2)내에 위치한 기록가능 레지스터 비트에 의해 제어된다. CPU(40)는 시스템이 대기 상태(152)로 진입할 때 마이크로제어기(U2)에 지시하여 디스플레이를 블랭크하도록 한다. 또한, DISP_BLANK 라인이 순차적으로 SET 상태로 되며, 그 후 스위치(21)의 폐쇄 이벤트에 응답하여 클리어된다. 유사하게, 본 경우에 있어서 INT1및 INT12인 활동 인터럽트중 임의의 한 인터럽트에서의 활동은 마이크로제어기로 하여금 DISP_BLANK 라인을 클리어(CLEAR)하도록 하여, 비디오 제어기(56)가 LELDH 신호를 발생하도록 허용한다.
또한, 마이크로제어기(U2)는 클럭 신디싸이저(906)에 의해 발생되는 클럭 신호의 주파수를 제어한다. 세 개의 베르그형 점퍼(Berg-type jumpers)(도시되지 않음)(JP0, JP1및 JP2)는 다음과 같이 클럭 신디싸이저를 제어한다. 즉, JP0=0, JP1=1및 JP2=0이면, 클럭 신디싸이저는 33㎒ 클럭 신호를 발생하고 JP0=1, JP1=1및 JP2=0이면 클럭 신디싸이저는 25㎒ 클럭 신호를 발생하며, JP0=0, JP1=1및 JP2=1이면, 클럭 신디싸이저는 8㎒ 클럭 신호를 발생한다. 클럭 신디싸이저(906)는 JP0, JP1및 JP2에 대응하는 세 개의 클럭 라인(CLK0, CLK1및 CLK2)에 의해 또한 제어된다. 제6(a)도에 도시된 바와 같이, 이들 클럭 라인(CLK0, CLK1및 CLK2)은 마이크로제어기(U2)의 핀(2)(P3.3)에서 출력되는 CLK_SLOW# 신호를 통하여 마이크로제어기(U2)에 의해 제어된다. 도시된 바와 같이, CLK_SLOW# 신호는 오픈 콜렉터 출력단(open collector output)(U3A,U3B 및 U3C)에 의해 이중 반전(doubly invert)된다. 또한, 저항(R15 및 R8은) U3A의 오픈 콜렉터 출력 및 클럭 신디싸이저(906)로의 CKL0 입력을 각각 놀리 1로 이끄는데 사용되는 풀업저항(pullup resistor)이다.
세 개의 클럭 신호(CLK0, CLK1및 CLK2) 및 세 개의 점퍼(JP0, JP1및 JP2)는 다음과 같이 클럭 신디싸이저를 제어한다. 즉, CLK_SLOW#가 논리 1이면, CLK1및 CLK2신호 역시 논리 1이며, 결과적으로, 클럭 신디싸이저(906)는 점퍼(JP1, JP2)에 의해 제어되고, 시스템에 의해 사용하기 위한 보다 높은 25㎒ 또는 33㎒ 클럭 신호를 발생한다. 다른 한편, 클럭 CLK_SLOW# 신호가 논리 0이면, CLK1및 CLK2신호 역시 논리 0으로 되고, 결과적으로, 클럭 신디싸이저(906)는 시스템에 의해 사용하기 위한 보다 낮은 8㎒ 신호를 발생하여, 시스템이 전력을 적게 소비하도록 한다. 제6(a)도에 도시된 바와 같이, 베르그형 점퍼는 CLK0 라인으로부터 CLK_SLOW# 라인을 분리시킨다. 점퍼가 제자리에 위치되면, CLK0 라인은 CLK_SLOW# 신호를 추종한다. 다른 한편, 점퍼도 제위치에 있지 않으면, CLK0 라인은 CLK_SLOW# 신호의 상태에 관계없이 저항(R8)에 의해 논리 1로 이끌어진 채로 남아 있는다. CLK_SLOW# 라인의 상태는 CPU(40)에 의해 기록되고 마이크로제어기(U2)내에 위치될 수 있는 기록가능 레지스터 비트에 의해 제어된다. 또한, CLK_SLOW# 라인은 ACTIVITY# 라인에서의 활동에 응답하여 마이크로제어기(U2)에 의해 클리어될 수 있다. 당업자에게 자명한 바와 같이, 다른 클럭 신디싸이저가 본 발명에 사용될 수 있으며, 사용된 특정 신디싸이저의 특정 사양을 일치시키기 위해 마이크로제어기(U2)와 클럭 신디싸이저간의 상호 접속이 변경될 필요가 있을 수도 있다.
또한, 마이크로제어기(U2)는 전력/피드백 LED(23)의 조명(illumination)을 직접적으로 제어한다. LED_CNTRL 신호는 핀(22)(P3.6)에서 출력되고, 마이크로제어기(U2)에 의한 전력/피드백 LED(23)의 직접적인 제어를 허용한다. 저항(R2및 R3) 및 다이오드(CR4 및 CR5)는 전력/피드백 LED(23)가 논리 0인 LED_CNTRL 라인에 응답하여 AUX5 전력 라인이나 VCC 전력 라인에 의해 구동되는 것을 허용한다. LED_CNTRL 라인이 논리 1이면, 전력/피드백 LED(23)는 조명되지 않는다. 이하 보다 상세히 기술되는 바와 같이, LED_CNTRL 라인의 상태는 스위치(21)의 폐쇄 이벤트에 응답하여, 혹은 기상 알림에 응답하여, 혹은 링 검출 입력에서의 하나 이상의 링에 응답하여 혹은 시스템이 대기 모드로 되는 것에 응답하여 마이크로제어기(U2)에 의해 제어된다.
마이크로제어기(U2)는 LED(23)를 단순 전력 LED로서 제어할 수 있다. 이와 같이 하여, LED(23)는 시스템을 오프 상태(156)나 중지 상태(154)에서 정상 동작 상태(150)로 변경하는 스위치(21)의 폐쇄 이벤트 이후에 조명된다. 마찬가지로, 마이크로제어기(U2)는 시스템을 정상 동작 상태(150)에서 중지 상태(154)나 오프 상태(156)로 변경시키는 스위치(21)의 해제후에 LED(23)를 소등한다.
또한, LED(23)는 마이크로제어기(U2)에 의해 특정 속도, 예를 들어 매초마다 선택적으로 플래쉬되어, 시스템이 대기 상태(152)라는 것을 표시할 수 있다. 또한, LED(23)는 마이크로제어기(U2)에 의해 상이한 속도, 예를 들어 1/2초마다 선택적으로 플래쉬되어, 시스템이 링 또는 알람에 의해 시작되었고, 시스템이 오프 상태나 중지 상태라는 것을 표시할 수 있다. 대안적으로, 중지 상태 동안, LED(23)는 마이크로제어기(U2)에 의해 그룹을 지어 선택적으로 플래쉬되어, 시스템이 링, 알람등의 외부 이벤트에 의해 파워업된 횟수 및 비활동 중지 타이머의 종료에 의해 다시 파워 다운된 횟수를 표시할 수도 있다. 이 경우에 있어서, BIOS에는 하나 이상의 기능이 제공되어 OS 및 응용 프로그램이 마이크로제어기(U2)가 LED(23)를 플래쉬 할 횟수를 수정할 수 있도록 허용한다. 예를 들면, 시스템이 링에 의해 기상 되고, 인입 팩시밀리 전송이 수신되면, 통신 응용 프로그램은 특정 BIOS 기능을 호출하여 플래쉬 횟수에 하나의 플래쉬를 더할 수 있다. 그 후, BIOS는 CPU(40)로 하여금 새로운 플래쉬값을 마이크로제어기(U2)에 기록하도록 한 다음, LED(23)가 지시된 횟수만큼 플래쉬하도록 한다.
POWERGOOD 신호는 마이크로제어기(U2)의 핀(4)(P3.1)에서 입력되고, 마이크로제어기(U2) 및 CPU(40)가 이 신호를 사용하는 것을 허용한다. 특히, 마이크로제어기는 POWERGOOD 신호를 사용하여 피드백을 기초로 한 고장 검출 및 정정 회로(feedback-based fault detection and correction circuit)를 구현함으로써 전원(17)에 고장이 있는지를 판정하여 고장을 일으킨 상태를 클리어시킨다. 본 명세서의 다른 곳에서 설명된 바와 같이, ON 신호가 어느 시간 주기(예를 들면, 3초) 동안 단정되었고, POWERGOOD 신호다 전원(17)이 적절한 레벨의 조절 전압을 제공하지 않고 있다는 것을 표시하는 논리 0이라면, 마이크로제어기(U2)는 전원(17)이 예를 들어 과전류 상태로 인해 고장을 일으킨 것으로 상정한다. 결과적으로, 고장을 일으킨 상태를 가능한 클리어시키기 위해, 마이크로제어기(U2)는 어느 시간 주기(예를 들면, 5초) 동안 ON 신호를 단정하는 것을 중단하여 고장이 클리어될 수 있도록 한다. 그 후 마이크로제어기(U2)는 ON 신호를 재단정하고, POWERGOOD 신호가 전원(17)이 이제 시스템에 조절 전력을 제공하고 있다는 것을 표시하는 논리 1이 될 때까지 기다린다. 이러한 피드백에 기초한 고장 검출 및 정정 회로가 없다면, 전원(17)은 고장을 일으킨 채 남아 있을 것이고, 마이크로제어기(U2)는 전원(17)이 조절 전력을 발생하기 시작하도록 계속적으로 ON 신호를 단정할 것이다. 유일한 해결법은 고장을 클리어시키기위해 전원으로부터 AC 전력을 제거하는 것 외에는 없을 것이다.
제6(d)도에는 전원 고장 검출 및 정정 회로의 대안적인 실시예가 도시되어 있다. 이 실시예는 네 개의 FET(Q10-Q13), 저항(R20-R23), 커패시터(C20) 및 74HC132를 사용하여 전원(17)이 고장을 일으켰을 때는 검출하고 고장을 클리어한다. Q12는 R22및 C20에 의해 결정되는 시간 주기 동안 ON 신호를 LOW로 이끌며, ON 신호가 HIGH일 때, AUX5에는 전력이 공급되고, VCC는 Q11을 트리거하기 위한 임계치 미만이며, 이에 의해 전원내 고장 상태를 클리어한다.
ACTIVITY# 신호는 마이크로제어기(U2)의 핀(19)(INT1)에서 입력되고, 마이크로제어기(U2)에 의해 사용되어 키보드(12) 및 마우스(13)에서의 활동에 응답한다. IRQ1은 키보드 하드웨어 인터럽트 신호로서, 제1PAL(U1)의 핀(8)(17)에서 입력되고, 키보드(12)상의 키를 누르면 IRQ1신호가 펄스된다. IRQ12는 마우스 하드웨어 인터럽트 신호로서, 제1PAL(U1)의 핀(11)(19)에서 입력되고, 마우스(13)의 버튼을 누르면 IRQ12신호가 펄스된다. IRQ1및 IRQ12신호는 제1PAL(U1)내에서 논리적으로 OR이고, ACTIVITY# 신호로써 출력된다. ACTIVITY# 신호를 사용해 마이크로제어기(U2)가 키보드(12)나 마우스(13)의 활동을 결코 놓치지 않도록 한다.
대기 상태 동안, 키보드 혹은 마우스 인터럽트상의 활동은 마이크로제어기로 하여금 비디오 디스플레이를 즉시 회복하도록 한다. 이러한 방식으로 인터럽트(IRQ1및 IRQ12)를 사용하여 사용자에게 대기 상태(152)에서 정상 동작 상태(154)로 복귀할 때 회복된 비디오 디스플레이 형태로 즉각적인 피드백을 제공한다. 이러한 방식을 사용하지 않는다면, 제9도를 참조하여 설명하는 바와 같이, 사용자는 수토가 경과하면 APM이 사용자 활동을 체크할 때까지 피드백을 수신할 수 없을 것이다.
CPU(40)와 마이크로제어기(U2)간의 통신은, 제1PAL(U1) 핀(18)(I/06)에서 입력되어 (제1PAL(U1)의 핀(13)(I/03)에서 출력되고 마이크로제어기(U2)의 핀(13)(P1.0)에서 입력되는) RWD(0) 라인을 경유해 마이크로제어기(U2)에 입력되는 SD(0)와, 마이크로제어기(U2)의 핀(14)(P1.1)에서 입력되는 SD(1)와, 마이크로제어기(U2)의 핀(15)(P1.2)에서 입력되는 SD(2)와, 마이크로제어기(U2)의 핀(16)(P1.3)에서 입력되는 SD(3)와, 제1PAL(U1)1)의 핀(6)(15)에서 출력되는 SD(4)와, 마이크로제어기(U2)의 핀(18)(INT0)에서 입력되는 IO_STROBE# 및 마이크로제어기(U2)의 핀(20)(P1.7)에서 출력되는 PROC_RDY를 사용해 수행된다. 제1PAL(U1) 및 마이크로제어기(U2)는 (i) RDW0을 경유한 SD(0), SD(1),SD(2) 및 SD(3)를 따라 CPU(40)로부터 마이크로제어기(U2)로 기록되는 4비트 병렬기록 (하나의 어드레스는 마이크로제어기(U2)를 리세트시키기 위한 본질적으로 1비트 기록이며 다른 어드레스는 데이타 비트SD(4)가 HIGH일 때만 유효한 마이크로제어기(U2)에 기록되는 니블(nibble)과, (ii) RDW(0)을 경유한 SD(0)을 따라 CPU(40)에 의해 마이크로제어기(U2)로부터 직렬(1비트) 판독 (하나의 어드레스는 상태 비트에 대응하고 다른 어드레스는 마이크로제어기(U2)로부터의 데이타 비트에 대응)을 제공하도록 구성 및 프로그램된다.
제19도를 참조하면, 참조 번호(1160)로부터 시작하여 마이크로제어기(U2) 상에서 실행되는 여러 루틴이 도시되어 있다. 마이크로제어기(U2)는 통상 두 개의 메인 루틴(main routine), 즉 태스크(1168에서 1216까지)의 파워온 루틴 또는 태스크(1260에서 1308까지)의 파워오프 루틴중 하나의 루틴을 실행한다. 파워온 루틴은 전원(17)이 ±5 및 ±12라인에서 조절 전력은 제공하거나 또는 전원(17)이 ±5 및 ±12라인에서 조절 전력을 제공하지 않으나 시스템은 파워온 프로세스에 있을 때, 마이크로제어기(U2)에 의해 실행된다. 파워오프 루틴은 전원(17)이 ±5 및 ±12라인에서 조절 전력을 제공하지 않거나 또는 전원(17)이 ±5 및 ±12라인에서 조절 전력을 제공하나 시스템은 파워오프 프로세스중에 있을 때, 마이크로제어기(U2)에 의해 실행된다. 또한, 세 개의 인터럽트 구동 루틴(interrupt-driven routine), 즉 CPU(40)와 통신하는 루틴(1220에서 1232까지), 마우스(13) 또는 키보드(12)의 활동을 검출하는 루틴(1236에서 1244까지) 및 25밀리초, 1/2초, 1초 및 1분의 분해능으로 시간축(time-base)을 제공하는 루틴(1248에서 1256까지)이 존재한다.
먼저, 마이크로제어기(U2)는 태스크(1164)에서 초기화되는데, 이 시간 동안 모든 변수가 초기화되고, 카운터 변수가 초기화되고, 타이머 인터럽트는 초기화 및 인에이블되며, 통신 루틴 및 활동 루틴을 제어하는 외부 인터럽트가 초기화된다.
통신 루틴은 태스크(1220)에서 시작되는 인터럽트 구동 루틴으로서, IO_STRORE 라인이 제1PAL(U1)에 의해 논리 0으로 되는 것에 응답하여 실행되고, 이것은 CPU(40)가 커맨드 또는 질의(command or query)를 시작한다는 것을 나타낸다. 요약하면, 이 루틴은 태스크(1224)에서 CPU(40)로부터 하나 이상의 니블 커맨드 또는 질의(one or more nibble command or query)를 수신하고, 테스크(1228)에서 그 커맨드를 구현 및/또는 질의에 응답하는 데이타를 복귀시키고, 태스크(1232)에서 인터럽트되었던 코드로 프로그램 실행 제어를 복귀시킨다.
마이크로제어기 CPU로부터 커맨드 또는 질의를 형성하는 니블을 순차적으로 수신한다. 하나의 니블을 수신한 후, 마이크로제어기(U2) PROC_RDY를 LOW로 만든다. 마이크로제어기는 다음 니블을 수신할 준비가 되었을 때 PROC_RDY를 다시 HIGH로 만든다. CPU(40)는 PROC_RDY가 LOW에서 HIGH로 전이되는 것을 검출할 시 다음 커맨드 니블을 기록할 수 있다.
마이크로제어기(U2)가 CPU(40)로부터 커맨드 또는 질의를 구현하는 동안, 마이크로제어기(U2)는 다른 커맨드를 수신할 수 없으며, 따라서 마이크로제어기(U2)는 PROC_RDY 라인을 논리 0으로 제어하여 마이크로제어기가 다음 커맨드/질의를 아직 수용할 수 없다는 것을 (상태 포트의 판독을 통해) CPU(40)에 나타낸다. 구현이 완료되었을 때, PROC_RDY 라인은 마이크로제어기(U2)가 다음 커맨드/질의를 수용할 준비가 되었음을 (상태 포트의 판독을 통해) CPU(40)에 표시하는 논리 1로 단정된다.
활동 루틴은 태스크(1236)에서 시작되는 인터럽트 구동 루틴으로서, ACTIVITY# 라인이 제1PAL(U1)에 의해 논리 0으로 되는 것에 응답하여 실행되며, 이것은 사용자가 마우스(13)나 키보드(12)를 사용하였다는 것을 나타낸다. 요약하면, 인터럽트 수신에 응답하여, 이 루틴은 (i) 마우스(13)나 키보드(12) 활동이 존재함을 나타내는 비트를 세트시키고, (ii) 클럭 감속이 인에이블 상태이면 클럭 속도를 회복시키고, (iii) 블랭크가 인에이블 상태이면 스크린(11)을 블랭크 상태로부터 회복시키고, (iv) 고장 안전 타이머를 재시작하며, (v) 태스크(1240)에서 인에이블되면 CPU(40)에 SMI를 발생시킨다. 그 후, 이 루틴은 (1244)에서 프로그램 실행 제어를 인터럽트되었던 코드로 복귀시킨다. 그런 다음, 이러한 루틴에 의해 세트된 비트는, 본 명세서의 다른 곳에서 상세히 설명된 바와 같이, 매 APM “획득 이벤트(get event)”마다 감독 루틴에 의해 질의된다.
타이머 루틴은 태스크(1248)에서 시작되는 인터럽트 구동 루틴으로서, 마이크로제어기(U2)에 시간축을 제공하기 위해 매 25밀리초마다 인터럽트를 발생하도록 구성된 16비트 프리러닝 카운터(16-bit free-running counter)에 기초한 내부 타이머 인터럽트에 응답하여 실행된다. 타이머 루틴은 25밀리초, 1/2초, 1초 및 1분과 같은 시간축을 제공한다. 요약하면, 이러한 루틴은 인터럽트를 수신하고, 각종 시간이 발생할 때를 결정하여, 태스크(1252)에서 적절한 활동을 수행하고, 태스크(1256)에서 프로그램 실행 제어를 인터럽트되었던 코드로 복귀시킨다.
매 순간(매 25밀리초), 전원이 조절 전력을 제공하지 않고, 마이크로제어기가 링에 응답하도록 구성되어 있으면, 타이머 루틴은 EXT_RING 라인상의 RS-232링에 대한 체크를 하여 링이 발생한 경우 비트를 세트시킨다.
오프 상태나 중지 상태인 매 1/2초 동안, 타이머 루틴은 본 명세서의 다른 곳에서 상세히 설명된 외부 링 표시기 플래싱 발생시 기상 시퀀스(awake an external ring indicator flashing sequence)를 구현하기 위해 LED(23)를 토글해야 하는지를 판정한다.
매초의 대기 상태 동안, 타이머 루틴은 본 명세서에 상세히 설명된 중지 표시기 플래싱 시퀀스(suspend indicator flashing sequence)를 구현하기 위해 LED(23)를 토글해야 하는지를 판정한다.
또한, 매 초마다, 타이머 루틴은, 적절하다면, 고장 안전 타이머, APM 고장 중지 타이머 및 전원 고장 타이머를 감소시키고, 임의의 타이머가 종료되었으면 대응하는 비트를 세트시킨다. 고장 안전 타이머는 마이크로제어기로 하여금 고장 안전 타이머가 턴오프될 때 시스템을 턴오프하도록 하는 20초 타이머이다. 고장 안전 타이머는 흔히 APM 획득 이벤트에 응답하여 감독 루틴에 의해 재시작(리세트)되며, 따라서 CPU(40)상에서 실행중인 코드가 적절히 실행되는 한, 고장 안전 타이머는 결코 종료되지 않는다. 그러나, 코드가 적절히 실행되지 않게 되면, 고장 안전 타이머는 종료되고, 전력 버튼(21)의 누름 및 해제에 응답하여 마이크로제어기(U2)는 BIOS 및 기타 루틴이 실패하였다는 가정하에서 전원(17)으로 하여금 ±5 및 ±12라인에서 조절 전력을 제공하는 것을 중단하도록 시킨다.
APM 고장 중지 타이머(APM fail-suspend timer)는 스위치(21)가 (사용자가 시스템을 턴오프하려 한다는 것을 나타내는) 오프/해제 상태인 경우 인에이블되고, 시스템으로 하여금 이 타이머 종료시 (원컨대 고장 안전 타이머가 종료되기 전에) 중지를 시도하도록 하여, 마이크로제어기가 시스템을 턴오프시키도록 하는 18초 타이머이다. 고장 안전 타이머가 마찬가지로, APM 고장 중지 타이머는 CPU(40)상에서 실행되는 코드, 예를 들면 APM 획득 이벤트에 의해 흔히 재시작되므로, CPU(40)상에서 실행중인 코드가 적절히 실행되는 한, APM 고장 중지 타이머는 결코 종료되지 않는다. 그러나, 코드가 적절히 실행되지 않게 되면, APM 고장 중지 타이머는 종료된다.
APM 고장 중지 타이머가 종료되는 경우, 마이크로제어기(U2)는 하나의 비트를 세트한다. 이 비트는 각각의 타이머 레벨 0 인터럽트 동안 체크되고, 이러한 인터럽트는 당업자에게 잘 알려진 바와 같이 대략 55밀리초마다 발생한다. 또한, 타이머 레벨 0 인터럽트 서비스 루틴은 고장 안전 타이머를 재시작시킨다. 타이머 레벨 0 인터럽트 서비스 루틴이 APM 고장 중지 타이머가 종료되었다는 것을 검출하면, 제10도를 참조하여 설명되는 바와 같이 중지 루틴으로 점프하여 시스템을 중단시키려 할 것이다.
타이머 레빌 0 인터럽트 서비스 루틴에 의해 시작된 중지는 바람직한 중지 방법이 아니다. 다수의 응용 프로그램 및 어댑터는 APM을 인식하고 있고 시스템이 중지되는 것에 응답하여 태스크를 수행한다. 타이머 레벨 0 인터럽트 서비스 루틴에 의해 시작된 중지는 이들 APM 인식 엔티티 중지가 임박했음을 나타내기 위해 APM을 사용할 수 없다. 결과적으로, 시스템은 이들 엔티티가 적절히 준비되지 못한 채 중지될 수 있다. 이처럼 하여, 시스템의 상태는 타이머 레벨 0 인터럽트 서비스 루틴에 의해 시작되는 중지에 의해 보관될 것이며 메모리내의 데이타는 손실되지 않겠지만, 사용자는 원하는 데이타가 보관된 후 시스템을 적절한 상태로 둘 필요가 있을 수 있다.
특히, APM 고장 중지 타이머는 OS의 APM 드라이버내의 “홀(hole)”을 패치(patch)하는데 유용하다. 예를 들면, 마이크로소프트 윈도우 3.1모드 대화형 박스(Microsoft Windows 3.1modal dialog box)가 디스플레이되는 경우, 윈도우 APM 드라이버는 APM 획득 이벤트를 발생하는 것을 중단한다. 결과적으로, 사용자가 시스템을 중지시키기 위해 전력 버튼(21)을 누를 때 모드 대화형 박스가 디스플레이 되는 경우, 시스템은 중지되지 않을 것이다. 마이크로제어기(U2)는 스위치가 오프/해제 상태라는 것을 통지할 것이지만, 감독 루틴은 호출되지 않을 것인데, 그 이유는 모든 APM 획득 이벤트가 중단되었기 때문이다. 스위치 누름은 모드 대화형 박스가 사용자에 의해 클리어 될 때까지 작용하지 않을 것이다. 그러나, 일단 APM 고장 중지 타이머가 종료되고, 타이머의 종료가 타이머 레벨 0 인터럽트 서비스 루틴에 의해 검출되면, 시스템 상태는 시스템이 중지되고 있다는 것을 APM 인식 엔티티에 나타내지 않고서 가능한 정도까지 보관할 것이다.
매 분마다, 타이머 루틴은 기상 대기 분 알람 타이머 및 활동 타이머를 감소시킨다. 기상 대기 분 타이머가 인에이블 되었으면, 이 기상 대기분 타이머가 종료될 때, 마이크로제어기는 전원(17)으로 하여금 ±5 및 ±12라인에서 조절 전력을 제공하기 시작하도록 시킨다.
마이크로제어기(U2)가 초기화된 후, 태스크(1168)에서 전원이 테스트되어 전력이 오프 상태인지를 판정한다. 전력이 아직 온 상태이면, 마이크로제어기(U2)는 태스크(1172)에서 전원(17)이 고장을 일으켰는지를 체크한다. 전원(17)은 셧다운 또는 고장(shut down or “fault”)을 유발하는 여러 내부 보호 장치를 포함한다. 마이크로제어기(U2)는 다음과 같이 전원(17)이 고장을 일으켰는지를 판정한다. 즉, 마이크로제어기가 동작중(AUX5에 전력이 공급되는 중, 즉 AC 전력이 전원(17)에 공급되는 중)이고, 마이크로제어기(U2)는 ON 신호를 단정하여 전원(17)으로 하여금 ±5 및 ±12라인에서 조절 전력을 제공하도록 시키고, POWERGOOD 라인은 단정되지 않는다면(전원(17)이 ±5 및 ±12라인에서 조절 전력을 제공하지 않는다면), 전원(17)은 고장을 일으킬 것이고 리세트되어야 한다.
태스크(1772)에서, 전원(17)은 실제로 2회 테스트된다. 마이크로제어기(U2)는 ON 신호를 단정한 다음에 내부 시간축에 의해 측정된 바와 같이 3초 동안 대기 한다. ON이 3초 동안 단정된 후 POWERGOOD 신호가 단정되지 않으면, 마이크로제어기(U2)는 ON 신호를 클리어하고, 다시 5초 동안 대기한다. 그런 다음, 마이크로제어기(U2)는 ON 신호를 다시 단정하고 다시 3초 동안 대기한다. ON이 3초동안 단정된 후 POWERGOOD 신호가 단정되지 않으면, 마이크로제어기(U2)는 ON 신호를 클리어하고, 전원(17)이 고장을 일으킨 것으로 판정한다.
전원이 고장을 일으키면, 태스크(1174)에서 표시된 바와 같이 마이크로프로세서(U2)는 파워오프 루틴으로 점프한다. 다른 한편, 전원이 고장을 일으키지 않거나 또는 오프이면, 마이크로제어기는 전원(17)으로 하여금 태스크(1175)에서 ±5 및 ±12에서 조절 전력을 제공하기 시작하도록 시키고, 태스크(1176)에서 입/출력 포트를 초기화시키고, LED(23)를 턴온시키며 외부 인터럽트를 인에이블시킨다.
제7도는 마이크로제어기(U2)내에 유지되는 스위치 상태 머신(switch state machine)을 도시한다. 도면에 도시된 바와 같이, 상태는 스위치(21)의 폐쇄 이벤트 및 컴퓨터 시스템(10)의 리세팅과 같은 다른 이벤트에 응답하여 변화되고, CPU(40)에 의해 기록된다. AUX5가 전원(17)에 의해 전력을 공급 받지 못하고 있으면, 마이크로제어기(U2)에는 전력이 공급되고 있지 않으며, 따라서 스위치 상태(174)는 의미가 없다. 스위치(21)의 누름, 어느 한 쪽 소스로부터의 전화 링, 기상 대기 분 알람 타이머의 종료 및 CPU(40)로부터의 커맨드를 검출했을 때 마이크로제어기는 제6도를 참조하여 설명된 바와 같이 전원(17)으로 하여금 시스템 전력을 제공하기 시작하도록 시킨다.
제7도에 도시된 바와 같이, 스위치(21)는 마이크로제어기(U2)에 의해 모니터되는 네 개의 상태, 즉 (i) 온/누름 상태(176)(사용자가 버튼을 누르고 있으며 머신을 턴온시키려 하고 있는 상태), (ii) 온/해제 상태(178)(사용자가 버튼을 해제하였으며 머신을 턴온시키려고 하고 있는 상태), (iii) 오프/누름 상태(180)(사용자가 버튼을 누르고 있으며 머신을 턴오프시키려 하고 있는 상태) 및 (iv) 오프/해제 상태(182)(사용자가 버튼을 해제하였으며 머신을 턴오프시키려 하고 있는 상태)를 포함한다. 다음 태스크(1180)에서, 마이크로제어기(U2)는 스위치가 오프/해제 상태인지를 테스트하며, 이러한 상태는 사용자가 버튼을 해제하였으며 머신을 턴오프시키려 하고 있다는 것을 나타낸다.
상태(174)이고 스위치(21)가 눌러질 때, 마이크로제어기(U2)는 온/누름 스위치 상태(176)로 진입한다. 스위치(21) 해제는 마이크로제어기(U2)를 온/해제 스위치 상태(178)로 진입시킨다. 유사하게, 마이크로제어기(U2)가 리세트되는 경우, 마이크로제어기(U2)는 온/해제 상태(178)로 진입한다. 스위치(21)를 다시 누르는 것은 마이크로제어기(U2)가 오프/누름 스위치 상태(180)로 진입하도록 한다. 스위치(21)를 다시 해제 하는 것은 마이크로제어기(U2)가 오프/해제 스위치 상태(182)로 진입하도록 한다. 후속적인 스위치(21)의 폐쇄는 마이크로제어기(U2)가 제7도에 도시된 바와 같이 네 개의 상태를 통해 사이클하도록 한다. 컴퓨터 시스템(10)이 정상 동작 상태(150)일 때, 마이크로제어기(U2)는 온/해제 스위치 상태(178)이다. 응용 프로금은 이러한 상태 동안 실행될 것이다. 시스템(10)은 이러한 상태에서 대기 상태(152)로 진입하고 대기 상태(152)로부터 벗어날 수 있다. 이 상태는 또한 사용자발생 중지 포기 요구(user-generated suspend about request)에 대응한다. 오프/해제 스위치 상태는 사용자에 의한 중지 요구에 대응하는 스위치 상태이다. 즉, 오프 상태(156)의 시스템에서 시작하여, 스위치(21)를 일회 누르고 해제시키면 컴퓨터 시스템은 정상 동작 상태(150)로 된다. 다시 스위치(21)를 누르고 해제하는 것은 중지 요구를 발생하며, 이 중지 요구는 제9도를 참조하여 상세히 논의되는 감독 루틴에 의해 판독된다. 시스템(10)이 중지 상태(154)로 존재하기에 앞서, 스위치(21)를 3번째 누르고 해제하는 것은 중지 루틴에 의해 판독되는 중지 포기 요구(suspend abort request)를 발생한다.
제19도를 다시 참조하면, 사용자가 버튼을 해제하였고 머신을 턴오프시키려 하고 있다면, 마이크로제어기(U2)는 태스크(1184)에 표시된 바와 같이 파워오프 루틴으로 점프한다.
다른 한편, 사용자가 버튼을 누르고 있으며 머신을 턴오프시키려 하고 있다는 것을 표시하는 오픈/누름 상태라면, 마이크로제어기는 태스크(1192)에서 스위치가 BIOS에 의해 마스크되었는지 여부를 테스트한다. BIOS는 대기 상태로 진입시 스위치(21)를 일단 마스크하여 스위치 누름이 시스템을 강제로 대기 상태에서 중지 상태로 되도록 하는 것을 방지함으로써, 본 명세서의 다른 곳에서 설명된 바와 같이 사용자의 혼란은 방지한다.
스위치(21)가 BIOS에 의해 마스크되었다면, 마이크로제어기 코드는 태스크(1176)로 다시 점프하여 마스크 비트(mask bit)를 클리어 함으로써 다음의 스위치 누름이 시스템으로 하여금 오프 상태나 중지 상태로 진입하도록 하는 것을 허용한다. 다른 한편, 스위치(21)가 마스크되지 않았거나, 스위치(21)가 오프/누름 상태로 존재하지 않는다면, 마이크로제어기는 태스크(1196)에서 하트비트 루틴(heartbeat routine)을 시작한다.
하트비트 루틴은 마이크로제어기(U2)가 적절히 기능하고 있다는 것을 CPU(40)에 표시하는 데 사용된다. 마이크로제어기의 CMD_STATE# 라인 출력(pin17, p1.4)은 통상 논리 1이다. 마이크로제어기(U2)는 매 50-60마이크로초마다 이 라인을 대략 1.5초 동안 논리 0으로 이끈 후 다시 논리 1로 상승시킨다. CPU(40)에 의해 판독되는 전력 관리 상태 포트는 CMD_STATE# 라인과 PROC_RDY 라인의 논리 AND이므로, 이러한 하이에서 로우로의 전이는 예를 들면 시스템이 부트할 때 CPU(40)에 의해 매우 자주 감시되어 마이크로제어기(U2)가 적절히 기능하고 있음을 보장할 수 있다.
다음으로, 마이크로제어기(U2)는 태스크(1200)에서 BIOS가 파워오프를 명령 하였는지 여부를 테스트한다. CPU(40)는 마이크로제어기(U2)내의 사실상 모든 변수를 액세스 및 변경할 수 있다. BIOS가 시스템의 파워오프되어야 한다는 것을 나타내는 변수를 세트하였다면, 예를 들어 시스템의 상태가 중지 동안 하드 드라이브(31)에 기록된 후 마이크로제어기(U2)는 태스크(1204)에 표시된 바와 같이 파워오프 루틴으로 점프할 것이다.
다른 한편, BIOS가 파워오프를 명령하지 않았다면 마이크로제어기는 태스크(1208)에서 고장 안전 루틴을 실행한다. 고장 안전 타이머는 전원(17)이 ±5 및 ±12라인에서 조절 전력을 공급하고 있을 때 인에이블되는 20초 타이머이다. 이 루틴은 고장 안전 타이머가 종료되었는지의 여부를 체크하여, 종료된 경우 하나의 비트를 세트한다. 이 루틴은 또한 BIOS에 의해 재시작하도록 명령되는 경우 고장 안전 타이머를 재시작한다.
다음, 태스크(1212)에서, 안전 수단으로 또한 마이크로제어기와 전원(17)을 동기화시키기 위해, 마이크로제어기는 POWER_GOOD 라인을 체크하여, 전원(17)이 ±5 및 ±12라인에서 조절 전력을 계속해서 공급하는지 여부를 검출한다.
전원(17)이 ±5 및 ±12라인에서 조절 전력을 공급하고 있지 않다면, 마이크로제어기(U2)는 태스크(1216)에서 표시된 바와 같이 파워오프 루틴으로 점프한다. 다른 한편, 전원(17)이 ±5 및 ±12라인에서 조절 전력을 공급하고 있다면, 마이크로제어기 코드는 태스크(1180)로 다시 점프하여 실행을 계속한다.
파워 오프 루틴은 태스크(1260)에서 시작된다. 우선, 마이크로제어기(U2)는 태스크(1264)에서 활동 인터럽트를 디스에이블시켜 디스플레이가 블랭크되도록 한다.
다음, 태스크(1286)에서, 마이크로제어기는 POWER_GOOD 라인을 체크하여 전원(17)이 ±5 및 ±12라인에서 조절 전력을 계속해서 제공하고 있는지 여부를 검출한다. 전원(17)이 ±5 및 ±12라인에서 조절 전력을 제공하고 있다면, 마이크로제어기(U2)는 태스크(1272)에서 디스플레이가 블랭크되어야 하는지 및/또는 LED(23)가 턴오프되어야 하는지 여부를 테스트한다. 디스플레이가 블랭크 및/또는 턴오프가되어야 한다면, 마이크로제어기(U2)는 비디오 제어기(56)로 하여금 비디오 신호의 발생을 중지 및/또는 LED(23)를 턴오프시킨다.
그 후, 혹은 LED 및 디스플레이가 블랭크되지 않아야 한다면, 마이크로제어기는 다음에 (i) BIOS가 하나의 비트를 세팅함으로써 시스템이 다시 턴온되어야 함을 명령하였는지 여부와, (ii) 사용자가 전력 버튼(21)을 누름으로써 시스템이 다시 턴온되어야 함을 명령하였는지 여부를 테스트한다. 이들중 어느 하나가 발생하였다면, 시스템은 다시 파워업되어야 하고 마이크로제어기(U2)는 태스크(1284)에 표시된 바와 같이 파워온 루틴으로 점프한다.
다음, 마이크로제어기는 광절연체(OPT01)로부터 EXT_WAKEUP# 라인에서 링이 울렸는지 여부를 판정한다. RS-232라인의 경우, 이는 단지 EXT_RING 라인이 하이인지만 체크한다. 광절연체(OPT01)로부터의 신호의 경우, 이는 마이크로제어기(U2)에 의해 더 체크된다. EXT_WAKEUP# 라인은 통상적으로 저항(R5)에 의해 하이로 이끌려진다. 광절연체(OPT01)는 팁과 링(Tip and Ring) 양단간의 전압이 임계 및 보호부에 의해 세트되는 임계 전압값 예를 들어 전화선이 울릴 때의 60V보다 높을 때 이 라인을 로우로 만든다. 그러나, 이러한 조건은 도한 전화선이 테스트될 때나 라인상의 잡음으로부터 충족될 수 있다. 따라서, 단지 EXT_WAKEUP# 라인이 로우가 되길 대기하는 것은 잘못된 “링”이 시스템을 깨우도록 할 수도 있다.
결과적으로, 마이크로제어기는 링의 주파수를 측정하여 신호가 링인지 여부를 판정한다. 표준내 링은 16㎐ 내지 58㎐ 사이의 신호이다. 마이크로제어기(U2)는 EXT_WAKEUP# 신호의 네 개의 상승 에지 사이의 세 개의 시간 주기를 측정하여, 세 개의 시간 주기 모두가 15.1㎐와 69.1㎐ 사이의 주파수에 대응한다면, 적절한 링이 EXT_WAKEUP# 라인에서 발생하였다고 생각하여 대응하는 비트를 세트한다.
체크 루틴은 EXT_WAKEUP# 라인에서 로우가 검출되면 시작된다. EXT_WAKEUP# 라인이 세 개의 연속적인 판독 동안 로우라면, 마이크로제어기(U2)는 세 개의 연속적인 판독 동안 라인이 하이로 복귀하기를 기다린다. 그 직후, 타이머 인터럽트에 대한 베이스를 형성하는 16비트 카운터가 판독되고, 그 값이 저장되며, 마이크로제어기(U2)는 세 개의 연속적인 판독 동안 이 라인이 로우로 전이하기를 기다린다. 다음에, 마이크로제어기는 첫 번째 두 개의 상승 에지 사이의 시간이 (신호가 15.1㎐와 69.1㎐ 사이에 존재한다는 것을 나타내는) 15밀리초와 66밀리초 사이에 존재하는지 여부를 테스트한다. 시간이 15밀리초와 66밀리초 사이에 존재한다면, 고분해능 카운터가 다시 샘플링되고, 마이크로제어기는 다음의 로우에세 하이로의 전이를 기다릴 때 이 두 개의 카운터 샘플간의 차를 계산한다. 이러한 프로세스는 EXT_WAKEUP# 라인상에서의 다음 두 개의 로우에서 하이로의 전이 동안 반복된다. 세 개의 시간주기 모두가 범위내에 존재한다면, 마이크로제어기(U2)는 적절한 링이 EXT_WAKEUP# 라인에서 발생하였다고 판단하여 대응하는 비트를 세트한다.
EXT_WAKEUP# 라인에 로우가 존재하지 않거나 또는 시간 주기중 어느 것이든 범위를 벗어나면, 마이크로제어기 코드는 비트를 세팅시키지 않고 계속된다.
다음, 태스크(1286)에서, 마이크로제어기는 링이 존재하는지 또는 기상 대기 분 알람 타이머가 종료되었는지를 테스트한다. RS-232링, 광절연체 링, 또는 기상 대기 분 알람의 경우, 이러한 테스트는 마이크로제어기(U2)가 연합된 비트의 세트 여부를 테스트하는 것을 포함한다.
링이 존재하거나 기상 대기 분 알람 타이머가 종료되었다면, 시스템은 다시 파워온되어야 하고 마이크로제어기(U2)는 태스크(1287)에 표시된 바와 같이 파워온 루틴으로 점프한다.
그 후, 태스크(1288)에서, 마이크로제어기는 전원(17)이 ±5 및 ±12라인에서 조절 전력을 제공하고 있는지 여부를 판단한다. 전력을 제공하고 있지 않다면, 코드는 태스크(1280)로 다시 점프하여 루프를 다시 시작한다. 다른 한편, 전원(17)이 ±5 및 ±12라인에서 조절 전력을 제공하고 있다면, 마이크로제어기(U2)는 태스크(1292)에서 하트비트 루틴을 실행하고, 태스크(1296)에서 고장 안전 루틴을 실행한다. 이들 두 개의 루틴은 태스크(1196 및 1208)를 참조하여 논의된 바 있다.
마이크로제어기(U2)는 단지 (i) BIOS가 통신 루틴에서 구현되는 즉각적인 파워오프를 명령하거나, (ii) 고장 안전 타이머가 종료되거나, (iii) 사용자가 전력 버튼을 누르고, 마이크로제어기(U2)내의 중지 인에이블 플래그가 세트되어 있지 않은 (이 상황은 마이크로제어기(U2)가 SWITCH 입력이 판독되었을 때마다 테스트하는 조건이다) 세 가지 조건하에서만 ±5 및 ±12라인에서 조절 전력을 제공하는 것을 중단시킨다. 따라서, 마이크로제어기 태스크(1300)에서 고장 안전 타이머가 종료되었는지 여부를 테스트한다. 고장 안전 타이머가 종료되지 않았으면, 코드는 태스크(1280)로 점프하여 루프를 다시 시작한다.
다른 한편, 고장 안전 타이머가 종료되어 시스템이 파워다운되어야 함을 나타내면, 마이크로제어기(U2)는 태스크(1340)에서 “(인에이블되어 있다면)” SMI를 CPU(40)로 발생한다. 이것은 시스템이 바로 파워오프될 것이라는 가정하에서 CPU가 소정의 태스크를 수행하는 것을 허용한다. 예를 들면, CPU(40)는 갱신된 기상 대기 분 알람값을 마이크로제어기(U2)에 기록한다.
CPU(40)에 의해 더 이상의 조치가 취해지지 않으면, 마이크로제어기는 프로그램가능 SMI 타이머가 종료된 후 시스템을 파워오프시킨다. CPU(40)는 마이크로제어기(U2)에 적절한 값을 기록함으로써 SMI 타이머를 재시작하는 것에 의해 이러한 시간 주기를 연장할 수 있다.
그 후, 또한 태스크(1268)에서의 테스크가 전원이 양호한 전력을 공급하고 있지 않음을 나타내면, 마이크로제어기(U2)는 태스크(1308)에서 시스템을 파워다운 시킨다. 이것은 (i) 전원(17)으로 하여금 ±5 및 ±12라인에서 조절 전력을 공급하는 것을 중단 시키는 것, (ii) CPU(40)가 전력을 상실할 것이므로 통신 인터럽트를 디스에이블링 하는 것, (iii) 출력 포트(ON을 제외)를 하이로 세트하여 이들의 전력 소비를 최소화하는 것 (SWITCH, EXT_RING, EXT_WAKEUP 등은 이 모드에서 마이크로제어기(U2)에 의해 여전히 판독될 수 있다), (iv) 나머지 루틴이 시스템으로의 전력이 오프라는 것을 인식하도록 파워오프 변수를 세트하는 것과 (v) 다음 스위치 누름이 시스템을 다시 턴온시키도록 스위치 상태를 오프/해제 상태로 변경하는 것을 포함한다.
그 후, 코드는 태스크(1280)로 다시 점프하여 루프를 다시 시작하는 동시에, 링 또는 스위치 누름, 또는 BIOS가 시스템을 깨우도록 명령하는 것, 또는 기상 대기 분 알람 타이머가 종료하는 것을 기다린다.
[시스템 소프트웨어]
본 발명의 컴퓨터 시스템(10)의 하드웨어 측면을 기술하였으며, 이하 코드 측면이 기술될 것이다.
이제 제8도를 참조하면, 파워업 루틴의 개략도가 도시되어 있다. 이 루틴은 CPU가 리세트 벡터(Reset Vector)에 의해 지적된 코드로 점프하여 이 코드를 진행하는 경우 태스크(200)에서 시작된다. 이러한 경우는 CPU가 파워업되거나, CPU가 리세트 하드웨어 신호(Reset hardware signal)에 의해 리세트되거나, 혹은 리세트(RESET) 인스트럭션이 리세트 벡터에 의해 지적된 코드로 점프함으로써 실행될 때마다 발생한다. 이러한 리세트 절차는 본 기술 분야에서 잘 알려져 있다.
우선, 파워업 루틴의 흐름은 머신이 파워업된 이유에 좌우된다. 제11도를 참조하여 보다 상세히 설명되는 바와 같이, 시스템(10)은 브라운 아웃 또는 블랙아웃에 의해 파워업되었을 수도 있다. 이 경우, 시스템이 온 상태로 유지되도록 허용하는 것은 부적절할 것이다. 따라서, 파워업 루틴은 태스크(940)에서 시스템이 온 상태를 유지하여야 하는지를 먼저 판단한다. 시스템이 부적절하게 파워업되었다면, CPU(40)는 태스크(942)에서 마이크로제어기(U2)에 지시하여 전원이 시스템에 조절 전력을 공급하는 것을 중단시키도록 한다.
시스템이 전력을 유지할 것인지 여부를 판단하기 위해 수행되는 하나의 테스트는, 마이크로제어기가 링이라고 판단한 것에 의해 시스템이 파워업되었다면, 전화선이 울리고 있다는 것을 확인하는 것이다. 특히, 시스템이 파워업된후, 시스템이 링에 응답하여 깨워졌다면, 시스템이 하드 드라이브(31)내의 하드 디스크가 회전하기를 기다리는 동안, CPU(40)는 (이제 완전히 전력이 공급되는) 모뎀(900 또는 902)에 질의하여 마찬가지로 링 신호를 검출하는지 여부를 판단한다. 그렇지 않은 경우, 시스템은 파워다운된다. 모뎀(900 또는 902) 역시 링 신호를 검출했다면, 시스템은 전력을 유지해야 하며 부팅 프로세스(booting process)는 계속될 것이다.
시스템이 전력을 유지하여야 한다고 가정하면, 통상적으로 파워업 루틴의 흐름은 시스템이 오프 상태(156)인지 또는 중지 상태(154)인지에 좌우된다. 즉, 중지 플래그가 CMOS NVRAM(96)에서 클리어되어 있는지 또는 세트되어 있는지 여부에 좌우된다. 태스크(202)에 도시된 바와 같이, 시스템(10)은 비휘발성 CMOS 메모리(96)로부터 중지 플래그를 판독함으로써 시스템이 오프 상태(156)인지 또는 중지 상태(154)인지를 판단한다. 시스템이 정상 동작 상태(150)에서 벗어나 오프 상태(156)나 중지 상태(154)로 진입할 때, 각각의 루틴은 NVRAM(96)에서 중지 플래그를 세트 또는 클리어한다. 중지 플래그가 NVRAM(96)에서 세트되어 있다면, 컴퓨터 시스템(10)은 중지 상태(154)이고, 컴퓨터 시스템(10)의 상태는 고정 디스크 저장 장치(31)내에 저장되어 있다. 다른 한편, 중지 플래그가 NVRAM(96)에서 클리어되어 있으면, 컴퓨터 시스템(10)은 오프 상태(156)이고, 컴퓨터 시스템(10)의 상태는 고정 디스크 저장 장치(31)내에 저장되어 있지 않다. 따라서, 중지 플래그가 NVRAM(96)에서 세트되어 있다면, 컴퓨터는 태스크(204-214)에 도시된 “정상”부트 루틴을 실행한다. 첫 번째 태스크는 참조 번호(204)에 도시된 바와 같이 파워 셀프테스트(power-on self-test:POST)이고, 제11도를 참조하여 보다 상세히 설명될 것이며, POST로부터의 복귀후, CPU(40)는 PBOOT 루틴을 호출하여 참조 번호(206)에 도시된 바와 같이 운영 체제를 로드한다.
PBOOT 루틴은 IBM PS/2컴퓨터상에서 실행되는 전형적인 루틴을 약간 변형한 것인데, 이는 차후에 설명될 것이다. PBOOT는 (하드 드라이브(31)로부터인지 혹은 플로피 드라이브(27)내 디스크로부터인지의( 부팅 장소를 판정하고, 운영 체제(OS)를 로딩하고, CONFIG.SYS 파일이 지시하는 대로 시스템 변화(system changes)를 분석하고 구현한 후, 궁극적으로, 제어를 운영 체제로 복귀하기 전에 AUTOEXEC.BAT 배치 파일을 실행한다. PBOOT 루틴은 본 기술 분야에서 잘 알려져 있다. OS는 APM 장치 드라이버를 로딩하며, 이 APM 드라이버는 BIOS에게 이 BIOS가 APM을 인식하고 있는지를 질의한다. 인식하고 있다면, 이 BIOS APM 루틴 및 OS APM 루틴은 핸드 셰이킹을 수행한 후 본 명세서에 기술된 각종 특징을 제공하기 위해 협력한다. 운영 체제는 태스크(210)에 도시된 바와 같이 사용자에 의해 지시된 코드를 무한정 실행한다. 그러나, 태스크(212)에서 도시된 것처럼, API를 감독 루틴에 통보하면, APM BIOS 및 APM OS는 감독 루틴이 실행 프로그램과 함께 “병렬(parallel)”로 실행되도록 한다. 즉, 컴퓨터 시스템(10)은 시분할 멀티태스킹 시스템(time-multiplexed multitasking system)이고, APM 획득-이벤트와 감독 루틴은 주기적으로(periodically) 실행된다. 최종 결과는, 감독 루틴이 대략 매 초마다 실행된다는 것이다. 감독 루틴은 제9도를 참조하여 보다 상세히 기술될 것이다. 제4도를 참조하여 설명된 바와 같이, 정상 부트 루틴(204-210)이 끝난 후, 컴퓨터 시스템(10)은 정상 동작 상태(150)에 존재하게 된다.
태스크(202)를 다시 참조하면, 중지 플래그가 NVRAM(96)에서 세트되어 있으면, 시스템 상태는 하드 드라이브(31)에 저장 되었으며, 시스템(10)은 태스크(214-220)에 도시된 바와 같은 부트 루틴을 재개(resume)한다. 우선, 태스크(214)에 도시된 바와 같이, 시스템은 단축 POST(abbreviated POST)를 실행한다. 단축 POST에 대해서는 제11도를 참조하여 보다 상세히 기술될 것이다. 단축 POST후에, 태스크(216)에 도시된 바와 같이, 시스템은 재개 루틴을 호출한다. 재개 루틴은 제12도를 참조하여 보다 상세히 기술될 것이다. 현 시점에서는, 재개 루틴은 컴퓨터 시스템(10)의 상태를 이 시스템(10)이 중지되기 전의 구성으로 다시 회복한다는 사실만으로 족하다. APM 루틴이 이 시스템을 중지시키기 위해 실행되고 있었음에 틀림없고, 시스템 상태가 회복될 때 APM은 메모리로 다시 로딩되므로, 태스크(204-210)에서 도시된 정상 부트 루틴과는 달리, 재개 부트 루틴은 감독 루틴의 존재를 APM API 루틴에 통보할 필요가 없다. 따라서, 재개 루틴이 시스템(10) 상태의 회복을 완료하였을 때, 태스크(212및 220)에 도시된 바와 같이, APM은 이미 메모리내에 위치하여 회복된 코드와 함께 병렬로 실행된다. 재개 부트 루틴(214-220)완료 후, 제4도를 참조하여 설명된 바와 같이, 컴퓨터 시스템(10)은 정상 동작 상태(150)에 존재한다. 따라서, 정상 부트 루틴(204-210) 혹은 재개 부트 루틴(214-220)이 실행된 후, 컴퓨터 시스템(10)은 정상 동작 상태(15)에 있게된다.
제9도에는 “획득-이벤트”동안 대략 매초마다 APM에 의해 호출되는 감독 루틴의 상세한 흐름도가 도시되어 있다. 상이한 운영체제는 상이한 주기로(at different frequencies) 획득-이벤트를 실행할 것이다.
제9도에서, 감독 루틴은 태스크(222)에서 시작한다. 이하의 설명은 컴퓨터 시스템(10)이 정상 동작 상태(150)에서 시작한다고 가정한다. 제1태스크는 태스크(224)에서 사용자가 스위치(21)를 눌렀는지를 테스트하는 것이다. 제6(a)도 및 제7도를 참조하여 상세히 설명된 바와 같이, 스위치(21)는 CPU(40)가 마이크로제어기(U2)를 조회함으로써 테스트된다.
태스크(224)에서의 테스트 결과 사용자가, 스위치(21)를 눌렀다고 판단되면, 감독 루틴은 태스크(350)에서 중지 요구(Suspend Request)가 이전의 OS내의 APM 장치 드라이버로 발생되었는지 여부를 판단한다.
태스크(950)에서의 테스트 결과 중이 APM 드라이버로 이미 전송되지 않았다고 판단되면, 감독 루틴을 태스크(226)에서 “중지 요구”를 OS APM 드라이버로 발생하고, 태스크(228)에서 APM으로 복귀한다. 세트 “중지 요구” APM 복귀 코드(SET “Suspend Request” APM Return Code)에 응답하여, APM은 중지가 임박했음을 방송(broadcast)하여 APM 인식 장치가 (하드 디스크의 동기화와 같은) 임의의 필요한 시스템 태스크를 수행할 수 있도록 하고 “중지 커맨드”를 발생하여 APM BIOS 경로 배정 루틴으로 하여금 중지 루틴을 호출하도록 한다. 중지 루틴은 제10도를 참조하여 보다 상세히 기술될 것이다. 중지 루틴은 본질적으로 시스템(10)이 정상 동작 상태(150)에서 벗어나 중지 상태(154)로 진입토록 하며, (시스템이 중지될 준비가 되지 않았으면) 다수의 인스트럭션 후에, 혹은 (시스템이 중지되고 재개된다면) 수분, 수시간, 수일, 수주 혹은 수년후에 감독 루틴으로 제어를 복귀시킬 수도 있다. 중지 루틴은, 중지없이 복귀하거나 혹은 완전한 중지 및 재개후에 복귀하거나에 상관없이, 항상 “정상 중지(Normal Suspend)”APM 복귀 코드를 세트한다.
태스크(224)에서, 대개의 경우 스위치(21)는 눌러지지 않았으며, 감독 루틴은 태스크(952)로 이동하여 임계 중지 플래그(Critical Suspend Flag)가 세트되어 있는지를 판단한다. 마찬가지로, 중단 요구가 이전에 OS내의 APM 드라이버로 전송되었다면, 감독 루틴은 태스크(952)로 이동하여 임계 중지 플래그가 세트되어 있는지를 판단한다. 임계 중지 플래그가 세트되어 있다면, 태스크(954)에서 감독 루틴은 임계 중단 요구가 APM 드라이버로 이전에 발생되었는지의 여부를 테스트한다.
임계 중지 요구가 APM 드라이버에 발생되지 않았다면, 감독 루틴은 태스크(954)에서 임계 중지 요구 APM 복귀 코드를 발생한 후, 태스크(958)에서 APM 드라이버로 복귀한다. 임계 중이 요구에 응답하여, APM 드라이버는 중지가 임박했음을 방송하지 않고 즉시 시스템을 중지시키며, 따라서 APM 인식 장치는 그들 제각기의 사전 중지 태스크(pre-suspend taks)를 수행할 수 없다.
태스크(952)에서 임계 중지 플래그가 세트되어 있지 않거나, 태스크(954)에서 임계 중지 요구가 이미 OS내의 APM 드라이버에 발생되었다면, 감독자 루틴은 태스크(954)에서 15초 이상 동안 중지가 보류중(pending)이었는지 여부를 판단한다. 중지가 15초 이상 동안 보류중이었으면 감독 루틴은 태스크(958)에서 임계 중지 플래그를 세트함으로써, 태스크(954)에서의 테스트가 다음 APM 획득 이벤트 동안 테스트되도록 한다.
그 후, 또는 중지가 15초 이상 동안 보류중이 아니었다면, 감독자 루틴은 태스크(959)에서 중지가 보류중인지 여부를 체크한다. 중지가 보류중이면, 태스크(960)에서 CPU(40)는 마이크로제어기(U2)로 하여금 고장 안전 타이머 및 APM 고장-중지 타이머를 재시작(리세트)시키도록 한다.
그 후, 또는 중지가 보류중이 아니라면, 감독 루틴은 태스크(230)로 이동하여 시스템이 방금 재개하였는지 여부를 체크한다. 중지 루틴이 호출된다면, 중지 루틴이 중지없이 복귀하던지 또는 완전히 중지 및 재개 후에 복귀하던지간에, 시스템은 자신이 이제 막 재개되었던 것으로 생각한다. 재개는 태스크(230)에서 테스트되고, 시스템이 방금 재개되었다면 (또는 DNA 또는 파일 활동으로 인해 중지가 수행되지 않았다면), “정상 재개”APM 복귀 코드가 태스크(232)에서 발생되고, 태스크(234)에서 APM으로 복귀된다. 이에 응답하여, APM OS 드라이버는 시스템 클럭 및 그 사이에 오염되었을 수도 있는 다른 값을 갱신한다.
대개의 경우, 시스템(10)은 이제 막 재개된 것은 아니며, 감독 루틴은 태스크(236)로 이동하여, 임의의 사용자 활동을 테스트한다. 태스크(236)에서, 세 가지 유형의 사용자 활동, 즉 하드 파일(31) 활동, 키보드(12) 활동 및 마우스(13) 활동이 테스트된다. 모든 APM 활동 이벤트마다, 감독 루틴은 하드 드라이브(31)로부터 하드 파일 헤드, 실린더 및 섹터 값을 판독하고, 마우스 인터럽트 라인상에 혹은 키보드 인터럽트 라인상에 활동(둘다 사용자 활동을 나타냄)이 존재하는지를 마이크로제어기(U2)에 질의하며, 실시간 클럭(98)으로부터 분값(이 분값은 0분에서 59분의 범위이고 각 시간의 시작이 0분으로 다시 되돌아감)을 판독한다. 세 개의 하드 드라이브 활동 변수(헤드, 실린더 및 섹터) 및 분값은 임시 저장된다. 그런 다음, 이 세 개의 하드 드라이브 활동 변수는 이전의 획득 이벤트로부터 보관된 하드 드라이브 활동 변수와 비교된다. 세 개의 현재 하드 드라이브 값이 이전의 획득 이벤트로부터의 값과 동일하고, 마우스 인터럽트 라인이나 키보드 인터럽트 라인상에 활동이 존재하지 않는다면, 사용자 활동이 존재하지 않았던 것이다. 하드 드리이브 값이 다르거나, 혹은 마우스 인터럽트 라인이나 키보드 인터럽트 라인상에 활동이 존재한다면, 사용자 활동이 존재한 것이고, 현재의 디스크 드라이브 활동 변수값은 다음의 획득 이벤트 동안 판독된 값과의 비교를 위해 보관된다.
전술한 활동-검출 방안은 하나의 루틴이 CPU 상에서 실행되어 하드 드라이브 활동을 판정하고 단지 두 개의 하드웨어 인터럽트 활동이 감시되는 방안이다. 대안적으로, 활동은 하드웨어 방식으로도 감시될 수 있다. 예를 들면, 16개의 하드웨어 인터럽스선 모두의 활동이 감시될 수 있다.
활동이 있었으면, 태스크(238)에서 감독 루틴은 대기 플래그를 테스트하여, 컴퓨터 시스템(10)이 대기 상태(152)에 있는지를 판단한다. 대기 플래그가 세트되어 시스템(10)이 대기 상태(152)에 있음을 나타내면, 태스크(240)에서 감독 루틴은 대기 상태(152)를 벗어나 정상 동작 상태(150)로 진입한다. 감독 루틴은, 제18도에 도시된 바와 같이 대기 상태(152)에 진입시 파워다운되었던 장치를 다시 파워업함으로써 대기 상태(152)를 벗어난다. 요약하면, 시스템이 대기 상태를 벗어날 때, 감독 루틴은 비디오 신호를 회복시키고, APM CPU 유휴 호출(APM APU Idle calls)을 디스에이블시켜 APM 드라이버로부터의 CPU 유휴 호출이 CPU(40)를 더 이상 정지 시키지 못하도록 하며, 시스템(50)이 대기 상태에 있다는 것을 표시하는 플래그를 클리어 시킨다.
또한, 활동이 있었으면, 실시간 클럭(98)의 분값을 보관하여, 후속 획득-이벤트 동안 판독된 분값과 비교한다. 태스크(241)에서 현재의 분값을 보관하여 비활동 대기 타이머와 비활동 중지 타이머를 효과적으로 리세트 시킨다. 정상 사용 동안에는, 사용자 활동이 있을 것이며, 태스크(242)에서 감독 루틴은 “무 이벤트(No Event)”APM 복귀 코드를 세트하고, 태스크(243)에서 APM 호출 코드로 복귀할 것이다. APM은 “무 이벤트 ”복귀 코드에 응답하여 더 이상의 루틴을 호출하지 않는다.
태스크(236)에서의 테스트에서 사용자의 활동이 없었다고 판단되면, 태스크(245 및 247)에서 감독 루틴은 비활동 대기 타이머 및 비활동 중지 타이머가 종료 되었는지를 각각 테스트한다. 시스템(10)이 대기 상태(152)에 있다면, 비활동 대기 타이머의 종료에 관해 조사하지 않는다. 대신에, 테스트는 태스크(244)에서 건너뛴다.
저장된 분값에서 현재의 분값을 감산하여 사용자 활동이 있은 이래 경과된 분수(the number of minutes)와 대응하는 값을 얻음으로써, 두 타이머의 종료 여부가 체크된다. 태스크(245)에서는 이값을 비활동 대기 타임아웃(timeout)값과 비교하고, 태스크(245)에서는 이 값을 비활동 중지 타임아웃과 비교한다 두 개의 타임아웃값은 사용자에 의해 선택될 수 있으며, 두 타이머중 하나의 종료로 인해 시스템이 대기 상태(152), 중지 상태(154), 대기 상태(152) 혹은 중지 상태(154)중 어느 하나로도 진입할 수 없도록 세트할 수 있다. 타임아웃값을 0으로 세트하면, 그 타이머가 절대로 종료하지 말아야 한다는 것을 나타낸다.
마지막 사용자의 활동 이래 경과된 분수가 비활동 대기 타임아웃값과 동일하고나 혹은 크다면, 태스크(246)에서, 감독 루틴은 시스템(10)을 대기 상태(152)로 진입하도록 한다. 비활동 대기 타이머가 종료되지 않았으면, 태스크(247)에서, 감독 루틴은 비활동 중지 타이머의 종료를 테스트한다. 반면에, 비활동 대기 타이머가 종료되었으면, 감돌 루틴은 제18도에 도시된 바와 같이 소정 구성 요소를 제 각기의 저-전력 모드로 두어, 시스템(10)을 대기 상태(152)로 진입토록 한다. 요약하면, 바람직한 실시예에서, 감독 루틴은 비디오 신호를 블랭크시키고, 하드 드라이브내의 하드 디스크를 스핀 다운(spin down)시키고, 시스템 클럭을 감속시키고, APM CPU 유휴 호출을 인에이블시켜 APM 드라이버로부터의 CPU 유휴 호출이 CPU(40)를 정지시키도록 하며, 시스템(10)이 대기 상태(152)에 있음을 나타내는 플래그를 세팅한다. 시스템(10)을 대기 상태(152)로 진입토록 한 후에, 작업(247)에서, 감독 루틴은 비활동 중지 타이머의 종료를 테스트한다.
태스크(247)에서, 감독 루틴은 비활동 중지 타이머가 종료되었는지를 판단한다. 마지막 사용자 활동 이래 경과된 분수가 비활동 중지 타임아웃 값과 동일하거나 혹은 크다면, 태스크(248)에서 감독 루틴은 “중지 요구” APM 복귀 코드를 세팅하고, 태스크(243)에서 APM으로 복귀한다. 태스크(226)를 참조하여 설명한 바와 같이, 세트 “중지 요구” APM 복귀 코드에 응답하여, APM은 임의의 필요한 시스템 작업을 수행하고 중지 루틴을 호출한다. 중지 루틴은 제10도를 참조하여 보다 상세히 설명되며, 요약하자면, 시스템(10)이 정상 동작 상태(150)를 벗어나 중지 상태(154)에 들어가도록 유발한다. 태스크(226)를 참조하여 설명한 바와 같이, 시스템을 중지하거나 혹은 중지하지 않고서, 제어를 중지 루틴에서 감독 루틴으로 복귀시킬 수 있다. 반면에, 비활동 중지 타이머가 종료되지 않았으면, 태스크(242)에서 감독 루틴은 “무 이벤트” APM 복귀 코드를 세팅하고, 태스크(243)에서 APM 호출 코드 복귀한다.
비록 대부분의 경우에 “무 이벤트” APM 복귀 코드가 APM으로 복귀되지만, 다른 각종 이벤트들이 APM으로 복귀될 수 있다. 그러나, 각 APM 획득-이벤트에 대해 단지 하나의 APM 복귀 코드가 특정될 수 있다. 예를 들면, 대기 상태(152)에 진입한 후, “무 이벤트”가 APM에 복귀된다. 중지 상태(154)를 벗어난 후에, “정상 중지(Normal Suspend)” APM 복귀 코드가 APM에 복귀된다. APM에 대해 큐잉된(queued) 특정 메시지는 컴퓨터 시스템의 정확한 특성(nature)에 의존한다. 또한, 감독 루틴은 “정상 재개(Normal Resume)” 복귀 코드 혹은 “중지 재개” APM 복귀 코드를 복귀한다.
제9(b)도를 참조하면, APM 죄종 요구 루틴(APM Working on Last Request routine)은 태스크(961)에서 시작되는 것으로 도시되어 있다. APM 작업 최종 요구(APM Working on last Request)가 발생된 것에 응답하여, BIOS APM 루틴은 태스크(962)에서 마이크로제어기(U2)내 고장 안전 타이머와 APM 고장-중지 타이머를 시작 시키고, 태스크(963)에서 15초 중지 보류 타이머를 재시작시켜 시스템이 지속에 대해 적절히 준비를 하길 OS APM이 기다리는 동안 임계 중지 요구가 발생하는 것을 방지하며, 태스크(964)에서 복귀한다.
제9(c)도를 참조하면, APM 거절 최종 요구 루틴(APM Reject Last Request Routine)은 태스크(965)에서 시작되는 것으로 도시되어 있다. APM 거절 최종 요구가 발생된 것에 응답하여, BIOS APM 루틴은 태스크(966)에서 마이크로제어기(U2)의 고장 안전 타이머와 APM 고장 중지 타이머를 재시작시키고, 태스크(967)에서 임계중지 플래그를 세트하여 즉시 중지 루틴을 강제하고, 태스크(968)에서 복귀한다.
파워-업 및 재개 루틴은 중지 루틴을 이해함으로써 잘 이해될 것이다. 따라서, APM BIOS 루틴의 설명은 다음의 순서에 입각할 때 가장 명확하게 이해된다. 본 발명의 파워-업 루틴의 일반적인 개요(제8도), 감독 루틴의 세부사항(제9도), 본 발명의 중지 루틴(제10도), 본 발명의 파워-업 프로세스의 세부사항(제11도), 본 발명의 재개 루틴의 세부 사항(제12도), 보관 CPU 상태 루틴의 세부 사항(제12도), 회복 CPU 상태 루틴의 세부 사항(제14도), 그리고, 보관 8259 상태 루틴의 세부사항(제15도)
대부분의 루틴이 다른 루틴과 상호 작용하고 중지/재개 프로세스는 이어지는 사이클이므로, 본 발명의 컴퓨터 시스템(10) 설명이 다소 순환적(circular)이지만, 부트 루틴(제11도) 혹은 재개 루틴(제12도)전에 중지 루틴(제10도)을 설명하는 것이 가장 도움이 될 것이다. 이제 제10도 참조하면, 중지 루틴의 흐름도가 도시되어 있다. 정상 부트 루틴(204-210)혹은 재개 부트 루틴(214-220)이 실행된 후, 컴퓨터 시스템(10)은 정상 동작 상태에 있게 됨을 상기하라. 더욱이, 제8도를 참조하여 설명한 바와 같이, 컴퓨터 시스템이 정상적으로 부팅(204-210)되는지 혹은 재개-부팅(214-220)되든지 간에 이러한 부트 루틴이 끝나면, APM OS 드라이버는 제8도 도시된 감독 루틴과 같은 APM BIOS 루틴을 인식한다. 그 결과, APM은 대략 매초마다 감독 루틴을 폴링(polling)한다.
제10도에는 태스크(250)에서 시작하는 중지 루틴이 도시되어 있다. 중지 루틴은, 감독 루틴이 “중지 요구” APM 복귀 코드를 APM에 복귀하는 것에 응답하여, APM에 의해 호출된다. 또한, 중지 루틴은 제17도 및 제18도를 참조하여 보다 상세히 기술되는 바와 같이 시스템이 체크포인트(Checkpoint)를 수행할 때 호출되어 특정하게 실행된다. 먼저, 중지 루틴의 흐름은 태스크(970)에서 CPU(40)가 SMI를 갖는 S 부분(S part)인지의 여부에 좌우된다. 그렇다면, CPU(40)눈 태스크(972)에서 마이크로제어기(U2)로 하여금 SMI를 CPU(40)로 되발생시키도록 한다. SMI에 응답하여, CPU(40)내의 마이크로코드는 태스크(974)에서 당업자에게 잘 알려진 바와 같이 CPU(40)의 상태를 세그먼트 E000H 데이타 구조에 보관한다.
다른 한편, CPU(40)가 SMI를 갖는 S 부분이 아니라면, 태스크(252)에서 도시된 바와 같이 보관 CPU 상태 루틴이 호출된다. 보관 CPU 상태 루틴은 제13도를 참조하여 보다 상세히 기술될 것이다. 이 시점에서 다음과 같은 사항을 주지하면 족하다. 즉, 중지 루틴이 최초로 호출될 때 CPU(40)가 어느 모드에 있었는 가에 상관없이, 중지 루틴이 나머지(remainder)는 CPU(40)에서 실제 모드(Real Mode)로 실행될 것이므로, 허용된 어드레스 공간의 범위를 넘어선 인스트럭션의 실행을 시도하거나 혹은 특궝 인스트럭션(privileged instruction) 실행을 시도함으로써 발생할 수 있는 에러 발생의 염려없이 실행될 수 있다.
태스크(253)에서, 보관 CPU 상태 루틴은 독특한 방식으로 프로그램 제어를 중지 루틴으로 복귀한다. 보관 CPU 상태 루틴으로부터 중지 루틴으로의 “복귀”는 CPU를 리세트시키는 것을 포함하며, 제13도의 태스크(630 및 632)을 참조하여 보다 상세히 기술될 것이다. 중지 루틴에 관한 중요한 사항은 CPU 레지스터가 세그먼트 E000H 데이타 구조에 기록되고 CPU(40)는 이제 실제 모드라는 것이다.
보관 CPU 상태 루틴이 복귀한 후 혹은 CPU가 SMI에 응답하여 자신의 상태를 보관한 후 태스크(254)에서 중지 루틴은 스위치(21)가 눌려졌는지를 확인한다. 스위치(21)의 폐쇄는 제6 내지 7도를 참조하여 설명한 바와 같이 테스트된다. 요는,스위치(21)가 눌려졌으면, 전력 관리 포트는, 판독되는 경우, FEH를 복귀한다는 것이다. 스위치가 눌려지지 않은 경우, 진행중인 중지는 소프트웨어-중지이며, 소프트웨어-중지 플래그가 CMOS NVRAM(96)내에 세트된다. 이는 소프트웨어 중지와 스위치 폐쇄로 개시되는 하드웨어 중지를 혼동치 않게 해준다. 모든 소프트웨어-중지는 마이크로제어기(U2)내의 하나의 비트를 세트하여 변환된다. 소프트웨어 중지를 하드웨어 중지로 변환한 후에 스위치를 폐쇄하면 중지의 포기를 초래한다.
다음은 태스크(262)에 도시된 바와 같이 스택을 설정하는 것이다.
중지 루틴에 스택을 설정한 후, 태스크(264)에서 DMA 제어기(72), 디스켓 어댑터(84) 및 IDE 디스크 제어기(86)를 조사하여, 음 전송, 플로피 드라이브 전송, 혹은 하드파일 전송이 현재 진행중인지를 판단한다. 만약 진행중이면, 이들 세 가지 유형의 전송의 독특한 특성으로 인해 만족스런 중지가 수행될 수 없다. 예를 들면, 하드 드라이브로부터 하드파일 전송이 진행중이라면 이 데이타는 IDE 제어기에 의해 벌써 판독되었으나 아직 시스템 메모리(53)로 전송되지는 않았다. 이 데이타는 CPU에 의해 적절히 액세스될 수 없으므로, 시스템이 하드파일 판독 중단에 중지될 때 이 데이타는 상실될 가능성이 있다. 따라서, 이들 세 가지 유형의 전송중의 어느 하나가 진행중이면, 중지는 다음 APM 획득-이벤트 때까지 연기되는데, 이때는 음 제어기와 디스켓 제어기의 활동이 한번 더 테스트된다.
결과적으로, 제어가 다시 APM으로 돌아갈 수 있도록 태스크(252, 260 및 262)에서 수행된 태스크는 역으로 되돌려져야 한다. 먼저 태스크(265)에서, BIOS는 판독/기록에서 판독-전용으로 변경된다. 이는 여전히 섀도우된 데이타를 포함하는 세그먼트 E000H를 폐쇄함으로써 성취된다. 태스크(262)에서 생성된 스택(stack)이 팝(pop)되어 회복된다. 마지막으로, 태스크(266)에서는 회복 CPU 상태 루틴에서 CPU 상태를 회복한 후, 작업(267)에서 제어를 APM으로 복귀한다. 중지 루틴은 다음 획득-이벤트 동안 대략 일초(another second)후에 APM에 의해 다시 폴링(polling)될 것이다. 그 시점에서, 중지 처리를 불가능하게 했던 전송(들)은 아마도 완료되었을 것이며, 따라서 중지가 계속될 수 있을 것이다.
이제 태스크(264)를 다시 참조하면, 현재 진행중인 DMA 전송, 플로피 드라이브 전송, 혹은 하드파일 전송이 없다면, 중지가 수행될 수 있다. 중지 루틴은 태스크(268)에서 계속된다. 고장 안전 타이머는 계속하여 감소되며 스위치(21)가 오프/해제 상태일 때 만료되면 시스템이 스스로 턴오프되도록 야기함을 상기하라. 따라서, 제6도를 참조하여 설명한 바와 같이, 태스크(268)에서, 첫 작업은 고장 안전 타이머를 리세트하는 것이다.
다음, 태스크(272)에서는 8259 인터럽트 제어기(92)의 상태를 보관한다. 중지 루틴은 8259 보관 상태 루틴을 호출하는데, 이는 제15도를 참조하여 상세히 기술될 것이다. 이 시점에서는 8259 보관 상태 루틴은 두 개의 8259 인터럽트 제어기(92)의 (비록 몇몇 레지스터들은 기록-전용일 수 있으나) 미지의 레지스터들의 내용을 확인한다는 것을 인식하는 것으로 충분하다. 이들 레지스터의 값은 E000H의 데이타 구조내로 직접 기록된다.
인터럽트 제어기(92)의 상태가 보관된 후, 인터럽트 제어기(92)의 구성은 기지의 상태(known state)로 변하여, 중지 루틴이 실행하는 각종 인터럽트-구동 태스크(interrupt-driven task)이 적절하게 동작하도록 하여야 한다. 따라서, 태스크(274)에서 BIOS 데이타 영역 및 벡터 테이블이 교환(swap)된다. 중지 루틴은 세그먼트 0000H내의 현재-상태(present-state) BIOS 데이타 영역 및 벡터 테이블의 내용을 세그먼트 E000H내의 하나의 위치로 복사한다. 다음. 세그먼트 E000H내의 데이타 구조로부터의 기지-상태 BIOS 데이타 영역 및 벡터 테이블의 내용은 세그먼트 0000H내의 위치에 복사한다. 기지-상태 BIOS 데이타 영역 및 벡터 테이블은 후술하는 제11도 부트업 루틴의 태스크(414)에서 세그먼트 E000H내에 복사된다. 마지막으로, 현재-상태 BIOS 데이타 영역 및 벡터 테이블은 세그먼드 0000H로부터 세그먼트 E000H내의 데이타 구조로 복사된다. 태스크(274)에서의 루틴이 끝나면, 인터럽트 13H(디스크 판독/기록)과 인터럽트 10H(비디오 액세스)와 같은 모든 인터럽트는 예상대로 기능할 것이다.
다음, 태스크(276)에서 타이머(102)의 상태가 저장된다. 타이머의 레지스터는 본 기술 분야에서 잘 알려져 있다. CPU(40)는 모든 레지스터를 직접 판독할 수 있으며, 판독된 레지스터 값을 직접 E000H내의 데이타 구조로 기록한다. 태스크(276)에서, 또한, IDE 디스크 제어기(86)의 상태가 저장된다. IDE 디스크 제어기(86) 레지스터는 본 기술 분야에서 잘 알려져 있다. CPU(40)는 모든 레지스터를 직접 판독할 수 있으며, 이 판독된 값들을 E000H내의 데이타 구조에 직접 기록한다.
다음 단계는 시스템 메모리를 하드 드라이브(31)상의 중지 파일에 기록하기 위해 준비하는 것이다. 시스템 메모리는 (주 메모리와 확장 메모리를 포함하는) 시스템 RAM(53) 및 비디오 메모리(58)를 구비하고 있다. 이때, RAM(53)의 일부는 외부 캐쉬(external cache)(60)에 있을 수 있다. 태스크(628)에서 CPU 캐쉬는 플러쉬(flush)되었는데, 이는 제13도를 참조하여 기술될 것이다. 다음 태스크(286)에서 외부 캐쉬가 플러쉬되고, 하드 드라이브(31)로의 기록을 신속하게 하기위해 인에이블된다.
시스템(10)상에서 실행되는 코드는 IDE 제어기(86)를 기지의 상태로 둘 수가 있다. 따라서, 다음 단계는 태스크(292)에서 IDE 제어기(86)를 기지의 상태로 초기화한다. 이는 IDE 제어기(86)내의 레지스터들에 값들을 직접 기록함으로써 성취된다.
다음, 임의의 모뎀의 상태를 판독하여 E000H 데이타 구조로 보관하기 위해 인터럽트 구동 병렬 스레드(interrupt-driven parallel thread)가 태스크(976)에서 시작된다. 이 루틴은 특정 모뎀과 연관된 COMM 포트에 대응하는 인터럽트를 검출하고, 모뎀에 커맨드를 송신하여 모뎀이 자신의 레지스터 내용을 다시 순차적으로 송신하도록 시키고, 모뎀으로부터 레지스터 내용 송신을 수신하며, 레지스터 값을 E000H 데이타 구조에 보관한다. 이 루틴은 모뎀으로 제1커맨드를 송신한 후, 인터럽트 구동방식으로 응답하여 모뎀의 레지스터가 모두 보관될 때까지, 각각의 COMM 포트 인터럽트에 응답하여 모뎀의 응답을 수신하고, 다음 커맨드를 모뎀으로 송신한다. 병렬 스레드로서 실행되지 않으면, 이러한 루틴은 시스템을 중지시키는데 걸리는 시간에 수초(특정 모뎀 및 현 보드 속도(current baud rate)에 따라 모뎀당 3-5초)를 더할 수 있다. 인터럽트 구동 병렬 스레드는, 시스템 상태가 하드 드라이브(31)에 기록되기 전에 실행을 완료하면, 시스템 중지에 소요되는 시간에 거의 또는 전혀 시간을 더하지 않는다.
인터럽트 구동 병렬 스레드 모뎀 보관 루틴이 개시된 후, 태스크(294)에서 중지 파일은 하드 드라이브(31)내의 고정 디스크상에서 위치되어야 한다. 중지 파일의 헤드, 섹터, 및 실린더는 CMOS 메모리(96)에 저장된다. 일단 중지 파일의 위치가 정해지면, 파일 크기, 서명(signature)이 판독된다. 바람직한 실시예에서, 서명은 임의 길이의 ASCII 코드로 중지 파일의 존재를 나타낸다. 서명 구현을 위한 다른 대안으로서 하드 파일 시스템상에서 임의로 발견될 확률이 매우 낮은 이진스트링(binary string)을 사용하는 것등이 가능하다.
중지 파일의 파일크기 및 서명을 판독한 후, 다음단계는 태스크(296)에서 서명 및 파일크기가 정확한지를 확인하는 것이다. 서명이 부정확하여 다른 프로그램이 중지 파일을 수정하였음을 나타내거나 혹은 파일 크기가 부정확하여 중지 파일 크기가 수정되었다는 것을 나타낸다면, 태스크(298)에서, 중지 루틴은 제13도의 작업(652)에서 개시되는 치명적 중지 에러 루틴(Fatal Suspend Error Routine)을 호출한다. 치명적 중지 에러 루틴을 벗어나기 위해 사용자가 스위치(17)를 누르면, 프로그램은 태스크(299)에서 태스크(506)로 점프한다.
반면에, 서명이 정확하고 중지 파일이 충분히 크다면, 중지 루틴은 컴퓨터 시스템의 상태를 메모리에 기록하는 것을 속행할 수 있다.
컴퓨터 시스템(10)의 상태를 하드 드라이브(31)에 기록하기 전에, CPU(40)는 태스크(296)에서 마이크로제어기(U2)에 지시하여 고장 안전 타이머(C2)를 재시작(리세트)시키도록 하고, 마이크로제어기(U2)에 질의하여 스위치(21)가 다시 눌려졌는지 판정한다. 스위치(21)가 다시 눌려지지 않았으면, 중지는 속행되어야 한다. 반면에, 스위치(21)는 다시 눌려졌으면, 중지는 포기된다. 중지 루틴내 다수의 지점(points)에서 스위치(21)의 폐쇄에 대한 테스트가 행해진다. 태스크(297)는 단지 예시적인 것이다. 적용가능한 기술 분야의 통상의 회로 설계자라면, 고장 안전 타이머의 재시작 사이의 횟수 및 허용가능한 시간을 결정할 수 있을 것이다. 중지 루틴은 고장 안전 타이머가 만료하여 마이크로제어기(U2)에 의해 전원(17)이 턴-“오프” 되기 전에, 고장 안전 타이머를 리세트하여야 한다. 마찬가지로, 스위치(21)는 때때로 체크되어야 한다. 스위치(21)가 다시 눌려지는 경, 사용자가 중지를 포기하기를 원한다는 것을 나타내는 것이므로, 코드는 재개 루틴내 적절한 지점으로 점프하여 중지 루틴에 의해 이미 중지된 것을 중지 해제(un-suspend) 시키고, 이러한 부분적인 중지로부터 회복한다.
유사하게, 태스크(350)에서 Ctrl-Alt-Del의 키 동작은 중지를 포기(abort)한다. Ctrl-Alt-Del키를 누르는 것은(즉, Ctrl키, Alt키 및 Delete 키를 동시에 누르는 것은), IBM BIOS 및 인텔 80X86 CPU 계열에 기초한 전형적인 컴퓨터 시스템을 리세트 시키는 잘 알려진 방법이다. 본 기술 분야에서 잘 알려져 있는 바와 같이, 컴퓨터 시스템(10)은 BIOS 인터럽트 1처리기(BIOS interrupt 1handler)로 Ctrl-Alt-Del을 관리한다. 컴퓨터 시스템(10)은 태스크(350)에서 다소 변형된 인터럽트 1처리기를 구비하여, 태스크(352)에서 CMOS 메모리(96)내의 중지 플래그를 클리어한 다음, 태스크(354)에서 리세트된 부트-업 루틴으로 점프한다.
본 발명의 컴퓨터 시스템(10)에서, 중지 루틴이 실행되는 동안 Ctrl-Alt-Del을 누르면 컴퓨터 시스템(10)이 오프 상태(156)로 진입토록 한다. 이는, 스위치(21)가 폐쇄된 후 Ctrl-Alt-Del을 누르면 부트-업 루틴이 호출되고 부트-업 루틴은 마이크로제어기(U2)를 고장 안전 타이머가 만료되었고 스위치는 아직 오프/해제 상태에 있는 상태로 초기화하기 때문에 발생한다. 따라서, 중지 루틴에 있는 동안 Ctrl-Alt-Del을 누르면, 컴퓨터 시스템(10)은 오프 상태(156)로 진입하게 된다.
이제 태스크(300)를 참조하면, 중지 파일은 하드 드라이브(31)상에 다시 위치된다. 태스크(300)에서 서명구(signature phrase)는 중지 파일의 제1바이트에 기록된다. 다음 태스크(302)에서 세그먼트 E000H내의 전체 64 킬로바이트 데이터가 중지 파일에 기록된다. E000H의 이러한 64K 복사는 실질적으로 장소 유지기(place holder)로서 기능하며, 중지 루틴 종료시 동일한 장소로 재기록될 것이다.
그다음, 태스크(303)에서 비디오 제어기(56)의 상태가 보관된다. 비디오 제어기(56) 레지스터는 본 기술 분야에서 잘 알려져 있다. 모든 레지스터는 CPU(40)에 의해 직접 판독가능하며, 이들의 값은 E000H내의 데이타 구조로 직접 기록된다.
그다음, 시스템 메모리가 중지 파일에 기록된다. 이것은 트윈-버퍼 시스템(twin-buffer system)이 시스템 메모리로부터 데이타를 판독하고, 이 데이타를 압축(compress)하고 세그먼트 E000H에 기록한 후, 마지막으로, 세그먼트 E000H로부터 압축된 데이타를 중지 파일에 기록함으로써 성취된다. 두 개의 루틴들이 시분할장치(time-multiplexed arrangement)내에서 동작한다. 하나는 데이타를 압축하여 세그먼트 C000H에 기록하며, 나머지 하나는 중지 파일에 기록한다. 전자는 포어그라운드(foreground)에서 실행되고, 후자는 백그라운드(background)에서 실행되는 인터럽트-구동 루틴이다. 분명히, 단지 하나의 CPU(40)만 있으므로 단지 하나의 루틴만이 주어진 시간내에 실행가능하다. 그러나, 후자의 루틴은 인터럽트-구동 방식이므로 중지 파일의 데이타 전송 속도를 최적화하기 위한 필요에 따라 전자의 루틴의 실행을 인터럽트할 수 있다. 두 개의 버퍼는 각각 8킬로바이트 길이로, 이 길이는 하드 드라이브(31)로의 전송 시간을 최적화한다고 생각된다.
이 프로세스는 태스크(304)에서 개시되며, 데이타를 판독 및 압축후, 8K 버퍼의 시작부를 채우기에 충분한 데이타를 세그먼트 E000H에 기록한다. 데이타는 연속 길이 인코딩 방법(run length encoding method)을 사용하여 압축된다. 그러나, 다른 적절한 압축 방법이 사용될 수도 있다. 이때, 태스크(307)에 도시된 버퍼로부터의 기록 루틴(Write from Buffer Routine)이 개시된다. 버퍼로부터의 기록 루틴(307)은 인터럽트-구동 루틴으로서, 백그라운드에서 실행되며 태스크(308-310)로 구성된다. 태스크(311)로 표시된 압축 루틴(Compression Routine)은 태스크(312-318)로 구성되며 포어그라운드 루틴이다. 먼저, 태스크(308)에서 버퍼로부터의 기록 루틴(307)은 태스크(304)에 의해 이제 막 채워진 버퍼를 중지 파일에 기록한다. 버퍼로부터의 기록 루틴(307)이 버퍼의 내용을 중지 파일에 기록하는 동한, 태스크(312)에서 압축 루틴(311)은 시스템 메모리로부터 다음 바이트를 계속 판독하여 압축한 후, 이 압축된 데이타를 이 두 개의 8K 버퍼중 나머지 한 쪽의 버퍼에 기록한다. 일단 압축 루틴(311)이 버퍼를 압축된 데이타로 채우면, 다음 단계인 태스크(314)에서는 전체 시스템 메모리가 압축되었는지의 여부를 판단한다.
IDE 제어기(86)는 데이타를 하드 드라이브(31)에 매우 신속하게 기록할 수는 없다. 그 결과, 압축 루틴(311)은 버퍼로부터의 기록 루틴(Write from Buffer Routine)(307)이 버퍼를 하드 드라이브(31)에 기록하는 작업을 종료하기 전에, 하드 드라이브(31)에 기록되고 있지 않는 8K 버퍼를 채우는 작업을 종료할 것이다. 따라서, 압축 루틴(311)은 버퍼로부터의 기록 루틴이 버퍼를 하드 드라이브(31)에 기록하는 것을 끝마치기를 기다려야만 한다. 압축 루틴(311)이 모든 시스템 메모리의 압축 및 기록을 종료하지 못한 경우, 압축 루틴(311)은 태스크(316)에서 버퍼로부터의 기록 루틴(307)을 대기한다. 압축 루틴(311) 및 버퍼로부터의 기록 루틴(307)은 플래그 세트(a set of flags)를 통해 통신한다. 버퍼로부터의 기록 루틴(307)이 현재의 버퍼를 중지 파일에 기록하는 것을 끝마치면, 이 루틴은 버퍼 플래그를 스위칭하여, 압축 루틴(307)이 중지 파일에 기록된 버퍼를 압축된 데이타로 채우기 시작할 수 있다는 것을 나타낸다. 다음, 태스크(297)을 참조하여 설명한 바와 같이, 고장 안전 타이머 C2가 리세트되고 스위치(21)는 폐쇄 이벤트(closure event)에 대하여 체크된다.
태스크(310)에서, 버퍼로의 기록 루틴(307)은 이제 막 중지 파일에 기록된 버퍼가 기록되어야 할 마지막 버퍼인지를 판단한다. 마지막 버퍼가 아닌 경우, 버퍼로부터의 기록 루틴은 압축 루틴(311)에 의해 채워진 버퍼를 중지 파일에 기록한다. 그 동안에, 압축 루틴(311)은 버퍼 플래그를 조사하여 버퍼가 압축된 시스템 메모리를 더 수신할 준비가 되었는지를 판단한다. 즉, 태스크(316)에서, 압축 루틴은 버퍼로부터의 기록 루틴이 현재의 버퍼를 끝마칠 때까지 기다린후, 태스크(312)에서 압축 루틴을 계속한다.
유의할 것은 비디오 메모리(58)는 선형 프레임 버퍼링(liner frame buffering)이 지원되면 압축되나, VESA 페이지 액세스의 경우에는 압축되지 않는다는 점이다. 대신에, 앞서 보다 상세히 기술한 바와 같이, VESA 페이지 액세스 비디오 메모리는 VESA 호출을 이용하여 비디오 제어기(56)를 통해 판독되고, 트윈-버퍼 시스템을 사용하여 압축없이 기록된다.
일단 압축 루틴(311)이 모든 시스템 메모리의 압축을 끝마치면, 태스크(318)에서 버퍼로부터의 기록 루틴(307)이 마지막 버퍼를 중지 파일에 기록할 때까지 기다린다. 일단 버퍼로부터의 기록 루틴이 완료되면, 버퍼로부터의 기록 루틴은 태스크(310)에서 태스크(318)로 분기하여 사라진다. 이때, 어떠한 백그라운드 루틴도 실행되지 않고 있으며, 주 프로그램은 태스크(320)에서 계속된다.
다음, 태스크(320)에서 DMA 장치(71)[DMA 제어기(72) 및 중앙 중재기(Central Arbiter)(82)], 82077 디스켓 제어기(84), RS-232UART(94)의 상태가 저장된다. 이들 장치는 본 기술 분야에서 잘 알려진 레지스터를 구비한다. 디스켓 제어기(84) 및 UART(94)내의 모든 레지스터들은 CPU(40)에 의해 직접 판독가능하고, 이 판독된 값들은 E000H내의 데이타 구조로 직접 기록된다. DMA장치는 판독가능한 레지스터들을 가지고 있지 않다. 대신에, 판독 전용 레지스터는 통상적으로 각 DMA 전송 동작 전에 셋업(set-up)된다. 이러한 이유 때문에, DMA 전송이 진행중인 경우 루팅은 중지를 그만둔다.
다음, 태스크(978)에서 중지 루틴은 태스크(976)를 참조하여 설명된 인터럽트 구동 모뎀 상태 루틴이 완료되었는지 여부를 태스크한다. 완료되지 않았다면 완료될 때까지 기다린다.
일단 컴퓨터 시스템(10)이 중지 상태(150)에 진입하면 중지 파일에 대한 임의의 무단조작(tampering)을 탐지해낼 수 있어야 바람직하다. 예를 들면, 어떤 사람이 수정된 중지 파일을 생성하여, 이 중지 파일을 하드 드라이브(31)로 이동시킨 후, 전에 저장된 상태와 다른 상태로 컴퓨터 시스템(10)이 회복되도록 시도하는 것이 가능하다. 이를 위하여, 의사-랜덤값(pseudo-random value)이 세그먼트 E000H 데이타 구조내에 배치된다. 태스크(328)에서 도시된 바와 같이, 인터럽트 구동 모뎀 상태 보관 루틴이 완료된 후 고속 타이머(102)중의 하나로부터 16-비트 타임스템프(16-bit time-stamp)가 판독된다. 그 후, 이 타임스탬프는 세그먼트 E000H 데이타 구조로 기록된다.
다음, 캐리 비트를 고려하지 않고 세그먼트 E000H내의 각 16-비트 단어를 가산(add)함으로써 전체 E000H 세그먼트에 대한 16-비트 검사합(checksum)이 계산된다. 태스크(330)에서 이 검사합은 세그먼트 E000H 데이타 구조로 기록되고, 태스크(332)에서 CMOS NVRAM(96)으로 기록된다. 이러한 과정후에, 작업(334)에서, 모든 작업 변수(working variables)는 CPU(40)로부터 세그먼트 E000H 데이타 구조로 기록되고, 작업(336)에서, 중지 파일의 서명구뒤에 (서명 바로 다음에) 전체 세그먼트 E000H가 중지 파일로 재기록된다. 다음, 작업(338)에서 컴퓨터 시스템(10)의 상태가 중지 파일로 저장되었음을 시스템(10)에 알려주기 위해 CMOS NVRAM(96)내에서 중지 플래그가 세트된다.
다음, 중지 루틴은 태스크(980)에서 체크포인트가 취하여지고 있는지 판단한다. 체크포인트가 취하여지고 있으면, 시스템은 파워다운되어서는 안되며, 대신에 시스템은 방금 수행된 부분적인 중지로부터 회복하기 위해 필요한 정도까지 재개되어야 한다. 따라서, 체크포인트가 취하여지고 있으면, 중지 루틴은 태스크(982)에서 재개 루틴의 태스크(484)로 점프하여, 부분적인 재개를 시작한다.
체크포인트가 취하여지고 있지 않다면, CPU(40)는 마이크로제어기(U2)에신호를 논리 0으로 만들도록 커맨드함으로써 전원을 턴“오프”시키고, 이에 의해 전원(17)의 주/조절 장치(primary/regulation unit)(172)로 하여금 ±5 및 ±12라인을 따라 조절 전압을 제공하는 것을 중지시키도록 한다. 전압이 거의 0까지 램프 다운(ramp down)되려면 수초가 소요되므로, CPU(40)는, 수많은 커맨드를 실행할 수 있다. 따라서, CPU(40)는, 전원(17)에 의해 발생된 시스템 전력 전압이 감소되어 CPU(40)가 기능을 멈출때까지 기다릴 때, 태스크(342)에서 무한 루프(endless loop)(“스핀”)를 실행한다.
이제 제11도를 참조하면, 부트-업 루틴(Boot-Up Routine)이 상세히 도시되어 있다. 부트 프로세스는 제8도를 참조하여 간략히 설명한 바 있다. CPU(40)가 리세트 벡터에 의해 지적된 코드로 점프하여 실행할 때, 부트-업 루틴은 태스크(380)에서 시작한다. 이는 CPU(40)가 파워업될 때마다 또한 CPU(40)가 리세트 벡터에 의해 지적된 코드로 점핑하여 리세트될때마다 발생한다. 이 리세트 절차는 본 기술 분야에서 잘 알려져 있다.
첫 태스크는, 태스크(382)에서, CPU(40)를 테스트하고 메모리 제어기(46)를 초기화하는 것이다. CPU는 POST 루틴에 의해 테스트된다. CPU 테스트의 일부는 CPU(40)가 SMI를 갖는 “S”부분인지 여부를 판단하는 것이다. 그렇다면, 플래그가 세트되어 이러한 사실을 나타낸다. 메모리 제어기(46)는 POST 루틴에 의해 초기화된다.
이어, 부트업 루틴은 태스크(986)에서 마이크로제어기(U2)가 기능중인지를 테스트한다. 이렇게 하기 위해, CPU는 전력 관리 회로(106)의 상태 포트를 순차적으로 판독하고, 이 포트에서 하이에서 로우 그리고 로우에서 하이로의 전이를 기다린다. 이러한 전이는 마이크로제어기(U2)의 하트비트가 기능중이며, 따라서 CPU(40)는 마이크로제어기(U2)가 예상한대로 기능중이라는 가정하에 부팅 프로세스를 계속할 수 있다.
CPU가 사전설정된 주기 예를 들어 1초 또는 2초내에 상태 포트에서 전이를 검출하지 않는다면, 마이크로제어기(U2)는 하트비트를 갖고 있지 않으며, CPU(40)는 태스크(988)에서 전술한 바와 같이 제1PAL(U1)에게 명령하여 마이크로제어기(U2)를 리세트시킨다. 태스크(990)에서 CPU(40)는 상태 포트에서 하이에서 로우로의 전이를 다시 기다린다. CPU가 1초 또는 2초내에 상태 포트에서 전이를 다시 검출하지 않는다면, 마이크로제어기(U2)는 하트비트를 갖고있지 않고, CPU(40)는 마이크로제어기(U2)가 리세트 될 수 없는 상태라는 가정하에 태스크(992)에서 본 명세서에 설명된 전력 관리 특징(power management features)을 디스에이블시킨다.
다른 한편, 마이크로제어기(U2)가 기능중이라면, CPU(40)는 태스크(994)에서 마이크로제어기(U2)내의 기상 대기 분 알람 값을 재생(refresh)한다. RTC(98)의 시간축은 마이크로제어기(U2)의 시간축 보다 훨씬 정확하다. 따라서, 마이크로제어기(U2)에 보다 정확한 따라서 고가의 시간축을 부가하지 않고 이러한 제한을 극복하기 위해, BIOS는 상기 덜 정확한 시간축을 상기 정확한 시간축과 동기화시키고, 시스템이 부트될 때마다, 마이크로제어기(U2)내의 기상 대기 분 알람 값을 RCT(98)로부터 얻어진 보다 정확한 값으로 갱신한다. 이를 성취하기 위해, CPU(40)는 CMOS 메모리(96)로부터 절대 알람 데이트 및 시간(absolute alarm date and time)을 판독하고, 기상 대기 분 알람 값을 계산하여 마이크로제어기(U2)에 기록한다.
그 후, 또한 마이크로제어기(U2)가 기능하지 않아 전력 관리 특징이 디스에이블되어 있다면, 부트 루틴은 태스크(996)에서 전력이 전원(17)에 인가됨으로써 시스템이 부트되었는지를 판단한다. 바람직하게 전원(17)은 항상 AC 전력이 자신의 주/조절 장치(17)에 인가되도록 하며, ±5 및 ±12라인에서의 전력의 조절은 ON# 입력에 의해 제어된다. 이러한 방법에 의해 전원(17)은 전력 관리 회로(106)에 전력을 공급하기 위해 필요한 AUX5를 제공하고, 자신 스스로가 AC 전력을 스위치하지 않고 전력 관리 회로(106)에 의해 제어될 수 있다.
그러나, 당업자에게 잘 알려진 바와 같이, 몇몇 사용자는 스위치 전력 스트립(switches power strip)(도시되지 않음)을 사용하여 그들의 컴퓨터 시스템에 전력을 공급하며, 단일 스위치에 의해 전체 시스템으로의 AC 전력을 턴오프 및 턴온 하는 것을 선호한다. 이것은 전력 관리 회로(106)에 대해 문제점을 제기하는데, 그 이유는 마이크로제어기(U2) 및 다른 장치가 AUX5 전력 라인에 의해 계속적으로 전력이 공급되도록 구성되기 때문이다. 따라서, 시스템은 시스템이 AC 전력의 인가에의해 전력을 공급 받았으며 그에 따라 행동하고 있음을 판단하는 방법을 포함하여야 한다.
그러나, AUX5 라인 역시 전술한 바와 같이 블랙아웃 및 브라운아웃되기 쉽다. 블랙아웃 또는 브라운아웃 후에, 리세트 서브회로(reset subcircuit)(920)는 마이크로제어기(U2)를 리세트하여 마이크로제어기(U2)가 허용 오차를 벗어난 전압으로 인해 오동작(hanging)하는 것을 방지한다. 따라서, 시스템은 마이크로제어기가 블랙아웃 후에 또는 AC 전력의 인가 후에 깨워졌는지를 더 판단할 수 있어야 한다.
결과적으로, 태스크(996)에서, CPU는 전원(17)이 턴온되도록 야기한 이벤트에 관해 마이크로제어기(U2)에 질의한다. 마이크로제어기는 네 개의 응답중 임의의 하나, 즉 (1)마이크로제어기가 리세트됨으로써, 전원(17)이 ±5 및 ±12라인에서 조절 전력을 공급하기 시작하였음, (2)기상 대기 분 알람이 만료되었음,(3)링이 RS-232링 입력이나 광절연체(OPT01)로부터의 링 입력에서 발생되었음, 및/또는 (4)스위치(21)가 눌려졌음중 임의의 하나를 리턴할 수 있다. 시스템이 파워온되고 있는 이유는, 시스템이 파워업된 특정 이유에 응답하여 소정 프로그램을 실행할 스케쥴러(scheduler)와 같은 응용 프로그램에 의해 마이크로제어기(U2)에 의해 직접 판독될 수 있다. 대안으로서, 시스템을 파워업하고 있는 이유는 하나 이상의 BIOS 호출을 통해 얻어질 수 있다.
CPU(40)에 의해 리세트되는 것을 제외하고, 마이크로제어기(U2)는 리세트 서브회로(920)에 의해서만 리세트된다. 이 리세트 서브회로(920)는 AUX5 라인이 인가되거나 글리차(glitch)할 때마나 마이크로제어기를 리세트시킨다. 따라서, 마이크로제어기(U2)가 리세트되거나, 또는 마이크로제어기가 태스크(997)에서 테스크되는 무효 기상 코드(invalid wakeup code)를 복귀한다면, CPU(40)는 태스크(998)에서 전원이 ±5 및 ±12라인에서 전력 조절을 지속해야 하는지 여부를 판단해야 한다. 이러한 목적을 위해, DEFAULT_ON이라 불리는 CMOS NVRAM내의 플래그가 사용된다. 이 플래그가 세트되어 있다면, 전원(17)은 마이크로제어기(U2)가 리세트된 후 조절 전력을 계속해서 공급해야 한다. 다른 한편, DEFAULT_ON이 세트되어 있지 않으면, 전원(17)은 마이크로제어기(U2)가 리세트된 후 조절 전력을 공급하는 것을 중지해야 하며, 따라서 CPU(40)는 태스크(1000)에서 마이크로제어기(U2)에게 명령하여 전원(17)이 ±5 및 ±12라인에서 조절 전력을 공급하는 것을 중지시킨다.
그 후, 전압이 대략 0볼트까지 램프다운하는데는 수초가 소요되므로, CPU(40)는 그 사이에 수 많은 커맨드를 실행할 수 있다. 그 후, CPU(40)는, 태스크(1004)에서 CPU가 기능을 멈출때까지 전원(17)에 의해 생성되는 시스템 전원 전압이 감소되길 기다릴 때, 태스크(1002)에서 무한 루프(“스핀”)를 실행한다. 전술한 바와 같이, 마이크로제어기(U2)는 바람직하게 AUX5 라인에 의해 계속적으로 전력이 공급되고, 자신의 프로그램된 루틴은 계속적으로 실행한다.
그 후, 태스크(997)에서 마이크로제어기가 유효 기상 코드(valid wakeup code)를 복귀하였거나, 또는 태스크(998)에서 마이크로제어기(U2)는 리세트되었으나 시스템에는 계속 전력이 공급되어야 한다면, CPU(40)는 태스크(1004)에서 마이크로제어기(U2)에게 명령하여, 마이크로제어기(U2)가 전력이 턴오프되어야 한다고 판단하여 전원(17)으로 하여금 ±5 및 ±12라인에서 조절 전력을 공급하는 것을 중단하게 하기에 앞서 CPU(40)로 SMI를 다시 발생시키도록 한다. 또한 태스크(1004)에서, CPU는 CMOS NVRAM내의 DEFAULT_ON 비트를 세트함으로써, AC 전력이 상실되면, 시스템은 AC 전력이 재인가된 후 스스로 턴온되도록 한다.
그런 다음, 부트 루틴은 당업자에게 잘 알려진 바와 같이, 태스크(1006)에서 제1플러그 및 플레이 자원 할당 패스(Plug & play resource allocation pass)를 수행한다.
그다음, 섀도우 메모리(shadow memory)가 테스트되고, BIOS가 ROM(88)에서 Ram(53)의 섀도우 메모리 부분으로 복사된다. 실행 코드(executed code)의 흐름은 CMOS NVRAM(96)내에서 중지 플래그가 세트되어 있는 지의 여부에 좌우된다. 중지 플래그가 세트되어 있으면, 컴퓨터 시스템(10)은 중지 상태(150)에 있고, 이 컴퓨터 시스템(10)은 중지되었을 당시의 상태로 회복되어야 한다. 세그먼트 E000H 및 F000H내의 시스템 RAM(53)에는 단축된 테스트가 행해진다. 컴퓨터가 재개하는데 걸리는 시간을 감소시키기 위해, 메모리는 단지 적당 크기에 대하여만 체크되고, 0이 된다(000H가 각 위치에 기록된다.)
반면에 중지 플래그가 CMOS NVRAM(96)에서 클리어(clear)된 경우, 세그먼트 E000H 및 F000H내의 시스템 RAM(53)에는, (1) 스틱키-비트 테스트(sticky-bit test), (2) 이중-비트 메모리 테스트(double-bit memory test), 및 (3) 교차 어드레스선 테스트(crossed address line test)를 포함하는 표준, 심층 메모리 테스트(standard, in-depth memory test)가 행해진다.
세그먼트 E000H 및 F000H가 테스트된 후에, BIOS는, ROM BIOS(88)의 내용을 시스템 RAM(53)으로 복사하고, RAM에서 BIOS를 실행하도록 메모리 제어기를 구성함으로써 섀도우(shadow)될 수 있다. BIOS의 섀도우는 시스템의 속도를 증가시킨다. BIOS는 저속의 ROM(88)(전형적인 액세스 속도는 250 nano 초)이 아닌 고속의 시스템 RAM(53)(전형적인 액세스 속도는 80 nano 초)에서 실행되므로 시스템 성능이 향상된다. BIOS의 섀도우잉은 BIOS 복사지(BIOS copier)를 하위 메모리(lower memory)내의 어드레스로 로딩하고, ROM(88)으로부터의 BIOS를 시스템 RAM(53)의 세그먼트 E000H 및 F000H로 복사하고, 섀도우 RAM을 인에이블하는 것을 포함한다.
다음, 태스크(384)에서, 비디오 제어기(56)가 테스트되고 초기화되며, 비디오 메모리(58)가 테스트된다. 이러한 테스트와 초기화는 본 기술 분야에서 잘 알려져 있다.
그후 부트 루틴을 태스크(1008)에서 당업자에게 잘 알려진 제2플러그 및 플레이 자원 할당 패스를 수행한다. 작업(386)에서, 실행 코드의 흐름은 CMOS NVRAM(96)내에서 중지 플래그가 세트되어 있는지의 여부에 좌우된다. 중지 플래그가 세트되어 있는 경우, 태스크(383)에서 처럼 나머지 시스템 RAM(53)은 단지 크기만 체크되고 0이 된다. 그러나, CMOS NVRAM(96)내에서 중지 플래그가 클리어되어 있는 경우, 태스크(398)에서, 태스크(383)를 참조하여 설명한 바와 같이, 3-단계 심층 테스트를 사용하여 나머지 시스템 RAM(53)이 테스트된다.
메모리가 테스트된 후, 태스크(400)에서 보조 장치(auxiliary devices)-- 8295, UART, 8042, 및 기타 다른 것들--가 테스트되고 초기화된다. 태스크(408)에서, 고정 디스크 제어기가 초기화된다.
태스크(409)에서, 실행 코드의 흐름은 CMOS NVRAM(96)내에서 중지 플래그가 세트되어 있는지의 여부에 좌우된다. 중지 플래그가 세트되어 전원이 마지막으로 제거되었을 때 시스템의 상태가 성공적으로 저장되었음을 나타내는 경우, 부트-업 루틴은 하드 드라이브 제어기(86)와 하드 드라이브(31)의 테스트를 건너뛴다(skip). 반면에, CMOS NVRAM내에서 중지 플래그가 클리어되어 전원이 마지막으로 제거되었을 때 시스템의 상태가 저장되지 않았음을 나타내는 경우, 태스크(410)에서 부트-업 루틴은 고정 디스크 제어기(86)와 하드 드라이브(31)의 완전한 테스트(complete test)를 수행하는데, 이는 본 기술 분야에서 잘 알려져 있다.
다음 태스크(412)에서, 플로피 드라이브 제어기(84)가 테스트되고 초기화된다.
이때, 모든 장치들이 초기화되고 벡터는 기지의 위치(known location)를 지적하여, 모든 인터럽트 루틴은 예상대로 동작할 것이다. 따라서, 태스크(414)에서 부트-업 루틴은 BIOS 데이타 영역 및 벡터 테이블을 스냅샷(snapshot)하여, BIOS 데아타 영역 및 벡터 테이블의 사본을 세그먼트 EOOH내의 데이타 구조에 기록한다. 이 BIOS 데이타 영역 및 벡터 테이블의 사본은 태스크(274)에서 중지 루틴에 의해 사용되어, 컴퓨터 시스템(10)을 기지의 상태로 두며 모든 인터럽트가 예상대로 동작하도록 한다.
다음, 태스크(416)에서 BIOS 확장(BIOS extentions)이 본 기술 분야에서 잘 알려져 있는 바와 같이“스캔 인(scanned in)”되고 초기화된다. BIOS 확장은 네트워크 어댑터와 같은 주변 어댑터들에 의해 시스템에 부가된 BIOS 코드 블럭들이다. BIOS 확장은 전형적으로 ISA 버스(76)상의 세그먼트 C000H 및 D000H에 위치하고, BIOS 확장을 식별하기 위해 연관된 “서명(signature)”을 가진다. BIOS 확장이 검출되면, 길이가 체크되고 검사합이 계산되어 체크된다. 서명, 길이 및 검사합의 모두가 유효한 BIOS 확장이 존재함을 표시하는 경우, 프로그램 제어는 서명을 3바이트 지난 위치에 위치한 인스트럭션으로 전달되고, BIOS 확장은 주변 어댑터의 초기화와 같은 임의의 필요한 태스크를 수행할 수 있다. 일단 확장이 실행 완료되면, 제어는 다시 부트-업 루틴으로 전달되고, 이 부트-업 루틴은 BIOS 확장이 더 존재하는 지를 검색한다. 이후의 BIOS 확장들도 전술한 BIOS 확장처럼 처리된다. 더 이상의 BIOS 확장이 검출되지 않으면, 부트-업 루틴은 태스크(417)로 이동한다.
다음에, 태스크(1010)에서, CPU는 시스템 파워온 시간 델타(system power-on hours delta)를 판독하여 하드 드라이브(31)의 특수 파티션(special partition)상에 저장된 값에 더하고, 새로운 전체 파워온 시간을 하드 드라이브(31)상의 특수 파티션에 재기록한다. 본 명세서의 다른 곳에서 설명되는 바와 같이, 마이크로제어기(U2)가 시스템을 파워다운시키기에 앞서, 마이크로제어기는 SMI 라인을 단정함으로써 CPU(40)을 인터럽트한다. 결과적으로, CPU는 시스템이 곧 파워다운될 것이라는 가정하에 소정의 태스크를 수행한다. 바람직하게, 경과된 파워온 시간 타이머(elapsed power-on hours timer)에 의해 측정되는 파워온 델타와 같은 소정의 정보를 CMOS NVRAM에 보관하는 것을 포함한다. 그 후, CPU(40)는 마이크로제어기(U2)가 시스템을 전력을 파워다운시키는 것을 허용한다.
태스크(417)에서 부트-업 루틴은 그중지 파일에 특별히 할당된 것으로 여겨지는, 하드 드라이브(31)상의 파티션(partition)을 탐색한다. 파티션 테이블에서 PS/1식별자(“FE”)를 가지는 파티션 또는 식별자(“84”)를 가지는 도면 파티션(hibernation partition)이 발견되고, 이 파티션이 이러한 특정 시스템의 중지 파일을 수용하기에 충분히 큰 경우, 그 중지 파일에 대한 파티션으로 확정된다. 결과적으로, 중지 파일 서명은 파일의 제1바이트에 기록되고, 파일의 시작 헤드, 섹터, 실린더는 CMOS NVRAM(96)에 기록된다.
그 후, 실행 코드의 흐름은 태스크(418)에서 CMOS NVRAM(96)내에서 중지 플래그가 세트되어 있는지의 여부에 따라 분기한다. 중지 플래그가 클리어되어 있는 경우, 부트-업 루틴은 태스크(420)에서 제어를 PBOOT 루틴으로 넘긴다. PBOOT는 본 기술 분야에 잘 알려져 있으며, 플로피 디스트 혹은 하드 드라이브(31)로부터의 커맨드 인터프리터(command interpreter) 및 운영 체제(OS)를 로딩하는 책임이 있다. 태스크(417)에서 중지 파일에 대한 파티션이 발견되지 않는 경우, OS는 (제16도를 참조하여 설명한) 파티션이 발견되었는지 여부를 체크하는 OS-특정 드라이버를 실행하고, 발견되지 않았다면 FAT내에 연속 섹터 파일(a file of contiguous sector)을 할당하고 중지 파일의 제1바이트에 서명을 기록하며 중지 파일의 시작 헤드, 섹터, 실린더를 CMOS NVRAM(96)에 기록하도록 한다.
중지 파일이 할당되는 시점과 무관하게, 그 파일은 연속적인 섹터이어서 중지와 재개 동안 디스크로의 신속한 기록과 디스크로부터의 신속한 판독이 가능해야 한다.
다음, OS는 CONFIG.SYS 파일내에 발견되는 인스트럭션을 기초로하여 시스템을 구성한다. 최종적으로, OS는 AUTOEXEC.BAT 파일을 실행하며, AUTOEXEC.BAT 파일은 결국 실행제어를 운영 체제로 다시 전달한다. 중지 플래그가 CMOS NVRAM내에서 클리어되어 있어 전원이 마지막으로 제거되었을 때 시스템의 상태가 저장되지 않았음을 나타내는 경우, 태스크(421)를 참조하여 상세히 설명된 RESUME.EXE가 무시된다.
태스크(418)를 다시 참조하면, 중지 플래그가 CMOS NVRAM(96)내에서 세트되어 있어, 전원이 마지막으로 제거되었을 때 시스템의 상태가 저장되었음을 나타내는 경우, 실행코드의 흐름은, 태스크(419)에서 CMOS NVRAM(96)내에서 재초기화 어댑터 플래그(Reinitialize Adapter Flag)가 세트되어 있는지의 여부에 따라 분기한다. 재초기화 어댑터 플래그가 세트되어 있는 경우, 부트-업 루틴은 제어를 작업(421)의 PBOOT 루틴으로 넘긴다. 통상적인 PBOOT처럼, 본 발명의 PBOOT 루틴은 본 기술 분야에서 잘 알려져 있는 바와 같이, 로드 드라이버(drivers)를 로딩하고 시스템을 구성하는 CONFIG.SYS 및 AUTOEXEC.BAT 파일의 명령에 따라 시스템을 구성한다.
CONFIG.SYS 및 AUTOEXEC.BAT내의 커맨드는 시스탬내의 어댑터 카드를 초기화할 수 있다. 이 응용은 세 가지 유형의 어댑터 카드가 존재한다고 가정한다. 유형 I 어댑터는 초기화는 필요로 하지 않는다. 유형 II 어댑터는 초기화를 필요로 하지만 CONFIG.SYS 혹은 AUTOEXEC.BAT 파일에 따라 로딩된 드라이버 혹은 BIOS 확장에 의해 기지의 작업 상태에 놓이게 된다. 유형 III 어댑터는 시스템상에서의 코드 실행에 의해 수정된다. 유형 I 및 유형 II 어댑터를 구비한 시스템은 중지 및 회복될 수 있다. 그러나, 다수의 네트워킹 어댑터(networking adapters)를 포함하는 유형 III 어댑터를 구비한 시스템은, 이 카드들이, 시스템 전력이 제거되고 있는 등의 소정의 조건이 발생한 후에 이 어댑터를 재초기화하는 연관된 APM 인식 장치를 갖추고 있지 못한 한 회복될 수 없다. 시스템은 APM 인식 장치 드라이버를 갖춘 유형 III 카드를 중지시킬수 있다.
바람직한 실시예에서 RESUME.EXE 파일은 AUTOEXEC.BAT 파일에 부가되어, PBOOT로부터 재개 루틴으로 프로그램 제어를 전달하는 책임이 있다. 태스크(420)에서, OS는 RESUME.EXE의 존재를 무시한다. 그러나, 태스크(421)의 OS는 RESUME.EXE를 실행하여, 유형 II 어댑터가 CONFIG.SYS 및 AUTOEXEC.BAT로부터 OS에 의해 로딩된 장치 드라이버에 의해 초기화된 후에, 제어를 루틴으로 넘긴다.
태스크(419)를 다시 참조하면, 재초기화 어댑터 플래그가 CMOS(96)에서 클리어되어 있는 경우, OS는 실행 제어를 RESUME.EXE를 통해 재개 루틴으로 넘긴다. 재개 루틴은 하드 드라이브상의 중지 파일로부터 시스템 상태를 회복하며, 이는 제12도를 참조하여 보다 상세히 기술될 것이다.
이제 제12도를 참조하면, 태스크(450 내지 530)로 구성된 재개 루틴(Resume Routine)이 상세히 도시되어 있다. 먼저 태스크(451)에서 CPU(40)가 SMI를 갖는다면, CPU를 SMM 모드로 두는 CPU 재개 SMI가 발생되며, 태스크(454)의 코드로 점프한다. CPU가 SMI를 갖지 않는다면, 재개 셧다운이 발생하고, 이 재개 셧다운에서 리세트가 야기되며 리세트 처리기는 태스크(454)의 코드로 점프한다. 구성 프로세스 동안, BIOS 데이타 영역 및 벡터 테이블은 미지의 상태로 수정될 수 있다. 그러므로, 기본 BIOS 루틴은 예상한대로 동작할 수도 있고 그러하지 않을 수도 있다. 따라서, 태스크(454)에서, 재개 루틴은 세그먼트 E000H를 판독/기록으로 인에이블하며, 태스크(456)에서 교환 BIOS 데이타 영역 및 벡터 테이블 루틴을 호출한다. 이 루틴은, 태스크(414)에서 세그먼트 E000H로 복사되었던 기지의 양호한 BIOS 데이타 영역 및 벡터 테이블을 현재 세그먼트 0000H에서 활동인 수정된 BIOS 데이타 영역 및 벡터 테이블과 교환(swap)한다. 루틴이 완료되었을 때, 알려진 BIOS 데이타 영역 및 벡터 테이블은 세그먼트 E000H에서 활동이 되며, 수정된 BIOS 데이타 영역 및 벡터 테이블은 세그먼트 E000H내에 있고 BIOS 루틴은 예상한 대로 동작할 것이다.
그다음, 태스크(458)에서 재개 루틴은 하드 드라이브와 키보드를 지원하는 것들을 제외하고는 모든 인터럽트를 디스에이블한다. 그 후, 태스크(460)에서 재개 루틴은 하드 드라이브상에 중지 파일을 위치시키며, 중지 파일의 파일 크기 및 전술한 바와 같이 멀티-바이트 식별자인 서명을 판독한다. 태스크(462)에서 실행 코드의 흐름은 중지 파일이 올바른 크기와 서명을 가졌는지의 여부에 따라 분기한다. 중지 파일이 올바른 크기와 서명을 가지지 않는 경우, 태스크(464)로 분기하여 CMOS 메모리(96)내에서 중지 플래그를 클리어한 후, 태스크(464)에서 프로그램 제어는 리세트 벡터에 의해 지적된 장소내의 코드로 전달되어, 시스템이 중지되지 않았던 것처럼 이 시스템을 부팅시킨다. 반면, 중지 파일이 올바른 크기와 서명을 지닌 경우, 재개 루틴은 태스크(468)은 서명뒤에 위치한 중지 파일내 64K 블럭(세그먼트 E000H 정보에 대응하는 중지 파일의 부분)을 판독하고, 세그먼트 1000H에 기록하여 시스템 재개를 속행한다.
다음, 태스크(470)에서 1000H내의 블럭의 검사합이 계산되고, 태스크(472)에서 CMOS 비휘발성 메모리(96)로부터 이전에 저장된 검사합이 판독되고, 태스크(474)에서 실행 코드의 흐름은 태스크(470)에서 계산된 검사합이 태스크(330)에서 계산된 검사합과 동일한지의 여부에 따라 분기한다. 태스크(470)에서 계산된 검사합이 태스크(330)에서 계산된 검사합과 다른 경우, 중지 파일은 다소 결함이 발생한 것이며(예를 들면, 위조될 수 있음), 제어는 태스크(464)로 넘어가서, 태스크(464 및 466)를 참조하여 설명된 바와 같이, 중지 플래그 클리어하고 시스템을 리세트한다. 태스크(470)에서 계산된 검사합과 태스크(330)에서 계산된 검사합이 동일한 경우, 태스크(476)에서 중지 파일은 중지 루틴에 의해 기록된 것과 동일하다고 여겨져, 세그먼트 1000H내의 데이타가 세그먼트 E000H로 복사된다.
이제 태스크(478)에서 재개 루틴은 시스템이 회복되고 있으며, 사용자가 재개를 포기하려면 Ctrl-Alt-Del을 눌러야 한다는 것을 사용자에게 표시하는 특정 신호를 스크린상에 기록한다. 중지 루틴에서처럼, Ctrl-Alt-Del을 누르면, 태스크(526)에서 중지 플래그가 클리어되고, 태스크(528)에서 시스템이 재부팅된다. 따라서, Ctrl-Alt-Del이 눌러지고 재개 루틴이 실행중일 때, 시스템은 정상적으로 재부팅된다.
다음 태스크(480 및 482)에서, 82077 디스켓 제어기(84), DMA 장치(71) 및 UART(94)는 세그먼트 E000H 데이타 구조의 값을 그들 제각기의 레지스터에 기록함으로써 회복된다.
이어, 태스크(1020)에서 E000H 데이터 구조로부터 임의의 모뎀의 상태를 회복하기 위해 인터럽트 구동 병렬 스레드(interrupt-driven parallel thread)가 시작된다. 태스크(976)에서의 루틴과 마찬가지로, 모뎀 회복 루틴은 특정 모뎀과 연관된 COMM 포트에 대응하는 인터럽트를 검출하고, E000H 데이터 구조로부터 값을 판독하고, 모뎀으로 커맨드 및 값을 전송하여 모뎀으로 하여금 모뎀 내의 레지스터를 회복하도록 한다. 이러한 루틴은 모뎀에 제1커맨드를 전송한 다음, 인터럽트 구동 방식으로 응답하여, 모뎀의 레지스터 모두가 회복될 때까지, 모뎀의 응답을 수신하고 각각의 COMM포트 인터럽트에 응답하여 모뎀으로 다음 값을 전송한다. 모뎀 보관 루틴과 마찬가지로, 병렬 스레드로서 실행되지 않는다면, 이러한 루틴은 시스템을 재개하는데 걸리는 시간을 수초 더 걸리게 할 수 있다. 이는 인터럽트 구동 병렬 스레드이므로, 시스템 상태가 하드 드라이브(31)로부터 판독되기에 앞서 완전히 실행된다면, 재개에는 거의 혹은 전혀 시간을 추가하지 않을 것이다.
인터럽트 구동 병렬 스레드 모뎀 회복 루틴이 개시된 후, 태스크(486 내지 500)에서, 시스템 메모리는 태스크(304 내지 318)를 참조한 설명에서 기술된 루틴과 유사한 트윈-버퍼(twin buffer)루틴을 이용하여 중지 파일로부터 회복된다. 이 트윈-버퍼 시스템은 중지 파일로부터 압축된 데이터를 판독하여, 이 판독된 데이터를 세그먼트 E000H에 기록한 후, 그것을 다시 압축해제하여(decompress) 시스템 메모리에 기록한다. 이 두 루틴은 시분할로 작동한다. 한 루틴은 중지 파일로부터 데이터를 판독하고, 이 판독된 세그먼트를 E000H에 기록하며, 다른 한 루틴은 데이터를 압축해제하여, 이 압축해제된 데이터를 시스템 메모리에 기록한다. 후자는 포어그라운드에서 실행되며, 전자는 백그라운드에서 실행되는 인터럽트-구동 루틴이다. 분명히, 단지 하나의 CPU(40)만이 존재하므로, 주어진 시간에서 단지 하나의 루틴만이 실행될 수 있다. 그러나, 전자의 루틴은 인터럽트-구동 루틴이므로, 중지 파일로부터의 데이터 전송 속도를 최적화 하기 위한 필요에 따라 후자 루틴의 실행을 인터럽트할 수 있다. 두 버퍼 각각의 길이는 전송 시간을 최적화 한다고 생각되는 8K 바이트 길이이다.
이 프로세스는 태스크(486)에서 시작하여, 중지 파일로부터 판독하고, 8K 버퍼의 시작부분을 채우기에 충분한 데이터 세그먼트 E000H에 기록한다. 이때, 버퍼로부터의 판독 루틴(Read from Buffer Routine)(489)은 태스크(306)에서 시작한다. 버퍼로부터의 판독 루틴(489)은 백그라운드에서 실행되며 태스크(490-492)로 구성되는 인터럽트-구동 루틴이다. 압축해제 루틴(Decompression Routine)(493)은 태스크(494-498)로 구성되며 포어그라운드 루틴이다. 먼저 태스크(490)에서 버퍼로부터의 판독 루틴(489)은 중지 파일의 다음 8K 바이트를 판독하기 시작하여, 이 판독된 데이터를 이제 현재 버퍼(current buffer)인 다른 버퍼에 기록하기 시작한다. 버퍼로부터의 판독 루틴이 중지 파일의 다음 8K 바이트를 판독하여 현재 버퍼에 기록하는 동안, 태스크(494)에서, 압축해제 루틴(493)은 태스크(486)에 의해 채워진 버퍼를 판독한 후, 압축된 데이터를 압축해제하여 시스템 메모리에 기록한다. 일단, 압축해제 루틴(493)이 버퍼내의 모든 데이터를 압축해제한 경우, 다음 단계인(496)에서는 전체 시스템 메모리가 모두 압축해제되었는 지를 판단한다.
IDE 제어기(86)는 하드 드라이브(31)로부터 신속하게 데이터를 판독할 수 없다. 따라서, 압축 해제 루틴(493)은 언제나, 버퍼로부터의 판독 루틴이 하드 드라이브(31)로부터 현재 버퍼로 데이터를 판독하는 것을 완료하기 전에 하드 드라이브(31)에 기록되고 있지 않은 8K 버퍼의 압축해제를 완료할 것이다. 따라서, 압축해제 루틴(493)은 버퍼로부터의 판독 루틴(489)이 하드 드라이브(31)로부터 데이터 판독을 완료할 때까지 기다려야만 한다. 압축해제 루틴(493)이 전체 시스템 메모리의 압축 및 기록을 종료하지 않은 경우, 태스크(498)에서 압축해제 루틴(493)은 버퍼로부터의 판독 루틴(489)을 기다려야만 한다. 압축해제 루틴(493) 및 버퍼로부터의 판독 루틴(489)은 플래그 세트(a set of flags)를 통하여 통신한다. 버퍼로부터의 판독 루틴(489)이 중지 파일로부터 현재 버퍼로 데이터 판독을 마칠 때, 태스크(490)에서 루틴(489)은 버퍼 플래그를 스위칭하여 압축해제 루틴(493)이 중지 파일로부터 판독된 버퍼내의 데이터의 압축해제를 시작할 수 있음을 압축해제 루틴(493)에 표시한다. 그 후(492)에서 버퍼로부터의 판독 루틴(489)은 중지 파일로부터 판독되어야 할 8K 블록이 남아 있는지를 판단한다. 판독할 블록이 남아 있지 않은 경우, 태스크(502)에서 버퍼로부터의 판독 루틴은 중지 파일로부터 남아 있는 데이터를 판독하여 이 판독된 데이터를 현재 버퍼에 기록한다. 그 후, 태스크(500)에서 버퍼로부터의 판독 루틴은 백그라운드에서 실행을 멈추고, 사실상, 압축해제 루틴이 마지막 메모리의 압축해제를 끝마치기를 기다린다.
그 동안, 압축해제 루틴(493)은 버퍼 플래그를 조사하여 버퍼가 시스템 메모리로 압축해제될 준비가 되었는지를 판단한다. 즉, 압축해제 루틴은 태스크(598)에서 버퍼로부터의 판독 루틴이 현재 버퍼에 대해 완료할 때까지 기다리며, 완료시 압축해제 루프는 태스크(494)에서 속행된다.
일단 압축해제 루틴(493)이 모든 시스템 메모리에 대한 압축해제를 완료하면, 실행중인 유일한 백그라운드 루틴은 태스크(1020)를 참조하여 설명된 인터럽트 구동 모뎀 회복 루틴이며, 주 프로그램은 태스크(504)에서 속행된다.
다음, 태스크(504, 506)에서 비디오 제어기(56) 및 IDE 제어기(86)는 E000H데이타 구조로부터의 값을 이들 각각의 장치의 레지스터들에 기록함으로써 회복된다. 태스크(504)는 또한 체크포인트가 취하여지고 있으면 중지 루틴이 점프(태스크(1024) 참조)해야 할 것을 나타내는 포인트이다.
다음에, 태스크(1022)에서, 재개 루틴은 태스크(1020)를 참조하여 설명된 인터럽트구동 모뎀 회복 루틴이 완료되었는지를 테스트한다. 테스트 결과 루틴이 완료되지 않았다면, 재개 루틴은 이 루틴이 완료되기를 기다린다.
태스크(508)에 도시된 바와 같이, 인터럽트 구동 모뎀 상태 회복 루틴이 완료된 후, CPU 캐쉬(41) 및 시스템 캐쉬(60)는 적절한 값을 CPU(40) 및 캐쉬 제어기(62)에 제각기 기록함으로써 인에이블된다. 이어, 재개 루틴은 태스크(510에서 514까지)에서 세그먼트 E000H 데이터 구조로부터의 값을 각각의 장치내의 레지스터에 기록함으로써 타이머 제어기(102), 8042키보드 인터페이스 마이크로프로세서(104) 및 8259 인터럽트 제어기(92)의 상태를 회복한다.
다음, 태스크(484)에서 UART(94)는 세그먼트 E000H 데이터 구조로부터의 값을 그들 제각기의 레지스터에 기록함으로써 회복된다.
다음, 태스크(516)에서 재개 루틴은 교환 BIOS 데이터 영역 및 벡터 테이블 루틴(Swap BIOS Data Area 및 Vector Table Routine)을 호출한다. 이 루틴이 호출되기 전에, 기지의 BIOS 데이터 영역 및 벡터 테이블은 세그먼트 0000H에서 활동적이며, 중지 파일로부터 판독된 BIOS 데이터 영역 및 벡터 테이블은 세그먼트 E000H에서 비활동적이다. 교환후, 기지의 BIOS 데이터 영역 및 벡터 테이블은 세그먼트 D000H에서 비활동이며, 중지 루틴에 의해 보관된 BIOS 데이터 영역 및 벡터 테이블은 세그먼트 0000H에서 활동이다.
마지막으로, 태스크(518)에서 재개 루틴은 회복 CPU 루틴으로 점프하여, CPU(40)는 중지되기 전 상태로 회복된다. 회복 CPU 루틴(Restore CPU Routine)은 제14도를 참조하여 보다 상세히 기술될 것이다. 결국 회복 CPU 루틴은 실행 제어를 다시 APM으로 넘긴다.
최종적으로, CPU(40)는 복귀(RETURN) 인스트럭션을 실행하여, 시스템이 APM으로 복귀토록 한다. 이제 시스템은 시스템이 전혀 중지되지 않았던 것처럼 코드 실행을 속행한다. 실제로, 시스템은 중지/재개 절차에 의해 영향을 받지 않는다.
이제 제13도를 참조하면, 보관 CPU 상태 루틴(Save CPU State Routine)이 도시되어 있다. 태스크(600)에서 중지 루틴은 보관 CPU 상태 루틴으로 점프한다. 유의할 것은, APM은 이들 루틴이 실행되는 세그먼트 E000H 및 F000H를 판독/기록으로 인에이블한다는 것이다. 또한, 태스크(602)에서 EFLAGS 및 8개의 범용 레지스터들이 APM에 의해 보관된다. 태스크(604)에서 보관 CPU 상태 루틴은 먼저 임의의 DMA 동작이 끝나기를 기다리고, 마우스(13) 데이터 패킷에 동기화(synchronize)시켜, 이 루틴이 마우스 패킷과 전송간에 실행되도록 한다. 다음의 단계들에 의해 DMA가 종료되어 마우스 패킷에 동기화될 수 있다. (1) 인터럽트를 인에이블하고, (2) 임의의 DMA가 완료될 때까지 7 밀리초(milliseconds)를 기다리고, (3) 인터럽트를 디스에이블 시키고, (4) 마우스 패킷 경계(mouse packet boundary) 때까지 5미리초를 기다리고, (5) 인터럽트를 인에이블시키고, (6) 마우스 패킷이 도착할 때까지 5 밀리초를 더 기다리고, (7) 인터럽트를 디스에이블시킨다. 이들 단계 후에, 코드는 마우스 패킷들 사이에서 안전하게 실행된다.
다음 태스크(606)에서, 어드레스선(20)(I/O 포트 92H)의 상태는 스택(stack)상에 푸시(PUSH)된다.
실행 코드의 흐름은 CPU(40)가 SMI를 갖는 “S”부분인지 여부에 따라 태스크(1030)에서 분기된다. “S”부분이라면, CPU(40)는 태스크(1032)에서 마이크로제어기(U2)에게 명령하여 CPU(40)로 다시 SMI를 발생하도록 한다. SMI에 응답하여, CPU(40)내 마이크로코드는 태스크(1034)에서 CPU(40)의 상태를 E000H 데이터 구조내에 E000:FE00H로 보관한다. 그 후, CPU(40)는 태스크(1036)에서 부동 소숫점 코프로세서(floating point coprocessor)의 상태를 보관하고, 태스크(1038)에서 중지 루틴(제10도)을 호출한다. 본 명세서의 다른 곳에서 설명한 바와 같이, 중지 루틴은 태스크(1040)에서 복귀하고, 마찬가지로 태스크(1040)에서 부동 소숫점 코프로세서의 상태를 회복한다. 그 후, 태스크(1042)에서, RSM(resume) 인스트럭션은 CPU 상태를 회복시킨 다음 태스크(732)로 분기한다.
다른 한편, CPU(40)가 SMI를 갖지 않는다면, CPU 상태는 제13도 코드의 나머지 부분(remainder)을 이용해 보관되어야 하고, 수치 코프로세서(44)의 상태는 태스크(608)에서 스택으로 푸쉬된다. 다음에, 태스크(610)에서, 플래그는 세트되거나 클리어되어 CPU가 각각 32비트 모드 또는 16비트 모드에서 실행되는지를 표시한다.
실행 코드의 흐름은, 태스크(612)에서 CPU(40)가 보호 모드(Protected Mode)에서 실행중인지의 여부에 따라 분기한다. CPU(40)가 보호 모드에서 실행중이 아닌 경우, 실제 모드(Real Mode)에서 실행중임이 분명하며, 레지스터들은 매우 간명한 방식(straightforward manner)으로 보관될 수 있다. 먼저, 태스크(614)에서 머신 상태 단어(machine status word)내의 값 및 CR3내의 값들은 세그먼트 E000H 데이터 구조에 기록된다. 또한, 태스크(614)에서, TR 및 LDTR은 실제 모드에서 0 이므로, TR 및 LDTR에 대응하는 영역인 세그먼트 E000H 데이터 구조에 0 이 기록된다.
그 다음, 코드는 태스크(616)에서 공통 코드 경로(common code path)와 합쳐져(merge), GDTR 및 LDTR내에 보관된 값들이 세그먼트 E000H 데이터 구조에 기록된다. 다음, 실행 코드의 흐름은 태스크(618)로 진행하여, CPU(40)가 가상 8086 모드에서 실행되는지 아닌지의 여부에 따라 분기한다. CPU(40)가 가상 8086 모드에서 실행중이 아닌 경우, 코드는 공통 경로를 따라 태스크(620)로 진행하여, 디버그 레지스터들(DR7, DR6, DR3, DR2, DR1및 DR0)이 스택에 푸시된다. 이들 레지스터는 디버거 혹은 다른 루틴에 의해 사용된다. 그 다음, 태스크(622)에서 DS, ES, FS 및 GS가 스택에 푸시된다. 그다음, CS, SS 및 ESP내의 값들은 세그먼트 E000H 데이터 구조에 기록된다.
이 시점에서, 세그먼트 E000H 데이터 구조에 기록되어야 할 모든 값들이 기록되었고, 따라서, 태스크(626)에서 섀도우 RAM 세그먼트 E000H 및 F000H는 판독-전용으로 변경될 수 있다. 다음, 태스크(628)에서 CPU 캐쉬(41)는 라이트-백 및 무효화 캐쉬 커맨트(Write Back and Invalidate Cache command)를 사용하여 플러쉬(flush)된다.
궁극적으로, 태스크(630)에서 고유의 셧-다운 플래그(unique Shutdown Flag)가 CMOS 비활성 메모리(96)내에 세트된다. 마지막으로, 보관 CPU 상태 루틴은 중지 루틴으로 사실상 “복귀(Return)”한다. 코드에서 “복귀”는 사실상 RESET에 뒤이은 분기이다. CPU(40)는 리세트 벡터에 의해 지적된 코드로 점핑함으로써 리세트된다. CPU(40)를 리세트하면 CPU가 실제 모드로 진입하며, 실제 모드에서는 모든 장치 및 메모리 영역이 보호 고장(protection fault) 발생의 염려없이 액세스될 수 있다. 이 시점 후에, CPU 상태가 보관되고, 중지 루틴은 시스템의 나머지 상태를 보관해야만 한다.
리세트 백터에 의해 지적된 코드내에서, 프로그램 제어는 셧 다운 플래그(Shutdown Flag)가 CMOS(96)에서 세트되어 있는지의 여부에 따라 분기한다. 셧-다운 플래그가 클리어된 경우, 시스템은 정상적으로 부팅한다. 반면에, 셧-다운 플래그가 세트되어 있는 경우, 코드는 나머지 중지 루틴으로 분기한다. 즉, 실행 제어는 중지 루틴내의 제10도에 도시된 태스크(253)로 점프하여, 시스템(10)의 중지를 완료한다. 따라서, 태스크(632)에서 보관 CPU 상태 루틴은 중지 루틴으로 효과적으로 “복귀”한다.
태스크(612)를 다시 참조하면, CPU가 보호 모드에 있는 경우, 코드는 태스크(634)에서, CPU가 가상 8086 모드내에 있는지의 여부에 따라 분기한다. CPU가 가상 8086 모드가 아닌 경우, 코드는 태스크(636)에서 현재 특권 레벨(current priviledge level)이 0 인지 혹은 아닌지의 여부에 따라 다시 분기한다. 현재 특권이 0 이 아닌 경우, 적당한 특권이 없는 루틴이 보관 CPU 상태 루틴을 실행중이며, [태스크(652)에서 시작하는] 치명적 중지 에러 루틴(Fatal Suspend Error Routine)이 호출된다. 치명적 중지 에러 루틴은 후술될 것이다. 프로그램 제어가 치명적 중지 에러 루틴으로부터 복귀하는 경우, CPU는 보관 CPU 상태 루틴이 호출되기 전의 상태로 복귀되어야하며, 따라서, 프로그램 실행은 제14도의 태스크(794)로 분기하여, CPU의 부분 회복(partial restore)을 수행한다. 단지 부분 회복만이 필요한데 그 이유는 CPU의 매우 작은 부분만이 수정되었기 때문이다.
태스크(636)를 다시 참조하면, 호출 코드가 적당한 특권 레벨을 가지는 경우, 태스크(642)에서 보관이 계속되어 CR0, CR3, TR 및 LDTR의 값들이 세그먼트 E000H 데이터 구조에 보관된다. 그 후, 전술한 바와 같이, 태스크(616)에서 이 코드 경로는 공통 코드 경로와 합쳐져 GDTR 및 IDTR의 값들이 E0000H 데이터 구조에 보관된다. 이곳으로부터, 코드는 전술한 태스크(618 내지 632)의 경로를 따르며, 그 결과 나머지 중지 루틴 코드로 “복귀”(RESET + 분기)한다.
태스크(634)를 다시 참조하면, CPU(40)가 가상 8086 모드에 있는 경우, 실행은 태스크(644)에서 속행되어, 머신 상태 단어(CR0의 하위 16비트)의 값이 E000H 데이터 구조에 보관되고, 세그먼트 E000H 데이터 구조내의 플래그가 세트되어 CPU가 가상 8086 모드라는 것을 나타낸다. 그 다음, 이 코드는 전송 태스크(646 및 648)를 통해 태스크(616)에서 공통 코드와 합쳐진다. 태스크(618)에서, CPU가 가상 8086 모드인 경우, 제어는 태스크(650)로 붙기하여, DE, ES, FS 및 GS의 값들이 세그먼트 E000H 데이터 구조에 보관된다. 이 코드는 태스크(624)에서 공통 코드와 다시 합쳐진다. 이곳으로부터, 코드는 전술한 경로(624 내지 632)를 따르고, 그 결과 나머지 중지 루틴 코드로 “복귀”(RESET + 분기) 한다.
치명적 중지 에러 루틴은 태스크(652내지 664)로 구성되며, 부적절한 특권레벨을 가진 코드가 CPU의 상태를 보관하고자 하는 경우 태스크(638)에서 호출된다. 먼저, 태스크(654)에서 고장 안전 타이머가 리세트된다. 그 다음 태스크(656)에서, 스피커(speaker)는 가청 주파수에서 수차례 비프음을 낸다. 예를 들어, 1/6초 간격으로 0.25초 동안 886 Hz에서 3차례 비프음을 낸다. 3차례의 비프음은 시도된 중지가 발생하지 않았음을 사용자에게 경고한다. 비프음 후에, 태스크(658)에서 고장 안전 타이머가 다시 리세트되어, 고장 안전 타이머가 만료되고 이로써 전원(17)이 셧-다운되기 전에 사용자에게 15초 내지 18초를 제공한다.
다음, 태스크(660 내지 662)에서 치명적 중지 에러 루틴은 사용자가 스위치(21)를 눌러 중지를 포기하기를 원하는지를 체크한다. 스위치의 폐쇄는 CPU(40)가 마이크로제어기(U2)에 폐쇄 이벤트가 발생하였는지의 여부를 질의함으로써 체크된다. 사용자가 버튼(21)을 누른 경우, 실행제어는 전술한 태스크(640)로 복귀한다. 이와 달리, 15초 내지 18초내에 사용자가 버튼(21)을 누르지 않는 경우, 고장 안전 타이머가 만료되고 전원은 마이크로제어기에 의해 턴 “오프”되며, CPU(40)에 의한 모든 코드 실행은 시스템 전압이 허용 오차를 벗어남에 따라 중단된다.
이제 제14도를 참조하면, 태스크(700)로부터 시작하는 회복 CPU 루틴(Restore CPU Routine)이 도시되어 있다. 이 루틴은 하드웨어 및 메모리의 나머지 부분이 중지전의 상태로부터 회복된 후 재개 루틴에 의해 호출된다.
먼저, 세그먼트 E000H가 아직 판독/기록이 아니면, 세그먼트 E000H는 태스크(702)에서 판독/기록으로 되어야 한다.
다음, 실행 코드는 태스크(704)로 진행하여, CPU(40)가 중지되었을 당시 가상 8086 모드에서 실행중이었는지의 여부에 따라 분기한다. 시스템(10)이 중지되었을 때 CPU(40)가 가상 8086 모드에서 실행중이었던 경우, 실행 코드는 가상 8086 CPU 회복(Virtual 8086 CPU restore)에 고유한 태스크(706 내지 728)로 진행한다. 그 후, 코드는 태스크(730 내지 748)의 공통 경로와 합쳐진다.
상태가 보관되었을 때 CPU가 가상 8086 모드이었던 경우, CR3, LDTR 및 TR은 보관 CPU 상태 루틴에 의해 액세스되어 그들의 값이 E000H 데이터 구조로 보관될 수 없었다. 따라서, CR3, LDTR 및 TR은 태스크(706, 708 및 710)에서 각각 추정(estimate)되어야만 한다. 일반적으로, 이들은 시스템 RAM(53)을 통해 CR3, LDTR 및 TR이 지적하는 구조를 탐색함으로써 추정된다. 예를 들면, GDT내의 LDT 엔트리를 발견하면 LDTR이 결정될 수 있다.
CR3는 태스크(706)에서 추정된다. CR3는 페이지 디렉토리 베이스 레지스터(Page Directory Base Register: PDTR)를 보유하며, 이 레지스터는 디렉토리의 페이지 프레임 어드레스, 페이지-레벨 캐쉬 디스에이블(Page-Level Cache Disable: PCD) 비트 및 페이지-레벨 라이트 쓰루(Page-Level Write Through:PWT) 비트를 가진다. PDBR의 추정은 페이지 디렉토리가 시스템 RAM(53)내에서 4K 경계(boundary)에서 시작해야 한다는 것을 알고, 보관 CPU 상태 루틴에 의해 세그먼트 E000H 데이터 구조에 보관된 IDTR 및 GDTR의 값을 알고, BIOS 코드가 세그먼트 F000H로부터 실행중이라는 가정하에 수행된다. BIOS 코드는 속도를 향상시키기 위하여 이미 섀도우 RAM내로 섀도우되었으므로 이러한 가정은 타당하다. 운영 체제가 BIOS 코드를 다른 영역으로 복사한 경우에는 CR3의 추정은 실패할 수 있다.
전술한 지식 및 가정과 함께, BIOS 코드 세그먼트에 대응하는 페이지 변환 테이블(page translation table)의 존재 여부를 알기 위해 물리적 메모리의 매 4K 페이지가 테스트된다. 즉, 페이지로의 0380H의 오프셋(offset)은 값 000F0XXX, 000F1XXX, 000F2XXX,... 000FEXXX를 포함할 것이다. 일단 페이지의 위치가 파악되면, 시스템 RAM(53)을 탐색하여 이렇듯 위치가 파악된 페이지 테이블의 물리적 어드레스에 대응하는 첫 엔트리를 가지는 페이지 디렉토리를 찾는다. 페이지 디렉토리의 물리적 어드레스는 양호한 PDTR “추정”값이다.
그 후, 가설 PDBR(hypothetical PDBR)은 PDBR이 GDTR 및 LDTR의 어드레스를 정확하게 변환하는지 확인함으로써 검증(verify)된다. 즉, PDBR은 GDTR의 선형 어드레스(linear address)를 변환하는데 사용되고, GDT의 첫 엔트리는 널(null)이 되는지 확인된다(GDT의 첫 8 바이트는 모든 CPU 모드내에서 항상 00H임). 그 후, 복귀된 물리적 어드레스가 물리적 메모리의 범위내에 드는지 확인된다. 선형적-물리적 변환(linear to physical translation)을 성취하기 위해, CPU의 변환 방법을 모방(mimic)하는 서브루틴이 사용된다. 변환된 어드레스 ESI내에 복귀되고, 물리적 페이지가 물리적 메모리내에 존재하는 경우 캐리 플래그 CF는 클리어 되며, 물리적 페이지가 메모리에 존재하지 않는 경우 CF는 세트된다. 이 변환 루틴을 사용하여, GDT의 첫 바이트가 메모리(53)로부터 판독된다. GDT의 첫 엔트리가 널(null)인 경우, 가설 PDBR은 제1테스트를 통과하고, 따라서, 다시 한번 테스트된다. 그 후, PDBR은 변환 루틴을 사용하여 IDT를 발견하기 위해 IDTR을 변환하는데 사용된다. 그다음, 복귀된 물리적 어드레스는 물리적 메모리의 범위내에 드는지 확인된다. IDT의 첫 위치가 물리적 메모리내에 존재하는 경우, PDTR은 제2테스트를 통과한다.
가설 PDBR이 GDTR 및 IDTR로 올바르게 변환되는 경우, 그 값은 PDBR로 추정되어(presumed) 세그먼트 E000H 데이터 구조내 CR3 영역에 기록된다. 반면에, 가설 CR3가 어느 하나의 테스트라도 실패하는 경우, 루틴은 다시 시작되어, 시스템 메모리를 탐색하여 유효한 CR3로 인도할 지도 모를 또다른 BIOS 코드 세그먼트 페이지 변환 테이블을 찾는다.
PCD 및 PWT는 정상 플래이너 동작 동안 00H에서 고정된 것으로 항상 추정된다. 이들 값은 0 으로 세트되며, CR3 영역의 PDBR과 함께 세그먼트 E000H 데이터 구조내에 기록된다.
일단 CR3가 추정되었으면, 태스크(708)에서 LDTR이 추정된다. LDT가 GDT내의 어딘가에 있음을 알고, LDT가 메모리내에 존재하여야 함을 알므로, CR3가 추정되었을 때, LDTR은 추정될 수 있다. LDTR을 추정하기 위해, GDT가 탐색되어 존재하는 것으로 표시된 LDT를 찾는다. (태스크(706)를 참조하여 설명된 변환 루틴을 사용하여 테스트되는) 물리적 메모리에 존재하고, 존재하는 것으로 표시된 첫 LDT는 LDTR이 지적하는 테이블이라고 가정된다. 이 테이블의 시작부의 물리적 어드레스는 세그먼트 E000H 데이터 구조내의 LDTR 영역에 보관된다.
비록 OS/2하에서, 하나 이상의 LDT가 존재하는 것으로 표시될 수 있고 물리적 메모리에 존재할 수 있지만, 전술한 LDTR 추정 방법은 충분히 유용하다고 믿어진다. EMM386은 공통 가상 8086 모드 루틴(common Virtual 8086 Mode routine)이며, 따라서, 문제들을 일으키는 것처럼 보일 수 있다. 그러나, EMM386은 단지 하나의 CR3와 하나의 LDTR만을 가지므로, EMM386의 CR3 및 LDTR은 추정이 용이하다.
일단 CR3 및 LDTR이 추정되면, 태스크(710)에서 TR이 추정된다. 필연적으로 GDT 및 LDT내의 각 태스크 선택기 엔트리(task selector entry)가 탐색되어 비지 비트(busy bit)가 세트된 태스크 상태 선택기를 찾는다. 비지 80286 태스크 상태 선택기인지 혹은 비지 80486 태스크 상태 선택기인지를 판단하기 위해 각 엔트리의 유형 필드(type field)가 테스트된다. 비지 286 TSS 혹은 비지 486 TSS를 가지는 첫 엔트리는 TR이 지시하는 어드레스로 추정된다. 비지 286 혹은 486 TSS를 가지는 엔트리의 물리적 주소는 세그먼트 E000H 데이터 구내의 TR 영역에 보관된다. 어떠한 엔트리도 비지 286 혹은 486 TSS를 가지지 않는 경우, 세그먼트 E000H 데이터 구조내의 TR 영역에 0 이 보관된다.
CR3, LDTR 및 TR을 추정한 후, 코드는 태스크(712)에서 속행된다. 태스크(712)에서 TR이 유효 TSS를 지적하는 경우, 태스크(714)에서 TR에 의해 지적된 TSS의 비지 비트는 클리어된다. 어느 경우나, 코드는 태스크(716)로 진행하여, DS, ES, FS 및 GS가 GDT에 대한 유효한 선택기와 함께 로딩된다. 그 후 태스크(718)에서, CR3 및 CR0가 세그먼트 E000H 데이터 구조로부터의 값으로 로딩된다. 다음, 태스크(720)에서 페이징이 인에이블되어, 선형 어드레스가 물리적 어드레스와 동일한 유일한 영역은 세그먼트 E000H 및 F0000H내의 영역이 된다. 그 다음, 태스크(722)에서 IDTR, GDTR, LDTR 및 TR이 세그먼트 E000H 데이터 구조에 보관된 값으로 로딩된다.
마지막으로, 태스크(724 및 726)에서, 세그먼트 E000H데이타 구조로부터의 GS, FS, DS, ES, SS, ESP,(VM 비트를 세팅한 후) EFLAGS 및 CS에 대응하는 값들을 스택상에 푸싱(pushing)함으로써, 가상 8086 인터럽트 스택이 생성된다. 또한, 태스크(726)에서 태스크(730)이 코드에 대응하는 복귀 어드레스(return address)가 스택상에 푸싱된다. 마지막으로, IRETD 인스트럭션이 실행되어 CPU(40)를 가상 8086 모드로 다시 두고, 태스크(730)에 대응하는 코드로 실행을 전송한다.
태스크(730)는 제14도의 각종 경로가 공통으로 사용하는 공통 경로를 시작한다. 태스크(730)에서 코프로세서(44)는 세그먼트 E000H 데이터 구조에 보관된 값을 이용하여 회복된다. 다음, 태스크(732)에서 어드레스선(20)(I/O 포트 92H)의 상태가 스택으로부터 팝(pop)된다. 태스크(732)는 SMI에 기초한 CPU 보관 상태 루틴(SMI-based CPU save state routine)이 점프한 곳이기도 하다[태스크(1046) 참조]. 그다음, 태스크(734)에서 섀도우 RAM 세그먼트 E000H가 다시 판독-전용이 된다. 태스크(736)에서 APM은 제6(a)도 및 제19도를 참조하여 설명한 바와 같이 고장 안전 타이머를 재시작시킴으로써 하드웨어에 접속된다. 그다음, 태스크(738)에서 섀도우 RAM 세그먼트 E000H 및 F000H가 다시 판독-전용으로 된다. 마지막으로, 태스크(740)에서, 회복 CPU 상태 루틴은 정상 재개가 발생하였음을 나타내는 플래그를 세트한다. 태스크(742, 744 및 746)는 회복 CPU 상태 루틴에 의해 실행되지 않으며, 중지 이벤트에 의해 인터럽트되었던 코드로 복귀하기에 앞선 어느 시점에서 8개의 범용 레지스터들이 스택으로부터 팝 오프(pop off)되고, (코드가 인터럽트되었을시 마스크가능 인터럽트들이 인에이블된 경우) 마스크가능 인터럽트가 인에이블되고, 플래그가 스택으로부터 팝 오프되는 것을 나타내는 데 사용된다. 마지막으로, 회복 CPU 상태 루틴은 감독 루틴으로 복귀하며, 감독 루틴은 제어를 다시 APM으로 복귀시키고, APM은 모든 훼손된 시스템 값(stale system values)들을 갱신하고(update), 제어를 다시 인터럽트되었던 코드로 복귀시킨다.
태스크(704)를 다시 참조하면, CPU(40)가 인터럽트되었을 당시 가상 8086 모드에 있지 않았던 경우, 코드는 경로(750 내지 792)로 진행하고, 태스크(730 내지 748)의 공통 경로와 병합한다. 태스크(750)에서, 세그먼트 E000H 데이터 구조내의 TR값이 TR이 유효 TSS를 지적한다고 나타내는 경우, 태스크(752)에서 이 TSS의 비지 비트는 클리어된다. 어느 경우나, 태스크(754)에서, GDTR 및 CRO가 세그먼트 E000H 데이터 구조의 값으로 로딩된다.
태스크(756 내지 764)에서, 더미 페이지 디렉토리 테이블(dummy page directory table)과 페이지 변화 테이블(page translation table)이 세그먼트 E000H로 로딩된다. 첫째로, 태스크(756)에서 섀도우 RAM 세그먼트 C000H가 판독/기록으로 된다. 두 번째로, 태스크(758)에서 새로운 페이지 디렉토리 테이블이 어드레스 0E0000H에서 생성된다. 세 번째로, 태스크(760)에서 이 새로운 페이지 디렉토리 테이블의 첫 엔트리는 0E1000H를 지시하도록 수정된다. 네 번째로, 태스크(762)에서 어드레스 0E0000 내지 OFFFFF가 제공되고, 이 어드레스 범위내에서 선형 어드레스들은 물리적 어드레스들과 동일하도록 새로운 페이지 변환 테이블이 0C1000H에서 생성된다. 마지막으로, 어드레스 변환이 0E0000H내의 새로운 더미 페이지 디렉토리 및 페이지 변환 테이블을 통해 이루어지도록 CR3내의 페이지 디렉토리 베이스 레지스터는 0E0000H로 로딩된다.
다음, 태스크(766)에서 섀도우 RAM 세그먼트 E000H 및 F000H는 판독/기록으로 된다. 그 다음, CPU(40)가 중지되었을 때 16-비트 코드를 실행중이었던 경우, CPU(40)은 16-비트 모드에 있었던 것이며, 태스크(770)에서 16-비트 코드 경로를 지적하는 오프셋(offset)이 세그먼트 X000H 데이터 구조에 보관된다. 반면에, CPU(40)가 16-비트 모드가 아니였던 경우, 이 CPU(40)는 32-비트 모드에 있었던 것이며, 태크스(772)에서 16-비트 오프셋 대신에 32-비트 코드 경로를 지적하는 오프셋이 세그먼트 E000H 데이터 구조내에 보관된다. 어쨌던, 이들 코드 경로는 병렬적이며, 하나는 16비트 오퍼랜드를 사용하며 다른 하나는 32비트 오퍼랜드를 사용하는 것외에는 차이가 없다. 태크스(770 내지 772)는 단순히 이들 병렬 경로들(parallel paths)중의 어느 하나로 오프셋을 설정한다. 이 경로중의 하나(오프셋에 대응하는 하나)가 후술할 태스크(782)로 진입한다.
다음, 태스크(774)에서 세그먼트 E000H 데이터 구조로부터의 CR3 값이 EDX로 로딩되고, 세그먼트 E000H 데이터 구조의 SS값이 CX로 로딩되고, 세그먼트 E000H 데이터 구조로부터의 ESP값이 EBP로 로딩되고 세그먼트 E000H 데이터 구조로부터의 TR 값이 ESI의 상위 절반(upper half of ESI)으로 로딩되고, 또한, 세그먼트 E000H 데이터 구조로부터의 LDTR 값이 ESI(SI)의 하위 절반[lower half of ESI(SI)]으로 로딩된다. 이들 값은 아래의 그들의 적절한 위치로 시프트(shift)된다. 그 후, 태스크(776)에서는 GDTR, LDTR 및 CR0가 세그먼트 E000H 데이터 구조로부터의 그들의 값으로 로딩된다. 태스크(778)에서 LDTR은 SI에 보관된 LDTR값으로 로딩된다. 그 후, 코드는 태스크(770 혹은 772)에 배치된 오프셋으로 파 점프(far jump)한다. 먼 점프(far jump)는 연산 코드(opcode)를 직접 소오스 코드(source code)에 배치하고, 태스크(770 혹은 772)로부터의 오프셋을 사용하여 코딩된다. 그 후, 태스크(782)에서, 코드는 16-비트 연산 코드 경로 혹은 32-비트 연산 코드 경로중의 하나에서 속행된다.
다음, 태스크(784)에서 CR3는 EDX에 보관된 CR3값으로 로딩되고, SS값은 CX에 보관된 SS값으로 로딩되고, 그리고, ESP는 EBP에 보관된 ESP값으로 로딩된다. 그다음, 태스크(786)에서 GS, FS, ES 및 DS가 스택에서 팝 오프된다. 태스크(788)에서 인터럽트된 CPU(40)가 보호 모드에서 코드를 실행중이었던 경우, 태스크(790)에서 TR은 ESI의 상위 절반에 보관된 TR값으로 로딩된다. 어느 경우에나, 코드는 태스크(792)에서 속행되어, 디버그 레지스터들(DR0, DR1, DR2, DR3, DR6 및 DR7)이 스택으로부터 팝 오프된다.
이 시점에서, 이 코드 경로는 전술한 태스크(730 내지 748)로 구성된 공통 코드 경로와 합쳐진다. 태스크(794)에서 에러-회복 루틴(error-recovery routine)은 또한 보관 CPU 상태 루틴의 태스크(640)으로부터의 공통 코드 경로와 결합한다.
이제 제15도를 참조하면, 태스크(800)에서 시작하는 보관 8259상태 루틴의 흐름도가 도시되어 있다. 8259 상태 보관 루틴은 태스크(802)에서 실시간 클럭(98)에 의해 사용되는 주기적(periodic) 인터럽트값을 보관하고, 태스크(804)에서 다른 모든 판독가능한 레지스터들을 세그먼트 E000H 데이터 구조에 보관하여 진행된다. 본 기술 분야에 잘 알려져 있는 바와 같이, 컴퓨터 시스템(10)의 구조는 소정 8259 판독-전용 레지스터들이 고정된 값을 가지도록 요구한다. 이들 값은 알려져 있으므로 결정할 필요가 없다. 구하기 어려운 8259 값들은 8259 베이스 어드레스(8259 base address), 8259 슬레이브 어드레스(8259 slave address)이며, 두 8259가 OS에 의해 보류중(pending) 혹은 서비스중(in-service)인 인터럽트를 나타내도록 세트되었는지의 여부이다.
상술한 네 가지 사항(items)은 제15도의 나머지 코드에 의해 확인된다. 태스크(806)에서 8259는, 키보드(12) 및 마우스(13) 인터럽트를 제외하고, 인터럽트 마스크된다.
다음, 인터럽트 벡터 테이블은 태스크(808)에서 물리적 메모리의 기저(bottom) 1K를 세그먼트 C000H 데이터 구조에 복사함으로써 보관된다. 그다음, 태스크(810)에서 세그먼트 C800H에서 시작하는 256 더미 인터럽트 서비스 루틴들(256 dummy interrupt service routines)을 지적하는 256개의 고유 더미 벡터를 로딩함으로써, 새로운 “더미(dummy)”인터럽트 벡터 테이블이 물리적 메모리의 기저 1K로 로딩된다. 태스크(812)에서, 256 더미 인터럽트 서비스 루틴들은 세그먼트 C800H에서 생성된다.
그다음, 키보드(12) 및 마우스(13) 인터럽트는 태스크(814)에서 디스에이블 된다. 태스크(816)에서 모든 무긍정응답(unacknowledged) 키보드(12) 및 마우스(13) 인터럽트들이 응답(acknowledge)된다.
그다음, 태스크(818)에서 키보드 인터럽트가 발생하고, 태스크(820)에서 이 인터럽트는 베이스 8259가 보류중 혹은 서비스중으로 세트되었는지를 판단한다. 그 다음, 이 값은 세그먼트 E000H 데이터 구조에 기록된다. 태스크(822)에서 코드는 인터럽트가 서비스되기를 기다린다. 태스크(824)에서 더미 서비스 루틴들중의 하나를 호출하여 인터럽트가 서비스된다. 더미 서비스 루틴의 호출은 8259 베이스 어드레스를 판단하고, 8259가 보류중 모드인지 혹은 서비스중 모드였는지를 판단한다. 베이스 어드레스와 모드는 세그먼트 E000H 데이터 구조에 보관된다.
태스크(826, 828, 830 및 832)에서 유사한 절차가 슬레이브 8259에 대해 수행된다.
태스크(834)에서 인터럽트 벡터 테이블이 E0000H 데이터 구조의 값을 다시 물리적 메모리의 기저 1K로 복사하여 회복된다. 그 후, 태스크(836)에서 세그먼트 C000H는 다시 판독-전용으로 되고, 태스크(840)에서의 호출 프로그램(calling program)으로의 복귀에 대한 준비로서 태스크(838)에서 모든 인터럽트들이 마스크된다.
제16도를 참조하면, 중지 파일을 동적으로 할당하는 데 사용되는 루틴이 도시되어 있다. 태스크(1012)와 관련하여 설명한 바와 같이, FAT내에 할당된 중지 파일은 연속 섹터(contiguous sector)에 이어서 중지 및 재개 동안 디스크로의 고속 기록 및 디스크로부터의 고속 판독을 허용해야 한다. 또한, 당업자에게 명백한 바와 같이, 중지 파일은 전체 시스템 상태의 압축된 내용을 저장하기에 충분한 크기이어야 한다.
이러한 목적을 위해, 중지 파일을 동적으로 할당하기 위한 루틴은 태스크(1050)에서 시작된다. 이 루틴은 시스템이 재개 루틴을 실행하지 않고 부트될 때마다 OS에 의해 실행되고, 메모리가 시스템에 부가된 후에 실행되어야 한다. 먼저, 제16도에 도시된 할당 루틴은 태스크(1052)에서 CMOS NVRAM내의 플래그를 체크함으로써 전력 관리 회로가 존재하는지를 테스트한다. 전력 관리 하드웨어(106)가 존재하지 않는다면, 프로그램은 태스크(1054)에서 퇴장한다. 전력 관리 하드ㅜ에어(106)가 존재한다면, 할당 루틴은 태스크(1056)에서 재개가 보류중인지 여부를 체크한다. 재개가 보류중이라면, 프로그램은 태스크(1058)에서 퇴장한다.
재개가 보류중이 아니라면, 할당 루틴은 태스크(1060)에서 보관 파일 파티션(Save File Partition)이 존재하는지 여부를 테스트한다. 보관 파일 파티션이 존재한다면, 태스크(1062)에서 프로그램은 이 파티션이 전체 시스템 상태를 저장하기에 충분한 크기라는 가정하에 퇴장한다.
보관 파일 파티션이 존재하지 않는다면, 보관 파일을 위해 FAT내에서 하나의 파일이 할당되어야 한다. 먼저, 태스크(1064)에서 파일의 크기가 판단된다. 이것은 시스템 RAM(53)의 크기와, 비디오 메모리(58)의 크기와, 큰 휘발성 메모리 용량을 갖는 임의의 다른 장치의 크기와, CPU(40)와 같이 각종 장치의 레지스터내의 값을 저장하기 위한 64킬로바이트 영역을 가산함으로써 계산된다.
필요한 보관 파일의 크기가 계산된 후, 할당 루틴은 태스크(1066)에서 FAT내에 보관 파일을 할당하려 시도한다. 하드 드라이브(31)상 이용가능한 충분한 저장 공간이 존재하지 않는다면, 할당 루틴은 태스크(1070)에서 하나의 루틴을 호출하여 가능하면 하드 드라이브(31)상의 이용가능한 공간의 크기를 증가시킨다.
DOS 호출은 하나의 파일내에 연속 섹터가 할당된다고 보장할 수 없다. 따라서, 하드 드라이브(31)가 보관 파일을 저장하기에 충분한 공간을 갖는다면, 할당 루틴은 태스크(1072)에서 이러한 공간이 연속적인지를 판정한다. 보관 파일이 단편화(fragment)되어 있다면(연속적이지 않다면), 할당 루틴은 태스크(1074)에서 하나의 루틴을 포출하여 하드 드라이브를 연속화(defragment)함으로써 가능한 보관 파일에 연속적인 파일을 제공한다.
보관 파일이 단편화되어 있지 않다면, 할당 루틴은 태스크(1076)에서 보관 파일의 제1섹터에 서명(“PS/1Power Management”)을 기록한다. 그런 다음, 할당 루틴은 태스크(1078)에서 그 파일의 DOS 핸들(handle)을 BIOS의 물리적인 실린더, 헤드 및 섹터로 변환하고, 이들 값을 CMOS NVRAM에 기록한다. 할당 루틴은 태스크(1080)에서 퇴장한다.
하드 드라이브(31)를 연속화하기 위해 태스크(1074)에서 호출된 루틴은 태스크(1082)에서 시작되고, 태스크(1094)를 통해 계속된다. 먼저, 태스크(1084)에서 하드 드라이브(31)가 당업자에게 잘 알려진 하드 드라이브 압축 루틴중 하나의 루틴을 사용해 압축되어 있는지를 판단한다.
하드 드라이브(31)가 압축되어 있지 않다면, 태스크(1086)에서 전체 하드 드라이브(31)는 당업자에게 잘 알려진 연속화 유틸리티(defragmenting utility)를 사용해 연속화된다. 그 후, 이 루틴은 태스크(1088)에서 복귀되어 태스크(1090)에서 할당 루틴이 할당부를 새로이 시작한다.
하드 드라이브(31)가 압축되어 있다면, 태스크(1092)에서 하드 디스크의 압축된 부분은 최소화된다. 그 후, 하드 드라이브(31)의 압축되지 않은 부분은 태스크(1094)에서 당업자에게 잘 알려진 연속화 유틸리티를 사용해 디프래그먼트된다. 그 후, 이 루틴은 태스크(1088)에서 복귀되어 태스크(1090)에서 할당 루틴의 할당부를 새로이 시작한다.
하드 드라이브(31)상의 이용가능한 공간을 증대시키기 위해 태스크(1070)에서 호출된 루틴은 태스크(1100)에서 시작되고, 태스크(1110)를 통해 계속된다. 먼저, 태스크(1102)에서 하드 드라이브(31)가 당업자에게 잘 알려진 하드 드라이브 압축 루틴중 하나의 루틴을 사용하여 압축되어 있는지를 판단한다.
하드 드라이브(31)가 압축되어 있지 않다면, 이 하드 드라이브(31)는 보관 파일에 이용가능한 충분한 공간을 갖지 않은 것이며, 따라서 태스크(1104)에서 메시지가 디스플레이되어 동시에 중단 및 재개 특징을 사용하기 위해서는 하드 드라이브 용량을 추가하거나 하드 드라이브(31)로부터 파일을 삭제하여야 함을 사용자에게 알린다.
하드 드라이브(31)가 압축되어 있다면, 태스크(1108)에서 가능하면 하드 드라이브(31)의 압축되지 않은 부분의 크기가 증가된다. 그 후, 이 루틴은 태스크(1110)에서 복귀하여 태스크(1090)에서 할당 루틴의 할당부를 새로이 시작한다.
이제 제17도를 참조하면, 대기 상태로부터 벗어나기 위한 루틴이 태스크(1120)에서 시작되는 것으로 도시되어 있다. 개념적으로, 시스템이 대기 상태(152)로부터 벗어날 때, 시스템은 이 시스템이 정상 동작 상태(150)에서 대기 상태(152)로 전이될 때 야기되었던 변화를 역전시킨다. 요약하면, 시스템이 대기 상태(152)를 벗어날 때, 시스템은 비디오 신호를 회복시키고, LED(23)를 조명하고, 하드 드라이브(31)내 하드 디스크를 회전시키고, 시스템 클럭을 회복시키며, APM CPU 유휴 호출을 디스에이블시켜 APM 드라이버로부터의 CPU 유휴 호출은 더 이상 CPU(40)를 정지시키지 않도록 하고, 시스템(10)이 대기 상태(152)라는 것을 나타내는 플래그를 클리어시킨다.
먼저, 이 루틴은 태스크(1122)에서 시스템이 대기 상태(152)로 진입할 때 체크포인트가 발생되었는지를 테스트한다. 체크포인트가 발생되었다면, 태스크(1124)에서 체크포인트 취하여짐 비트(Checkpoint taken bit)가 클리어되어 체크포인트가 더 이상 유효하지 않다는 것을 나타낸다. 이러한 특정 실시예에 있어서, 체크포인트는 시스템이 대기 상태를 벗어날 때 무효화된다. 체크포인트 데이터는 단지 시스템이 대기 상태(152)에 있는 동안 실패하는 경우 시스템을 재개시키는 데 사용되었던, 그 이유는 대부분의 시스템이 하드 드라이상의 가상 교환 파일(virtual swap files)을 사용하고, 체크포인트 데이터로부터 재개하면 시스템은 교환 파일이 (체크포인트 데이터로서 저장된) 시스템 상태에 의해 예상된 것과는 완전히 다르게되는 상태에 놓일 수 있기 때문이다. 대안으로서, 체크포인트 데이터는 다음 디스크 액세스 후 무효화되도록 할 수 있다. 다른 대안으로서, 체크포인트 데이터는 시스템이 체크포인트 데이터로부터 재개되는 경우 시스템 문제를 야기할 수도 있는 파일로의 디스크 액세스 후 무효화될 수 있다. 또 다른 대안으로서, 체크포인트 데이터로부터의 재개가 하드 드라이브(31)의 일부 혹은 전부터 데이터를 상실시킬 수도 있다는 이해하에, 체크포인트 데이터는 항상 사용자에게 이용 가능할 수 있다.
그 후, 체크포인트가 취해지지 않았으면, CPU(40)는 태스크(1126)에서 마이크로제어기(U2)에 명령하여 이 마이크로제어기(U2)가 (ⅰ) 비디오 제어기(56)로 하여금 비디오 신호를 다시 한번 발생하게 하고, (ⅱ) 클럭 신디싸이저(906)로 하여금 보다 높은 주파수의 시스템 클럭(25Hz 또는 33Hz)을 재개하게 하며, (ⅲ) LED(23)를 조명하도록 한다. 그런 다음, CPU(40)는 태스크(1128)에서 고정 디스크 제어기(86)에 적절한 값을 기록하여 하드 드라이브(31)내의 하드 디스크를 회전시킨다. 다음, 태스크(1130)에서 APM CPU 유휴 호출이 디스에이블되어 CPU정지가 발생되지 않도록 한다. 마지막으로, 대기 플래그는 태스크(1132)에서 클리어되어 시스템(10)이 정상 동작 상태(150)라는 것을 표시한다. 루틴은 태스크(1140)에서 호출 프로그램으로 복귀한다.
제18도를 참조하면, 대기 상태로 진입하기 위한 루틴은 태스크(1140)에서 시작되는 것으로 도시되어 있다. 요약하면, 시스템이 대기 상태(152)로 진입할 때, 시스템은 비디오 신호를 블랭크시키고, LED(23)를 플래쉬하며, 하드 드라이브(31)내의 하드 디스크를 스핀다운시키고, 시스템 클럭을 감속시키고, APM CPU 유휴 호출을 인에이블하여 APM 드라이버로부터의 CPU 유휴 호출이 CPU(40)를 정지시키도록 하고, 시스템(10)이 대기 상태(152)라는 것을 나타내는 플래그를 세트한다.
먼저, 이 루틴은 태스크(1142)에서 체크포인트가 취해질 것인지를 테스트한다. 체크포인트가 취해질 것이라면, 대부분의 중지 루틴이 태스크(1144)에서 실행되어 컴퓨터 시스템(10)의 상태가 하드 드라이브(31)상에 저장된다. 본 실시예에 있어서, 체크포인트는 시스템이 대기 상태로 진입할 때 취하여 진다. 대안으로서, 제17도를 참조하여 설명한 유의사항하에, 체크포인트는 주기적으로 취하여져 시스템을 재시작시키기 사용될 수 있다. 그런 다음, 태스크(1146)에서, 재재 루틴이 충분히 실행되어 태스크(1144)에서 수행된 부분적인 중지로부터 회복되도록 한다. 그런 다음, 태스크(1148)에서, 체크포인트 취하여짐 비트가 세트되어 유효한 체크 포인트가 취하여졌음을 표시한다. 본 실시예에서 체크포인트 데이터는 시스템이 대기 상태(152)에 있는 동안 실패하는 경우에만 사용됨을 상기하기 바란다. 이 경우, 시스템이 부트됨에 따라서, 시스템은 보관된 체크포인트로부터 재개한다.
이상적으로, 체크포인트는 시스템에 완전히 투명(transparent)하여야 한다. 이처럼 하여, 하드웨어 인터럽트가 데이터 상실을 방지하기 위해 발생하는 경우, 체크포인트는 포기되어야 한다. 대안으로서, 정상 중지의 경우 처럼, 모든 하드웨어 인터럽트가 무시될 수 있다.
그 후, 또한 체크포인트가 취하여지지 않았으면, CPU(40)는 태스크(1150)에서 마이크로제어기(U2)에게 명령하여 이 마이크로제어기(U2)가 (ⅰ) 비디오 제어기(56)로 하여금 비디오 신호를 발생하는 것을 중지하게 하고, (ⅱ) 클럭 신디싸이저(906)로 하여금 시스템 클럭을 높은 주파수(25MHz 또는 33MHz)에서 낮은 주파수(8MHz)로 저하시키게 하고, (ⅲ) LED(23)를 플래쉬하도록 한다. 그런 다음, CPU(40)는 태스크(1152)에서 고정 디스크 제어기(86)에 적절한 값을 기록하여 하드 드라이브(31)내의 하드 디스크의 회전을 중단시킨다. 다음, 태스크(1154)에서 APM CPU 유휴 호출이 인에이블되어, APM 드라이버로부터의 CPU 유휴 호출이 CPU(40)를 정지시키도록 한다. 마지막으로, 태스크(1156)에서 대기 플래그가 세트되어 시스템(10)이 대기 상태(152)라는 것을 표시한다. 이 루틴은 태스크(1158)에서 호출 프로그램으로 복귀한다.
본 발명은 실시예를 설명함으로써 예시되었으며, 이들 실시예가 상당히 상세히 설명되었으나, 출원인은 첨부된 특허 청구범위를 본 발명의 상세한 설명으로 제한하려는 의도는 없다. 당업자라면 부가적인 장점 및 수정을 명백히 인지할 것이다. 예를 들면, 전술한 바와 같이, 데이터를 하드 디스크에 기록하기 전에 연속 길이 부호화(run length encoding) 기법을 사용하여 데이터를 압축할 수 있다. 이와 달리, 임의의 적절한 압축 방법이 사용되거나 압축 방법이 전혀 사용되지 않을수도 있다. 그러므로, 본 발명은 특정한 상세한 사항들, 대표적인 장치 및 방법, 그리고, 예시되고 설명된 예들로 한정되지 않는다. 따라서, 출원인의 일반적인 발명 개념의 사상 및 범주를 벗어나지 않고서도 이러한 상세한 설명에 변경을 가할 수 있다.

Claims (8)

  1. 4가지의 전력 관리 상태(four state of power management), 즉 코드(code)가 컴퓨터 시스템에 의해 정상적으로 실행되는 정상 동작 상태(a normal operating state), 대기 상태(a standby state), 오프 상태(an off state) 및 중지 상태(an suspend state)중 선택된 임의의 한 상태로 동작할 수 있는 컴퓨터 시스템에 있어서, (a) 코드를 실행할 수 있는 CPU와, (b) 다수의 사전선택된 이벤트(a plurality of preselected events)중 적어도 하나의 이벤트에 응답하여 상기 상태 각각과 상기 상태중 적어도 하나의 다른 상태 사이에서 상기 컴퓨터 시스템을 변경하기 위해 상기 CPU와 회로 통신을 행하는 전력 관리 유닛-상기 전력 관리 유닛은, 상기 CPU상에서 실행되는 코드가 적절히 실행중단된 후 사전선택된 제1시간 주기 후에 종료하도록 설정되는 고장안전 타이머를 포함함-과, (c) 상기 전력 관리 유닛과 회로 통신을 행하는 스위치와, (d) 상기 CPU 및 상기 전력 관리 유닛과 회로 통신을 행하며, 고전력 이용 상태(a high electrical power usuage state)와 저전력 이용 상태(a low electrical power usuage state)중 선택된 하나의 상태에서 동작할 수 있으며, 상기 전력 관리 유닛에 응답하여 상기 고전력 이용 상태와 상기 저전력 이용 상태 사이에서 변경되는 주변 장치(a peripheral device)와, (e) 상기 CPU와 회로 통신을 행하는 비휘발성 저장 장치-상기 비휘발성 저장 장치는 저장된 데이터를 유지하는데 전원을 필요로 하지 않음-와, (f) 상기 CPU와 회로 통신을 행하며 메모리 데이터를 저장하기 위한 휘발성 시스템 메모리와, (g) 상기 CPU, 상기 전력 관리 유닛 및 상기 주변 장치와 회로 통신을 행하며, 외부 소스(an external source)로부터 상기 컴퓨터 시스템으로 시스템 전력을 선택적으로 공급하는 전력 선택 회로(power selection circuitry)를 포함하는 전원(a power supply)-상기 전원은 제1전원 상태와 제2전원 상태 중 선택된 하나의 상태에서 동작가능하며, 상기 전원 관리 유닛에 응답하여 상기 제1전원 상태와 상기 제2전원 상태 사이에서 변경되며, 그리고 상기 전력 관리 유닛에 보조 전력을 공급하는 회로를 더 포함함-을 포함하며, 상기 제1전원 상에는 상기 전원이 상기 외부소스로부터 상기 CPU, 상기 비휘발성 저장 장치, 상기 휘발성 시스템 메모리에 시스템 전력을 공급하고 상기 외부 소스로부터 상기 전력 관리 유닛에 보조 전력을 공급하는 것을 특징으로 하며, 상기 제2전원 상태는 상기 전원이 상기 외부 소스로부터 상기 CPU, 상기 비휘발성 저장 장치, 상기 휘발성 시스템 메모리에 시스템 전력을 공급하지 않으며 상기 외부 소스로부터 상기 전력 관리 유닛에 보조 전력을 공급하는 것을 특징으로 하며, (1) 상기 정상 동작 상태는, 상기 전원이 상기 제1전원 상태이고 상기 주변 장치는 상기 고전력 이용 상태인 것을 특징으로 하며, (2) 상기 대기 상태는, 상기 전원이 상기 제1전원 상태이고 상기 주변 장치는 상기 저전력 이용 상태인 것을 특징으로 하며, (3) 상기 중지 상태는, 상기 전원이 상기 제2전원 상태이고 상기 중지 상태로 진입하기 전에 상기 CPU상에서 실행되는 코드는 상기 전원이 상기 제1전원 상태로 변경된 후 그 실행이 재개될 수 있도록 가역적(reversably)으로 인터럽트되는 것을 특징으로 하며, (4) 상기 오프 상태는, 상기 전원이 상기 제2전원 상태이고 상기 오프 상태로 진입하기 전에 상기 CPU상에서 실행되는 상기 코드가 비가역적으로 인터럽트 되는 것을 특징으로 하며, (5) 상기 전력 관리 유닛을, 상기 대기 상태 또는 상기 중지 상태 또는 상기 오프 상태 동안, 상기 스위치의 폐쇄 이벤트(a closure event)에 응답하여, 상기 고장안전 타이머의 종료를 테스트하며 상기 고장안전 타이머가 종료된 경우 컴퓨터 시스템을 상기 정상 동작 상태로 즉각적으로 변경하는 것을 특징으로 하는 컴퓨터 시스템.
  2. 제1항에 있어서, 상기 전력 관리 유닛과 회로 통신을 행하는 시각적 피드백 장치(a visual feedback device)를 더 포함하되, 상기 시각적 피드백 장치는 적어도 4 가지의 피드백 상태, 즉 활동 상태(an active state), 비활동 상태(an inactive state), 상기 시각적 피드백 장치가 제1사전설정된 주파수로 상기 활동 상태와 상기 비활동 상태 사이에서 교번(alternate)하는 제1블링킹 상태(a first blinking state), 및 상기 시각적 피드백 장치가 제2사전설정된 주파수로 상기 활동 상태와 상기 비활동 상태 사이에서 교번하는 제2블링킹 상태(a second blinking state)를 가지며, 이러한 4가지 상태는 상기 전력 관리 유닛에 의해 선택적으로 제어되며, 상기 전력 관리 유닛은 상기 시각적 피드백 장치를 제어함으로써 상기 적어도 하나의 전력 관리 상태 각각을 상기 시각적 피드백 상태들 중 하나의 상태와 연관시키는 것을 또한 특징으로 하는 컴퓨터 시스템.
  3. 4가지의 전력 관리 상태, 즉 코드가 컴퓨터 시스템에 의해 정상적으로 실행되는 정상 동작 상태, 대기 상태, 오프 상태, 및 중지 상태 중 선택된 임의의 한 상태로 동작할 수 있는 컴퓨터 시스템에 있어서, (a) 코드를 실행할 수 있으며, 적어도 두 개의 운영 체제를 동작시킬 수 있는 것을 특징으로 하는 CPU-상기 운영 체제 중의 한 운영 체제는 주어진 시간에 상기 CPU 상에서 코드의 실행을 제어하며, 각각의 운영 체제는 그와 관여된 고급 전력 관리 드라이버를 갖는 것을 특징으로 하고 있으며, 상기 CPU는 CPU 상에서의 코드 실행을 제어하는 상기 운영 체제내의 고급 전력 관리 드라이버를 사용하여 상기 전력 상태들간의 전이를 조정하며, 여기서 실행 제어가 운영 체제를 사이에서 전이됨에 따라 운영 체제의 고급 전력 관리 드라이버가 활동하지 않는 소정의 시간 주기가 존재함-와, (b) 다수의 사전선택된 이벤트들 중 적어도 하나의 이벤트에 응답하여 상기 상태 각각과 상기 상태들 중 적어도 하나의 다른 상태 사이에서 상기 컴퓨터 시스템을 변경하기 위해 상기 CPU와 회로 통신을 행하는 제어 장치(a control unit)-상기 제어 장치는 적어도 하나의 운영 체제의 고급 전력 관리 드라이버가 활동중인 동안 사전선택된 다수의 이벤트들 중 상기 적어도 하나의 이벤트에 응답하여 컴퓨터 시스템을 전력 관리 상태들 사이에서 즉각적으로 변경시키는 것을 특징으로 하며, 또한 운영 체제의 고급 전력 관리 드라이버들 모두가 비활동중인 동안 사전선택된 다수의 이벤트들 중의 상기 적어도 하나의 이벤트에 응답하여 컴퓨터 시스템을 전력 관리 상태들 사이에서 변경시키는 것을 적어도 하나의 운영 체제의 고급 전력 관리 드라이버가 활동 상태로 될 때까지 지연시키는 것을 특징으로 함-와, (c) 상기 제어 장치와 회로 통신을 행하는 스위치와, (d) 상기 CPU 및 상기 제어 장치와 회로 통신을 행하며, 고전력 이용 상태와 저전력 이용 상태 중 선택된 하나의 상태에서 동작할 수 있으며, 상기 제어 장치에 응답하여 상기 고전력 이용 상태와 상기 저전력 이용 상태 사이에서 변경되는 주변 장치(a peripheral device)와, (e) 상기 CPU, 상기 제어 장치, 및 상기 주변 장치와 회로 통신을 행하며, 외부 소스로부터 상기 컴퓨터 시스템으로 전력을 선택적으로 공급하는 전력 선택 회로를 포함하는 전원-상기 전원은 제1전원 상태와 제2전원 상태중 선택된 하나의 상태에서 동작할 수 있으며, 상기 제어 장치에 응답하여 상기 제1전원 상태와 상기 제2전원 상태 사이에서 변경됨-을 포함하며, (1) 상기 정상 동작 상태는, 상기 전원이 상기 제1전원 상태이고 상기 주변 장치는 상기 고전력 이용 상태인 것을 특징으로 하며, (2) 상기 대기 상태는, 상기 전원이 상기 제1전원 상태이고, 상기 주변 장치는 상기 저전력 이용 상태인 것을 특징으로 하며, (3) 상기 중지 상태는, 상기 전원이 상기 제2전원 상태이고 상기 중지 상태로 진입하기 전에 상기 CPU상에서 실행되는 코드는 상기 전원이 상기 제1전원 상태로 변경된 후 그 실행이 재개될 수 있도록 가역적(reversably)으로 인터럽트되는 것을 특징으로 하며, (4) 상기 오프 상태는, 상기 전원이 상기 제2전원 상태이고 상기 오프 상태로 진입하기 전에 상기 CPU상에서 실행되는 상기 코드가 비가역적으로 인터럽트 되는 것을 특징으로 하며, (5) 상기 제어 장치는, 상기 대기 상태 또는 상기 중지 상태 또는 상기 오프 상태 동안, 상기 스위치의 폐쇄 이벤트(a closure event)에 응답하여 컴퓨터 시스템을 정상 동작 상태로 변경하는 것을 특징으로 하는 컴퓨터 시스템.
  4. 제2항에 있어서, 상기 시각적 피드백 장치는 발광 다이오드(LED)를 포함하며, 상기 활동 상태는 상기 LED가 점등된 상태이며, 상기 비활동 상태는 상기 LED가 소등된 상태인 컴퓨터 시스템.
  5. 제3항에 있어서, 상기 제어 장치와 회로 통신을 행하는 시각적 피드백 장치(a visual feedback device)를 더 포함하되, 상기 시각적 피드백 장치는 적어도 4가지의 피드백 상태, 즉 활동 상태(an active state), 비활동 상태(an inactive state), 상기 시각적 피드백 장치가 제1사전설정된 주파수로 상기 활동 상태와 상기 비활동 상태 사이에서 교번(alternate)하는 제1블링킹 상태(a first blinking state), 및 상기 시각적 피드백 장치가 제2사전설정된 주파수로 상기 활동 상태와 상기 비활동 상태 사이에서 교번하는 제2블링킹 상태(a second blinking state)를 가지며, 이러한 4가지 상태는 상기 제어 장치에 의해 선택적으로 제어되며, 상기 제어 장치는 적어도 하나의 전력 관리 상태 각각을 상기 시각적 피드백 상태들 중 하나의 상태와 연관시키는 것을 또한 특징으로 하는 컴퓨터 시스템.
  6. 제5항에 있어서, 상기 시각적 피드백 장치는 발광 다이오드(LED)를 포함하며, 상기 활동 상태는 상기 LED가 점등된 상태이며, 상기 비활동 상태는 상기 LED가 소등된 상태인 컴퓨터 시스템.
  7. 3가지 전력 관리 상태(four state of power management), 즉 코드(code)가 컴퓨터 시스템에 의해 정상적으로 실행되는 정상 동작 상태(a normal operating state), 대기 상태(a standby state), 및 중지 상태(an suspend state)중 선택된 임의의 한 상태로 동작할 수 있는 컴퓨터 시스템에 있어서, (a) 코드를 실행할 수 있는 CPU와, (b) 다수의 사전선택된 이벤트(a plurality of preselected events)중 적어도 하나의 이벤트에 응답하여 상기 상태 각각과 상기 상태중 적어도 하나의 다른 상태 사이에서 상기 컴퓨터 시스템을 변경하기 위해 상기 CPU와 회로 통신을 행하는 전력 관리 유닛과, (c) 상기 전력 관리 유닛과 회로 통신을 행하며, 적어도 3가지의 피드백 상태, 즉 활동 상태(an active state), 비활동 상태(an inactive state), 및 상기 시각적 피드백 장치가 상기 활동 상태와 상기 비활동 상태 사이에서 교번(alternate)하는 블링킹 상태(a first blinking state)를 갖는 시각적 피드백 장치(a visual feedback device)-상기 상태들은 상기 전력 관리 유닛에 의해 선택적으로 제어됨-와, (d) 상기 CPU 및 상기 전력 관리 유닛과 회로 통신을 행하여, 고전력 이용 상태(a high electrical power usuage state)와 저전력 이용 상태(a low electrical power usage state)와 저전력 이용 상태(a low electrical power usage state)중 선택된 하나의 상태에서 동작할 수 있으며, 상기 전력 관리 유닛에 응답하여 상기 고전력 이용 상태와 상기 저전력 이용 상태 사이에서 변경되는 주변 장치(a peripheral device)와, (e) 상기 CPU와 회로 통신을 행하는 비휘발성 저장 장치-상기 비휘발성 저장 장치는 저장된 데이터를 유지하는데 전원을 필요로 하지 않음-와, (f) 상기 CPU와 회로 통신을 행하며 메모리 데이터를 저장하기 위한 휘발성 시스템 메모리와, (g) 상기 CPU, 상기 전력 관리 유닛 및 상기 주변 장치와 회로 통신을 행하며, 외부 소스(an external source)로부터 상기 컴퓨터 시스템으로 시스템 전력을 선택적으로 공급하는 전력 선택 회로(power selection circuitry)를 포함하는 전원(a power supply)-상기 전원은 제1전원 상태와 제2전원 상태 중 선택된 하나의 상태에서 동작가능하며, 상기 전원 관리 유닛에 응답하여 상기 제1전원 상태와 상기 제2전원 상태 사이에서 변경되며, 그리고 상기 전력 관리 유닛에 보조 전력을 공급하는 회로를 더 포함함-을 포함하며, 상기 제1전원 상태는 상기 전원이 상기 외부 소스로부터 상기 CPU, 상기 비휘발성 저장 장치, 상기 휘발성 시스템 메모리에 시스템 전력을 공급하고 상기 외부 소스로부터 상기 전력 관리 유닛에 보조 전력을 공급하는 것을 특징으로 하며, 상기 제2전원 상태는 상기 전원이 상기 외부 소스로부터 상기 CPU, 상기 비휘발성 저장 장치, 상기 휘발성 시스템 메모리에 시스템 전력을 공급하지 않으며 사기 외부 소스로부터 상기 전력 관리 유닛에 보조 전력을 공급하는 것을 특징으로 하며, (1) 상기 정상 동작 상태는, 상기 전원이 상기 제1전원 상태이고 상기 주변 장치는 고전력 이용 상태인 것을 특징으로 하며, (2) 상기 대기 상태는, 상기 전원이 상기 제1전원 상태이고 상기 주변 장치는 상기 저전력 이용 상태인 것을 특징으로 하며, (3) 상기 중지 상태는, 상기 전원이 상기 제2전원 상태이고 상기 중지 상태로 진입하기 전에 상기 CPU상에서 실행되는 코드는 상기 전원이 상기 제1전원 상태로 변경된 후 그 실행이 재개될 수 있도록 가역적(reversably)으로 인터럽트되는 것을 특징으로 하며, (4) 상기 전력 관리 유닛은 상기 시각적 피드백 장치를 제어함으로써 상기 적어도 하나의 전력 관리 상태 각각을 상기 시각적 피드백 상태들 중 하나의 상태와 연관시키는 것을 특징으로 하는 컴퓨터 시스템.
  8. 제7항에 있어서, 상기 시각적 피드백 장치는 발광 다이오드(LED)를 포함하며, 상기 활동 상태는 상기 LED가 점등된 상태이며, 상기 비활동 상태는 상기 LED가 소등된 상태인 컴퓨터 시스템.
KR1019950028931A 1994-09-07 1995-09-05 컴퓨터 시스템 KR100232314B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US8/302,147 1994-09-07
US08/302,147 US5630142A (en) 1994-09-07 1994-09-07 Multifunction power switch and feedback led for suspend systems

Publications (2)

Publication Number Publication Date
KR960011695A KR960011695A (ko) 1996-04-20
KR100232314B1 true KR100232314B1 (ko) 1999-12-01

Family

ID=23166459

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019950028931A KR100232314B1 (ko) 1994-09-07 1995-09-05 컴퓨터 시스템

Country Status (9)

Country Link
US (1) US5630142A (ko)
EP (1) EP0780001B1 (ko)
JP (1) JP3197796B2 (ko)
KR (1) KR100232314B1 (ko)
CN (1) CN1214307C (ko)
CA (1) CA2156538C (ko)
DE (1) DE69514242T2 (ko)
PL (1) PL180098B1 (ko)
WO (1) WO1996007964A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100233550B1 (ko) * 1997-07-22 1999-12-01 강중호 키토산을 이용한 농작물 선도유지방법 및 발효식품 장기저장방법

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6018804A (en) * 1996-03-25 2000-01-25 Thomson Consumer Electronics, Inc. Data bus isolator
KR0174711B1 (ko) * 1996-04-24 1999-04-15 김광호 하드디스크 캐시의 제어방법
US5765001A (en) 1996-04-29 1998-06-09 International Business Machines Corporation Computer system which is operative to change from a normal operating state to a suspend state when a power supply thereof detects that an external source is no longer providing power to said power supply at a predetermined level
US5884022A (en) 1996-06-03 1999-03-16 Sun Microsystems, Inc. Method and apparatus for controlling server activation in a multi-threaded environment
US5802269A (en) * 1996-06-28 1998-09-01 Intel Corporation Method and apparatus for power management of distributed direct memory access (DDMA) devices
US6000043A (en) * 1996-06-28 1999-12-07 Intel Corporation Method and apparatus for management of peripheral devices coupled to a bus
US5845136A (en) * 1996-10-02 1998-12-01 Intel Corporation Control of a function of a computer other than a power supply function using a system power switch
US5941989A (en) * 1997-01-07 1999-08-24 Micron Electronics, Inc. Apparatus for indicating power-consumption status in a computer system
KR100252255B1 (ko) 1997-04-15 2000-04-15 윤종용 휴대용 컴퓨터 시스템을 위한 전원 제어 방법
US6076133A (en) * 1997-04-30 2000-06-13 Compaq Computer Corporation Computer interface with hardwire button array
US5938772A (en) * 1997-06-11 1999-08-17 Compaq Computer Corporation Responsive backlit hardwire button array providing illumination and user feedback in a computer
US6137677A (en) 1997-06-13 2000-10-24 Compaq Computer Corporation Ergonomic controls for a personal computer CPU
KR100521252B1 (ko) * 1997-06-16 2006-01-12 삼성전자주식회사 화면출력상태 제어기능을 갖는 컴퓨터 시스템 및 그 제어방법
KR19990026189A (ko) * 1997-09-23 1999-04-15 윤종용 바이오스 롬의 업데이트 방법
US6128732A (en) * 1997-12-15 2000-10-03 Compaq Computer Corporation Implementing universal serial bus support with a minimum of system RAM
US6097241A (en) * 1998-07-21 2000-08-01 International Business Machines Corporation ASIC low power activity detector to change threshold voltage
KR100345876B1 (ko) * 1998-08-20 2002-10-31 삼성전자 주식회사 전원관리모드를갖는컴퓨터시스템및그제어방법
US6816934B2 (en) * 2000-12-22 2004-11-09 Hewlett-Packard Development Company, L.P. Computer system with registered peripheral component interconnect device for processing extended commands and attributes according to a registered peripheral component interconnect protocol
US7472215B1 (en) * 1999-03-31 2008-12-30 International Business Machines Corporation Portable computer system with thermal enhancements and multiple power modes of operation
CN1293461C (zh) * 1999-07-30 2007-01-03 神基科技股份有限公司 一种将电脑系统状态挂起的方法
KR100626359B1 (ko) 1999-09-10 2006-09-20 삼성전자주식회사 컴퓨터 시스템의 전원 관리 방법
US6625742B1 (en) 1999-11-05 2003-09-23 Hewlett-Packard Development Company, L.P. Computer diagnostic having an LED to provide direct visual feedback as to the status of the standby power supply when power button is actuated
US6438429B1 (en) * 1999-12-03 2002-08-20 3Com Corporation Sensing auxiliary power in various peripheral component interconnect environments
AU2002258369A1 (en) * 2000-12-19 2002-09-19 Smal Camera Technologies, Inc. Compact digital camera system
US6862695B2 (en) * 2001-03-30 2005-03-01 Giga-Byte Technology Co., Ltd. Method and device for identifying failed devices in computer
US7395089B1 (en) 2001-06-11 2008-07-01 Palm, Inc Integrated personal digital assistant device
US7114086B2 (en) * 2002-01-04 2006-09-26 Ati Technologies, Inc. System for reduced power consumption by monitoring instruction buffer and method thereof
ATE382895T1 (de) * 2002-04-03 2008-01-15 Hewlett Packard Co Datenverarbeitungsvorrichtung und -verfahren mit zustandsindikator
TW594021B (en) * 2002-04-30 2004-06-21 Via Tech Inc Main computer board on/off testing device, method and system
US7013385B2 (en) * 2002-06-04 2006-03-14 International Business Machines Corporation Remotely controlled boot settings in a server blade environment
US7055046B2 (en) * 2002-06-28 2006-05-30 Microsoft Corporation Power management architecture for defining component power states under a global power state and applying a new component power state when a new component power state is greater than a registered power state floor
US7065659B2 (en) * 2002-06-28 2006-06-20 Microsoft Corporation Power management architecture for defining component power states under a global power state and maintaining a power state floor for a specified component if a power state for the specified component under a new global power state is below the power state floor
TWI261198B (en) * 2003-02-20 2006-09-01 Samsung Electronics Co Ltd Simultaneous multi-threading processor circuits and computer program products configured to operate at different performance levels based on a number of operating threads and methods of operating
CN1300794C (zh) * 2003-03-11 2007-02-14 北京华旗资讯数码科技有限公司 一种视频播放器
CN1329795C (zh) * 2003-11-24 2007-08-01 佛山市顺德区顺达电脑厂有限公司 电脑装置之电源状态自动测试方法
KR100643377B1 (ko) * 2004-01-17 2006-11-10 삼성전자주식회사 휴대용 컴퓨터 및 그 제어방법
US7319404B2 (en) * 2004-06-29 2008-01-15 Intel Corporation Non-invasive, low cost method and apparatus for the transmission, display and detection of internal computer status
US20060020856A1 (en) * 2004-07-22 2006-01-26 Anuez Tony O Computer diagnostic interface
KR100609498B1 (ko) * 2004-11-10 2006-08-09 주식회사 잉카솔루션 대기전력 제어장치
CN1862358B (zh) 2005-05-11 2012-03-21 华移联科(沈阳)技术有限公司 一种自动调焦装置
KR100633163B1 (ko) 2005-06-23 2006-10-11 삼성전자주식회사 전자 디바이스 및 전자 디바이스 시스템
TWM282246U (en) * 2005-08-08 2005-12-01 Quanta Comp Inc A power management device with remote control function
US7716461B2 (en) 2006-01-12 2010-05-11 Microsoft Corporation Capturing and restoring application state after unexpected application shutdown
US7574591B2 (en) 2006-01-12 2009-08-11 Microsoft Corporation Capturing and restoring application state after unexpected application shutdown
WO2008009368A1 (en) * 2006-07-21 2008-01-24 Sony Service Centre (Europe) N.V. System and method of prioritising tasks
CN101206600B (zh) * 2006-12-22 2011-08-24 和硕联合科技股份有限公司 测试装置与计算机系统开关机测试方法
US20090013164A1 (en) * 2007-07-06 2009-01-08 Inventec Corporation Computer system and method of using power button to switch from one BIOS to another
US8589563B2 (en) 2007-07-10 2013-11-19 Cisco Technology, Inc. System, method, and apparatus for maintaining call state information for real-time call sessions
US8527816B2 (en) * 2010-03-10 2013-09-03 International Business Machines Corporation Identifying a defective adapter
CN106125885B (zh) * 2010-12-21 2019-12-31 英特尔公司 用于功率管理的系统和方法
JP5780769B2 (ja) 2011-01-26 2015-09-16 キヤノン株式会社 データ処理装置、その制御方法およびプログラム、並びに記憶媒体
CN103064492B (zh) * 2011-10-24 2015-06-03 英业达股份有限公司 具有一可调式电源开关的计算机及其电源效能调节方法
JP5715107B2 (ja) * 2012-10-29 2015-05-07 富士通テン株式会社 制御システム
US10001831B2 (en) 2014-01-31 2018-06-19 Hewlett-Packard Development Company, L.P. Determination of a zero watt state for implementation
CN104007976A (zh) * 2014-06-06 2014-08-27 山东超越数控电子有限公司 一种解决笔记本linux系统lid功能的方法
TWI750109B (zh) 2014-11-12 2021-12-21 香港商阿里巴巴集團服務有限公司 硬碟功耗、硬碟功耗管理服務控制方法及裝置
CN104991629B (zh) * 2015-07-10 2017-11-24 英业达科技有限公司 电源失效侦测系统与其方法
US9818458B1 (en) * 2015-09-23 2017-11-14 Intel Corporation Techniques for entry to a lower power state for a memory device
US10126724B2 (en) * 2016-03-07 2018-11-13 Haier Us Appliance Solutions, Inc. Low power management system
US10198059B2 (en) 2016-04-20 2019-02-05 Microsoft Technology Licensing, Llc Adaptive doze to hibernate
US11714658B2 (en) 2019-08-30 2023-08-01 Microstrategy Incorporated Automated idle environment shutdown
US11755372B2 (en) 2019-08-30 2023-09-12 Microstrategy Incorporated Environment monitoring and management
US11858649B2 (en) * 2020-02-04 2024-01-02 The Boeing Company Controlling multiple aircraft external power sources with a single external power switch
WO2021187197A1 (ja) 2020-03-18 2021-09-23 ソニーグループ株式会社 情報処理装置及び情報処理方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2779813B2 (ja) * 1988-09-06 1998-07-23 セイコーエプソン株式会社 コンピューター
US4980836A (en) * 1988-10-14 1990-12-25 Compaq Computer Corporation Apparatus for reducing computer system power consumption
US5241680A (en) * 1989-06-12 1993-08-31 Grid Systems Corporation Low-power, standby mode computer
US5239495A (en) * 1989-06-23 1993-08-24 Kabushiki Kaisha Toshiba Power supply control system for a portable computer
US5142684A (en) * 1989-06-23 1992-08-25 Hand Held Products, Inc. Power conservation in microprocessor controlled devices
US5167024A (en) * 1989-09-08 1992-11-24 Apple Computer, Inc. Power management for a laptop computer with slow and sleep modes
US5396635A (en) * 1990-06-01 1995-03-07 Vadem Corporation Power conservation apparatus having multiple power reduction levels dependent upon the activity of the computer system
US5214782A (en) * 1990-12-10 1993-05-25 Generic Computer Services Power supply monitor for personal computer
US5414860A (en) * 1991-01-29 1995-05-09 International Business Machines Incorporated Power management initialization for a computer operable under a plurality of operating systems
US5410711A (en) * 1991-02-14 1995-04-25 Dell Usa, L.P. Portable computer with BIOS-independent power management
EP0584257B1 (en) * 1991-05-17 2004-08-04 Packard Bell NEC, Inc. Power management capability for a microprocessor having backward compatibility
US5355490A (en) * 1991-06-14 1994-10-11 Toshiba America Information Systems, Inc. System and method for saving the state for advanced microprocessor operating modes
US5410713A (en) * 1992-01-02 1995-04-25 Smith Corona/Acer Power-management system for a computer
US5408668A (en) * 1993-07-28 1995-04-18 Tornai; Richard Method and apparatus for controlling the provision of power to computer peripherals

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100233550B1 (ko) * 1997-07-22 1999-12-01 강중호 키토산을 이용한 농작물 선도유지방법 및 발효식품 장기저장방법

Also Published As

Publication number Publication date
CN1214307C (zh) 2005-08-10
PL319043A1 (en) 1997-07-21
DE69514242T2 (de) 2000-06-08
EP0780001A1 (en) 1997-06-25
JP3197796B2 (ja) 2001-08-13
CA2156538A1 (en) 1996-03-08
KR960011695A (ko) 1996-04-20
CA2156538C (en) 2000-02-29
PL180098B1 (pl) 2000-12-29
JPH0887361A (ja) 1996-04-02
DE69514242D1 (de) 2000-02-03
CN1139771A (zh) 1997-01-08
US5630142A (en) 1997-05-13
WO1996007964A1 (en) 1996-03-14
EP0780001B1 (en) 1999-12-29

Similar Documents

Publication Publication Date Title
KR100232314B1 (ko) 컴퓨터 시스템
KR100218613B1 (ko) 컴퓨터시스템및글리치회로
KR100196893B1 (ko) 컴퓨터 시스템
KR100196883B1 (ko) 컴퓨터 시스템
KR100190736B1 (ko) 컴퓨터 시스템
JP4028605B2 (ja) Sormセッションを有するコンピュータ・システム及び方法
US5551043A (en) Standby checkpoint to prevent data loss
US5758174A (en) Computer system having a plurality of stored system capability states from which to resume
KR0167810B1 (ko) 컴퓨터 시스템 및 그의 상태 보관방법
KR100188501B1 (ko) 다수의 사용자 및 윈도에 기초한 컴퓨터 시스템 및 다수의 사용자에 기초한 컴퓨터 시스템을 제공하는 방법
KR0128275B1 (ko) 컴퓨터 시스템과그의 전력사용 관리방법, 인터럽트 제어기의 베이스 어드레스 상태 확인방법과 씨피유 상태보존 및 복원방법
US6081752A (en) Computer system having power supply primary sense to facilitate performance of tasks at power off
JP3341970B2 (ja) コンピュータ・システム
US5581692A (en) Automatic clearing of power supply fault condition in suspend system
EP0749063A2 (en) Method and apparatus for suspend/resume operation in a computer
KR100207884B1 (ko) 컴퓨터 시스템, 코드 실행 제어 방법, 및 컴퓨터 시스템 전력 관리 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120821

Year of fee payment: 14

FPAY Annual fee payment

Payment date: 20130820

Year of fee payment: 15

FPAY Annual fee payment

Payment date: 20140825

Year of fee payment: 16

FPAY Annual fee payment

Payment date: 20150730

Year of fee payment: 17

EXPY Expiration of term