말씀하신 함수들은 glibc 에 C 소스가 있습니다.
그런데 이 경우 어떤 부분들은 어셈블리로 코딩되어 있기도 합니다.
가령 다른 예로, pthread 의 mutex 관련 코드(x86 기준)를 보면
CAS 연산을 위해 어셈블리로 일부 코드가 직접 짜여져 있습니다.
glibc 는 사실상 래핑이고, 말씀하신 그런 함수같은 경우 glibc 에서
실제적으로 처리를 하지는 않습니다. 물론 일부는 glibc 에서 상당 부분 처리하기도 합니다.
하지만 말씀하신 것들은 기본적으로 시스템콜 그 자체이기 때문에
실제 구현은 리눅스 커널 내에 구현이 되어 있습니다.
이 역시 물론 C로 코딩되어 있으니 보시면 됩니다.
물론 커널단이기 때문에 일부 잘 이해가 되지 않는 부분도 있을 수 있습니다.
기본적으로 커널의 동작 구조를 조금은 그래도 알고 있어야 수월합니다.
그래도 보다보면 연관되는 부분들을 하나씩 훑어보다가 이해가 되긴 합니다.
이를 위해 커널 소스 보는데는 Cross Reference 가 가장 좋습니다.
(모르는 구조체나 함수가 나오면 눌러가면서 끝까지 보면 됩니다.
그래도 이해가 안되는 부분이면 검색해서 찾아보면 어느 정도는 나옵니다.)
?
말씀하신 함수들은 glibc 에 C 소스가 있습니다.
그런데 이 경우 어떤 부분들은 어셈블리로 코딩되어 있기도 합니다.
가령 다른 예로, pthread 의 mutex 관련 코드(x86 기준)를 보면
CAS 연산을 위해 어셈블리로 일부 코드가 직접 짜여져 있습니다.
glibc 는 사실상 래핑이고, 말씀하신 그런 함수같은 경우 glibc 에서
실제적으로 처리를 하지는 않습니다. 물론 일부는 glibc 에서 상당 부분 처리하기도 합니다.
하지만 말씀하신 것들은 기본적으로 시스템콜 그 자체이기 때문에
실제 구현은 리눅스 커널 내에 구현이 되어 있습니다.
이 역시 물론 C로 코딩되어 있으니 보시면 됩니다.
물론 커널단이기 때문에 일부 잘 이해가 되지 않는 부분도 있을 수 있습니다.
기본적으로 커널의 동작 구조를 조금은 그래도 알고 있어야 수월합니다.
그래도 보다보면 연관되는 부분들을 하나씩 훑어보다가 이해가 되긴 합니다.
이를 위해 커널 소스 보는데는 Cross Reference 가 가장 좋습니다.
(모르는 구조체나 함수가 나오면 눌러가면서 끝까지 보면 됩니다.
그래도 이해가 안되는 부분이면 검색해서 찾아보면 어느 정도는 나옵니다.)
waitpid : http://lxr.free-electrons.com/source/kernel/exit.c#L1629
select : http://lxr.free-electrons.com/source/fs/select.c#L622
감사합니다! 많은 도움이 되었습니다
감사합니다!
많은 도움이 되었습니다
댓글 달기