컴퓨터 시스템과 하드웨어

컴퓨터 시스템과 하드웨어

컴퓨터 시스템을 구성하는 계층

응용 소프트웨어 레이어, 운영체제 레이어, 컴퓨터 하드웨어 레이어

→ 운영체제는 상위 계층과 하드웨어 간의 인터페이스 역할 수행, 상위 계층에게 하드웨어를 추상화

→ 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 수행한다.

  1. 사용자는 응용 프로그램이나 운영체제 패키지에 포함된 GUI, 툴을 통해 컴퓨터를 활용함.

  2. 하드웨어는 모드 운영체제의 배타적이고 독점적인 지배를 받음

  3. 어떤 사용자, 응용프로그램이라도 직접 하드웨어에 접근하는 것은 허용X, 반드시 운영체제를 통해서만 접근

컴퓨터 하드웨어

image

  1. CPU: 기계 명령어 수행, 다른 장치 제어

    제어 유닛, 산술 논리 장치, 레지스터
    32비트 CPU의 의미: 32개의 주소선
    2^32 → 0~(2^32)-1번지를 구별 가능
    2^32 byte = 4 GB
    → 32비트 CPU에서 최대 메모리 크기는 4GB

  2. 레지스터: CPU 동작에 필요한 정보를 임시 저장

    x86-64 레지스터 구조

    AX-16bit, EAX-32bit, RAX-64 bit, 64bit 레지스터는 앞에 R-prefix가 붙는다.

    AX-16bit, EAX-32bit, RAX-64 bit, 64bit 레지스터는 앞에 R-prefix가 붙는다.

    범용 레지스터, 인스트럭션 포인터 레지스터(PC), 세그먼트 레지스터(메모리 관리용), 글로벌 디스크립터 테이블 레지스터(실행 프로세스 테이블), 인스트럭션 디스크립터 테이블 레지스터(인터럽트 테이블), 128bit XMM 레지스터(미디어 처리용)

  3. 메모리: CPU에 의해 수행되는 코드와 데이터가 적재되는 공간

    다수의 셀로 구성, 각 셀은 8비트(1 byte)의 모임, n개의 셀로 구성된 메모리는 주소를 위해 log₂n개의 비트가 필요함

    e.g. 16개의 셀 = 2^4=16, log₂16 = 4 bit 필요

    Main memory, DRAM(Dynamic Random Access Memory)

    기억장치간 계층구조, 접근시간
실행 시 실행파일을 대용량 저장장치 → 메인 메모리로 적재함
static ram = 플립플롭, dram = 반도체 방식
메인 메모리 까지는 CPU가 접근 가능하고, 2차, 3차 저장장치는 OS만이 접근 가능

    기억장치간 계층구조, 접근시간
    실행 시 실행파일을 대용량 저장장치 → 메인 메모리로 적재함
    static ram = 플립플롭, dram = 반도체 방식
    메인 메모리 까지는 CPU가 접근 가능하고, 2차, 3차 저장장치는 OS만이 접근 가능

    하위 계층으로 갈 수록

    비트당 비용이 감소, 기억 용량이 증가, 접근 시간이 증가, 데이터 참조 횟수 감소

  4. 캐시 메모리: 메인 메모리에 저장된 명령과 데이터 블록을 임시로 저장하는 기억장치

    Cache: 고속의 장치의 속도를 유지하기 위해 존재→CPU와 메모리 사이에 빠른 캐시 메모리를 두어 CPU 장치의 속도를 유지함

    image

    off-chip 캐시 메모리: 시스템 버스에 연결되는 방식

    on-chip 캐시 메모리: CPU 내부에 존재

기억장치 계층구조에서 소량의 캐시가 효과적인 이유

CPU가 프로그램을 수행할 때 코드와 데이터의 참조 지역성 원리를 이용

참조 지역성(locality of reference):

