SYSTEMCALL

Category
아이템: 
포스트 갯수3

[리눅스커널][시스템콜] SYSCALL_DEFINEx 매크로로 시스템콜 핸들러 선언

By Guillermo Austin Kim | 2019년 2월 21일 | 
시스템 콜 관련 리눅스 커널 코드를 분석하려고 할 때 만나는 걸림돌은 어느 소스 코드를 봐야할 지 모르겠다는 것입니다. 시스템콜 핸들러 함수는 구현부를 찾기 어렵습니다. 한 가지 예를 들어 봅시다.리눅스 저수준 함수인 write() 와 read() 함수에 대한 시스템 콜 핸들러 함수는 sys_read()와 sys_read() 라고 합니다. 아무리 소스 코드에서 sys_read()와 sys_read() 함수를 검색해도 코드 위치를 찾기 어렵습니다. 그 이유는 시스템 콜 핸들러 함수는 리눅스 커널에서 제공하는 SYSCALL_DEFINE1과 같은 매크로 함수로 선언되어 있기 때문입니다. 시스템 콜 핸들러는 처리하는 인자 갯수에 따라 다음과 같이 선언합니다.SYSCALL_DEFINEx(시스템콜 번호, 1번째

[라즈베리파이] 시스템 콜 - 전체 흐름도 소개

By Guillermo Austin Kim | 2018년 11월 6일 | 
이전에 소개한 시스템 콜 흐름도와 시스템 콜 동작은 그리 간단하지 않습니다. 시스템 콜 세부 동작을 알려면 다음 시스템 전체 흐름도를 이해해야 합니다. 다음 그림은 이번에 다룰 전체 시스템 콜 흐름도입니다. open(), write() 그리고 read() 함수는 파일을 열고 읽어서 쓰는 파일 입출력 동작이고, fork()와 exit() 함수는 프로세스 생성과 종료와 연관된 동작을 실행합니다. 이를 리눅스 저수준 함수라고 부릅니다. 다른 관점으로 GNU C 라이브러리로 진입하는 함수이며 이를 API(Application Programming Interface) 라고 부릅니다. 리눅스 시스템에서는 390여 개의 표준 함수들이 있는데 위 그림에서 대표적인 함수 5개를 표현한 것입니다. 라즈베리파이에서 다음

[라즈베리파이] 시스템 콜 소개

By Guillermo Austin Kim | 2018년 11월 5일 | 
리눅스에서는 실행 공간을 메모리 접근과 실행 권한에 따라 유저 공간과 커널 공간으로 분류합니다. 먼저 커널 공간이 무엇인지 알아봅시다. 커널 코드가 실행할 때는 모든 커널 함수 호출이 가능하며 제약 없이 메모리 공간에 접근해서 하드웨어를 제어할 수 있습니다. 이런 시스템 상태와 메모리 접근을 커널 공간이라고 부릅니다. 다음은 유저 공간을 소개하겠습니다. 유저 어플리케이션 코드가 구동하는 동작과 상태를 유저 공간이라고 합니다. 유저 어플리케이션은 유저 공간에서 실행하며 메모리 공간 접근에 제한이 있고 하드웨어에 직접 접근할 수 없습니다. 유저 어플리케이션에서 권한이 없는 메모리 공간에 접근하면 커널은 오류를 감지해서 해당 프로세스를 종료시킵니다. 시스템 콜은 누가 언제 실행할까요?시스템