- Published on
문법은 같은 C인데 규칙이 다릅니다. 커널에서는 어떤 함수를 어디서 부를 수 있는지가 문맥에 따라 갈리고, 그 규칙을 어기면 컴파일은 통과하고 대신 시스템이 멈춥니다. 이 글은 그 규칙들을 공식 문서 기준으로 정리합니다. 먼저 스택이 사용자 공간의 수백분의 일이라는 사실에서 출발해, kmalloc과 vmalloc과 kvmalloc이 언제 갈리는지, GFP 플래그가 실제로 무엇을 허용하고 금지하는지를 다룹니다. 핵심은 잠들 수 있는가라는 질문 하나입니다. 원자적 문맥에서 잠들면 무슨 일이 벌어지는지, 어떤 함수들이 잠들 수 있는지, 그리고 copy_from_user가 왜 그 목록에 들어 있는지를 설명합니다. 이어서 스핀락과 뮤텍스를 문맥별로 고르는 표, 인터럽트 문맥에서 필요한 변종들, 그리고 RCU가 어떤 문제를 푸는 물건인지를 실제 커널 코드 한 조각으로 확인합니다.