CPU가 프로그램을 수행하는 짧은 시간동안 발생하는 명령 또는 데이터에 대한 접근이 메모리 상에 하나의 군집을 이루는 경향

  1. 공간 지역성: 일련의 인접한 메모리 위치들과 관련된 수행 경향

    • 배열, 순차접근

    캐시 제어 논리가 일반적으로 보다 큰 캐시 블록 사용, 선반입(사용이 예상되는 항목을 미리 반입)을 수용함으로써 활용

  2. 시간 지역성: 최근 사용했던 메모리의 위치에 다시 접근하는 경향

    • 반복문, 재귀 루프, 함수 호출

    최근 사용된 명령어와 데이터 값을 캐시에 유지, 캐시 계층 구조를 활용하는 방식으로 이용

  3. 버스(Bus)

    CPU, 캐시, 메인 메로리, 입출력 제어장치 및 IO컨트롤러 등을 연결하여 장치들 간에 서로 데이터를 송수신하기 위한 공통의 통로

    주소 버스(address bus): 주소 신호

    데이터 버스(data bus): 데이터 신호

    제어 버스(control bus): 제어 신호

    위치에 따른 분류: 내부/외부

    용도에 따른 분류: 주소/데이터/제어

    목적에 따른 분류: 시스템/입출력

    시스템 버스: 캐시 메모리, 메모리 등 빠르게 작동하는 하드웨어 사이에 신호를 전송

    입출력 버스: 입출력장치들로부터 입출력 데이터 전송

    2^30 = 1GB, 나머지 2bit → 메모리 뱅크 구분

    2^30 = 1GB, 나머지 2bit → 메모리 뱅크 구분

    NorthBridge→메모리 액세스량이 많고 빠른 정보 교환이 필요한 하드웨어 연결

    SouthBrideg→입출력 장치들을 제어하는 모든 회로를 가지고 있는 통합 칩

CPU 기계명령, 명령 사이클

CPU 기계명령

CPU의 제어 장치가 해석하고 수행할 수 있는 기계 명령, CPU를 설계시 결정

기계명령어와 1:1로 대응하는 어셈블리 명령을 설계
컴파일된 기계어 코드는 다른 CPU에서 호환성이 없음

CPU 명령 사이클

PC: 다음 실행할 기게 명령의 메모리 주소 저장

IR: 실행하기 위해 메모리에서 읽어온 명령이 저장된 레지스터

SP: 스택 영역의 꼭대기 메모리 주소를 저장하는 레지스터

데이터 레지스터, 상태 레지스터, 기타 레지스터

인출-해석-실행-인터럽트 검사

인출-해석-실행-인터럽트 검사

이때, 실행 후 결과를 레지스터에 바로 저장하기 때문에 저장 단계는 존재하지 않는다. 1클럭 사이클에 저장이 완료됨

image

  1. CPU는 PC 에 저장된 주소 100을 주소 버스에 적재

  2. 메모리는 주소 버스로부터 주소 100을 받고, 100에 저장된 데이터를 데이터 버스에 적재(mov eax [300])

  3. CPU는 데이터 버스에 담긴 바이너리 데이터를 IR에 저장, PC는 다음 명령 번지로 수정

  4. CPU는 연산에 필요한 데이터를 얻기 위해 데이터 주소 300을 주소 버스에 적재

  5. 메모리는 300번지에 저장된 값 50을 데이터 버스에 적재

  6. CPU는 데이터버스로부터 받은 50을 CPU내부의 임시 레지스터 에 적재

  7. CPU는 명령을 해석, 명령을 실행

스택

image

ELF = ABI, 세그먼트 단위로 나눠짐

.bss: 초기화되지 않은 전역변수

.data: 초기화된 전역변수

.rodata: 전역 상수

.text: 코드

symbol table: 변수 타입

Exports: 외부 호출이 허용된 함수

Imports: 외부에서 호출한 함수

사용자 스택(user stack)

  • 프로그램 수행 시 함수 호출을 처리하기 위해 메모리에 생성되는 자료구조

함수 호출 규약(calling convention)

  • x86은 스택 이용 매개변수 전달, x64는 레지스터(6개), 스택(이후 나머지)을 통해 매개변수 전달

이미지 측면에서의 프로그램, 프로세스 차이:

image

프로그램-보조기억장치에 저장, 초기화된 전역변수 + 코드

image

프로세스

코드-프로그램 코드가 적재되는 메모리 공간

데이터공간-전역변수

힙-동적 생성

사용자 스택-함수 호출 시 매개변수, 지역변수, 복귀주소 저장

image

컨텍스트

운영체제가 수행 중인 프로그램의 제어를 위해 필요한 모든 수행 정보

CPU 컨텍스트(CPU 상태 정보)

  • CPU 레지스터들의 내용

운영체제 상의 문맥

  • 제어 정보: 스케줄링과 상태, 자료구조화, IPC, 할당된 권한, 메모리 관리, 입출력(파일) 상태, 자원 소유권과 이용률

  • 컨텍스트(context)는 운영체제만이 접근 가능함

  • 컨텍스트 저장 자료구조

    • windows: KPROCESS

    • Linux: task_struct

컨텍스트 스위칭(context switching)

현재 CPU를 사용 중인 프로세스의 CPU 제어권이 다른 프로세스로 이양되는 과정

image

멀티코어 CPU

성능과 에너지 효율 향상을 위해 하나의 실리콘 기판에 2개 이상의 명령 수행 장치를 내장한 CPU

코어가 2개 이상

image

image

컴퓨터 시스템의 계층구조와 운영체제 인터페이스

컴퓨터 시스템의 계층구조

컴퓨터 시스템이 계층 구조로 설계된 이유

  • 계층 간의 독립성 확보를 위해 → 추상화

  • 사용자

    • OS나 하드웨어 지식 없어도 응용프로그램으로 컴퓨터 활용
  • 응용프로그램 개발자 or 응용프로그램

    • 장치의 타입, 구조, 제어 방법을 몰라도 개발 가능, 그러나 OS는 알아야 함

    • 컴퓨터 하드웨어가 바뀌어도 응용프로그램을 다시 작성할 필요 없음

  • 운영체제

    • 운영체제는 장치와 관련된 모든 작업을 디바이스 드라이버에게 요청

    • 응용프로그램과 하드웨어 사이의 인터페이스 역할

사용자에 대한 운영체제의 역할

  • 유저가 하드웨어 지식 없어도 컴퓨터 다룰 수 있게

  • 인터페이스 제공, 유틸리티 제공, 사용자 계정 관리, 사용 시간 계산, 회계정보 등

응용프로그램에 대한 운영체제의 역할

  • 응용프로그램이 직접 하드웨어를 다루지 못하도록 차단

    • 운영체제가 하드웨어를 완벽히 독점하여 장악

    • 응용프로그램들간의 하드웨어 사용 충돌을 막기 위함

  • 응용프로그램이 하드웨어를 사용하고자 할 때

    • 반드시 운영체제에게 요청 → 운영체제가 대신하여 하드웨어 조작

    • 유일한 요청방법: 시스템 호출(System Call)

    • 응용 프로그램과 하드웨어 사이의 인터페이스 → 하드웨어 추상화

  • 응용프로그램들의 수행 순서 제어

  • 응용프로그램들 사이의 통신 중계

image

하드웨어에 대한 운영체제의 역할

  • 하드웨어 자원 사용에 대한 충돌 해결 및 성능 최적화

  • 하드웨어 자원 접근

커널

운영체제 소프트웨어 구성

  • 유틸리티/GUI 소프트웨어

    image

    • 사용자가 컴퓨터를 편리하게 사용 또는 관리할 목적으로 설계

    • 쉘(GUI, CLI) 탐색기, 명령창, 작업 관리자, 제어판 등

  • 라이브러리

    • 특정한 부분 기능만을 수행하도록 미리 작성되어진 프로그램 모음

    • 표준 라이브러리(standard library):

      • 응용프로그램에서 자주 활용되는 기능으로, 커널의 기능과 1차적으로 무관한 작업을 수행하는 프로그램 모음

      • 시스템 호출 함수를 래핑(wrapping) 함

      • ANCI C library(NASI libc), C POSIX library(POSIC libc), GNU C library(glibc)

    • 시스템 호출 라이브러리(system call library)

      • 응용프로그램이 커널 코드(하드웨어 기능)를 불러 활용할 수 있도록 제공하는 프로그램 모음(바로 커널 호출)
  • 커널(kernel)

    • 운영체제의 핵심 기능을 구현한 부분, 좁은 의미의 운영체제

    • 부팅 후 메모리에 상주하는 코드와 데이터

    • CPU, 메모리 등 컴퓨터 자원을 직접 제어하고 관리하는 코드와 자료구조들

    • 커널 코드는 함수들의 집합

    • 커널 기능을 이용하려면 응용프로그램은 반드시 시스템 호출(system call) 사용

  • 디바이스 드라이버

    • 장치를 직접 제어하고 입출력하는 프로그램

    • 장치마다 전담 디바이스 드라이버가 존재

    • 일반적으로 장치 제작자에 의해 작성되어 배포됨

    • (키보드, 디스크, SCSI, 마우스, 그래픽, 네트워크, USB) 드라이버

커널 인터페이스

