리눅스커널/구조
리눅스의 전체 구조는 계층적으로 구성되어 있으며, 각 계층은 다음과 같은 역할을 수행합니다:
- 하드웨어(Hardware): CPU, 메모리, 디스크, 네트워크 장치 등 물리적인 장치들로 구성됩니다.
- 커널(Kernel): 하드웨어와 상위 계층 사이에서 자원 관리와 시스템 호출을 처리하는 핵심 부분입니다. 프로세스 관리, 메모리 관리, 파일 시스템, 네트워크 스택, 장치 드라이버 등을 포함합니다.
- 시스템 호출 인터페이스(System Call Interface): 응용 프로그램이 커널 기능을 사용할 수 있도록 제공되는 인터페이스입니다. 프로그램은 시스템 호출을 통해 커널의 서비스를 요청합니다.
- 라이브러리(Libraries): 응용 프로그램 개발 시 자주 사용하는 함수들을 모아놓은 집합체로, 코드 재사용성과 개발 효율성을 높여줍니다. 대표적으로 C 표준 라이브러리인 glibc가 있습니다.
- 쉘(Shell): 사용자와 시스템 간의 인터페이스로, 명령어를 입력받아 해석하고 실행합니다. bash, zsh, csh 등이 대표적인 쉘입니다.
- 응용 프로그램(Applications): 사용자가 직접 사용하는 프로그램들로, 웹 브라우저, 텍스트 편집기, 미디어 플레이어 등이 이에 해당합니다.
이러한 계층 구조를 통해 리눅스는 하드웨어 자원을 효율적으로 관리하고, 사용자와 응용 프로그램에 안정적인 환경을 제공합니다.
커널은 운영체제의 핵심 구성 요소로서 다양한 기능을 수행하며, 그중 프로세스 스케줄러는 매우 중요한 역할을 담당합니다. 프로세스 스케줄러는 시스템의 프로세서(CPU) 자원을 효율적으로 분배하여 여러 프로세스가 원활하게 실행되도록 관리합니다. 이를 통해 시스템의 성능과 응답성을 향상시키고, 사용자에게 여러 작업이 동시에 수행되는 멀티태스킹 환경을 제공합니다.
그러나 커널은 프로세스 스케줄링 외에도 다음과 같은 핵심 기능들을 수행합니다:
- 메모리 관리: 프로세스들이 필요한 메모리를 할당하고 해제하며, 가상 메모리 기법 등을 통해 메모리 자원을 효율적으로 관리합니다.
- 파일 시스템 관리: 데이터의 저장, 검색, 수정, 삭제 등을 처리하며, 다양한 파일 시스템을 지원하여 데이터의 무결성과 보안을 유지합니다.
- 장치 드라이버 관리: 하드웨어 장치와의 인터페이스를 제공하여, 입력 및 출력 장치의 동작을 제어하고 관리합니다.
- 네트워크 관리: 데이터 통신을 위한 프로토콜 스택을 구현하여, 네트워크 연결과 데이터 전송을 처리합니다.
따라서, 프로세스 스케줄러는 커널의 핵심 요소 중 하나이지만, 커널은 이 외에도 다양한 기능을 통합적으로 수행하여 시스템의 안정성과 효율성을 보장합니다.
리눅스 커널에서 스케줄링 정책은 프로세스의 실행 순서와 CPU 자원 할당 방식을 결정하는 규칙을 의미합니다. 이를 통해 시스템의 효율성과 응답성을 최적화하며, 다양한 작업의 특성에 맞게 프로세스를 관리합니다.
주요 스케줄링 정책:
- SCHED_NORMAL (또는 SCHED_OTHER): 일반적인 사용자 프로세스에 적용되는 기본 스케줄링 정책입니다. Completely Fair Scheduler(CFS)를 기반으로 하며, 각 프로세스에 공정하게 CPU 시간을 분배합니다.
- SCHED_BATCH: 백그라운드에서 실행되는 일괄 처리 작업에 적합한 정책으로, 대화형 응답성보다는 처리량을 중시합니다. CPU 사용량이 높은 작업에 사용되며, 사용자와의 상호작용이 적은 프로세스에 적용됩니다.
- SCHED_IDLE: 시스템이 유휴 상태일 때 실행되는 프로세스에 적용되며, 가장 낮은 우선순위를 가집니다. 시스템 자원이 남을 때만 실행되므로, 중요도가 낮은 작업에 사용됩니다.
- SCHED_FIFO (First-In-First-Out): 실시간 프로세스를 위한 정책으로, 선입선출 방식으로 스케줄링됩니다. 타임슬라이스 없이 프로세스가 블록되거나 명시적으로 CPU를 양보할 때까지 실행됩니다. 우선순위가 높은 프로세스가 낮은 프로세스를 선점할 수 있습니다.
- SCHED_RR (Round-Robin): 실시간 프로세스를 위한 정책으로, SCHED_FIFO와 유사하지만 각 프로세스에 타임슬라이스가 부여됩니다. 동일 우선순위의 프로세스들이 라운드로빈 방식으로 순환하며 실행됩니다.
- SCHED_DEADLINE: 특정 기한 내에 작업을 완료해야 하는 실시간 프로세스를 위한 정책입니다. 각 프로세스에 데드라인을 설정하여, 해당 시간 내에 작업이 완료되도록 스케줄링합니다.
이러한 스케줄링 정책을 통해 리눅스 커널은 다양한 작업의 특성에 맞게 프로세스를 관리하며, 시스템의 효율성과 응답성을 향상시킵니다.
사용자는 리눅스에서 프로세스의 스케줄링 정책과 우선순위를 지정하거나 변경할 수 있습니다. 이를 통해 특정 프로세스의 실행 방식을 제어하고 시스템 성능을 최적화할 수 있습니다.