인터럽트, 시스템 콜

Groot·2022년 10월 20일
0

TIL

목록 보기
86/153
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 인터럽트

  • 인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다.

    <농구에서의 공을 가로채는 동작을 인터셉트라고 하는데 인터럽트도 이와 비슷한 의미를 가진다>


📍 외부 인터럽트

  • 전원 이상 인터럽트(Power fail interrupt): 정전, 파워 이상 등
  • 기계 착오 인터럽트(Machine check interrupt): CPU의 기능적인 오류
  • 외부 인터럽트(External interrupt)
    • 자원이 할당된 시간이 다 끝난 경우
    • 키보드로 인터럽트 키를 누른 경우(대표적으로 Control + Alt + Delete)
    • 외부장치로부터 인터럽트 요청이 있는 경우
  • 입출력 인터럽트(I/O Interrupt)
    - 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
    - 입출력 데이터에 이상이 있는 경우

📍 내부 인터럽트

  • 잘못된 명령이나 잘못된 데이터를 사용할때 발생
  • Trap이라고도 함
  • 프로그램 검사 인터럽트(Program check interrupt)
    - Division by zero
    - Overflow/Underflow
    - 기타 프로그램 Exception

📍 소프트웨어 인터럽트

  • 프로그램 처리 중 명령의 요청에 의해서 발생
  • 대표적인 형태는 프로그램에서 감시 프로그램(SVC) 호출
    - SVC(SuperVisor Call)
    - 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
    - 복잡한 입출력 처리를 하는 경우
    - System Call

📍 인터럽트 과정

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

📍 인터럽트 우선순위

  • 한 개의 CPU인 상황에서 여러 인터럽트가 들어왔을때 처리하는 순서를 인터럽트 우선 순위라 하고 이런 우선 순위는 아래와 같이 중요하고 심각한 인터럽트가 우선적으로 처리되어야 한다.
    1. 전원 공급의 이상
    2. CPU의 기계적인 오류
    3. 외부 신호에 의한 인터럽트
    4. 입출력 전송 요청 및 전송 완료, 전송 오류
    5. 프로그램 검사 인터럽트
    6. 수퍼바이저 호출(SVC 인터럽트)

📍 인터럽트의 우선 순위를 정렬법

🔗 소프트웨어적 방법

  • 폴링
    • CPU가 모든 제어기에 연결된 TEST I/O 선을 이용해 인터럽트를 요청한 장치를 검사하는 방식이다.
    • 즉 INTR(INTerrupt Request)선에 올린 요청 플래그를 차례로 검사해서, 이에 해당하는 인터럽트 서비스 루틴을 수행하는 소프트웨어적인 방식이다. (이방식은 하드웨어를 추가할 필요가 없어 회로가 간단하지만 검사할 때의 CPU 자원이 필요해 반응 시간이 느리다는 단점이 있다.)

🔗 하드웨어적 방법

  • 직렬 연결 방식(데이지 체인)
    • 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
    • 우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치한다.
  • 병렬 연결 방식
    • 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
    • 각 장치별 우선순위를 판별하기 위한 Mask register에 bit를 설정한다.
    • Mask register상 우선순위가 높은 서비스 루틴 수행중 우선순위가 낮은 bit들을 비활성화 시킬 수 있다.
    • 반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리된다.

https://namu.wiki/w/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8
https://itwiki.kr/w/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8#%EC%99%B8%EB%B6%80_%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8


📌 시스템 콜

  • 시스템 호출 은 프로세스와 운영 체제 간의 인터페이스를 제공하는 메커니즘.
  • 컴퓨터 프로그램이 OS의 커널에 서비스를 요청하는 프로그래밍 방식이다.
  • 시스템 호출은 API(응용 프로그래밍 인터페이스)를 통해 사용자 프로그램에 운영 체제의 서비스를 제공한다.
  • 시스템 호출은 커널 시스템의 유일한 진입점이다.

📍 시스템 호출 작동


1. 시스템 호출이 인터럽트할 때까지 사용자 모드에서 실행되는 프로세스.
2. 이후 커널 모드에서 우선적으로 시스템 콜을 수행한다.
3. 시스템 호출 실행이 끝나면 사용자 모드로 제어 이동.
4. 사용자 프로세스의 실행이 커널 모드에서 재개된다.


📍 OS에서 시스템 호출이 필요한 상황

  • 파일에서 읽고 쓰기.
  • 파일 시스템이 파일을 생성하거나 삭제
  • 새로운 프로세스의 생성 및 관리에 사용됩니다.
  • 네트워크 연결에는 패킷을 보내고 받기 위함.
  • 스캐너, 프린터와 같은 하드웨어 장치에 액세스

📍 시스템 콜의 종류

  • 프로세스 생성, 프로세스 종료 등의 작업
  • 파일 관리 시스템 호출은 파일 생성, 읽기 및 쓰기 등과 같은 파일 조작 작업
  • 장치 관리는 장치 버퍼에서 읽기, 장치 버퍼에 쓰기 등과 같은 장치 조작 작업
  • OS와 사용자 프로그램 간의 정보 및 전송
  • 특히 프로세스 간 커뮤니케이션

📍 중요한 시스템 콜

  • wait()
  • fork()
  • exec()
  • kill()
  • exit()

https://www.guru99.com/system-call-operating-system.html#1

profile
I Am Groot

0개의 댓글