User space
와 Kernel space
로 나눠져 있다.Function Call
:
System Call
:
Examples of System Calls
:
getuid(), fork(), exec(), ...
C Standard library Calls
:
Is printf() a system call?
➡️ No.
write()라는 system call이 있고, 그것의 사용을 편리하게 만든 C library function이 printf()이다.
write() 함수는 버퍼에 있는 내용을 그대로 출력하지만,
printf() 함수는 표준 출력 모드로 동작하여 종료 문자(\n
, \0
)을 만났을 때 내용을 출력하기 때문에
write() 과 printf() 을 혼합하여 사용하는 것은 좋지 않다.
POSIX(Portable Operating System Interface)
: UNIX 계열의 운영체제에 사용되는 명령어들(system call)의 표준을 정의.
(https://en.wikipedia.org/wiki/File:Timeline_of_Unix_families.svg)
POSIX는 여러 개의 chapter로 이루어져 있다.
errno
: The header file "error.h" contains a list of the predefined errorperror()
: a library function that describes system-call errors.정리)
System call은 그것이 성공하거나 실패했을 때 status value를 return.
모든 system call은 error가 발생하면,
-1 return
한다.
모든 process는“errno”
이라는 global variable을 갖고 있다.
errno 변수는 우리가 define하는 것이 아니라<errno.h>
에 define되어 있기 때문에 그냥 사용하면 된다.
perror()
는 errno에 해당하는 사람이 읽을 수 있는 문자열로 return 해주는 function이다.
따라서 errno 변수와 perror() 함수를 사용하기 위해 <errno.h> 헤더파일을 include 해야 한다.
vi /usr/include/asm-generic/errno-base.h
: 기본적인 errno에 대해 확인
errno.h
: errno에 대한 자세한 정보 확인system call 관련 manual page를 보기 위해서는 man 2
ERRORS
: 항상 systemcall의 manual page에서 ERRORS를 살펴봐야 한다.
CONFORMING TO
: 여러 unix 계열이 있는데, 어떤 시스템에서 사용이 가능한지? (소스레벨에서의 호환성. binary 레벨과 다름)
SYNOPSIS
:
platform 간 차이(0x32, 0x86)를 없애기 위해 pid_t type
을 사용.
size_t, pid_t같은 자료형들은 sys/types.h 헤더파일에 정의되어 있는 primitive data type이라고 한다.
운영체제에 따라 data type의 크기와 표현방식이 다르기 때문에 보다 portable한 프로그램을 만들기 위해 사용한다.
pid = 5787
ppid = 2892 = bash id
➡️ "1_pid" 실행파일을 실행시킨 parent process가 bash라는 것을 알 수 있다.
strace
: 프로그램의 시스템콜이 호출되는 것을 추적하여 보여준다.strace ./실행파일명
:파일을 사용하기 위해, 커널에 해당 파일을 사용하겠다는 의사를 표현하고,
해당 파일에 대한 file descriptor
를 얻어야 한다. (Non - negative integer)
보통 descriptor는 open() 이라는 system call을 통해서 얻어와야 하는데,
그렇지 않고도 이미 open되어 있는 descriptor가 3개가 있다.
Standard file descritpors
SEEK_SET
: 현재 file의 시작 지점부터 offset만큼 떨어진 곳으로 이동SEEK_CUR
: 현재 file offset으로부터 offset만큼 떨어진 곳으로 이동SEEK_END
: 현재 file의 마지막 지점의 그 다음부터 offset만큼 떨어진 곳으로 이동tee
: