유저모드, 커널모드, 인터럽트, 시스템 콜

지식저장공간·2023년 2월 25일
0

운영체제

목록 보기
11/15

프로그램 실행 중에, 만약 컴퓨터 시스템 자체에 문제가 생겼거나 혹은 이전에 시스템에 요청한 작업이 완료가 됐으면 운영체제로 부터 알람을 받습니다.
또는, 컴퓨터 시스템에 치명적일 수 있는 동작(operation)들은 프로그램 레벨에서 바로 실행할 수 없고 반드시 OS가 제공하는 인터페이스를 통해 OS에게 대리로 수행해 달라고 요청을 해야 합니다.

출처 : 쉬운코드 유튜브

유저모드, 커널모드, 인터럽트, 시스템 콜

유저모드(User mode)

우리가 개발하는 프로그램은 일반적으로 유저 모드에서 실행된다.

프로그램 실행 중 인터럽트가 발생하거나 시스템 콜을 호출하게 되면 커널 모드로 전환된다.

커널모드(Kernel mode)

커널

커널모드 정의

프로그램의 현재 CPU 상태를 저장한다.
커널이 인터럽트나 시스템 콜을 직접처리 즉, CPU에서 커널 코드가 실행된다.
처리가 완료되면 중단됐던 프로그램의 CPU 상태를 복원 -> 유저 모드 (다시 통제권을 프로그램에게 반환) -> 프로그램이 이어서 진행

커널모드가 존재하는 이유

시스템을 보호하기 위해 -> 우리가 사용하는 프로그램이 시스템이나 하드웨어에 간섭 또는 악영향을 미칠 가능성이 존재한다.

인터럽트(Interrupt)

인터럽트 종류

인터럽트가 발생하면 CPU에서는 즉각적으로 인터럽트 처리를 위해 커널 코드를 커널 모드에서 실행한다.

시스템 콜(System call)

시스템콜 종류

시스템 콜이 발생하면 해당 커널 코드가 커널 모드에서 실행된다.

예제

OS

  1. t1이 실행 중 I/O 작업을 위해 시스템 콜 후 커널 모드로 들어가고 커널모드에는 t1의 CPU 상태가 저장된다. t1은 파일을 읽을 준비 하고 waiting 상태로 들어가고 t2를 동작시킨다.
  2. 유저모드로 돌아가고 대기 중이던 t2는 running 모드로 들어간다.

  1. t2가 실행 중 파일을 읽던 t1의 작업이 끝나면 interrupt가 발생하고, 커널모드로 들어가 t2의 CPU 상태를 저장하고, t1을 running 시키기 위해 ready 상태로 변환한다.

  1. 다시 유저모드로 돌아와 저장한 t2 CPU 정보로 t2를 이어서 진행하고, t2의 time slice를 다 사용한 후 interrupt가 발생해 커널모드로 t2 CPU상태 저장 후 t2는 ready, t1은 저장된 CPU 정보를 불러온 후 running

프로그래밍 언어와 시스템 콜

Thread thread = new Thread();
thread.start();

native가 명명되면 대부분 운영체제를 뜻한다. JNI(Java Native Interface)를 통해 기반이 되는 OS의 System call을 호출 한다.

profile
발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

0개의 댓글