BIOS 인터럽트 호출

BIOS interrupt call

BIOS 인터럽트 은 운영 체제와 애플리케이션 프로그램이 IBM PC 호환 컴퓨터의 기본 입출력 시스템 소프트웨어 설비를 호출하기 위해 사용하는 설비다.전통적으로 BIOS 호출은 주로 DOS 프로그램과 부트 로더와 같은 일부 다른 소프트웨어(대부분 역사적으로, 운영 체제 없이 직접 부팅되어 실행되는 비교적 단순한 애플리케이션 소프트웨어, 특히 게임 소프트웨어를 포함)에서 사용된다.BIOS는 x86 CPU의 리얼 어드레스 모드(Real Mode)에서 실행되기 때문에 BIOS를 호출하는 프로그램은 BIOS를 호출한 다음 다시 전환하기 전에 반드시 리얼 모드에서 실행하거나 보호 모드에서 리얼 모드로 전환해야 한다.이 때문에 CPU를 보호모드나 롱모드에서 사용하는 현대적 운영체제부팅시 BIOS 인터럽트 호출을 사용하여 하드웨어를 프로빙하고 초기화하지만 일반적으로 시스템 기능을 지원하기 위해 BIOS 인터럽트 호출을 사용하지 않는다.[1]Real 모드는 메모리 제한이 1MB이며, 최신 부팅 로더(예: GRUB2, Windows Boot Manager)는 비현실 모드 또는 보호 모드(및 BIOS 인터럽트 호출을 가상 8086 모드에서 실행하지만 OS 부팅 전용)를 사용하여 최대 4GB의 메모리에 액세스한다.[2]

모든 컴퓨터에서 소프트웨어 지침은 전원을 켜는 순간부터 물리적 하드웨어(화면, 디스크, 키보드 등)를 제어한다.PC에서 마더보드의 ROM에 미리 탑재된 BIOS는 전원을 켤 때, 하드웨어 재설정 버튼을 누를 때, 또는 중요한 소프트웨어 고장(삼중 결함)으로 인해 메인보드 회로가 자동으로 하드웨어 재설정을 트리거하는 경우를 포함하여 CPU가 재설정된 직후에 제어한다.BIOS는 하드웨어를 테스트하고 그 상태를 초기화하며, 부팅 프로그램(보통 OS 부팅 로더 및 과거 ROM BASIC)을 찾아 로드하고 실행하며, 기계에서 실행 중인 소프트웨어에 기본적인 하드웨어 제어를 제공한다. 이 소프트웨어는 일반적으로 운영 체제(애플리케이션 프로그램 포함)이지만 직접 부팅하는 단일 소프트웨어 애플리케이션일 수 있다..

IBM의 경우, 초기 IBM PC 모델(PS/2 이전)을 프로그래밍할 때, 그들은 BIOS를 완전히 사용하거나 하드웨어를 직접 활용하고 BIOS를 완전히 피하는 데 필요한 모든 정보를 제공했다.애초부터 프로그래머들은 하드웨어-주변수 단위로 BIOS를 사용할지 여부를 선택할 수 있었다.IBM은 주변 하드웨어가 다른 현재 및 미래의 PC 모델과의 소프트웨어 호환성을 지원하기 위해 BIOS INT 통화(및 DOS 서비스 호출)를 통해서만 하드웨어에 접속한 "잘 행동된" 프로그램의 저자를 강력히 권장했지만, IBM은 일부 소프트웨어 개발자와 하드웨어 고객에게는 이 기능을 위한 기능이라고 이해했다.하드웨어를 직접 제어하는 사용자 소프트웨어가 요구 사항이었다.부분적으로, 이는 모든 하드웨어 특징과 기능 중 상당 부분이 BIOS 서비스에 의해 노출되지 않았기 때문이다.두 가지 예(많은 예 중)의 경우, MDA와 CGA 어댑터는 하드웨어 스크롤이 가능하고, PC 직렬 어댑터는 인터럽트 기반 데이터 전송이 가능하지만 IBM BIOS는 이러한 유용한 기술 기능 중 어느 것도 지원하지 않는다.

오늘날, 새로운 PC의 BIOS는 IBM AT를 위해 IBM이 정의한 BIOS 인터럽트 기능 호출의 전부는 아니더라도 대부분의 것을 더 많은 최신 기능과 함께, 다양한 다른 조직과 협력 산업 그룹에 의해 공포된 일부 원본(예: 확장된 매개 변수 범위)에 대한 확장을 여전히 지원한다.이는 유사한 수준의 하드웨어 호환성과 결합되어 IBM AT를 위해 작성된 대부분의 프로그램이 더 빠른 실행 속도를 허용할 수 있다고 가정할 때(일반적으로 CPU 기반 타이밍을 사용하는 게임을 제외한 모든 게임에 해당됨) 오늘날에도 여전히 새로운 PC에서 올바르게 실행될 수 있다는 것을 의미한다.BIOS 인터럽트를 통해 액세스되는 서비스의 상당한 제한에도 불구하고, 그것들은 기술 변화에 대해 매우 유용하고 오래 지속된다는 것이 입증되었다.

BIOS 호출의 목적

BIOS 인터럽트 호출은 프로그램에서 요청한 하드웨어 제어 또는 I/O 기능을 수행하거나, 시스템 정보를 프로그램에 반환하거나, 둘 다 수행한다.BIOS 호출의 목적의 핵심 요소는 추상화 - BIOS 호출은 일반적으로 정의된 기능을 수행하고, 시스템의 특정 하드웨어에서 그러한 기능이 실행되는 방법에 대한 구체적인 세부사항은 BIOS에 캡슐화되어 프로그램으로부터 숨겨진다.따라서 예를 들어 하드 디스크에서 읽기를 원하는 프로그램은 하드 디스크가 ATA, SCSI 또는 SATA 드라이브인지(또는 초기에는 ESDI 드라이브 또는 Sigate ST-506 컨트롤러, 아마도 몇몇 Western Digital 컨트롤러 유형 중 하나 또는 다른 전용 컨트롤러가 있는 MFM 또는 RLL 드라이브인지 알 필요가 없다.다른 상표).이 프로그램은 액세스하고자 하는 드라이브의 BIOS 정의 번호와 읽거나 쓰기에 필요한 섹터의 주소만 식별하면 되며, BIOS는 이 일반적인 요청을 특정 디스크 컨트롤러 하드웨어를 통해 작업을 완료하는 데 필요한 특정 순서의 기본 작동으로 변환하는 작업을 담당하게 된다.드라이브에 연결되어 있는 경우이 프로그램은 액세스해야 할 수 있는 모든 유형의 하드 디스크(또는 디스플레이 어댑터, 포트 인터페이스 또는 실시간 클럭 주변장치)를 낮은 수준에서 제어하는 방법을 알 필요가 없다.이 둘 다 프로그래밍 운영 체제와 응용 프로그램을 더 쉽게 만들고 프로그램을 더 작게 만들어 프로그램 코드의 중복을 줄인다. 이는 BIOS에 포함된 기능이 필요한 모든 프로그램에 포함될 필요가 없기 때문이다. 대신 BIOS에 대한 비교적 짧은 호출이 프로그램에 포함된다.(BIOS를 사용하지 않는 운영 체제에서는 운영 체제 자체에서 제공하는 서비스 호출이 일반적으로 동일한 기능과 목적을 충족한다.)

또한 BIOS는 기존 소프트웨어와의 호환성을 유지하기 위해 새로운 시스템을 설계할 때 구형 시스템과의 정확한 하드웨어 호환성을 유지하기 위해 컴퓨터 하드웨어 설계자(프로그램이 BIOS를 독점적으로 사용하기 위해 작성되는 정도까지)가 구속되지 않도록 한다.예를 들어, IBM PCjr의 키보드 하드웨어는 이전 IBM PC 모델의 키보드 하드웨어와는 매우 다르게 작동하지만, BIOS를 통해서만 키보드를 사용하는 프로그램에서는 이러한 차이가 거의 보이지 않는다.(이 문제의 다른 면의 좋은 예로서, PCjr이 사용하던 당시의 PC 프로그램의 상당한 점유율을 나타내고 있다.소개된 키보드는 BIOS를 통해서만 사용하지 않았기 때문에, IBM은 또한 원래의 IBM PC와 IBM PC XT 키보드 하드웨어의 작동 방식을 모방하기 위해 PCjr에 하드웨어 기능을 포함시켰다.하드웨어 에뮬레이션이 정확하지 않기 때문에 키보드 하드웨어를 직접 사용하려고 하는 모든 프로그램이 PCjr에서 제대로 작동하는 것은 아니지만, BIOS 키보드 서비스만 사용하는 모든 프로그램이 제대로 작동하는 것은 아니다.)

