Linux Kernel(4.14) Hacks

rousalome.egloos.com

포토로그 Kernel Crash




[라즈베리파이] 시스템 콜 - ARM 프로세서 관점 시스템 콜 처리 [라즈베리파이] 시스템 콜

리눅스 시스템에서 시스템 콜을 어떻게 구현했는지 코드를 따라가면 어셈블리 코드를 만나게 됩니다.
보통 어셈블리 코드는 ARM 프로세서 입장에서 실행하는 동작을 구현하는 경우가 많습니다. 어셈블리 코드로 구현되어 있다는 것은 시스템 콜이 아키텍처(ARM, x86) 동작과 연관이 있다는 의미입니다.
 
라즈베리파이는 ARM 아키텍처에서 구동하므로 ARM(Aarch32, ARM 32비트) 프로세서 기준으로 시스템콜이 어떻게 동작하는지 알아봅시다.

ARM 프로세서 입장에서 시스템콜 동작을 더 자세히 알아보려면 ARM 프로세스 모드에 대해 살펴볼 필요가 있습니다. ARM 프로세서는 Supervisor, FIQ, IRQ, ABORT, UNDEF, USER, 6가지 모드를 지원하며 각 모드 별 레지스터 세트를 저장하고 있습니다. 

ARM 기반 리눅스 커널에서 리눅스 커널은 Supervisor 모드, 유저 어플리케이션은 USER 모드에서 실행합니다. 리눅스 커널에서 보통 커널 모드는 ARM의 Supervisor 모드, 유저 모드는 ARM의 USER 모드에 대응합니다.

ARM 프로세서에서 시스템콜에 대한 익셉션으로 소프트웨어 인터럽트로 정의했으며, 소프트웨어 인터럽트가 발생하면 다른 익셉션들과 마찬가지로 이미 정해진 주소인 vector_swi 레이블로 브랜치합니다.

ARM 프로세서에서 각 모드를 전환하려면 익셉션을 발생시켜야 합니다.
리눅스 커널의 유저 모드에서 커널 모드로 진입하려면 ARM 프로세서 기준으로 USER 모드에서 Supervisor 모드로 실행 모드 변환을 해야 합니다. 이를 위해 익셉션을 유발해야 하며 USER 모드에서 Supervisor(커널) 모드 진입을 위해 다음 Supervisor Call이란 어셈블리 명령어를 실행해야 합니다.

ARM 프로세서 관점으로 소프트웨어 인터럽트를 발생하는 Supervisor Call 흐름도는 다음과 같습니다.
 
ARM 아키텍처 관점으로 시스템 콜은 소프트웨어 인터럽트로 처리하며 익셉션의 한 종류로 간주합니다. ARM 프로세서에서 익셉션이 발생하면 이미 정해놓은 주소로 ARM 프로그램 카운터를 브랜치하고 정해진 동작을 합니다. 대표적인 익셉션으로 인터럽트를 예로 들 수 있습니다. 소프트웨어 인터럽트가 발생하면 다른 익셉션들과 마찬가지로 이미 정해진 주소인 vector_swi 레이블로 브랜치합니다.

ARM 프로세서에서는 소프트웨어 인터럽트를 다음 2번째 줄과 같은 명령어로 실행합니다.
1 0x76f01170 <__libc_fork+276>    mov    r7, #120        ; 0x78
2 0x76f01174 <__libc_fork+280>    svc    0x00000000

각 아키텍처별로 커널 모드에서 유저 모드로 변환시키는 방식이 다릅니다.

ARM 프로세스 입장에서는 Supervisor Call 을 실행하면 모드 전환만 신경을 쓰지 이 동작이 시스템 콜로 어떤 동작을 하는지 모릅니다.
수많은 운영체제들이 ARM 프로세서를 CPU로 쓰고 있습니다. 리눅스는 ARM 프로세서에서 탑재되는 수많은 운영체제 중 하나일 뿐입니다.

ARM 프로세서 기반으로 구동하는 리눅스 커널은 Supervisor Call로 소프트웨어 인터럽트 발생 전 시스템 테이블 번호를 다음 그림과 같이 r7 레지스터에 저장합니다.
        
USER 모드에서 ARM r7 레지스터에 POSIX 규약에서 정의한 시스템 콜 번호를 지정하고 Supervisor Call로 Supervisor 모드로 전환합니다. Supervisor 모드는 커널 코드가 실행하는 커널 공간임을 기억합시다. Supervisor(커널) 모드에서 vector_swi 레이블을 실행할 때 USER 모드에서 저장한 r7 레지스터를 읽습니다. 시스템 콜 테이블인 sys_call_table 변수 주소에 접근하여 r7에 저장된 시스템 콜 번호에 따라 시스템 콜 핸들러로 분기합니다.

#Reference 시스템 콜


Reference(워크큐)
워크큐(Workqueue) Overview

.

핑백

덧글

댓글 입력 영역