영상 및 사진 출처 : 🔗 https://www.youtube.com/watch?v=v30ilCpITnY&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&index=10
인터럽트(interrupt)
가 발생하거나 시스템 콜(system call)
을 호출하게 되면 커널 모드로 전환커널
이 인터럽트나 시스템 콜을 직접 처리한다. 즉, CPU에서 커널 코드가 실행됨시스템을 보호하기 위해
커널 모드가 없으면 우리가 만든 프로그램이 마음대로 하드웨어를 다 점유해서 사용하고 다른 프로세스 방해하고 자칫하면 전체 컴퓨터 시스템 붕괴될 수도 있다.
그러니까 시스템 전반적인 부분 즉, 하드웨어적 부분은 커널에서 관리
하고 우리가 만든 프로그램은 커널을 통해 하드웨어 기능 사용할 수 있게 시스템이 안정적으로 돌아갈 수 있게 함
시스템에서 발생한 다양한 종류의
이벤트
혹은 그런 이벤트를 알리는 매커니즘이자 어떤 신호가 들어왔을 때 CPU를 잠깐정지
시키는 것
키보드, 마우스 등 IO 디바이스로 인한 인터럽트, 0으로 숫자를 나누는 산술 연산에서의 인터럽트, 프로세스 오류 등으로 발생하며, 발생 시 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수 실행
그렇다면..
인터럽트 핸들러 함수
란?
인터럽트가 발생했을 때, 이를 핸들링하기 위한 함수. 커널 내부의 IRQ를 통해 호출되며, request_irq( )
를 통해 인터럽트 핸들러 함수 등록 가능
인터럽트가 발생하면 cpu에서는 즉각적으로 인터럽트 처리를 위해 커널 코드를 커널 모드
에서 실행
즉, 커널
이 인터럽트 처리를 위해 cpu에서 주도적으로 실행된다고 보면 된다.
여기서 즉각적이란 인터럽트는 명령어 실행도중 발생했을 텐데 실행중이던 명령어까지는 마무리 하고 커널모드로 전환
🥐 하드웨어 인터럽트
키보드를 연결한다거나 마우스를 연결하는 일 등의 IO 디바이스에 발생하는 인터럽트를 말한다.
🥐 소프트웨어 인터럽트
트랩이라고도 하며, 프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발동한다.
read
라는 시스템 콜 호출시 커널 모드로 전환read
는 block 시스템 이라 파일이 읽을 상태가 될때까지 기다려야 하기 때문에 t1을 wating
상태로 변환해줘야 한다. running
으로 바꿔준다.뭐로 파일을 읽을 준비가 됐다고 알려줄까?
그게 바로 interrupt
, 파일이 준비가 됐다는 인터럽트 발생시킴
ready
상태로 변경해 줘야 한다.timer라는 하드웨어
를 통해 알려주게 됨하드웨어 혹은 시스템 관련 기능은 어떤 프로그램이라도 반드시 시스템 콜을 통해서만 사용 가능하다.
하지만 보통 우리는 개발 시 직접 OS 시스템 콜을 사용한 적은 없었다. 그럼에도 불구하고 우리는 지금까지 파일 I/O, 네트워크 I/O, 프로세스/스레드 작업을 해왔다.
Q. 이게 어떻게 가능했던 것일까?
A. 이것은 우리가 사용하는 프로그래밍 언어들이 시스템 콜을 포장(wrapping)하여 간접적으로 사용할 수 있도록 제공했기 때문이다.
Thread thread = new Thread();
thread.start();
native
가 붙으면 운영체제를 보통 뜻한다.