커널이 제공하는 2개 인터페이스

시스템 호출(system call)

  • 커널과 응용프로그램 사이의 인터페이스

    • 소프트웨어 인터럽트, 동기적
  • 응용프로그램에서 커널 기능을 사용할 수 있는 유일한 방법

  • 시스템 호출 라이브러리를 통해 다양한 시스템 호출 함수 제공

image

read() 함수에 의해 시스템 호출이 일어나는 과정

image

  1. read() 함수 호출

  2. CPU 특정 레지스터들에 시스템 호출 번호와 매개 변수 저장

  3. 시스템 호출(trap)을 일으키는 syscall 명령 실행

  4. CPU는 커널 모드로 변경(mode = 0), system_call_handler() 로 진입

  5. 현재 CPU 레지스터들을 커널 스택에 저장 → 사용자 모드 복귀 대비 CPU 레지스터를 읽어 시스템 호출 번호를 알아냄 → 레지스터로 시스템 호출번호 전달

  6. 시스템 호출 표에서 커널 함수의 주소를 알아내어 커널 함수 sys_read() 호출

  7. sys_read(): 디스크 장치를 제어하여 파일을 읽음

  8. sys_read()로 부터 리턴하고, 커널 스택에 저장해둔 레지스터값을 CPU로 복귀

  9. CPU는 사용자 모드로 변경(mode = 1)

  • 모드 스위칭은 CPU를 다시 돌려받는 경우이며, non-blocking function의 경우 mode switching만 발생, 다만 read()의 경우에는 blocking function으로 mode + process switching 이 둘다 발생한다.

인터럽트(interrupt)

  • 커널과 하드웨어 사이의 인터페이스

    • 하드웨어 인터럽트, 비동기적
  • 장치들이 입출력 완료, 타이머 완료 등을 CPU에게 알리는 하드웨어적 방법

    • 인터럽트를 알리는 하드웨어 신호가 직접 CPU에 전달
  • 인터럽트 발생 시

    • CPU는 수행중인 작업을 중단하고 인터럽트 서비스 루틴(ISR) 수행

    • ISR은 대부분 디바이스 드라이버 내에 존재

    • ISR은 커널 영역에 적재

    • ISR의 수행이 끝나면 하던 작업 계속하여 수행

  • 인터럽트 활용

    • 운영체제가 장치에게 지시한 입출력 작업의 완료, 예고 없는 네트워크 데이터 도착, 키보드나 마우스 입력, 부족한 배터리 경고 등 장치와 관련된 모든 이벤트 처리

커널과 시스템 호출

응용프로그램의 직접 자원 접근 문제

  • 응용프로램이 직접 컴퓨터 자원에 접근하면 충돌과 자원 훼손 발생

  • 응용프로그램의 직접 자원 접근 불허

    • 자원에 대한 모든 접근은 커널에만 부여

해결방법

  • 메모리 공간을 사용자, 커널 공간으로 분리

  • CPU의 수행 모드를 사용자 모드(1), 커널 모드(0)으로 구분

    • 응용 → 사용자 모드에서만, 커널 → 커널 모드에서만

    • 사용자 공간에서 커널 공간의 코드 직접 접근 X

  • 응용프로그램이 커널 기능 이용 시 → 시스템 호출, 커널 코드 이용

사용자 공간, 커널 공간

사용자 공간 크기

  • 프로그램 코드 + 데이터(전역) + 힙 + 스택

  • 사용자 주소 공간은 운영체제가 만들어 주는 가상 공간

    • 응용프로그램 관점에서 보는 주소 범위

    • 응용프로그램 크기 → 가상 주소 공간 크기에 제약

      image

해결책

  • 사용자 공간의 충돌 해결: 재배치

    image

    • 각 응용프로그램의 가상 주소 공간을 물리 주소 공간으로 매핑

    • 물리 메모리를 여러 응용프로그램의 사용자 공간이 나누어 사용

  • 물리 메모리가 작은 경우 → 가상 메모리

    • 운영체제는 보조기억장치의 영역을 물리 메모리 영역으로 간주

CPU 수행 모드

사용자 모드

  • mode bit = 1

  • 사용자 공간 코드, 데이터 수행 중

  • 커널 공간 접근 불허 → 커널 코드, 자료구조 보호

  • 특권 명령 수행 불가

커널 모드

  • mode bit = 0

  • 커널 공간 코드, 데이터 수행

  • 특권 명령 사용 가능

