새소식

xub2의 개발 새발 🐾
🔬 CS/OS

하드웨어 수행 과정

2026. 7. 18. 20:59

  • -


OS에 대해 오랜만에 다시 공부하면서 정리하려고 한다.


1. 운영체제란 무엇인가

운영체제는 시스템의 자원과 동작을 관리하는 소프트웨어이고, OS가 관리하는 대상은 크게 4가지이다.

  • CPU
  • 메모리
  • 디스크
  • 입출력 장치

여기서 중요한 포인트는, 이 자원들이 전부 Limit이 있다는 것이다. CPU도, 메모리도, 디스크도 무한하지 않다.

그래서 이 한정된 자원을 여러 프로그램(프로세스)에게 효율적으로 배분해주는 역할이 필요한데, 그게 바로 운영체제다.


2. 한번 짚고 가는 각 자원의 역할

CPU (중앙 처리 장치)

  • 프로그램의 연산과 처리를 담당하는 핵심 부품
  • 운영체제는 이 CPU를 각 프로세스에게 어떤 순서로, 얼마나 할당할지 스케줄링한다
  • 목적은 CPU의 낭비 시간을 최소화하는 것

메모리

  • CPU가 처리할 프로그램의 코드/데이터가 임시로 저장되는 공간
  • 휘발성 → 컴퓨터가 꺼지면 날아감
  • 공간이 한정되어 있어서, 운영체제가 효율적으로 관리해야 여러 프로세스를 원활하게 돌릴 수 있음

디스크

  • 메모리와 마찬가지로 프로그램 정보를 저장하지만, 비휘발성이라 꺼져도 데이터가 남음
  • 대신 접근 속도가 메모리보다 훨씬 느려서, 운영체제는 디스크 접근을 최소화하는 알고리즘을 씀 (Random I/O 관련)

입출력 장치

  • 디스크, 키보드, 모니터 등
  • 입출력 연산은 CPU가 직접 처리하지 않는다. 입출력 모듈이라는 별도 장치가 있고, 이 모듈이 CPU에게 명령을 받으면 그때 입출력을 실행한다

3. CPU 연산 vs I/O 연산 — 속도 차이가 핵심

구분 역할 속도
CPU 연산 데이터 처리/계산 초당 수십억 번
I/O 연산 데이터 입출력 (파일 저장, 화면 출력 등) CPU보다 수천 배 느릴 수 있음

이 속도 차이 때문에 운영체제가 CPU를 쉬게 하지않고 다른 작업에 쓰도록 스케줄링하는 게 중요해진다.

아래에서 나오는 동기식/비동기식 I/O 개념이 여기서 이어진다.


4. 인터럽트(Interrupt)

말 그대로 "방해하다"라는 뜻처럼, CPU가 현재 하던 작업을 잠깐 멈추고 더 중요한 이벤트를 처리한 뒤, 원래 하던 작업으로 복귀하는 것.

  • 인터럽트 라인: CPU와 주변 장치가 신호를 주고받는 경로. 주변 장치가 이 라인을 통해 CPU에게 인터럽트 신호를 보낸다.

5. 사용자 모드 vs 커널 모드

이 부분이 오늘 정리하면서 가장 헷갈렸다.

사용자 모드

  • 일반 프로그램(웹 브라우저, 게임 등)이 실행되는 모드
  • 제한된 권한만 있어서 시스템 자원에 직접 접근하지 못함
  • 여기서 오류가 나도 운영체제 전체엔 영향 없음

 

커널 모드

  • 운영체제가 실행되는 모드
  • 모든 시스템 자원에 접근 가능한 높은 권한
  • 메모리 관리, 장치 제어 같은 중요한 작업 수행
  • 커널 = 운영체제의 핵심 부분

 

즉 운영체제도 결국 하나의 "프로그램"처럼 메모리에 올라가 있는데(웹 브라우저, 게임처럼 프로그램 A/B와 나란히), 다만 실행 모드(권한)가 다르다는 게 포인트다.

 

시스템 콜(System Call)

  • 커널 모드에서만 실행 가능한 보안이 필요한 명령을 특권 명령이라 부른다
  • 일반 프로그램이 이 특권 명령을 실행하려면, 운영체제에게 "대신 해줘"라고 요청해야 하는데 이게 시스템 콜
  • 즉, 프로그램이 자기 주소 공간의 함수가 아니라 커널의 함수를 호출하는 것


6. CPU 제어권 & 동기식/비동기식 I/O

CPU 제어권이란 CPU가 지금 뭘 실행할지 결정하고 처리하는 권한.

운영체제와 여러 프로그램이 동시에 도는 환경에서, 누가 CPU를 쓸지 정하는 핵심 개념이다.

  • 동기식 입출력: 입출력 결과를 기다리는 동안 다음 명령을 수행하지 않고 그냥 기다림 → CPU 낭비를 막기 위해 이 시간 동안 CPU 제어권을 다른 프로세스에게 넘긴다
  • 비동기식 입출력: 입출력 명령과 상관없이 바로 다음 명령을 수행 → 시스템 콜로 OS에게 입출력을 부탁만 하고, 곧바로 CPU 제어권을 다시 얻어 다음 명령 수행 (예: 자바의 join 없는 메인 스레드)

7. 프로그램 실행 전체 흐름 정리

프로그램 A, B가 동시에 도는 상황을 순서대로 따라가 보면:

  1. 프로그램 A 실행
    • 디스크에 있던 프로그램 A 파일이 메모리로 복사됨 (Disk → RAM)
    • CPU는 메모리에 올라온 프로그램 A에 접근해서 명령을 수행
  2. 프로그램 A가 입출력 명령을 지시
    • 프로세스는 입출력 장치에 직접 명령(특권 명령)을 내릴 수 없다
    • 그래서 시스템 콜을 통해 운영체제에게 부탁함
  3. 운영체제가 입출력 명령을 수행
    • CPU가 이걸 인지하고 하던 작업을 멈춘 뒤 커널 모드로 전환
    • CPU 제어권을 운영체제로 넘김
    • 운영체제가 입출력 컨트롤러에게 명령을 내림
    • 입출력은 오래 걸리는 작업이라, CPU는 마냥 기다리지 않고 제어권을 프로그램 B에게 넘겨줌
  4. 입출력 작업 완료 후
    • 입출력 컨트롤러가 CPU에게 인터럽트 발생
    • CPU는 프로그램 B를 잠깐 멈추고 인터럽트를 처리
    • 컨트롤러가 가진 데이터를 프로그램 A에게 전달, CPU 제어권은 다시 B에게 돌아감
    • 이후 차례가 되면 제어권은 A에게 돌아가서 마저 수행됨

이렇게 여러 프로세스 사이에서 CPU를 멈췄다가 다른 작업으로 넘기고, 나중에 다시 이전 상태로 복귀시키는 과정을 Context Switching이라고 부른다. 

 

[OS] 스레드(Thread), 스케줄링(Scheduling), 컨텍스트 스위칭 (Context Switching)

이전 포스팅을 요약해서 복습해보자면, 프로세스란 실행 환경과 자원을 제공하는 컨테이너 역할을 하고, 실제 CPU를 사용하여 코드를 한줄씩 처리하는 것은 스레드이다.CPU 코어가 1개이고 , 프로

bdisappointed.tistory.com


정리

CPU는 "성실한 일꾼"이다. 쉬지 않고 여러 프로그램과 운영체제로부터 명령을 받아 수행하고, 그 와중에 인터럽트까지 처리한다. 운영체제는 이 성실한 일꾼이 절대 놀지 않도록 스케줄링하고 제어권을 배분해주는 관리자 역할.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.