[운영체제] 시스템 콜 & 인터럽트

2025. 4. 15. 23:36·⚙️ CS/운영체제
반응형

✅ 운영체제(Operating System)

: 사용자가 컴퓨터를 편리하게 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어

 

운영체제는 유저 프로그램과 하드웨어 사이에 위치하여 프로그램이 실행될 수 있는 환경을 제공한다.

OS의 모습
출처: "Operating System Concepts", Abraham Silberschatz

 

 

대표적인 기능은 다음과 같다.

  • 사용자 인터페이스 제공
    • 그래픽 사용자 인터페이스(GUI): 윈도우 바탕화면처럼 그래픽을 기반으로 컴퓨터와 상호작용하는 인터페이스
    • 커맨드 라인 인터페이스(CLI): 명령어를 기반으로 컴퓨터와 상호작용하는 인터페이스
    • GUI는 없고 CUI만 있는 리눅스 서버도 있다.
  • 프로그램 실행: 시스템은 프로그램을 메모리 적재해 실행할 수 있어야 한다.
  • 입출력 연산: 프로그램이 입출력을 요구하면 운영체제가 이에 대한 수단을 사용자에게 제공해야 한다.
  • 파일 시스템 조작: 프로그램에서 파일을 읽기, 쓰기, 검색 등이 필요할 수 있다.

 


📍 Dual Mode

: 유저모드와 커널모드를 구분하는 운영체제의 보호 메커니즘

 

하드웨어 명령 중 일부는 커널 모드에서만 실행 가능하며, 이를 통해 시스템의 안정성과 보안을 보장한다.

  • 사용자 프로그램이 직접 하드웨어 제어 또는 다른 프로세스 메모리 접근을 하지 못하게 방지
  • 시스템 콜, 인터럽트 등 중요한 명령은 커널만 수행 가능

✅ 시스템 콜 (System Call)

: 사용자 프로그램이 운영체제의 기능을 요청하는 인터페이스

 

앞서 말했듯이 사용자 프로그램은 직접 하드웨어 제거가 불가능하다.

따라서 시스템 콜이 유저 모드 → 커널 모드 전환을 통해 OS 기능(파일 조작, 프로세스 제어 등)을 사용할 수 있게 해 준다.

 


📍 주요 예시

  • 파일 조작: `open()`, `read()`, `write()` 
  • 프로세스 제어: `fork()`, `exec()`, `wait()`, `exit()`
  • 통신: `pipe()`, `socket()`

📍 실행 과정

: 유저 모드에서 커널 모드로 전환되어 실행

 

  1. 사용자 모드에서 사용자 프로그램이 시스템 콜을 호출
  2. 트랩(trap) 명령을 통해 커널모드로 진입
  3. 커널이 해당 시스템 콜 번호에 맞는 서비스 처리
  4. 다시 유저 모드로 복귀하여 결과 반환

 

[ 서로 다른 시스템 콜을 어떻게 구분할 수 있을까요? ]

시스템 콜마다 고유한 번호(시스템 콜 번호)가 있기 때문에 구분 가능하다.

✅ 인터럽트 (Interrupt)

: 현재 실행 중인 작업을 잠시 멈추고, 긴급한 이벤트를 우선 처리하기 위한 메커니즘

 

예를 들어 키보드 입력, I/O 완료 등의 이벤트가 발생하면 CPU는 해당 인터럽트를 처리한다.

 

📍 처리 방식

  1. 기존의 작업을 처리하던 도중 인터럽트 발생
  2. 현재 컴퓨터가 처리하는 일을 중지하고 현재 상태(CPU 내부 레지스터, 메인 메모리 내용 등)를 저장
  3. 해당 인터럽트를 처리해 주기 위한 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine) 처리
  4. 인터럽트 처리 이후 저장되었던 이전 작업의 상태 복구
  5. 이전 작업 수행 재개

 


📍 Polling 방식 (vs. Interrupt)

: CPU가 주기적으로 장치를 확인(Poll)하여 장치가 준비되었는지 검사하는 방식

 

Interrupt와 Polling 모두 CPU가 다른 프로세스를 실행하는 동안 디바이스로부터 발생하는 이벤트들을 처리하는 방법이다.

 

Polling 방식은 CPU가 입출력 이벤트를 만나면 직접 입출력 장치에서 데이터를 가져오는 방식이다.

따라서, CPU 자원을 낭비하고 비효율적이라는 단점이 있어 오늘날에는 잘 사용하지 않는다.

 

그래도 구현이 간단하다는 장점이 있다.


📍 HW 인터럽트 vs. SW 인터럽트

  • 하드웨어 인터럽트
    • 하드웨어가 발생시키는 인터럽트
    • 하드웨어 장치가 CPU에게 이 사실을 알려준다.
    • 키보드 입력, 디스크 완료 등
  • 소프트웨어 인터럽트 (= 트랩)
    • 소프트웨어가 발생시키는 인터럽트
    • 소프트웨어가 스스로 CPU 내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다.
    • 시스템 콜, 예외(divede by zero, 프로세스 오류 등)

📍 다중 인터럽트

ISR 실행 도중, 또 다른 인터럽트가 발생하는 경우를 다중 인터럽트라고 한다.

다중 인터럽트는 우선순위 기반으로 처리한다. 운영체제와 하드웨어는 인터럽트에 우선순위를 기본적으로 부여한다.

 

  • Non-Maskable Interrupt: 무조건 처리해야 하는 인터럽트(무시할 수 없음) ex. 메모리 오류
  • Maskable Interrupt: 그 외 무시 가능한 일반 인터럽트 ex. I/O 요청

 

다중 인터럽트는 다음 두 가지 상황이 있다고 볼 수 있다.

1️⃣ 현재 처리 중인 것이 Non-Maskable Interrupt

  • 현재 실행 중인 ISR을 중단할 수 없는 경우이므로 새로운 인터럽트 요구를 무시한다. 

2️⃣ 현재 처리 중인 것이 Maskable Interrupt

  • 인터럽트의 우선순위에 따라 실행한다.
  • 새로운 인터럽트의 우선순위가 더 높으면 현재 ISR을 중단하고 새로운 ISR로 전환한다
  • 반대로, 새 인터럽트의 우선순위가 낮으면 대기시킨다.
반응형

'⚙️ CS > 운영체제' 카테고리의 다른 글

[운영체제] 동기화  (0) 2025.04.29
[운영체제] 스케줄링  (0) 2025.04.28
[운영체제] 스레드  (1) 2025.04.16
[운영체제] 프로세스  (1) 2025.04.16
'⚙️ CS/운영체제' 카테고리의 다른 글
  • [운영체제] 동기화
  • [운영체제] 스케줄링
  • [운영체제] 스레드
  • [운영체제] 프로세스
dev-heyjin
dev-heyjin
  • dev-heyjin
    개발 기록
    dev-heyjin
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • 🎯 Programming (8)
      • 💪 Algorithm (16)
      • ⚙️ CS (31)
        • 네트워크 (15)
        • 운영체제 (15)
        • 데이터베이스 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    해킹
    RDS
    데이터베이스
    DB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev-heyjin
[운영체제] 시스템 콜 & 인터럽트
상단으로

티스토리툴바