특권 명령어 종류

  • I/O 명령

  • Halt

    • CPU 작동 중단
  • 인터럽트 플래그 켜고 끄기(CPU가 인터럽트 허용 무시)

  • 타이머 설정 / 컨텍스트 스위칭 명령

  • 메모리 지우기 명령 / 장치 상태 테이블 수정 명령

사용자 모드 → 커널 모드(mode switching)

image

  • 시스템 호출, 인터럽트 발생

시스템 호출

  • 시스템 호출 수행하는 기계명령에 의해 수행

  • 기계 명령이 CPU의 모드 비트를 커널(1→0)으로 전환

인터럽트(interrupt)

  • CPU가 인터럽트 신호 수신 시 커널 모드로 자동 전환

  • CPU는 커널 공간에 있는 인터럽트 서비스 루틴(ISR) 수행

  • ISR 수행이 끝나면 CPU는 사용자 모드로 자동 전환(0→1)

컨텍스트 스위칭

image

  1. 프로세스 또는 스레드 스케줄링을 발생시키지 않는 시스템 호출, 인터럽트

    • CPU 컨텍스트 스위칭(mode switching)
  2. 프로세스 또는 스레드 스케줄링을 발생시키는 시스템 호출, 인터럽트

  • CPU 컨텍스트 + 커널 컨텍스트 스위칭 발생 (process or thread switching)

image

커널

커널은 부팅 시에 커널 공간에 적재된 함수들과 데이터 집합

  • 커널은 컴파일된 바이너리 형태

  • 하드디스크 특정 영역에 저장

  • 부팅 시 커널 공간의 메모리에 적재

image

커널은 프로세스인가?

  • NO: 수행중인 프로그램이 필요한 커널 함수를 호출(단일체 커널)

  • YES: 커널 기능이 분리되어 프로세스로 수행(마이크로 커널)

커널은 스택이나 힙을 가지는가?

  • (커널)스택과 (커널)힙은 프로세스 또는 스레드가 생성될 때 할당됨

커널과 인터럽트

인터럽트

  • 인터럽트는 CPU의 정상적인 행위를 방해하는 신호

컴퓨터에서 인터럽트 활용

  • 프로그램 수행 중 시스템에 예기치 않은 상황이 발생했음을 CPU에게 알리는 신호

  • 하드웨어 인터럽트 → 비동기적 인터럽트

    • 외부 장치들이 어떤 상황 발생을 CPU에게 알리는 하드웨어 신호

    • 비동기적: 예정X, 발생시간을 예측 불가능

    • CPU는 인터럽트 수신 시 인터럽트 서비스 루틴 수행

      • →인출-해석-실행V인터럽트 검사→ 반복

인터럽트, 명령어 사이클

image

image

PSW: 상태 제어 레지스터

멀티 코어 컴퓨터에서 인터럽트 발생 및 처리 과정

image

인터럽트 처리과정 예시

  1. CPU는 어떤 응용프로그램을 수행중이다.

  2. 사용자가 키를 입력 → 키보드는 인터럽트 신호 전송

  3. I/O APIC가 인터럽트 신호 수신 시 해당 인터럽트 핀(IRQ)에 설정된 인터럽트 벡터(8비트 번호)와 인터럽트를 처리할 타겟 코어의 Local APIC 번호를 메세지로 만들어 APIC 버스에 실어 보냄(키보드_IRQ=1, 벡터=33)

  4. LocalAPIC는 자신에게 도착한 인터럽트 메세지를 받아 CPU의 INTR핀에 인터럽트 신호를 발생시키고 수신한 벡터는 CPU가 읽어갈 수 있도록 내부에 저장

  5. INTR신호를 받은 CPU는 Local APIC로부터 인터럽트 벡터(번호N)을 읽음. 여기까지가 인터럽트 발생, CPU가 인지하는 과정


  6. CPU는 사용자 모드에서 커널 모드로 바꾸고, 커널 공간에 저장된 인터럽트 벡터 테이블로부터 N번 항목에 저장된 인터럽트 서비스 루틴(ISR)의 주소를 알아내고, 현재 실행중인 응용프로그램 컨텍스트(PC, SP, flag_레지스터들)등을 스택에 저장해둠 그리고 플래그 레지스터의 IF(Interrupt Flag)비트를 0으로 설정, CPU코어가 다른 인터럽트 받지 않도록 처리 CPU와 2개의 APIC 사이에서 하드웨어적으로 자동 진행되는 과정임

  7. CPU는 N번 인터럽트 서비스 루틴으로 점프, 인터럽트 서비스 루틴 실행 서비스 루틴 내에서 사용할 레지스터들을 스택에 저장, 키보드에서 값을 읽어 키보드 버퍼에 저장

  8. 7번 과정에서 저장해둔 레지스터들을 복귀시키고, Local APIC에게 인터럽트 종료를 알려 다음 인터럽트를 발생시킬 수 있도록 하고iret명령 실행, 스택에 저장된 PC, SP, 플래그 레지스터를 CPU 코어로 복귀시키면서 IF 플래그도 원상복구

  9. CPU는 커널 (0) → 사용자 (1) 모드로 변경, 이전 실행하던 응용프로그램 계속 수행

