reference:
- "리눅스 커널 내부구조" / 백승재, 최종무
- "Operating Systems: Three Easy Pieces" / Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
컴퓨터 시스템은 크게 H/W와 S/W로 구분된다. S/W는 운영체제와 그 위에서 동작하는 응용 프로그램(애플리케이션)와 운영체제, 커널(kernel)을 비롯한 시스템 프로그램을 다시 분류할 수 있다.
커널이란 "항상 메모리에 상주"하면서 동작하는 운영체제의 핵심 부분으로 코어(core)라고 부르기도 한다.
이 외 시스템 프로그램은 라이브러리, 컴파일러, 파일 관련 명령어, 태스크 관련 명령어, 네트워크 관련 명령어, 시스템 관리 명령어 등으로 구성된다.
<시스템 프로그램>
1. Compilation system(번역 시스템)
: 에디터, 컴파일러, 어셈블러, 링커, 로더, 디버거 ..
2. Operating system(OS, 운영체제)
: 프로세스 관리, 가상 메모리, 파일 시스템, 디바이스 드라이버, 네트워크 프로토콜
3. Runtime system
: 명령어 프로그램, Shell, 라이브러리, 프레임워크, 가상머신/도커, 키-벨류 스토어 ..
단순히 커널만 가지고는 운영체제로서 의미가 없다. 사용자와 직접 상호작용하는 시스템 프로그램이 필요하다. 기본적으로 쉘(shell)이라는 명령어 해석기가 있어야 하고, 파일 복사를 하려면 cp라는 명령어 프로그램이 따로 있어야하며, 이 밖에 파일을 지우는 rm 명령어 프로그램 등 수 많은 여타 시스템 프로그램이 있어야 한다.
배포판은 공개된 리눅스 커널을 기초로 리눅스 시스템을 기본적으로 운영할 수 있도록 여러 가지 시스템 프로그램들을 통합적으로 모아 놓은 뒤 이를 사용자의 컴퓨터에 쉽게 설치할 수 있는 기능을 제공하는 것. 우분투, 레드햇, 페도라 등 여러 리눅스의 배포판이 존재한다. 이 배포판 모두 리눅스 커널 측면에서는 모두 같다.
1) 사용자 임의대로 재구성이 가능. 오픈소스 S/W이다.
2) 열악한 환경에서도 H/W 자원을 적절히 활용하여 동작
3) 커널의 크기가 상대적으로 작다.
4) 완벽한 멀티유저, 멀티태스킹 시스템
5) 뛰어난 안전성
6) 빠른 업그레이드
7) 강력한 네트워크 지원.
8) 풍부한 소프트웨어
9) 사용자를 위한 여러 가지 공개 문서들
커널이란 위에서 언급하였듯 메모리에 항상 상주하여 동작하는 운영체제의 핵심 부분으로, CPU나 메모리 그리고 기타 디바이스 등의 (1) 시스템 자원(resource)을 관리하며, 사용자 프로그램(애플리케이션)이 이를 사용할 수 있도록 (2) 인터페이스(시스템 콜)을 제공한다.
그렇다면 자원은 무엇을 의미하는 것일까? 운영체제가 관리해야할 자원(resource)은 크게 물리적(physical) 자원과 추상적(abstract) 자원으로 구분할 수 있다.
물리적 자원 -(추상화)-> 추상적 자원
1) CPU -> 태스크(task)
2) 메모리 -> 세그먼트(segment)와 페이지(page), 가상 주소 공간
3) 디스크 -> 파일(file)
4) 네트워크 -> 통신 프로토콜, 패킷
1) 태스크 관리자: 물리적 자원인 CPU를 태스크라는 추상적 자원으로 제공하고 이를 관리한다.
2) 메모리 관리자: 물리적 자원인 메모리를 세그먼트나 페이지라는 개념으로 제공하고, 각 프로세스에게 가상 주소 공간을 할당하여 이를 관리한다.
3) 파일 시스템: 디스크를 파일이라는 개념으로 제공.
4) 네트워크 관리자: 네트워크 장치를 소켓이라는 개념으로 제공하고 이를 관리한다.
5) 디바이스 드라이버 관리자: 각종 장치를 '디바이스 드라이버'를 통해 일관되게 접근하도록 만든다.
그렇다면 운영체제는 왜 자원을 관리하는 것일까? 바로 사용자 또는 응용에 간의 경쟁적 상태를 제어하고, 안전정적으로 자원을 공유할 수 있도록 하기 위함이다. 그리고 이를 사용자에게 서비스 요청 형태로 받아 수행한다. 서비스를 수행하도록 응용이 운영체제에 요청하는 인터페이스가 바로 시스템 콜(system call)이다.
결국 운영체제는 시스템 콜을 통해 사용자 영역에서 동작하는 태스크가 자원을 안정적으로 사용/공유할 수 있게 해주는 자원 관리자인 셈이다.