[Linux/C] 시스템 콜
시스템 콜
커널에서 제공하는 저수준의 API를 사용하는걸 시스템 콜이라고 하는데, 이 호출이 어떤 식으로 이뤄지는지 생각해본적이 있는가?
시스템 콜은 커널의 코드를 실행하겠다는 뜻인데, 사용자 영역의 앱이 직접적으로 커널의 코드를 실행할 수 있을까? 물론 그럴 수 없다.
그럼 어떻게 ?
사용자 영역의 앱이 시스템 콜을 사용하려한다는 시그널을 커널로 보낼 수 있다.
( 아키텍처마다 약간씩 메커니즘이 다를 수는 있는데 기본 원리는 같음 )
i386 아키텍처에서는 인터럽트 명령에 0x80 값을 넣어 주면 시스템 콜을 사용한다는 뜻.
MOV EAX, 5
INT 0x80
위에서 인터럽트 명령 전에 EAX 레지스터에 5를 담았는데, 5는 open() 시스템 콜을 의미한다.
( 각각의 시스템 콜마다 정해진 숫자값이 있음 )
위에서는 생략했는데, 시스템 콜의 매개변수는 각각 EBX, ECX, EDX, ESI, EDI 레지스터에 담는다.
'Operating System > Linux' 카테고리의 다른 글
[Linux] Ubuntu 18.04 한글 입력기 UIM 설정하기 (3) | 2019.08.31 |
---|---|
[Linux/C] 프로세스 관리 (0) | 2019.06.06 |
[Linux/C] 메모리 맵 파일 (0) | 2019.06.05 |
[Linux/C] 버퍼 입출력 - 표준 입출력 라이브러리 (0) | 2019.06.04 |
[Linux/OS] 가상 파일 시스템 (0) | 2019.06.04 |
댓글
이 글 공유하기
다른 글
-
[Linux] Ubuntu 18.04 한글 입력기 UIM 설정하기
[Linux] Ubuntu 18.04 한글 입력기 UIM 설정하기
2019.08.31 -
[Linux/C] 프로세스 관리
[Linux/C] 프로세스 관리
2019.06.06 -
[Linux/C] 메모리 맵 파일
[Linux/C] 메모리 맵 파일
2019.06.05 -
[Linux/C] 버퍼 입출력 - 표준 입출력 라이브러리
[Linux/C] 버퍼 입출력 - 표준 입출력 라이브러리
2019.06.04