인터럽트 백터 테이블

  • 커널 영역에 저장되어 있는 인터럽트 서비스 루틴들의 주소 저장

인터럽트 서비스 루틴(Interrupt Service Ruoutine, ISR)

  • 인터럽트 핸들러

  • 입출력 장치에 의존적인 ISR → 장치 드라이버 내

  • 입출력 장치와 무관한 ISR → 커널 코드 내

멀티프로그래밍 운영체제에서 인터럽트는 매우 중요

  • time slice 소진 시 타이머 인터럽트 발생, 스레드 스케줄링 수행

  • CPU 활용률과 시스템 처리율 향상

인터럽트가 없다면 polliong으로 CPU가 입출력작업을 계속하여 검사해야함

인터럽트가 존재하여 I/O수행하는 동안 운영체제는 CPU를 다른 프로세스/스레에게 할당하여 다른 작업을 실행하고, 인터럽트를 통해 입출력 완료를 확인하면 해당 프로세스/스레드를 준비 상태로 전이시켜 다음에 스케줄링 될 수 있도록 하여 다중프로그래밍을 구혀함

→ 입출력 장치와 CPU가 각자 필요한 일을 동시에 수행하여 CPU 활용률 증가, 시스템 처리율 증가


  1. 응용프로그램 작성 시 표준 라이브러리 함수(printf())를 호출하는 것이 시스템 호출 함수(write())를 호출하는 것보다 나은 방법인 이유?

    표준 라이브러리 함수는 특정 언어에 맞게 표준화되어 다양한 운영체제 상에서 적절하게 컴파일하여 사용 가능하지만, 시스템 호출 함수는 운영체제에 종속적이다.

    표준 라이브러리 함수는 시스템 호출 함수를 래핑하고, 일차적으로 커널 기능과 무관한 작업을 수행하는데, 이때 버퍼링, 성능 최적화 등의 일차적인 작업을 수행 가능하다.

    또한 내부적으로 에러 처리를 하고, 추상화 수준이 높아 표준 라이브러리 함수를 이용하는 것이 코드의 가독성과 유지보수성을 높일 수 있다.

  2. 인터럽트 서비스 루틴이 커널 영역에 있어야 하는 이유?

    보안적으로 ISR이 커널 영역에 존재할 경우 악성 사용자 프로그램으로부터 공격 받는 위험을 줄일 수있고, ISR이 종종 시스템 리소스에 접근하고 관리해야 하는 경우가 있으므로 커널 모드에서 수행 시 시스템에 대한 완전한 접근 권한을 얻을 수 있고 한 ISR을 수행 시 인터럽트 활성화 여부를 조작하는 등의 커널 기능을 활용할 수 있다.

  3. 인터럽트가 어떻게 CPU 활용률을 높이는지?

    프로세스 / 스레드가 I/O를 수행하기 시작한 경우, 인터럽트가 없다면 CPU는 지속적으로 I/O완료 여부를 검사해야 하며, 이는 CPU 활용률을 저하시키는 요인이다. 폴링 방식으로 I/O 등 일시적으로 CPU 활용률이 떨어지는 작업 수행 시 완료 여부를 지속적으로 검사하는 것 대신

    I/O 완료 시 인터럽트를 통해 CPU에게 신호를 보내어 CPU는 명령 사이클 수행 이후 인터럽트 발생 여부를 검사하여 ISR을 수행한다.

    이를 통해 멀티프로그래밍을 실현할 수 있다. 폴링에 사용되는 CPU 사용 시간을 다른 프로세스/스레드 수행에 할당할 수 있다.