CS/OS

[OS] OS의 디자인과 구조

jhkimmm 2021. 12. 28. 09:51

OS의 디자인

디자인의 목표는 크게 User goal과 System goal로 나눌 수 있습니다.

User goal은 쉬운 사용, 빠른 속도, 신뢰성, 쉬운 학습 등의 사용자 관점 목표이고,

System goal은 구현의 용이성, 유지/보수의 쉬움, 유연성, 효율성, 오류에 견딜 수 있는 정도 등의 시스템 관점의 목표입니다.

이들은 Requirements가 확실하지 않고 명확한 해결법을 찾기 어렵습니다.

 

이때 가이드라인을 잡기 위해서 Mechanism과 Policy 개념을 알 필요가 있습니다.

Mechanism은 HOW, Policy는 WHAT에 해당한다고 할 수 있으며 서로 독립적이어야 합니다. 예를 들어 "30일이 지나면 만료되는 패스워드"에서 Mechanism은 '비밀번호를 만료시키는 방법'이라고 할 수 있으며 Policy는 '비밀번호를 30일이 지나면 만료시키는 규칙'이라고 할 수 있습니다.

그렇다면 왜 Mechanism과 Policy는 서로 독립적이어야 할까요?

Policy는 정책이므로 자주 바뀔수도 있습니다. 이렇게 Policy가 바뀔때마다 Mechanism의 변경이 필요하다면 이는 좋은 방향이 아니기 때문에 이 둘은 서로 독립적인 것이 좋습니다.

 

OS의 구조

- Monolithic Structure

 

그림에서 알 수 있듯이 Monolithic structure는 모든 OS 아키텍쳐가 하나로 뭉쳐 Kernel space에서 작동하는 구조입니다.

구조로만 봤을 때는 장점이 아예 없을 것 같지만 MS-DOS와 Original UNIX등에서 사용하고 있는 구조이며, 다른 구조들 보다 Context Swtich가 적게 발생하기 때문에 성능상의 이점이 있습니다. 다만 모듈이 추가될 수록 점점 복잡해져서 유지보수가 어렵고, 커널 내부 하나의 서비스가 fail된다면 커널 전체가 fail된다는 단점이 있습니다.

 

- Layered approach

OS를 몇 개의 layer로 구성시키는 방법입니다. 가장 bottom layer는 layer 0이며 이는 Hardware를 뜻합니다. 하나의 layer는 해당 layer의 한 계층 위 혹은 아래에 있는 layer와만 커뮤니케이션을 할 수 있다는 특징이 있습니다.

 

Layered approach의 가장 큰 장점은 Simplicity입니다. 이런 장점 덕분에 디버그하기 쉽습니다. 다만 layer를 정의하는 것이 어렵고 Layer를 넘어가는 데에는 overhead가 발생하기 때문에 덜 효율적이라는 단점이 있습니다.

 

- Microkernel

Monolithic structure는 모든 기능이 하나의 거대한 커널에 모여 있지만 microkernel은 커널을 가능한 작게 만들고 필수적이지 않은 function들은 User-level의 라이브러리에 구현하는 방법입니다.

 

Micro kernel의 주요 기능은 어플리케이션과 서비스 사이에 효율적인 커뮤니케이션을 제공하는 것 입니다. FIie System을 예시로 들자면, File System은 monolithic 구조에서는 커널에 속했지만 microkernel에서는 일반적인 프로그램입니다. 어플리케이션 프로그램이 File System에 요청이 있을 때 monolithic구조에서는 요청을 받아서 그 답을 되돌려 줬지만, microkernel에서는 message를 redirection해서 라이브러리 함수 file system으로 넘겨주고 답을 받아서 다시 어플리케이션 프로그램으로 넘겨줍니다.

 

microkernel은 확장성이 높고 보안과 신뢰성이 높다는 장점을 가지지만, user mode와 kernel mode간의 Context Switch가 더 자주 일어나기 때문에 성능에 이슈가 생길 수 있습니다.