[OS] 입출력 수행과 시스템 콜(System Call), 인터럽트(Interrupt)

Euiyeon Park·2025년 2월 17일

Operating System

목록 보기
3/4
post-thumbnail

✨ 입출력(I/O) 수행

  • 모든 입출력 명령 특권 명령으로 정의되어 있어,
    커널 모드에서 운영체제만 실행 가능하다.
  • 그럼 사용자 프로그램은 어떻게 입출력을 수행할까?

💫 시스템 콜(System Call)

  • 사용자 프로그램(응용 프로그램)은 I/O에 직접 접근할 수 없기에,
    I/O 접근이 필요한 경우 운영체제의 커널 함수를 호출한다.
    • 시스템 콜은 사용자 프로그램이 운영체제가 제공하는 서비스를
      사용하기 위해 운영체제 함수를 호출하는 것이다. -인터럽트 발생
  • 사용자 프로그램은 OS가 상주하는 메모리 주소로 분기가 불가능하다.

시스템 콜의 종류 예시

1. 프로세스 관리

  • fork(), exec(), exit(), wait()

2. 파일 조작

  • open(), read(), write(), close()

💫 I/O 요청 과정

1. 사용자 프로그램이 시스템 콜 실행

  • 사용자 프로그램은 직접 하드웨어 접근❌, 운영체제에게 요청

2. CPU Mode bit 변경과 제어권

  • 시스템 콜을 실행하면 Mode bit를 0(커널 모드)로 변경
  • 제어권을 운영체제에게 넘김

3. I/O 작업 수행

  • trap 명령어를 사용해 인터럽트 벡터의 특정 위치로 이동
    • 인터럽트 벡터는 인터럽트가 발생했을 때,
      해당 인터럽트를 처리할 루틴(ISR)의 주소를 저장한 테이블
  • 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴(ISP) 실행
  • 운영체제는 요청된 I/O가 유효한지 확인 후, 디바이스 컨트롤러에게 전달
  • 디바이스 컨트롤러는 입출력 작업 수행
    • 디바이스 컨트롤러가 입출력 작업을 수행하면 CPU는 다른 작업을 수행
    • CPU는 놀지 않는다!

4. I/O 작업 완료 후, CPU에 인터럽트 발생

  • 디바이스 컨트롤러가 CPU에게 작업 완료 신호 전송 - 하드웨어 인터럽트
  • 운영체제가 인터럽트를 확인하고, 결과를 사용자 프로그램에 반환

5. 제어권이 사용자 프로그램으로 복귀

  • I/O 완료 후, CPU는 사용자 모드로 전환(Mode bit 1)
  • 시스템 콜 다음 명령부터 실행을 계속 함

💫 인터럽트(Interrupt)

  • 인터럽트는 CPU가 실행 중인 작업을 잠시 멈추고,
    더 중요한 작업을 먼저 처리하도록 하는 신호
  • 인터럽트가 발생하면 CPU 제어권은 운영체제에게 넘어가가고,
    운영체제는 해당 인터럽트를 확인한다.

인터럽트 종류

1. 하드웨어 인터럽트(Interrupt)

  • 하드웨어 장치가 발생시키는 인터럽트
  • 키보드 입력, 타이머, I/O 요청 등

2. 소프트웨어 인터럽트(Trap)

  • 프로그램 내부에서 발생하는 인터럽트
    • Exception : 오류 발생 시 실행
    • System Call : 사용자 프로그램이 커널 기능을 요청할 때 실행

💫 인터럽트 처리 과정

1. 인터럽트 발생

  • CPU가 실행 중인 프로그램을 수행하는 도중, 특정 이벤트가 발생하면 인터럽트 발생
  • 인터럽트 컨트롤러(Interrupt Controller)가 인터럽트 신호를 CPU에 전달
  • 💡인터럽트 컨트롤러 : 여러 개의 인터럽트를 관리하고 우선순위를 조정하는 장치

2. 현재 실행 중인 작업 저장(문맥 저장, Context Saving)

  • 현재 실행 중인 프로세스의 프로그램 카운터(PC), 레지스터, 상태 레지스터를 저장
  • 인터럽트 처리가 끝난 후, 원래의 실행 상태로 복귀할 수 있도록 함

3. 인터럽트 벡터 테이블(IVT)에서 핸들러 탐색

  • IVT특정 인터럽트 번호에 해당하는 핸들러의 주소를 저장한 테이블
  • CPU는 IVT를 참조해 적절한 인터럽트 핸들러(ISR)을 탐색
  • 💡인터럽트 서비스 루틴(ISR) : 특정 인터럽트를 처리하는 커널 함수

4. 인터럽트 핸들러 실행

  • IVT를 통해 찾은 ISR을 실행

5. 인터럽트 처리 후 문맥 복원

  • 인터럽트 처리 후, 원래 실행 중이던 프로그램으로 복귀하기 위해
    저장했던 문맥(Context)을 복원해 원래 상태로 되돌림

ref.

https://www.scaler.com/topics/operating-system/system-calls-in-operating-system/

profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글