요약

프로그램이 화면에 글자를 찍거나 키보드를 읽을 때는 누군가에게 부탁한다. 손님이 식당 종업원에게 주문하면 종업원이 주방에 전하고 주방이 불을 쓰는 것처럼, 부탁은 여러 단계를 거쳐 하드웨어에 닿는다. 위 단계에 부탁할수록 쓰기 쉽고 어느 컴퓨터에서나 통한다. 아래 단계로 내려갈수록 빠르고 세밀하게 다룰 수 있지만, 알아야 할 것이 늘고 다른 컴퓨터에서는 안 돌 수 있으며 운영체제가 막기도 한다.

예시로 보기

C++의 cout << "Hello"; 한 줄로 글자가 화면에 나온다. 이 한 줄이 그래픽 카드를 직접 움직이는 것은 아니다. 고급 언어 프로그램이 글자열을 찍을 때는 다음 단계를 차례로 거친다.

flowchart TD
    A["응용 프로그램 (3단계)<br/>출력 함수를 부른다"] --> B["운영체제 함수 (2단계)"]
    B --> C["BIOS 함수 (1단계)"]
    C --> D["하드웨어 (0단계)"]

BIOS(basic input-output system)는 컴퓨터의 칩에 들어 있는 작은 프로그램 모음으로, 장치와 직접 이야기하는 코드(드라이버)가 담겨 있다1.

어셈블리어 프로그램은 이 네 단계 가운데 어느 단계에든 직접 부탁할 수 있다. 고급 언어 프로그램은 보통 맨 위로만 들어간다.

flowchart LR
    P["어셈블리어 프로그램"] --> L3["라이브러리 (3단계)"]
    P --> L2["운영체제 함수 (2단계)"]
    P --> L1["BIOS 함수 (1단계)"]
    P --> L0["하드웨어 (0단계)"]

단계마다 얻는 것과 잃는 것

단계마다 얻는 것과 잃는 것은 다음과 같다.

단계 누구에게 부탁하나 얻는 것 잃는 것
3 고급 언어의 함수. C++, Java의 입출력 함수. 어셈블리어에서는 라이브러리 다른 컴퓨터로 옮기기 쉽고 쓰기 편하다 늘 가장 빠르지는 않다
2 운영체제. 운영체제가 내놓은 함수 목록(API)을 부른다 할 수 있는 일이 더 많다 익혀야 할 세부 사항이 많다
1 BIOS. 장치와 직접 이야기하는 드라이버 장치를 더 가까이에서 다룬다 운영체제의 보안이 응용 프로그램의 이 단계 코드를 막을 수 있다
0 하드웨어 자체 가장 빠르다 그 하드웨어에서만 돈다

0단계 줄은 아래 화면 출력의 예와 같은 이야기다1.

화면 출력의 세 길. 16비트 MS-DOS 프로그램이 화면에 글자를 찍는 방법 셋이 이 단계와 그대로 맞는다.

방법 속도 어디서 도나
MS-DOS 함수를 부른다 (2단계) 느리다 MS-DOS가 도는 어떤 컴퓨터에서든
BIOS 함수를 부른다 (1단계) 중간 MS-DOS 기반 컴퓨터 거의 모두에서
화면 내용이 들어 있는 메모리에 직접 쓴다 (0단계) 빠르다 IBM PC와 100% 호환되는 컴퓨터에서만

이 그림이 약속하지 않는 것. 아래 단계로 내려가면 늘 된다는 보장이 없다. 보호 모드 운영체제는 응용 프로그램이 BIOS나 하드웨어를 직접 만지는 것을 막을 수 있다. 실주소 모드의 MS-DOS에서는 막는 것이 없어서 세 길을 모두 쓸 수 있다1: x86 동작 모드.

활용

연결

확인 문제

C1 고급 언어 프로그램이 글자열을 화면에 찍을 때 거치는 네 단계를 위에서부터 쓰라.

답: 응용 프로그램(3단계) → 운영체제 함수(2단계) → BIOS 함수(1단계) → 하드웨어(0단계).

C2 16비트 MS-DOS용 프로그램을 만든다. (가) 어떤 MS-DOS 컴퓨터에서든 돌아야 하는 설치 안내문 출력 (나) 화면 전체를 1초에 수십 번 다시 그려야 하는 게임. 각각 화면 출력의 세 길 가운데 무엇이 맞는가?

답: (가) MS-DOS 함수 호출. 느리지만 어떤 MS-DOS 컴퓨터에서든 돈다. (나) 화면 메모리에 직접 쓰기. 빠르지만 IBM PC와 100% 호환되는 컴퓨터에서만 돈다.
이유: 가르는 질문은 “어디서나 돌아야 하는가, 빨라야 하는가”다. BIOS 함수는 그 중간이다.

C3 아래 단계로 내려갈수록 왜 빨라지고, 왜 옮겨 쓰기 어려워지는가?

답: 위 단계의 부탁은 아래 단계들을 차례로 거쳐 하드웨어에 닿는다. 아래 단계에 바로 부탁하면 거치는 단계가 줄어 빠르다. 대신 위 단계가 가려 주던 차이(운영체제 종류, BIOS 종류, 하드웨어 종류)를 프로그램이 직접 떠안으므로, 그것이 다른 컴퓨터에서는 안 돈다.

  1. BIOS의 풀이는 교재 Irvine, Assembly Language for x86 Processors 7판, 2.5절을 따랐다. 이 문서에는 계산이 없어 검증 코드를 두지 않았다. ↩ ↩2 ↩3