BIOS는 하드웨어 설비에 대한 접근을 제공하는 것 외에도 BIOS 소프트웨어에 구현된 추가 설비를 제공한다.예를 들어, BIOS는 최대 8개의 텍스트 디스플레이 페이지에 대해 별도의 커서 위치를 유지하고 자동 라인 랩과 캐리지 리턴, 라인 피드 등의 기본 제어 문자의 해석으로 TTY와 같은 출력을 제공하는 반면, CGA 호환 텍스트 디스플레이 하드웨어는 하나의 글로벌 디스플레이 커서를 가지고 있으며 자동으로 다음 작업을 수행할 수 없다.커서를 dvance하거나, 커서 위치를 사용하여 디스플레이 메모리를 어드레싱하거나(어떤 문자 셀을 변경하거나 검사할 것인지 결정), 컨트롤 문자를 해석한다.다른 예로 BIOS 키보드 인터페이스는 다양한 변속 상태(좌우 Shift, CtrlAlt)를 추적하기 위해 많은 키 입력과 키 조합을 해석하여 Shift+PrtScrn을 누를 때 인쇄 화면 서비스를 호출하고 Ctrl+Alt+Del을 누를 때 시스템을 재부팅하여 잠금 상태(Caps Lock, Num Lock, Num, Lock,및 Scroll Lock) 및 AT-클래스 기계에서는 키보드의 해당 잠금 상태 표시등을 제어하고 키보드에 대한 기타 유사한 해석 및 관리 기능을 수행한다.이와는 대조적으로 표준 PC와 PC-AT 키보드 하드웨어의 일반적인 기능은 개별 키를 누르거나 해제하는 각 원시 이벤트를 시스템에 보고하는 것으로 제한된다(즉, "해제" 상태에서 "압축" 상태로 전환하거나 그 반대로 전환) 키보드의 명령된 재설정 및 자가 테스트를 수행한다.t 및 AT 클래스 키보드의 경우 호스트 시스템에서 명령을 실행하여 잠금 상태 표시기(LED)의 절대 상태를 설정하십시오.

BIOS 호출: BIOS 소프트웨어 중단

운영 체제 및 기타 소프트웨어는 설치된 하드웨어를 소프트웨어 인터럽트를 통해 제어하기 위해 BIOS 소프트웨어와 통신한다.소프트웨어 인터럽트는 인터럽트의 일반적인 개념의 특정한 다양성이다.인터럽트는 CPU가 메인 라인 프로그램 실행을 중지하고 대신 ISR(Interrupt Service Routine)이라는 특수 프로그램을 즉시 실행하도록 지시할 수 있는 메커니즘이다.ISR이 끝나면 CPU는 메인 프로그램으로 계속된다.x86 CPU에서 인터럽트가 발생하면 메모리의 ISR 시작점 주소("인터럽트 벡터"라 함) 표에서 인터럽트 벡터 테이블(IVT)을 찾아 호출할 ISR을 찾는다.인터럽트는 0부터 255까지의 형식 번호로 호출되며, 타입 번호는 인터럽트 벡터 테이블의 인덱스로 사용되며, 테이블의 그 색인에서 인터럽트에 대응하여 실행될 ISR의 주소가 발견된다.소프트웨어 인터럽트는 소프트웨어 명령에 의해 촉발되는 인터럽트일 뿐이므로 소프트웨어 인터럽트는 서브루틴과 같이 기능하는데, 소프트웨어 인터럽트 호출을 하는 프로그램은 ISR의 주소를 알 필요가 없고, 그 인터럽트 번호만 알 수 있다는 주요한 차이점이 있다.이것은 모듈화, 호환성, 시스템 구성의 유연성에 이점이 있다.

