dh_0e

[OS] Basic H/W Mechanisms (Bus, I/O Event, Handling and Device Access Mechanisms) 본문

Operating System

[OS] Basic H/W Mechanisms (Bus, I/O Event, Handling and Device Access Mechanisms)

dh_0e 2025. 11. 8. 23:47

Computer Architecture(컴퓨터 구조)

단일 Bus 구조

  • Bus: CPU, RAM, I/O 장치 간 데이터가 전송되는 통로
    • Data 버스, Address 버스
  • 단일 Bus: 하나의 시스템 버스에 여러 가지 모듈이 연결
    • CPU, Memory, I/O의 속도가 비슷했던 초창기에 발생
    • 속도 격차가 증가(CPU > memory >>> I/O)  → 병목 현상 발생
      • 병목 현상: CPU가 쉬는 시간
        • ex) CPU는 초당 5단위의 일 처리, 메모리 초당 3 단위의 일 처리를 할 수 있다면 전체 시스템 속도는 메모리의 속도(3)로 제한됨

 

계층적 버스 구조

  • 병목현상을 해결하기 위해 시스템 버스를 여러 개의 세분화된 버스로 나누는 방식 채용
    • CPU Local Bus, Memory Bus, PCI Bus, etc.
  • 이중 버스 구조: 현대 System 구조
    • CPU와 I/O 속도 격차로 인한 병목 현상을 해결하고자 함
    • 빠른 CPU와 메모리는 시스템 버스에 연결
    • I/O 장치는 I/O 버스에 연결

 

Basic HW Mechanisms

  1. Event Handling Mechanisms: OS가 입출력 event를 처리하는 기법
    • Interrupt: 비동기적 이벤트를 처리하기 위한 기법
    • Trap: 동기적 예외를 처리하기위한 기법
    • 즉, CPU가 "지금 뭔가 생겼다"라는 신호를 받는 메커니즘
  2. I/O Device Bassic Concept(입출력 장치 개념)
    • CPU가 I/O 장치(디스크, 키보드, 네트워크 등)와 데이터를 주고받는 과정의 기본 아이디어
    • CPU, I/O 장치 통신의 큰 그림, 골격
  3. I/O Handling Methods(입출력 처리 기법): 컴퓨터가 주변 장치(I/O 장치)와 데이터를 주고받을 때 사용하는 기본적인 방법 
    • Polling: CPU가 I/O 장치의 상태를 주기적으로 확인하여 작업 완료 여부를 검사하는 방식
    • Dircet Memory Access(DMA): I/O 장치가 CPU의 개입 없이 직접 메모리에 접근하여 데이터를 전송하는 방식
    • 즉, "I/O를 누가 관리하느냐"에 따른 차이
    • 2번에서 데이터를 실제로 누가 어떻게 옮길 것인지
  4. I/O Device Access 기법(입출력 접근 방식)
    • I/O Instruction: CPU가 별도의 입출력 명령어로 장치 접근
    • Memory Mapped I/O: 입출력 장치를 메모리 주소 공간처럼 취급 (일반 load/store로 접근 가능)
    • 즉, "I/O 장치에 데이터를 어떻게 주고받는가"의 차이
    • 2번에서 CPU 명령어 관점에서 I/O 레지스터에 어떻게 접근할 것인지

 

1. 이벤트 처리 기법 

Interrupt (Handler)

  • 비동기적(의도치 않은) 이벤트를 처리하기 위한 기법
    • 비동기적 이벤트: 외부 장치(키보드, 마우스 등)의 요청이나 타이머 종료처럼 언제 일어날지 모르는 이벤트
    • ex) 네트워크 패킷 도착 이벤트, I/O 요청
  • 처리 순서
    1. Interrupt Disable: 일단 interrupt 막기
    2. 현재 실행 상태 저장: CPU가 interrupt가 발생하기 직전까지 수행하던 작업의 상태를 메모리에 저장
    3. ISR(Interrupt Service Routine)로 점프: 해당 interrupt를 처리하기 위해 ISR의 시작 주소로 점프하여 실행
    4. 저장한 실행 상태 복구: ISR이 완료되면, 2단계에서 저장했던 원래 작업의 상태 복원
    5. 인터럽트로 중단된 지점부터 다시 시작 
  • Interrupt에는 우선 순위가 있으며, H/W 장치마다 다르게 설정
  • Note
    • ISR은 짧아야 함: 너무 길면 다른 interrupt들이 제때 처리되지 못하고 지연될 수 있음
      • 실행 중이던 Process 입장에서도 서운함
    • Time SharingTimer Interrupt의 도움으로 가능: 타이머 인터럽트를 통해 CPU를 공정하게 나누어 사용

Interrupt 처리 도식

Trap

  • 동기적 이벤트를 처리하는 기법
    • 동기적 이벤트: Divide by Zero와 같은 프로그램 에러에 의해 발생하는 이벤트
  • Trap handler에 의해 처리
  • Trap Service Routine이 존재하여 Interrupt와 유사하지만, Interrupt와 달리 실행 상태를 저장/복원하지 않음
    • 원래 상태로 돌아갈 필요 없이 그냥 다음으로 넘어가거나 에러 처리를 하면 됨

