[OS-1] 운영체제 개념과 I/O 관리

박세호·2025년 3월 9일
0
post-thumbnail

운영체제란?

운영체제(OS, Operating System)는 사용자와 컴퓨터 간의 인터페이스 역할을 하며, 하드웨어를 관리하고 응용 프로그램이 실행될 수 있도록 지원하는 소프트웨어이다.

운영체제의 목표

  1. 컴퓨터 시스템을 효율적이고 안정적으로 운영하기
  2. 사용자에게 편리한 환경을 제공하기

컴퓨터 시스템 구조

  • 하드웨어 (Hardware) CPU, 메모리, 디스크, I/O 장치 등 컴퓨터를 구성하는 물리적 장치
  • 운영체제 (Operating System) 하드웨어를 관리하고 프로그램이 실행될 수 있도록 제어
  • 시스템 및 응용 프로그램 (System & Application Programs) 워드 프로세서, 컴파일러, 웹 브라우저 등
  • 사용자 (Users) 사람, 자동화된 시스템, 네트워크 서버 등

운영체제의 정의

  • 자원 할당자 (Resource Allocator)
    • CPU, 메모리, 디스크, 입출력 장치 등 컴퓨터 자원을 효율적으로 관리하고, 공정하게 분배하는 역할 수행
  • 제어 프로그램 (Control Program)
    • 프로그램 실행을 관리하며, 에러를 방지하고 부적절한 사용을 제어
  • 커널 (Kernel)과 운영체제
  • 운영체제 전체를 가리킬 수도 있지만, 핵심 기능을 담당하는 커널(Kernel) 만을 의미할 수도 있음
  • 컴퓨터가 실행할 때 도는 것이 커널이다. 커널은 핵심이 되는 객체라고 볼 수 있다.
  • 커널은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 인터페이스를 제공하며 프로세스 관리, 메모리 관리, 파일 시스템 등을 담당

Computer Startup

파워 버튼을 눌렀을 때 부팅 과정이 시작됨

  • 펌웨어 (Firmware): 하드웨어에 내장된 저수준 소프트웨어 전원이 공급되면 부트스트랩 프로그램이 실행됨 하드웨어를 초기화하고 커널을 메모리에 로드

Computer System organization

  1. 공통 버스 구조 (Common Bus Architecture) [Shared Bus]
  • CPU, 메모리, I/O 장치 등이 공유된 버스를 통해 데이터를 주고받음
  • 일반적으로 하나의 메모리를 공유
  1. 주소 지정 방식
  • 각 데이터(워드) 단위로 주소가 할당됨
  • CPU는 주소값을 통해 메모리에 접근
  1. 입출력 장치 (I/O Devices)와 디스크 컨트롤러
  • 디스크 컨트롤러는 하드디스크(HDD, SSD)와 CPU 간 데이터 전송을 담당
  • CPU는 I/O 장치와의 데이터 교환을 위해 인터럽트 사용
  • 인터럽트란 실행 중인 작업을 멈추고, 더 중요한 작업을 우선 처리하도록 하는 신호

인터럽트 동작 방식

  • 인터럽트가 발생하면, 인터럽트 벡터를 통해 해당 인터럽트에 맞는 서비스 루틴(ISR)으로 제어가 이동한다. 인터럽트 벡터에는 모든 인터럽트 서비스 루틴의 주소가 저장되어 있음.
  • 인터럽트 아키텍처는 인터럽트가 발생한 시점의 명령어 주소를 저장해야 한다. 이를 통해 인터럽트 처리가 끝난 후 원래 실행하던 프로그램으로 돌아갈 수 있음.
  • 인터럽트가 처리되는 동안 새로운 인터럽트가 들어오는 것을 막기 위해, 현재 인터럽트를 처리하는 동안 다른 인터럽트를 비활성화한다. 이를 통해 “인터럽트 손실(lost interrupt)“을 방지할 수 있음.
  • 트랩(Trap)은 소프트웨어가 발생시키는 인터럽트로, 오류 발생이나 사용자 요청으로 인해 생성된다. 예시: 0으로 나누기 오류, 시스템 호출(syscall)
  • 운영체제는 인터럽트 기반으로 동작한다. 시스템은 인터럽트가 발생할 때마다 적절한 처리를 수행하면서 운영됨.