BIOS 인터럽트 콜은 BIOS와 운영 체제와 같은 BIOS 클라이언트 소프트웨어 사이에 메시지를 전달하기 위한 메커니즘으로 생각할 수 있다.메시지는 BIOS에서 데이터 또는 작업을 요청하고 요청된 데이터, 상태 정보 및/또는 요청된 작업의 제품을 호출자에게 반환한다.메시지는 각각 고유한 인터럽트 번호가 있는 범주로 구분되며, 대부분의 범주는 "기능"으로 불리며 "기능 번호"로 식별되는 하위 범주를 포함한다.BIOS 클라이언트는 대부분의 정보를 CPU 레지스터에서 BIOS에 전달하고, 대부분의 정보를 동일한 방법으로 다시 수신하지만, 디스크 전송을 위한 제어 매개변수 테이블이나 디스크 섹터 데이터와 같이 레지스터에 너무 큰 데이터는 메모리에 버퍼(일부 공간)를 할당하고 레지스터에 버퍼 주소를 전달함으로써 전달된다. (솜)메모리에 있는 데이터 항목의 여러 주소는 메모리의 데이터 구조로 전달될 수 있으며, 해당 구조물의 주소는 레지스터의 BIOS로 전달될 수 있다.)인터럽트 번호는 소프트웨어 인터럽트 명령의 매개변수(Intel 어셈블리 언어로 "INT" 명령)로 지정되며, 기능 번호는 AH 레지스터에 지정된다. 즉, 호출자는 AH 레지스터를 원하는 기능의 번호로 설정한다.일반적으로 각 인터럽트 번호에 해당하는 BIOS 서비스는 서로 독립적으로 동작하지만, 하나의 인터럽트 서비스 내의 기능은 동일한 BIOS 프로그램에 의해 처리되어 독립적이지 않다.(이 마지막 포인트는 재입력 관련)

BIOS 소프트웨어는 일반적으로 실패하면 오류 코드, 성공하면 상태 코드 및/또는 요청된 데이터로 호출자에게 반환된다.데이터 자체는 1비트만큼 작거나 전체 원시 디스크 섹터(실제 모드 메모리 세그먼트 하나에 들어갈 최대값)의 65,536바이트에 이를 수 있다.BIOS는 수년에 걸쳐 여러 다른 기업들에 의해 여러 번 확장되고 향상되었으며, 불행히도 이러한 진화의 결과로 모든 BIOS 기능이 데이터 포맷과 통신 또는 결과 보고에 일관된 규약을 사용하지 않는다.일부 BIOS 기능은 상세한 상태 정보를 보고하는 반면, 다른 기능들은 성패를 보고하지 않고 그저 묵묵히 돌아올 수 있기 때문에 호출자가 성공을 가정하도록(또는 다른 방법으로 결과를 테스트하기 위해) 내버려둔다.때로는 특정 BIOS 기능 호출을 특정 컴퓨터의 BIOS에서 지원하는지 여부 또는 호출 매개 변수의 제한이 해당 컴퓨터에 있는지 여부를 결정하는 것도 어려울 수 있다.(일부 잘못된 기능 번호 또는 키 매개 변수의 값이 잘못된 유효한 기능 번호에 대해서는 특히 초기 IBM BIOS 버전과 함께).— BIOS는 아무 것도 하지 않고 오류 코드 없이 돌아올 수 있다. 그러면 이러한 통화를 하지 않음으로써 이 사례를 피하거나, 통화가 효과적이라고 가정하기보다는 통화의 예상 효과를 긍정적으로 시험하는 것이 발신자의 [불편하지만 불가피한] 책임이다.BIOS는 그 역사에 걸쳐 여러 단계로 광범위하게 진화해 왔기 때문에, 일부 특정 벤더의 한 BIOS 버전에서 유효하지 않은 기능은 동일한 벤더의 이전 버전이나 다른 벤더의 다른 BIOS 버전에서 유효하지 않을 수 있다.)