Trap Service Routine

  1. User space의 App에서 System call이 발생하거나 Trap을 유발하는 명령 실행
  2. Trap이 발생하여 Kernel space로 진입
  3. Trap HandlerTrap을 감지하고, Trap Service Routine을 실행하여 해당 이벤트를 처리
  4. 처리 완료 후, Return to previous Execution을 통해 이전 실행 흐름으로 복귀

 

Intel x86의 Interrupt & Exception

  • Interrupt
    • Hardware Interrupt
      • 컴퓨터 밖의 장치(키보드, 마우스, 타이머 등)가 CPU에게 신호를 보내면 CPU가 하던 일을 잠시 멈추고 처리
      • 칩셋에 의해 외부적으로 생성되며, CPU의 #INTR 핀에 신호를 전달하여 발생
    • Software Interrupt
      • 실행 중인 프로그램이 OS(커널)에게 특정 작업을 요청할 때 발생
      • ex) 파일을 열거나 화면에 무언가를 출력하는 등의 System Call
  • Exception
    • CPU가 어떤 명령을 실행하다가 오류를 발견했을 때 발생
    • Fault(오류): 파일을 찾을 수 없거나(Page Fault), 0으로 나누는(Divide Err) 등의 문제로, 수정 후 다시 실행
    • Trap: 디버깅 중 특정 지점에서 멈추거나(Breakpoint), 큰수로 인해 저장 공간이 넘치는(Overflow) 경우처럼, 의도적으로 멈춰서 추가 작업 수행
    • Abort(중단): 하드웨어 고장(Machine Check)과 같이 복구 불가능한 심각한 오류가 발생하여 프로그램이나 시스템이 강제로 종료될 때 발생

 

XV6의 Interrupt & Exception

  • XV6에서 하드웨어, 소프트웨어 Interrupt 모두 trap 메커니즘을 통해 처리
  • Hardware Interrupt  
    • 인터럽트 벡터는 vector.S 파일에 저장
    • IRQ_TIMER(타이머 인터럽트): 타이머로 프로세스 스케줄링을 결정
    • IRQ_KBD(키보드 인터럽트): 키보드에서 어떤 글자가 입력되었는지 신호를 받고, 해당 글자를 처리
    • IRQ_IDE(디스크 인터럽트): 파일 저장이나 불러오기 같은 디스크 작업이 끝나면 알려주는 인터럽트
      • 입출력 장치에게 이 신호를 받으면 디스크 작업이 성공적으로 완료되었음을 확인하고, 다음 작업 진행
  • Software Interrupt
    • 사용자가 System call을 호출할 때, T_SYSCALL이라는 소프트웨어 인터럽트 발생
    • ex) 워드 프로세서로 문서 저장을 누르면 OS에게 T_SYSCALL 발생시킴

Interrupt Handling by trap.c

 

2. I/O Device Basic Concepts (I/O 장치 기본 개념)

  • Device Registers(장치 레지스터): 대부분의 H/W 장치 4종류의 레지스터를 가짐
    • Control Register: 장치의 동작을 제어, I/O에 값을 날려줌
    • Status Register: 장치의 현재 상태를 나타냄
    • Input Register: 장치로부터 입력된 데이터를 읽음
    • Output Register: 장치로 데이터를 보내 출력
  • Memory-mapped I/O: Register들은 메인 메모리 일부 영역에 매핑되어 CPU가 해당 주소를 통해 접근 가능
  • I/O Controller
    • Hige-Level의 I/O 요청Low-Level Machine Specific Instruction으로 해석하여 장치와 직접 상호작용하는 회로
      • ex) 디스크의 특정 섹터에 데이터 쓰기 >> 디스크 컨트롤러가 장치 고유의 세부 명령으로 바꿔서 디스크에 전달
    • CPU가 모든 종류의 장치를 직접 제어하는 방법을 알 필요 없게 해 줌
      • 더 중요한 작업에 집중할 수 있음

 

3. I/O Handling Methods(입출력 처리 기법)

Polling

  • Loop 안에서 특정 이벤트의 도착 여부를 지속적으로 확인하며 기다리는 방법
    • Loop 때문에 흔히 Programmed I/O(PIO)로 알려진 개념
  • Interrupt Handler를 등록하는 방식과 반대되는 개념
    • 매 순간 이벤트의 발생 여부 확인(Polling) vs 이벤트 요청받을 때만 한 번 확인(Interrupt Handler)
  • Controller나 장치가 매우 빠른 경우에 event 처리 기법으로 적합함
  • 단점
    • 모든 연산이 CPU에 의해 진행: 이벤트 도착 시간이 길 경우, 귀중한 CPU Time을 낭비

