반응형

시스템 호출 핸들러

 

사용자 공간의 애플리케이션은 직접 커널 코드를 호출할 수 없다

대신 사용자 공간 애플리케이션은 어떻게든 실행하고 싶은 시스템 호출이 있다는 것을 커널에 알려서 시스템을 커널모드로 전환해야 애플리케이션을 대신해 커널공간에서 시스템 호출을 실행할 수 있다.

 

커널에 신호를 보내는 방법으로 소프트웽어 인터럽트라는 방법을 사용한다

→ 예외(exception)가 발생하면 시스템은 커널 모드로 전환 되고 예외 처리기 (exception handler)가 실행된다. 소프트웨어 인터럽트의  경우 시스템 호출 핸들러가 예외 처리기가 된다

 

시스템 호출 핸들러는 그 역할에 걸맞은 이름을 가진 system_call() 한수로 구현되어 있으며 아키텍처별로 따로 구현이되고 x86-64는 entry_64.S 파일에 어셈블리어로 구현되어 있다. 시스템 호출 핸들러가 어떤 방식으로 호출되든, 중요한 사실은 사용자 공간에서 커널로 진입하려면 어떤 방법으로든 예외를 방생 시켜야 한다.

 

매개변수 전달

 

대부분의 시스콜은 시스템 호출 번호와 함께 하나 이상의 매개변수(Parameter)가 필요하다. 어떻게 해서든 예외 발생과정에서 매개변수를 사용자 공간에서 커널로 전달 해야 한다. 가장 쉬운 방법은 시스콜 번호를 전달 하는 것과 같은 방법으로 매개변수를 레지스터에 저장하는 것이다

총 5개의 매게변수를 레지스터에 저장가능하며 여섯개 이상의 인자를 사용하는 경우에는 모든 매개변수가 저장된 사용자 공간의 주소를 가르키는 포인터 값을 하나의 레지스터에 저장한다.

 

 

 

 

반응형

+ Recent posts