BIOS 인터럽트 호출은 CPU 레지스터 기반 매개 변수 전달을 사용하기 때문에, 호출은 어셈블리 언어로 이루어지는 것을 지향하며 대부분의 고급 언어(HLLs)에서 직접 할 수 없다.그러나 고급 언어는 상위 언어에서 사용하는 양식(일반적으로 스택 기반)에서 BIOS가 요구하는 레지스터 기반 양식으로 파라미터를 변환한 다음 BIOS가 돌아온 후 HLL 호출 규약으로 되돌아가는 래퍼 루틴 라이브러리를 제공할 수 있다.C의 일부 변종에서는 C 모듈 내의 인라인 어셈블리 언어를 사용하여 BIOS 호출을 할 수 있다(인라인 어셈블리 언어에 대한 지원은 ANSI C 표준의 일부가 아니라 언어 확장이다. 따라서 인라인 어셈블리 언어를 사용하는 C 모듈은 순수한 ANSI 표준 C 모듈보다 휴대성이 떨어진다).

인터럽트 호출

인터럽트 호출은 INT x86 어셈블리 언어 명령을 사용하여 수행할 수 있다.예를 들어 BIOS 인터럽트 0x10을 사용하여 화면에 문자를 인쇄하려면 다음과 같은 x86 어셈블리 언어 지침을 실행할 수 있다.

 영화를 찍다 아., 0x0e    ; 함수 번호 = 0Eh : 표시 문자  영화를 찍다 al, '!'     ; AL = 표시할 문자 코드  인트로 0x10        ; INT 10h, BIOS 비디오 서비스 

인터럽트 테이블

일반적인 BIOS 인터럽트 클래스 목록은 아래에서 확인할 수 있다.일부 BIOS(특히 오래된 BIOS)는 이러한 모든 인터럽트 클래스를 구현하지 않는다는 점에 유의하십시오.

BIOS는 또한 하드웨어 이벤트 인터럽트를 수신하거나 자체 사용을 위해 메시지를 라우트하는 프로그램에 릴레이하기 위해 일부 인터럽트를 사용한다.아래 표에는 서비스 또는 정보를 요청하기 위해 프로그램("INT" 어셈블리 언어 소프트웨어 인터럽트 명령 사용)으로 호출되는 BIOS 인터럽트만 포함된다.

