TIL - 2020.12.05 (토)

코드 굽는 제빵사·2020년 12월 5일
0

TIL

목록 보기
10/20

리눅스 네트워크의 이해를 읽으면서

사용자 공간과 커널 간 인터페이스

개요

커널은 여러 인터페이스를 통해 내부 정보를 사용자 공간에 노출한다.

procfs

이것은 /proc에 마운트되는 가상 파일 시스템이고, 커널은 이를 통해 내부 정보를 사용자 공간에 파일 형태로 노출한다.

sysctl

사용자 공간에서 커널 변수를 읽거나 변경할 수 있게해준다. 모든 커널 변수에 대해 사용할 수는 없고, 커널이 명시적으로 이 인터페이스를 통해 보이도록 한 변수들만 설정 가능하다.

ioctl 시스템 호출

파일에 적용되고, 흔히 표준 시스템 호출에서 제공되지 않는 특수한 장치의 작업을 수행하는 데 사용된다. ioctl은 소켓 디스키립터에도 사용되는데, 네트워킹 코드에서는 소켓 시스템 호출의 반환 값 형태로 사용된다. 이 인터페이스는 ifconfig와 route 같은 전통적인 명령어에서 사용된다.

이것은 네트워킹 애플리케이션이 커널과 통신하는 새롭고 선호하는 방식이다. 넷링크는 BSD 방식에서 라우팅 소켓을 처리하는 데 사용된다.

넷링크

넷링크 소켓은 RFC 3549에 정의돼 있고, 사용자 공간과 커널 공간 사이에 IP 네트워크 설정 시에 선호하는 인터페이스를 의미한다. 넷링크는 또한 여러 개의 사용자 공간 프로세스 간의 커널 내부 메시징 시스템으로도 사용된다. 넷링크 소켓으로 사용자는 표준 소켓 API를 사용할 수 있고, 이를 통해 소켓을 열고 닫고 소켓으로 데이터를 보내고 받을 수 있다.

알림 체인

커널은 많은 서브시스템을 갖고 있으며 이들은 상호 의존적이다. 따라서 서브시스템 중 하나에서 어떤 이벤트가 탐지되거나 발생했을 경우 다른 쪽에서도 관심이 있을 수 있다. 이런 목적을 충족 시키기 위해 리눅스는 알림 체인을 사용한다.

알람 체인은 어떠한 이벤트가 발생했을 때 수행해야 하는 함수의 리스트 일 뿐이다. 각 함수는 해당 함수가 호출된 서브시스템에서 발생했거나 탐지된 이벤트를 다른 서브시스템에서 알 수 있게 해준다.

따라서 각 알림 체인에는 제출/구독 모델에서 흔히 사용하는 알림을 받는 수동 영역과 알림을 보내는 능동 영역이 있다.

알림을 받는 측은 어떠한 이벤트에 대해 알림을 받기 원하며, 콜백 함수를 제공하는 서브 시스템이다.
알림을 보내는 측은 해당 이벤트가 발생했을 때 이 콜백 함수를 호출한다.

수행될 함수는 알림을 받을 서브시스템에서 선택하지, 체인의 소유자에서 결정하지 않는다. 소유자는 단순히 리스트를 정의할 뿐이다.

0개의 댓글