OS에 대하여
운영체제란 어떤 컴퓨터 시스템이든 포함되어 있는 기본적인 프로그램 집합이다. 이 집합에서 가장 중요한 프로그램을 커널이라 한다.
커널은 시스템을 부팅할 때 RAM으로 로드되며, 시스템이 동작하는 데에 필요한 중요한 여러 절차를 포함한다. 이 밖의 프로그램은 비교적 덜 중요한 유틸리티로, 시스템의 본질적인 형태, 성능은 커널에 의해 정해진다. 따라서 본 카테고리의 글에서는 운영체제와 커널을 같은 뜻으로 사용하려 한다.
OS에는 무엇이 필요한가
운영체제는 다음 두 가지를 구현해야 한다.
1. 하드웨어 구성 요소와 상호 작용 하여 하드웨어 플랫폼에 들어 있는 저수준의 프로그래밍 가능한 모든 요소의 서비스
2. 컴퓨터 시스템에서 돌아가는 응용프로그램을 위한 실행 환경 제공
MS 도스와 같은 운영체제는 사용자 프로그램이 하드웨어 구성 요소를 직접 건드릴 수 있게 하지만, 유닉스 계열의 운영체제는 컴퓨터의 물리적인 구조와 관련된 내용을 사용자에게서 숨긴다. 따라서 프로그램이 하드웨어 자원을 이용하려면 커널에게 요청을 하고, 커널은 이를 평가하여 자원을 주기로 결정한다. 이로써 사용자 프로그램을 대신하여 관련된 하드웨어 구성 요소와 상호 작용 한다.
최근의 운영체제에서는 사용자 프로그램을 위한 특권이 없는 모드와 커널을 위한 특권이 있는 모드라는 서로 다른 두 실행 모드를 제공한다. 이를 각각 사용자 모드, 커널 모드라 부른다.
프로세스
모든 운영체제에서는 프로세스라는 추상 개념을 사용한다. 프로세스란 실행 상태에 있는 프로그램의 인스턴스 또는 실행 컨텍스트라는 말로 정의된다. 프로그램과 프로세스는 다른 개념이고, 구분할 수 있어야 한다.
전통적인 운영체제에서, 프로세스 하나는 주소 공간 하나에서 연속된 명령어 하나를 실행한다. 주소 공간은 프로세스가 참조할 수 있도록 허가된 메모리 주소의 집합이다. 최근의 운영체제는 프로세스가 같은 주소 공간에서 여러 개의 연속된 명령어를 실행할 수 있게 한다.
멀티유저 시스템(여러 유저가 하나의 시스템에 접근)은 여러 프로세스가 동시에 활동중인 상태이면서도 CPU를 비롯한 시스템 자원을 차지하려고 경쟁하는 실행 환경을 만들어야 한다. 이를 멀티프로세싱이라고 한다.
유니프로세서 시스템에서는 한 CPU를 한 프로세스만 점유할 수 있기에, 한 번에 실행 흐름 하나만 진행할 수 있다.이 때 작업을 해 나갈 프로세스를 선택하는 것은 스케줄러의 역할이다. 멀티유저 시스템의 프로세스는 반드시 선점형이여야 하고, 운영체제는 각 프로세스에게 적당한 리소스를 부여할 수 있어야 한다. 유닉스는 선점형 프로세스를 사용하는 멀티프로세싱 운영체제이다.
유닉스 계열의 운영체제는 앞서 이야기한, 프로세스/커널 모델을 채택하였다. 프로세스가 시스템 콜을 할 때마다 하드웨어는 사용자 모드에서 커널 모드로 전환하고, 프로세스는 엄격하게 제한된 목적을 가지고 커널 코드를 실행한다. 이런 식으로 운영체제는 프로세스의 실행 컨텍스트 안에서 프로세스의 요청을 처리한다. 요청을 완전히 처리하면 커널 코드는 하드웨어 상태를 사용자 모드로 되돌리고, 프로세스는 시스템 콜 이후에 있는 명령어부터 실행을 재개한다.
커널 구조
대부분의 유닉스 커널은 모놀리틱으로, 각 커널 계층은 커널 프로그램 하나로 통합되고 현재 프로세스를 대신하여 커널 모드에서 동작한다. 반면 마이크로커널 운영체제는 일반적으로 몇 가지 동기화 원시 함수와 간단한 스케줄러, 프로세스 간 통신 매커니즘을 포함하여 매우 적은 기능만을 커널에 요구한다. 마이크로커널 운영체제는 각 계층 사이에 메시지를 전달하는 비용이 들기에 일반적으로 모놀리틱 커널보다 느리다. 다만 몇 가지 이론적인 장점이 있다.
마이크로커널은 모든 운영체제 계층이 잘 정의된 깔끔한 SW 인터페이스를 통해서 다른 계층과 상호 작용을 할 수 있는 독립된 프로그램이다. 따라서 모듈화된 접근을 할 수 있다. 또, 모든 하드웨어 의존 구성 요소를 마이크로커널 코드 속으로 넣었기 때문에 다른 아키텍처로 포팅하기 쉽다. 마지막으로 마이크로커널 운영체제에서는 필요 없는 기능을 구현하는 시스템 프로세스를 스왑 아웃시키거나 없앨 수도 있어, 램을 절약할 수 있다.
모듈은, 말 그대로 모듈화된 접근을 사용할 수 있고, 플랫폼 독립적이며 주 메모리를 적게 사용하고 성능이 따로 저하되지 않는다는 장점이 있다.
'현생 > 리눅스 커널' 카테고리의 다른 글
유닉스 커널 개요 - 3. 메모리 관리 (0) | 2024.08.23 |
---|---|
유닉스 커널 개요 - 2. 시그널, 프로세스 간 통신, 프로세스 관리 (0) | 2024.08.22 |
유닉스 커널 개요 - 1. 커널, 프로세스와 동기화 (0) | 2024.08.21 |
파일 관련 시스템 콜 (0) | 2024.08.20 |
유닉스 파일 시스템 (0) | 2024.08.19 |