티스토리 뷰

카테고리 없음

[03] 운영체제 - 디자인 패턴

군옥수수수 2017. 9. 21. 14:53

안녕하세요.
이번 주는 운영체제 강의 2주차 수업이었습니다.
2주차에는 어떤 것을 배웠는지 알아보고 각각에 대해서 포스팅하는 시간을 갖도록 하겠습니다.
일단 이번 주에는 운영체제의 전체적인 흐름을 파악하는 마지막 단계인
운영체제의 디자인 패턴에 대해서 배웠고,
운영체제 관한 글이나 얘기를 들었을 때 가장 많이 언급되던 프로세스(Process)와 스레드(Thread)을 배웠습니다.
그럼 두 번에 걸쳐 하나하나씩 정리해보고 공부해보는 시간을 갖도록 하겠습니다.
첫 번째로는 운영체제의 디자인 패턴 (Design Pattern)에 관해서 알아보도록 하겠습니다.
디자인 패턴이란 운영체제의 내부 구조나 동작 방식이 어떤 방식으로 어떻게 구성되어 있는지를 말하고
그것을 운영체제가 발전해 오는 과정에서 패턴이 어떻게 바뀌었는지를 알아보겠습니다.
디자인 패턴(Design Pattern)

1. Monolithic structure
첫 번째로 살펴볼 구조는 Monolithic 구조이며 해당 굉장히 초기 운영체제의 디자인 패턴이며 교수님 말씀을 그대로 표현하자면 "주먹구구식"으로 기능을 붙여 놓은 디자인 패턴입니다.
인터페이스나 기능적인 단계가 제대로 잘 정의되어 있지 않으며 Kernel 모드와 User 모드가 나누어져 있지 않기 때문에 사용자가 Kernel에 접근이 가능하며 이는 프로그램 전체를 손상시킬 수 있는 위험성을 갖고 있는 굉장히 불안정한 구조입니다.


Monolithic structure
2. Layered Approach
두 번째로 살펴볼 구조는 Layered Approach 패턴이며 가장 밑에 H/W 계층이 있으며 그 위로 Layer1, Layer2 등등 위로 계층이 존재하는데 각각의 계층은 바로 밑의 계층에 의존적이며 의존적이라는 것은 밑의 계층에서 제공해주는 기능만을 사용한다는 것입니다. 
이렇게 계층이 나누어져 있어 구조가 단순하고 각 계층마다 기능이 한정되어 있기 때문에 디버깅 작업을 통해 문제가 어디서 일어났는지를 찾기 수월합니다. 
하지만 바로 밑의 계층에 의존적이기 때문에 Layer3에서 Layer1이나 H/W의 기능을 사용하거나 접근하기 위해서는 그 중간 계층들을 전부 거쳐야 하기 때문에 속도가 떨어져 효율성이 낮아집니다. 
그리고 바로 아래 계층에만 의존적이기 때문에 각 기능별로 서로 서로 얽혀져있는 운영체제를 구현하기에는 완벽하지 못한 패턴입니다.


Layered Approach
3. Microkernels
세 번째로 살펴볼 구조는 MicroKernels 구조로 가장 핵심적인 일부 기능만을 제외하고는 모두 User Process로 빼버립니다. 
예를 들어 키보드를 사용하지 않는 컴퓨터도 있기 때문에 이와 같은 기능은 운영체제에 속해있지 않고 따로 User Process로 빼놔 필요하다면 설치하여 사용하게끔 하는 구조입니다. 
이러한 Simple 한 구조운영체제 자체가 가벼워고 이로 인해 테스트나 디버깅이 쉬어지며 핵심 기능만을 포함하기 때문에 다른 플랫폼에 포팅하기가 쉽습니다. 
하지만 핵심 기능은 아니지만 몇몇 기능들을 User Process로 빼기 때문에 문제가 생기는데, 
예를 들어 User_Process_1 이 User_Process_2에게 작업을 부탁한다면 User_Process_1은 운영체제 에게 User_Process_2에게 메시지를 보내달라고 부탁해야 합니다.
이렇게 User Process끼리의 상호 작업이 필요한 경우 운영체제를 거치는 Message passing이 필요하기 때문에 속도가 느려집니다. 


Microkernels (source : https://www.youtube.com/watch?v=UMsscWnM67g)
4. Modules
마지막으로 살펴볼 구조는 Modules 패턴으로 Layered Approach 패턴의 장점과 Microkernels 패턴의 장점을 섞어 놓은 구조입니다.
일단 Layered Approach처럼 각각의 기능을 나누어 놨으나 서로 의존적이지 않으며 유기적으로 기능을 바로 호출할 수 있기 때문에 여러단계를 거쳐야 하는 Layered Approach보다 효율적이며
또한 Microkernels 패턴처럼 핵심 기능만을 갖고 있지만 동적으로 운영체제 
안에 기능을 추가하고 제거할 수 있기 때문에 추가된 기능(Module)은 운영체제 내에서 서로 Message passing 과정이 필요 없이 유기적으로 호출이 가능하며 기능을 추가하거나 제거했다고 다시 재컴파일 할 필요가 없는 장점을 갖고 있습니다.
이렇게 간단하게 운영체제의 디자인 패턴을 알아보았고
프로세스(Process)와 스레드(Thread)의 내용이 많은지라
여기서 한번 끊고 다음 시간에 각각에 대해 알아보는 시간을 갖도록 하겠습니다.
감사합니다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함