인터럽트 벡터 설명
05h Shift-Print 화면을 누를 때뿐만 아니라BOUND명령이 바인딩된 고장을 감지한다.
08h 이것은 실시간 시계 방해물이다.초속 18.2회 발사한다.BIOS는 이 인터럽트 동안 하루 중 카운터를 증가시킨다.
09h 키보드 인터럽트 입니다.이는 일반적으로 키보드의 키를 누를 때 트리거된다.
10h 비디오 서비스
AH 설명
00h 비디오 모드 설정
01h 커서 모양 설정
02h 커서 위치 설정
03h 커서 위치 및 모양 가져오기
04h 라이트 펜 포지션 가져오기
05h 화면표시 페이지 설정
06h 화면 지우기/스크롤 업
07h 화면 지우기/스크롤 다운
08h 커서에서 문자 및 속성 읽기
09h 커서 위치에 문자 및 속성 쓰기
0Ah 커서 위치에 문자 쓰기
0Bh 테두리 색 설정
0Ch 그래픽 픽셀 쓰기
0Dh 그래픽 픽셀 읽기
0Eh TTY 모드에서 문자 쓰기
0Fh 비디오 모드 가져오기
10h 팔레트 레지스터 설정(EGA, VGA, SVGA)
11h 문자 생성기(EGA, VGA, SVGA)
12h 대체 선택 기능(EGA, VGA, SVGA)
13h 문자열 쓰기
1Ah 디스플레이 조합 코드 가져오기 또는 설정(VGA, SVGA)
1Bh 기능 정보 가져오기(VGA, SVGA)
1Ch 비디오 상태 저장 또는 복원(VGA, SVGA)
4Fh VESA BIOS 확장 기능(SVGA)
11h 반송 장비 목록
12h 기존 메모리 크기 반환
13h 로우 레벨 디스크 서비스
AH 설명
00h 디스크 드라이브 재설정
01h 드라이브 상태 확인
02h 섹터 읽기
03h 쓰기 섹터
04h 섹터 확인
05h 트랙 포맷
08h 드라이브 매개 변수 가져오기
09h 고정 드라이브 매개 변수 초기화
0Ch 지정된 트랙 탐색
0Dh 고정 디스크 컨트롤러 재설정
15h 드라이브 유형 가져오기
16h 플로피 드라이브 미디어 변경 상태 가져오기
17h 디스크 유형 설정
18h 플로피 드라이브 미디어 유형 설정
41h 확장 디스크 드라이브(EDD) 설치 검사
42h 확장 읽기 섹터
43h 확장 쓰기 섹터
44h 확장 검증 섹터
45h 드라이브 잠금/잠금 해제
46h 미디어 꺼내기
47h 확장 탐색
48h 확장 Get Drive 매개 변수
49h 확장 미디어 변경 상태
4Eh 확장 세트 하드웨어 구성
14h 직렬 포트 서비스
AH 설명
00h 직렬 포트 초기화
01h 문자 전송
02h 캐릭터 받기
03h 상태
15h 기타 시스템 서비스
AH AL 설명
00h 카세트 드라이브 모터 켜기(IBM PC/PCjr에만 해당)
01h 카세트 드라이브 모터 끄기(IBM PC/PCjr에만 해당)
02h 카세트에서 데이터 블록 읽기(IBM PC/PCjr에만 해당)
03h 카세트에 데이터 블록 쓰기(IBM PC/PCjr에만 해당)
4Fh 키보드 가로채기
83h 이벤트 대기
84h 조이스틱 읽기(1986년 이후의 BIOS)
85h Sysreq 키 콜아웃
86h 잠깐만
87h 블록 이동
88h 확장 메모리 크기 가져오기
89h 보호 모드로 전환
C0h 시스템 매개 변수 가져오기
C1h 확장 BIOS 데이터 영역 세그먼트 가져오기
C2h 포인팅 장치 기능
C3h 감시 타이머 기능 - PS/2 시스템만 해당
C4h 프로그램 가능 옵션 선택 - MCA 버스 PS/2 시스템만 해당
D8h EISA 시스템 기능 - EISA 버스 시스템만 해당
E8h 01h 확장 메모리 크기 가져오기(Neuter function, 1994년 이후 필요).64Mb를 초과하는 메모리 크기에 대한 결과 제공
E8h 20h 시스템 주소 맵 쿼리.E820에서 반환된 정보는 이전 버전에서 반환된 정보를 대체한다.AX=E801h그리고AH=88h인터페이스.
16h 키보드 서비스
AH 설명
00h 문자 읽기
01h 읽기 입력 상태
02h 키보드 이동 상태 읽기
05h 키보드 버퍼에 키 입력 저장
10h 읽기 문자 확장
11h 읽기 입력 상태 확장
12h 키보드 이동 상태 읽기 확장
17h 프린터 서비스
AH 설명
00h 프린터에 문자 인쇄
01h 프린터 초기화
02h 프린터 상태 확인
18h 카세트 기본 실행: 초기 PS/2 라인까지의 IBM 기계에서 이 인터럽트는 ROM 카세트 기본을 시작할 것이다.복제본에 이 기능이 없고 다른 시스템/B가 있음IOSes는 INT 18h가 실행될 경우 다양한 작업을 수행하게 되는데, 가장 일반적으로 부팅 가능한 디스크가 없다는 오류 메시지가 표시된다.현대의 기계들은 이 인터럽트를 통해 네트워크에서 부팅을 시도할 것이다.현대의 컴퓨터에서는 이 인터럽트를 BIOS가 작업을 완료하지 못했다는 부트로더로부터의 신호로 취급한다.그러면 BIOS는 적절한 다음 단계를 수행할 수 있다.[3]
19h POST 후 BIOS는 이 인터럽트를 사용하여 운영 체제를 로딩한다.프로그램은 컴퓨터를 재부팅하기 위해 이 인터럽트를 호출할 수 있다(그러나 BIOS에 의한 시스템 재초기화 또는 부팅 프로세스 중에 하드웨어 인터럽트 또는 DMA 작업이 시스템이 중단되거나 중단되지 않도록 해야 한다).
1Ah 실시간 시계 서비스
AH 설명
00h RTC 읽기
01h RTC 설정
02h RTC 시간 읽기
03h RTC 시간 설정
04h RTC 날짜 읽기
05h RTC 날짜 설정
06h RTC 알람 설정
07h RTC 경보 재설정
1Ah PCI 서비스 - PCI 2.0 이상을 지원하는 BIOS에서 구현
AX 설명
B101h PCI 설치 검사
B102h PCI 디바이스 찾기
B103h PCI 클래스 코드 찾기
B106h PCI 버스 관련 작업
B108h 구성 바이트 읽기
B109h 구성 단어 읽기
B10Ah 구성 문서 읽기
B10Bh 구성 바이트 쓰기
B10Ch 구성 단어 쓰기
B10Dh 구성 문서 쓰기
B10Eh IRQ 루틴 정보 가져오기
B10Fh PCI IRQ 설정
1Bh Ctrl-Break 핸들러 - 호출자INT 09Ctrl-Break를 누른 경우
1Ch 타이머 틱 핸들러 - 호출자INT 08
1Dh 호출할 수 없음; 비디오 모드에 대한 데이터를 포함하는 VPT(비디오 매개 변수 표)에 대한 포인터
1Eh 호출할 수 없음. DPT(Diskette Parameter Table)에 대한 포인터(Diskette Parameter Table)로, 디스켓 드라이브에 대한 다양한 정보가 포함되어 있음
1Fh 호출할 수 없음. ASCII 문자 데이터가 들어 있는 VGCT(Video Graphics 문자 표)에 대한 포인터만 있음80hFFh
41h 주소 포인터: FDPT = 고정 디스크 매개 변수 표(1차 하드 드라이브)
46h 주소 포인터: FDPT = 고정 디스크 매개변수 표(2번째 하드 드라이브)
4Ah RTC에서 알람을 호출함