DMA(Direct Memory Access)

  • 전송할 데이터가 클 경우, CPU가 Polling Time(PIO) 낭비
    • DMA: 이 문제를 해결하기 위해 CPU를 대신하여 I/O를 수행하는 전용 프로세서
  • 작동 방식
    • CPU가 DMA Controller에게 I/O 요청
    • DMA  Controller는 CPU를 대신하여 I/O Device와 Main memory 사이의 데이터 전송을 직접 수행
  • 장점
    • CPU가 I/O 시간 동안 다른 일을 수행할 수 있음 >> CPU 효율성 증가

DMA - Read
DMA - Write

 

DMA vs Polling

특징 DMA (Direct Memory Access) Polling (폴링)
개념 "전문가에게 일을 맡기는 방식" (CPU가 지시 후 DMA 컨트롤러가 처리) "CPU가 모든 것을 직접 확인하는 방식" (CPU가 계속 상태 확인)
추가 하드웨어 필요 (DMA 컨트롤러) 불필요 (CPU가 직접 확인)
성능/효율성 - CPU가 다른 중요한 일을 할 수 있음
- 동시 처리 (Parallelism)에 좋음
- 대량의 데이터를 빠르게 옮길 때 유용함
- CPU가 계속 주변 장치에 물어보며 기다림
- CPU 자원 소모가 많고 다른 일을 효율적으로 하기 어려움
- 비효율적일 수 있음
예시 스마트폰 카메라로 고해상도 사진을 찍을 때 (픽셀 데이터를 DMA 컨트롤러가 메모리로 직접 전송) 아주 단순하고 느린 장치 (예: 키보드 Polling 처럼 버튼이 눌렸는지 확인하는 간단한 작업 )
장단점 요약 - 장점: 큰 작업에 효율적, CPU 부담 적음
- 단점: 추가 하드웨어 필요 (비용 더 듦)
- 장점: 작은 작업에 간단, 별도 하드웨어 불필요 (비용 덜 듦)
- 단점: CPU 부담 큼, 대량 데이터 전송에 부적합

 

4. I/O Device Access 기법(입출력 접근 방식)

I/O Instruction

  • Controller(I/O 장치의 제어 회로)는 데이터 및 신호 처리를 위해 1개 이상의 Register를 가짐
    • Data, Control Signal을 처리하기 위함
  • CPU는 Controller안에 Register의 Bit Pattern직접 읽고 씀으로써 장치와 통신함
    • 이러한 기능을 수행하기 위해 I/O Instruction이 제공됨
  • ex) Intel CPU의 I/O 명령어(in, out,..)

Memory Mapped I/O

  • Device Register들을 Memory 공간에 Mapping 하여 사용
    • Device Register가 메모리 주소에 매핑되면, 레지스터들이 주소 공간의 일부로 간주되어 사용
    • 이때, 레지스터들이 (2)에서 나왔던 Device Regsisters들임
  • CPU는 일반적인 명령어(mov, and, or,..)를 사용하여 I/O 작업을 수행
  • ex) ARM CPU에는 별도의 I/O 명령어가 없고 주로 Memory Mapped I/O 방식을 사용

I/O Instruction vs Memory Mapped I/O

특징 I/O Instruction Memory Mapped I/O
주소 공간 관리 I/O 장치 레지스터를 위한 별도의 주소 공간 사용 I/O 장치 레지스터를 메모리 주소 공간에 매핑
CPU 접근 방식 특정 I/O 명령어를 사용하여 장치 레지스터에 접근 일반적인 메모리 접근 명령어를 사용하여 장치 레지스터에 접근
사용 명령어 예시 Intel CPU의 in, out 명령어 mov, and, or, xor 등 일반적인 데이터 처리 명령어
데이터 처리 CPU가 컨트롤러의 레지스터 비트 패턴을 직접 읽고 씀 레지스터가 주소 공간의 일부로 취급되어 메모리처럼 다룸

 

Summary

  • 컴퓨터 시스템의 전체적인 구성: 버스(bus)
    • 버스(bus): 컴퓨터 내부의 다양한 하드웨어 구성 요소들(CPU, Memory, I/O 장치 등) 간에 데이터와 제어 신호를 주고받는 통로 역할
  • I/O Events Mechanisms
    • Interrupt: 외부에서 발생하는 비동기적 이벤트 (ex. 키보드, 마우스 같은 HW 장치가 CPU에게 인터럽트)
    • Trap: 소프트웨어에서 발생하는 동기적 이벤트 (ex. 프로그램 실행 중 오류, System Call 등의 특정 상황)
  • I/O Handling Mechanisms(입출력 처리 기법)
    • Polling: CPU의 주기적으로 I/O 장치 상태를 직접 확인하는 방식
    • DMA: CPU의 개입 없이 I/O 장치(DMA Controller)와 메모리가 직접 데이터를 주고받은 방식
  • I/O Device Access 기법(입출력 접근 방식)
    • I/O Instruction: CPU가 별도의 입출력 명령어로 장치 접근
    • Memory Mapped I/O: 입출력 장치를 메모리 주소 공간처럼 취급하여 접근 (일반 명령어(load/store)로 접근 가능)