인터럽트 핸들링

  • 운영체제는 CPU의 상태를 보존해야 한다. 인터럽트가 발생하면, 현재 CPU의 레지스터 값과 프로그램 카운터(PC)를 저장하여 이후 원래 작업으로 복귀할 수 있도록 한다.
  • 운영체제는 어떤 종류의 인터럽트가 발생했는지 판별해야 한다. 이를 위해 두 가지 방법이 존재함.
    1. Polling(폴링)

      CPU가 여러 인터럽트 소스를 차례로 확인하여 어떤 인터럽트가 발생했는지 판단. 여러 장치를 반복적으로 확인.

    2. Vectored Interrupt System(벡터 인터럽트 시스템)

      인터럽트가 발생하면 인터럽트 벡터를 통해 해당 인터럽트 처리 루틴(ISR)으로 직접 이동. 조금 더 더 빠르고 효율적임.

  • 각 인터럽트 유형에 따라 적절한 처리 루틴(Interrupt Service Routine, ISR)이 실행된다. 인터럽트의 종류에 따라 별도의 코드 세그먼트(ISR)가 실행되어 적절한 조치를 수행한다.
    • 키보드 입력 → 키보드 인터럽트 핸들러 실행
    • 하드웨어 오류 → 오류 처리 인터럽트 실행
    • 시스템 호출 → OS에서 해당 요청을 처리

인터럽트 타임라인

  • I/O 요청 (I/O Request) CPU는 사용자 프로세스를 실행하다가 I/O 요청을 보냄. 이때, I/O 장치는 작업을 수행하기 시작하고 transferring(데이터 전송 중) 상태가 됨. CPU는 I/O 작업을 기다리지 않고 다른 사용자 프로세스를 실행할 수 있음.
  • 데이터 전송 완료 (Transfer Done) I/O 장치가 작업을 완료하면, CPU에게 인터럽트를 발생시킴. CPU는 현재 실행 중인 사용자 프로세스를 잠시 멈추고, 인터럽트 처리 루틴(ISR)을 실행하여 I/O 완료를 처리함.
  • 인터럽트 처리 (I/O Interrupt Processing) CPU는 인터럽트 핸들러를 실행하여 I/O 완료를 확인하고 필요한 후속 작업을 수행함. 인터럽트 처리가 끝나면 다시 원래 실행하던 사용자 프로세스로 복귀.
  • 새로운 I/O 요청 반복 이후 또 다른 I/O 요청이 발생하면, 같은 과정이 반복됨. CPU는 사용자 프로세스를 실행하다가, I/O 요청을 보내고, I/O 작업이 완료되면 인터럽트 핸들링을 수행하는 방식으로 동작함.

I/O 구조

운영체제에서 I/O(입출력) 처리 방식에는 동기식(Synchronous) I/O와 비동기식(Asynchronous) I/O가 있다.

  • 동기식 I/O (Synchronous I/O) I/O 작업이 끝날 때까지 CPU가 대기하는 방식. I/O 작업이 시작된 후, 완료될 때까지 제어가 사용자 프로그램으로 돌아오지 않음 Wait 명령어가 CPU를 대기 상태로 만듦 (CPU가 놀고 있음) Wait loop 방식 → CPU가 반복해서 메모리에 접근하면서 I/O 완료 여부를 확인함 (비효율적) 동시에 여러 개의 I/O 요청을 처리할 수 없음 (하나의 I/O 작업이 끝나야 다음 I/O 요청 가능)
  • 비동기식 I/O (Asynchronous I/O) I/O 작업이 끝나지 않아도, 사용자 프로그램이 계속 실행됨. CPU가 다른 작업을 수행할 수 있으므로 효율적 시스템 콜(System Call)을 통해 운영체제에 I/O 요청을 보냄 장치 상태 테이블(Device-Status Table) 사용 각 I/O 장치의 타입, 주소, 현재 상태 정보를 저장 운영체제는 I/O 장치 테이블을 조회하여 I/O 상태를 확인하고, 완료되면 CPU에 알림

Device-Status Table

Device-Status Table (장치 상태 테이블) 운영체제는 각 I/O 장치의 상태를 저장하는 테이블을 관리함

운영체제는 이 테이블을 참조하여 I/O 장치가 어떤 상태인지 확인하고 적절한 처리를 수행함

Direct Memory Access Structure (직접 메모리 접근)

고속 I/O 장치를 위한 메커니즘

CPU 개입 없이, 장치 컨트롤러가 데이터를 메모리로 직접 전송

보통 메모리 속도에 가까운 속도로 데이터 전송 가능

DMA의 장점

  • CPU가 I/O 작업에 직접 개입하지 않아도 됨 → CPU가 다른 작업을 수행할 수 있음
  • 기존 I/O 방식은 1바이트 전송마다 인터럽트가 발생하지만, DMA는 한 블록(Block) 단위로 전송 후 한 번만 인터럽트 발생 → 인터럽트 오버헤드 감소

DMA 데이터 전송 과정

  1. CPU가 DMA 컨트롤러에게 데이터 전송 요청
  2. DMA 컨트롤러가 데이터를 메모리로 직접 전송
  3. 전송 완료 후, CPU에게 인터럽트 발생
  • CPU 개입 없이 고속 데이터 전송 가능

0개의 댓글