INT 18h: BAS 실행IC

INT 18h전통적으로 옵션 ROM에 저장된 Cassette BASIC(마이크로소프트 제공) 구현으로 전환했다.이 호출은 일반적으로 BIOS가 시작할 때 부팅 가능한 디스크 볼륨을 식별할 수 없는 경우에 호출된다.

1981년 오리지널 IBM PC(IBM 머신 타입 5150)가 출시될 당시, BASIC in ROM이 핵심 기능이었다.Commodore 64와 Apple II 라인과 같은 현대의 인기 있는 개인용 컴퓨터들 또한 ROM에 마이크로소프트 Cassette BASIC을 가지고 있었다(Commodore는 라이센스를 받은 버전 Commodore BASIC으로 이름을 바꾸었지만), 따라서 IBM PC는 경쟁하기 위해 BASIC가 필요했다.그 다른 시스템들과 마찬가지로 IBM PC의 ROM BASIC은 사용자가 프로그램을 로드, 저장 및 실행할 수 있을 뿐만 아니라 프로그램을 작성, 정제할 수 있도록 하는 원시 디스크리스 운영체제 역할을 했다.(원래 IBM PC는 앞서 언급한 두 경쟁사와 마찬가지로 카세트 인터페이스 하드웨어를 포함한 IBM의 유일한 PC 모델이기도 했다.기본 모델인 IBM PC는 RAM이 16KiB에 불과하고 [어떤 종류의 디스크 드라이브]가 없었기 때문에, 기본 모델인 ROM의 카세트 인터페이스와 BASIC이 필수적이었다.RAM이 32KiB 미만인 IBM PC는 디스크에서 부팅할 수 없다.오리지널 IBM PC의 8KiB ROM 칩 5개 중 4개는 BASIC을 포함하고 1개만 BIOS를 포함하고 있으며, 16KiB의 RAM만 설치하면 ROM BASIC이 전체 시스템 메모리의 절반 이상을 차지한다[정확히 말해서 4/7s]).

