운영체제 서비스

운영체제가 사용자와 응용 프로그램에 제공하는 서비스는 하드웨어의 복잡함을 숨기고, 안전하고 효율적인 자원 활용을 보장하기 위해 다음과 같은 기능들을 포함합니다.

프로세스 관리 서비스

  • 프로세스 생성·제거

    • 새 프로세스 생성 시 커널은 프로세스 제어 블록(PCB)을 할당하고, 부모 프로세스의 메모리 맵과 파일 디스크립터 테이블을 copy-on-write 방식으로 연결합니다.

    • 프로세스 종료(exit) 시 PCB, 메모리 페이지, 열린 파일 등 모든 자원을 회수하고, 부모에게 종료 상태를 전달하는 자원 회수 루틴을 실행합니다.

  • 프로세스 동기화

    • 커널은 세마포어(Semaphore), 뮤텍스(Mutex), 조건 변수(Condition Variable) 같은 커널 내 동기화 프리미티브를 제공합니다.

    • 사용자 공간 락(futex)은 빠른 락 획득을 위해 커널과 사용자 공간을 결합한 구조로, 락이 경합될 때만 커널 호출이 발생하도록 최적화되어 있습니다.

  • 프로세스 통신(IPC)

    • 파이프(Pipe): 단방향 바이트 스트림을 위한 커널 버퍼. 생성 시 양 끝단의 파일 디스크립터 쌍을 할당하고, 링버퍼로 데이터를 주고받습니다.

    • 메시지 큐(Message Queue): 커널에서 관리하는 고정 크기 메시지 슬롯 배열. 각 메시지는 우선순위와 함께 대기열에 삽입되며, msgsnd/msgrcv 호출로 송수신됩니다.

    • 공유 메모리(Shared Memory): 여러 프로세스가 동일 물리 페이지를 매핑해 고속 통신. 커널은 shmget으로 공유 영역을 생성하고, shmat으로 주소 공간에 매핑합니다.

메모리 관리 서비스

  • 주기억장치 할당·회수

    • 연속 할당: 비트맵(bitmap) 또는 프리 리스트(free list)를 이용해 적합한 크기의 빈 공간을 할당. 외부 단편화를 줄이기 위한 재배치(compaction) 기능은 일반적이지 않음.

    • 비연속 할당: 페이징(Paging) 기법으로 고정 크기 페이지(4KB 등) 단위로 물리 메모리 프레임을 나누고, 각 프로세스에 비연속 물리 페이지를 매핑합니다.

  • 가상 메모리

    • 프로세스마다 독립된 가상 주소 공간을 제공. 페이지 테이블은 다단계(n-level) 구조로, 메모리 오버헤드를 줄이면서 대규모 주소 공간(32/64비트)을 지원합니다.

    • 페이지 폴트(page fault)가 발생하면 커널은 페이지 교체 알고리즘(LRU, Clock, FIFO 등) 을 이용해 적합한 물리 페이지를 선택하고, 스왑 영역과 교환(swap out/in)합니다.

  • 메모리 보호

    • 페이지 테이블 엔트리(PTE)에 접근 권한 비트(R/W/X) 를 설정해 비허가 접근 시 예외를 발생시키고, 프로세스 간 메모리 침범을 방지합니다.

    • 커널 모드와 유저 모드를 구분해 커널 메모리 영역을 절대 유저 프로세스가 접근하지 못하도록 설계합니다.

파일 시스템 서비스

  • 파일 및 디렉터리 조작

    • open, read, write, lseek, close와 같은 시스템콜을 통해 파일을 생성·삭제·읽기·쓰기·위치 이동을 수행합니다.

    • 커널은 파일 디스크립터 테이블(fd table) 을 사용해 프로세스별 열린 파일을 추적하고, 인노드 테이블(inode table) 로 실제 메타데이터를 관리합니다.

  • 디렉터리 관리

    • 디렉터리는 파일명→inode 번호 매핑을 해시 테이블 또는 B-트리로 구현.

    • 빈번한 경로 탐색을 위해 dentry 캐시(directory entry cache)로 최근 사용된 디렉터리 엔트리를 저장합니다.

  • 저널링

    • ext4, XFS 등 저널링 파일 시스템은 메타데이터 변경 전 저널 로그에 기록한 뒤 실제로 디스크에 반영합니다.

    • 커널 내 트랜잭션 로그 구조체크포인트 메커니즘이 조합되어, 충돌 시 빠른 복구를 보장합니다.

입출력 장치 제어 서비스

  • 추상화 계층

    • VFS(Virtual File System)는 여러 파일 시스템(NFS, ext4, FAT, etc.) 드라이버를 **슈퍼블록(superblock)**과 파일 시스템 객체 레이어로 일관되게 추상화합니다.

    • 블록 장치(block device)와 문자 장치(char device)에 공용 인터페이스를 제공하고, 장치별 특성별 드라이버에 연결합니다.

  • 동기·비동기 I/O

    • 동기 I/O(read/write)는 호출 프로세스가 완료까지 블록되고, 비동기 I/O(aio_read/io_submit)는 I/O 작업 디스크립터를 커널 큐에 등록해 즉시 복귀 후 이벤트 알림(aio_signals, io_getevents)을 제공.

  • DMA 지원

    • 고속 네트워크·스토리지 장치는 DMA 디스크립터 링을 사용해 메모리와 장치 간 직접 전송.

    • 운영체제는 IOMMU를 구성해 가상 주소 기반 DMA 보호와 오버레이 매핑을 관리합니다.

정보 검색·보고 서비스

  • 가상 파일 시스템(/proc, /sys)

    • /proc은 커널 내부 데이터 구조(프로세스 정보, 메모리 통계, 네트워크 통계 등)를 동적으로 파일처럼 노출합니다.

    • /sys는 장치 트리와 디바이스 속성(attribute)을 계층적 파일로 제공해, 사용자 공간에서 간편한 드라이버 설정이 가능하도록 지원합니다.

  • 성능 모니터링

    • 커널은 성능 카운터(PMU), 소프트웨어 계측(eBPF, Tracepoints) 를 통해 이벤트 데이터를 수집하고, perf, bpftrace 같은 유저 공간 도구와 연동해 실시간 분석을 지원합니다.

보안·보호 서비스

  • 이미 1.6절에서 상세히 다뤘으므로 여기서는 LSM(Linux Security Modules) 확장 지점을 중심으로 설명합니다.

    • LSM 후킹 아키텍처: 파일, 네트워크, 프로세스 관련 핵심 경로에 후킹 포인트를 제공해 SELinux, AppArmor, Smack 같은 보안 정책 모듈을 연동할 수 있습니다.

    • 캡슐화된 보안 모듈: 각 LSM 모듈은 커널 코드 수정 없이 보안 정책만 교체해 다양한 용도(격리, 무결성 검사, 접근 제어)를 지원합니다.

자원 회수 및 오류 처리 서비스

  • 자원 해제

    • 프로세스 종료 시 커널은 PCB, 메모리, 파일 디스크립터, 세마포어, IPC 객체 등 모든 자원을 모듈화된 클린업 루틴으로 안전하게 회수합니다.

    • 메모리 누수를 방지하기 위해 레퍼런스 카운팅슬랩 할당자(slab allocator) 기법을 사용합니다.

  • 장애 복구

    • 소프트웨어 충돌 시 커널 패닉을 방지하기 위해 커널 내 hotplug, watchdog timer를 이용한 자동 재부팅 옵션 제공

    • 파일 시스템 불일치 시 fsck 유틸리티와 커널 내 저널 재생(journal replay) 기능으로 일관성 복원

Last updated