Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

2.8 Operating-System Structure 본문

OS/OS Design

2.8 Operating-System Structure

알 수 없는 사용자 2024. 4. 9. 14:29

 현대 운영 체제와 같이 크고 복잡한 시스템은 제대로 작동하고 쉽게 수정될 수 있도록 설계되어야 한다. 일반적으로 하나의 단일 시스템 대신 작은 구성 요소 또는 모듈로 작업을 분할하는 방식을 생각할 수 있다. 각각의 모듈은 subsystem에 의해 잘 정의된 부분이어야 하며, 정확하게 정의된 인터페이스(특정 장치나 시스템에 대해 기능이나 동작을 외부에 노출 시키는 방법)와 기능들을 가져야 한다. 프로그램을 구조화할 때 비슷한 접근 방식을 사용할 수 있다.

 

2.8.1 Monolithic Structure

 운영체제를 구성하는 가장 간단한 구조는 구조가 아예 없는 형태이다. 즉, 커널의 모든 기능을 단일한 정적 이진 파일에 넣어 하나의 주소 공간(하나의 컨텍스트 내)에서 실행한다. 이런 접근법을 Monolithic structure로 부른다.

 이 예로 UNIX가 있는데, 시스템 콜 인터페이스와 커널 인터페이스사이에 있는 모든 것이 커널이며, 이때 커널은 시스템 콜을 통해 파일 시스템, CPU 스케 줄링, 메모리 관리 및 기타 운영체제 기능을 제공한다.

 Linux 운영체제는 UNIX를 기반으로 하며, 응용 프로그램은 일반적으로 커널과 통신할 때 glibc 또는 표준 C 라이브러리를 사용한다. Linux 커널은 커널 모드에서 전체적으로 실행되며, 이 또한 단일 주소 공간에서 작동하는 모놀리식이다. 모놀리식 커널의 단순함에도 불구하고, 이를 구현하고 확장하는 것은 어렵다. 하지만 이 구조가 가지는 이점으로 '시스템 콜 인터페이스에서 매우 적은 오버헤드가 있으며, 커널 내부의 통신이 빠르다는 것이다.

  • 구조가 아예 없는 형태이며, 하나의 단일 컨텍스트 내에서 실행되는 시스템
  • 커널이 시스템 콜 인터페이스와 커널 인터페이스를 가짐
  • 단점으로는 구현하고 확장하는 게 어려움, 한 요소의 변경이 다른 요소에 광범위하게 영향을 끼칠 수 있음(tightly coupled)
  • 이점으로는 매우 적은 오버헤드가 있고, 커널 내부의 통신이 빠름

 

2.8.2 Layered Approach