시간이 흐르고 BASIC이 더 이상 모든 PC에서 배송되지 않을 때, 이 인터럽트는 단순히 부팅 가능한 볼륨이 발견되지 않았음을 나타내는 오류 메시지(명백히 "No ROM BASIC" 또는 최신 BIOS 버전에서 설명 메시지)를 표시할 뿐이며, 다른 BIOS 버전에서는 부팅 가능한 볼륨을 삽입하고 키를 누르라는 메시지를 사용자에게 표시하고, 그리고 나서,사용자는 부팅을 다시 시도하기 위해 부트스트랩 로더(INT 19h)로 다시 루프되는 키를 눌렀다.

디지털 레인보우 100B 사용INT 18hIBM BIOS와 호환되지 않는 BIOS를 호출하는 것.Turbo Pascal, Turbo CTurbo C+++는 메모리 할당 및 페이징을 위해 INT 18을 용도 변경했다.다른 프로그램들도 그들 자신의 목적을 위해 이 벡터를 재사용했다.

BIOS 후크

도스

DOS 시스템, IO.SYS 또는 IBMBIO.COM은 플로피 디스크 변경 탐지, 포맷 호출 추적, DMA 경계 오류 수정, IBM ROM BIOS "01/10/84"의 문제 해결을 위해 INT 13을 첫 번째 호출 전에 연결한다.

BIOS 바이패스

많은 최신 운영 체제(: Linux 및 Windows NT)는 시작 후 BIOS 인터럽트 호출을 무시하고, OS 커널은 시작 시 CPU를 보호 모드 또는 롱 모드로 전환하며, 연결된 하드웨어를 직접 제어하기 위해 자체 프로그램(예: 커널 드라이버)을 사용하는 것을 선호한다.그 이유는 주로 이러한 운영체제가 보호모드나 롱모드로 프로세서를 구동하는 반면, BIOS 인터럽트 콜을 호출하려면 리얼모드비리얼모드로 전환하거나 Virtual 8086모드를 사용해야 하기 때문이다.리얼 모드, 언리얼 모드, 가상 8086 모드가 느리다.그러나, 리얼 모드로 전환하지 않는 심각한 보안상의 이유 또한 있으며, 리얼 모드 BIOS 코드는 기능성과 속도 면에서 모두 한계가 있어 운영 체제 설계자가 이를 대체할 수 있는 대안을 찾도록 동기를 부여한다.실제로 BIOS의 속도 제한은 DOS 시대에도 프로그램이 성능 제한을 피하기 위해 이를 우회하는 것이 일반화되었으며, 특히 비디오 그래픽 디스플레이와 빠른 시리얼 통신의 경우 그러했다.BIOS 기능의 문제에는 정의된 기능 범위의 제한, 서로 다른 컴퓨터에서 지원되는 기능의 하위 집합의 불일치, BIOS 품질의 변화(즉, 일부 BIOS는 완전하고 신뢰할 수 있으며 다른 BIOS는 요약되고 버그가 됨)가 포함된다.운영체제 개발자들은 문제를 스스로 해결하고 BIOS에 대한 의존을 피함으로써 서면과 지원 시스템 소프트웨어에서 직면하는 위험과 복잡성을 일부 제거할 수 있다.반면에, 그렇게 함으로써 개발자들은 그들이 의도하는 모든 다른 시스템이나 주변 장치에 "완벽한" 드라이버 소프트웨어를 제공하는 것을 책임지게 된다(또는 하드웨어 생산자들이 그러한 드라이버를 제공하도록 유도하는 것).따라서 적은 예산으로 개발된 소형 운영 체제는 BIOS를 많이 사용하는 경향이 있는 반면, 대규모 소프트웨어 엔지니어 그룹이 구축한 대규모 운영 체제는 BIOS를 사용하는 대신 자체 드라이버를 쓰는 경우가 더 많을 것이다. 즉, BIOS a의 호환성 문제를 고려하지 않더라도 말이다.보호 모드.

참고 항목

참조

  1. ^ "Booting · Linux Inside". 0xax.gitbooks.io. Retrieved 2020-11-10.
  2. ^ "Grub2 Booting Process". 21 June 2016.
  3. ^ * BIOS 부팅 사양 버전 1.01 1996년 1월 11일 부록 D