Operation System

[운영체제] System call, IDT는 무엇인가

ellapk 2021. 9. 22. 15:28

System call이란?

software interrupt의 일종으로 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

 

운영체제는 커널모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동된다.

여기서 프로그램 구동에서의 많은 부분을 차지하는 파일 읽기, 쓰기, 출력 등이 커널 모드를 사용하는데,

System call을 통해서 커널모드의 기능을 유저가 사용할 수 있게끔 한다.

 

System call -> kernal 모드 전환 -> 작업 수행 권한 부여 받음 -> 작업 수행

권한을 부여받지 않으면 해커들의 직접 접근이 가능해지므로 권한 부여 과정은 필수적이다.

 

위 그림과 같이 명령은 사용자가 직접 처리하는 것이 아니라 권한받은 커널 내부에서 처리한다.

 

 

 

System call이 allow하는 function

- 파일 시스템에 접근

- process 생성 및 파괴

- 다른 process와의 communicate

- 더 많은 메모리 할당

- ...

 

 

 

 

Interrupt descriptor table(IDT)

대기중인 OS 상태에서 System call이 발생하면 거기에 상응하는 interrupt 명령을 OS가 수행한다.

 

 

IDT구조는 다음과 같이 생겼으며, 이는 부팅할 때부터 OS에 코딩되어진 상태이다.

 

 

IDT사용은 아래와 같다.

void
syscall_init(void){
intr_register_int(0x30, INTR_ON, syscall_handeler, "syscal");
}

여기서 등장하는 x30은 interrupt number인데 IDT에 있는 명령 중 30번을 가르키는 system_handelr 명령을 수행하기 위해

작성한 것이라고 이해할 수 있다.

 

 

 

 

Trap instruction

user mode/kernel mode의 경계를 나눠놓고 trap instruction을 통해 명령을 수행한다.

즉, os가 process하던 도중 sw interrupt인 system call이 발생하면 trap에 빠져서 진행하던 process가 아닌 system call 명령을 수행하게 되는 것임.

trap instruction을 이해하기 위한 과정은 다음과 같다.

 

1. kernel 모드로 진입하는 것을 요청한다.

2. 현재 사용중인 변수와 같은 register를 stack에 저장해두고

3. kernel의 어떤 function으로 넘어가야 하는지 알아낸 다음

4. destination으로 이동

5. 해당되는 interrupt system call number(idt)를 실행시킨다.

 

Return-from-trap instruction 을 통해서 user program으로 return 할 수 있다.