모놀리식은 한 부분의 변경이 다른 부분에 광범위한 영향을 미칠 수 있기 때문에 긴밀하게 결합된(tightly coupled) 시스템이지만, 이를 느슨하게 결합한(loosely coupled) 시스템으로 설계가 가능하다. 이런 시스템은 제한된 기능을 가진 별도의 작은 구성 요소로 나누어진다. 모든 구성 요소가 함께 커널을 형성하며 모듈식 접근 방식을 취하고, 장점으로 한 구성 요소의 변경이 해당 구성 요소만 영향을 미치게 되어 다른 구성 요소에는 영향을 미치지 않게 된다(내부 작업을 더 자유롭게 만들고 변경할 수 있다).

 사용자에 따라 여러가지 모듈식으로 만들 수 있는데, 그 중 하나는 Layered Approach 이다. 운영 체제는 여러 계층으로 분할되는데, 가장 하단(level 0에 하드웨어, 가장 상위(level N)에 사용자 인터페이스가 있다. 운영체제의 계층(level M)은 데이터와 해당 데이터를 조작할 수 있는 작업으로 구성된 추상 객체의 구현이다. 전형적인 운영체제의 계층은 데이터 구조와 고수준 계층에서 호출될 수 있는 함수 세트로 구성된다.

 이 접근법의 장점은 구성, 디버깅의 간편함인데, 각 계층은 하위 계층의 함수 및 서비스만을 사용하도록 하며, 디버깅 및 시스템 확인을 간소화한다. 첫번째 계층은 기본 하드웨어만 사용하여 기능을 구현하므로 시스템의 나머지 부분에 대한 걱정 없이 디버깅이 가능하다. 첫 번째 계층이 디버깅 되면, 두 번째 계층이 디버깅 되는 동안에 첫번째 계층의 올바른 작동을 가정할 수 있고, 이는 디버깅이 쉬워지는 형태로 다가온다. 각 계층은 하위 계층에서 제공되는 연산만으로 구현되어야 하며, 계층은 해당 하위 계층의 연산이 어떻게 구현되었는지 알 필요가 없고, 단지 무엇을 하는지만 알면 된다. 따라서 각 계층은 상위 계층에게 특정 데이터 구조, 연산 및 하드웨어의 존재를 숨긴다.

 계층 시스템의 단점으로는 사용자 프로그램이 운영체제 서비스를 얻기 위해 여러 계층을 통과해야하기 때문에 오버헤드가 있을 수 있어 전체적인 시스템 성능 저하가 발생한다. 하지만 현대에서는 일반적으로 더 많은 기능을 가진 더 적은 수의 계층을 가지게 하여서 계층의 정의 및 상호작용 문제를 피하면서 모듈화된 코드의 대부분의 장점을 제공한다.

  • loosely coupled 시스템이기에 제한된 기능을 가진 별도의 작은 구성 요소로 나누어짐
  • 모든 구성 요소가 함께 커널을 형성하여 모듈식 접근법을 취해서 구성 요소의 독립성 보장
  • 최상위 계층은 사용자 인터페이스 계층, 최하위를 하드웨어 인터페이스 계층으로 구성된다.
  • 그 사이의 운영체제 계층은 데이터 구조와 고수준 계층에서 호출될 수 있는 함수의 세트로 구성된다.
  • 이점으로는 구성과 디버깅의 간편함이다.
  • 특징으로 각 계층은 하위 계층의 함수와 서비스만을 사용한다.
  • 단점으로는 사용자 프로그램이 운영체제 서비스를 얻기 위해 여러 계층을 통과하는데서 오는 오버헤드이다.

 

2.8.3 Microkernels

 이미 원래 UNIX 시스템이 모놀리식 구조를 가지고 있음을 알고, UNIX가 확장됨에 따라 커널이 커져 관리하기 어려워졌다. 이에 1980년대 중반에는 카네기 멜론 대학에서 Mach라는 운영 체제를 개발했고, 이 운영 체제는 Microkernel 접근 방식을 사용하여 커널을 모듈식으로 만들었다. 이 방법은 커널에서 필요하지 않은 구성 요소를 모두 제거 후 별도의 주소 공간에 상주하는 사용자 수준 프로그램을 구현함으로써 운영 체제를 구조화한다. 이렇게 하면 이 전보다 더 작은 커널이 생성되게 된다. 커널에 어떤 서비스를 유지해야 하고 사용자 공간에 구현해야 하는지에 대한 일치된 의견은 없지만, 일반적으로 마이크로커널은 최소한의 프로세스 및 메모리 관리와 통신 기능을 제공한다.

 마이크로커널의 주요 기능은 클라이언트 프로그램(커널 외부에서 실행되는 프로그램)사용자 공간(user space, 운영 체제에서의 메모리 공간 중 사용자 프로세스가 실행되는 공간)에서 실행되는 다양한 서비스(원래는 커널 공간에 있어야 할 서비스들) 간의 통신을 제공(통신은 메시지 전달을 통해 제공)하는 것이다. 예를 들어, 클라이언트가 파일에 액세스를 하려면 직접 파일 서버와 상호작용해야 하지만, 굳이 하지 않아도 된다는 것이다. 클라이언트 프로그램과 파일 서버 간의 통신은 마이크로 커널을 통해 간접적으로 이루어지고, 클라이언트 프로그램은 파일에 접근하려면 파일 서버와의 통신을 요청하고, 마이크로 커널을 통해 이 요청 메시지가 파일 서버에 전달된다. 파일 서버는 요청을 처리한 후에 다시 마이크로 커널을 통해 클라이언트 프로그램에 메시지를 전달한다.

 

 Microkernel 방식의 한 가지 이점은 운영 체제를 확장하기가 더 쉽다는 것이다. 모든 새로운 서비스는 사용자 공간에 추가되므로 커널을 수정할 필요가 없고, 커널을 수정해야 할 경우 변경 사항이 적다(왜냐하면 마이크로커널은 더 작은 커널이기 때문). 결과적으로 이 새로 생성된 운영 체제는 하드웨어 디자인에서 다른 하드웨어로 이동하기가 더 쉽다(높은 이식성). 또한 마이크로커널은 대부분의 서비스가 사용자 프로세스로 실행되므로 더 많은 보안과 신뢰성을 제공한다. 이는 서비스에 문제가 발생하면 운영체제의 나머지 부분은 영향을 받지 않는다는 의미다.

 마이크로 커널의 성능은 시스템 기능 오버헤드가 증가함에 따라 성능이 저하될 수 있는데, 두 사용자 수준의 서비스가 통신해야 할 때는 메시지가 서로 다른 주소 공간에 있는 서비스 간에 복사가 되어야 한다. 게다가 메시지를 복사하고 프로세스 간에 전환해야 할 수도 있다. 메시지 복사와 프로세스 간의 전환에 따른 오버헤드는 마이크로 커널 기반 운영체제의 성장을 가로막게 된다.

  • 커널을 모듈화하여 커널에서 불필요한 구성 요소를 제거하고, 별도의 주소 공간에 상주하는 사용자 수준의 프로그램으로 구현
  • 최소한의 프로세스로 메모리 관리를 하며, 통신 기능까지 제공
  • 이점으로 모든 새로운 서비스가 사용자 공간에 추가되므로 운영 체제의 확장이 쉬움
  • 또한 다른 하드웨어로 이동하기가 더 쉬워짐
  • 그리고 대부분의 서비스가 사용자 프로세스로 실행되기 때문에 보안과 신뢰성 제공
  • 서비스에 문제가 발생하면 나머지 부분은 영향이 안 가게 됨
  • 단점으로는 오버헤드가 증가하면 성능이 저하됨. 메시지 복사와 프로세스 간의 전환에 따른 오버헤드

 

2.8.4 Modules

 현재 운영 체제 설계에서 가장 좋은 방법은 로드 가능한 커널 모듈(LKMs, Loadable Kernel Modules)을 사용하는 것이다. 여기서 커널은 핵심 구성 요소 세트를 가지고 있고, 부팅 시간이나 실행 중에 모듈을 통해 추가적인 서비스를 연결할 수 있다. 이러한 디자인 유형은 많은 운영체제에서 사용되고 있다.

 설계의 핵심은 커널이 핵심 서비스를 제공하는 동안에 다른 서비스가 커널이 실행되는 동안 동적으로 구현된다는 것이다. 서비스를 동적으로(필요할 때만) 연결하는 것이 커널에 새로운 기능을 직접 추가하는 것보다 선호된다. 만약에 이렇게 하지 않는다면, 변경 사항이 있을 때마다 커널을 다시 컴파일 해야한다.

 전반적인 결과는 각 커널 섹션에 정의된 보호 인터페이스가 있는 Layered Structure 과 유사하지만, 모든 모듈이 다른 모듈을 호출할 수 있기 때문에 계층 구조 시스템보다 유연하며, 마이크로 커널 접근법과 유사하다. 그래서 주요 모듈에는 핵심 기능과 다른 모듈을 로드하고 통신하는 방법에 대한 지식만 있지만, 모듈이 통신하기 위해 메시지 전달을 호출할 필요가 없기 때문에 효율적이다.

 리눅스는 주로 장치 드라이버, 파일 시스템을 지원하기 위해 로드 가능한 커널 모듈(LKM)을 사용한다. LKM은 Linux 커널이 시작될 때나 실행 중에 USB 장치가 연결된 경우와 같이 시스템에 삽입될 수 있다. 리눅스 커널에 필요한 드라이버가 없는 경우 동적으로 로드될 수 있다. LKM은 실행중에 커널에서 제거될 수도 있다. Linux의 LKM은 동적이고 모듈식 커널을 유지하면서 단일체 시스템의 성능 이점을 유지할 수 있다.

  • LKM는 핵심 서비스가 돌아가는 동안 다른 추가적인 서비스 또한 연결을 할 수 있다.
  • 커널이 핵심 서비스만을 제공하고, 다른 서비스들은 동적으로 연결됨
  • 커널은 핵심 기능과 다른 모듈을 로드하고 통신하는 방법에 대한 지식만 있음
  • 모든 모듈이 다른 모듈을 호출할 수 있음 (통신하기 위한 메시지 필요 없음)
  • 계층 구조 시스템 보다 유연하고, 마이크로 커널 접근법과 유사함.

 

2.8.5 Hybrid Systems

생략

'OS > OS Design' 카테고리의 다른 글

3.2 Process Scheduling  (0) 2024.04.10
3.1 Process Concept  (0) 2024.04.09
2.7 Operating-System Design and Implementation  (0) 2024.04.09
2.6 Why Applications are Operating-System Specific  (0) 2024.04.09
2.5 Linkers and Loaders  (0) 2024.04.08
Comments