커널을 건드리는 프로그래밍을 해야하는 경우에 대해 생각해보자.


운영체제의 코어한 부분을 고치는 것은 제외했음.


서비스를 추가/변경/삭제 하는 관점에서 서비스란 세종류가 있다고 생각됨.



1. 시스템콜

2. 커널 모듈

3. eBPF (커널 모듈과 의미가 비슷함)


결국


시스템콜을 만들기

모듈프로그래밍하기

eBPF 프로그래밍하기 세가지로 나뉜다고 생각함.



일단, 시스템콜을 만들어야 할 상황이 생길까???

운영체제 수업에서는 시스템콜을 만들어보라고 하긴 하는데

시스템콜을 만드려면 커널 재컴파일이 필요함. 나는 커널 재컴파일은 진짜 무진장 비용이 높다고 생각함. 현업에서 커널 재컴파일을 해가며 코딩할거라고 보진 않음.

그래도 만약에 시스템콜을 꼭 추가해야할 상황이 있다면 어떤게 있을까?

그리고 시스템콜, 혹은 그보다 더 딥한 운영체제의 코어 부분을 건드리기 위해서라도 커널을 재컴파일하는 도구도 장비해두는게 좋을까?


다음은 모듈 프로그래밍.

내가 지금 공룡책을 배우고 있는데, 모듈은 동적 링킹이라고 그러는거 같음. 단순히 커널권한을 가지고 돌아가는 데몬이라기보단

커널의 메모리 공간에 직접 연결되어있는거 같음.

그러면 질문임. 코어 커널이 모듈의 코드를 요구하는 경우는 없다고 가정함. (왜냐면 무슨 모듈이 올라올지에 대해 의존적으로 설계되지 않았을 것이므로)

근데, 질문은 모듈이 모듈의 코드를 호출하는 경우임. 기존의 모듈 a b c가 잘 작동하고 서로의 코드를 참조하면서 작동한다고 해보자.

이때, 모듈 d 가 새로 등장한다면, a b c는 d에 의존하는 코드가 없을것임. 근데 d는 a b c에 의존적인 코드를 만들 수 있는것?

만약 d가 a를 의존한다고 해보자.

a b c d 가 잘 돌아가다가, a를 삭제하면 d의 작동은 어떻게 되는가???



다음은 eBPF

얘는 편리해보임. 근데 기본적으로 모듈프로그래밍이랑 비슷해보임.

모듈 프로그래밍으로 할 수 있는 것은 전부 eBPF로 가능하고

eBPF로 가능한건 전부 모듈 프로그래밍으로 가능한가??

둘의 차이점은 이거다!! 라고 딱 명확하게 제시할만한 무언가를 잘 모르겠음.