[마이크로 커널 운영체제]


1. 마이크로커널 운영체제란?


# 마이크로프로세스의 수행모드

kernel mode <-> user mode

- kernel mode : OS의 모든 기능을 수행할 수 있음

- user mode : 대부분의 사용자 프로그램을 실행


멀티 프로세스를 지원하기 위함


# 운영체제의 2가지 종류

- 모노리틱 운영체제 : 모든 프로그램이 OS의 커널모드에서 수행되는 방식

os/360, Unix, VMS, MS-DOS, Linux, ...


- 마이크로커널 운영체제 : 운영체제의 최소 기능만 OS의 커널모드에서 수행되고 대부분의 기능이 user mode에서 수행되는 방식

Mach, Chorus, L4, Minix, ...


# Mechanism과 Policy의 분리

- Mechanism : 마이크로커널(커널모드)

  a. Thread Manager, 스레드 생성/종료

  b. IPC Manager ,  inter-process communication 여러 스레드, 프로세스 간 메시지 전달

  c. address space Manager : 주소공간을 생성 및 페이지 할당 등

  d. interrupt Manager : device는 policy를 사용하므로 micro kernel에 있지않고 user mode 쪽으로 존재. 이 드라이브를 micro kernel에 등록/호출 


- Policy : 서버프로그램들(유저모드)

  a. pager : 페이지폴트 처리

  b. device driver


그림 



b. 마이크로커널 운영체제의 변천사


- 1세대 : CMU에서 Mach OS 개발

개념이 너무 좋아서 많은 사람들이 굉장하였지만, 성능이 좋지않아 실망함 (사람들의 인식=>마이크로커널운영체제는 개념은 좋지만 성능은 별로)

- 2세대 : GMD의 Liedtke가 효율적인 IPC 구현 기술을 개발. 1세대 마이크로운영체제보다 수십배 빠른 마이크로운영체제를 만듬

굉장한 많은 복합적인 컴퓨터과학부분의 방법들을 적용을하여 Optimization 시킴

=> 성능향상 (개발자 왈 : 마크는 원래 개념도 좋고 성능도 좋다. 본디 최적회가 안되었을뿐)

- 3세대 :  수학의 logic과 프로그래밍언어의 sementics를 사용하여 formal verification 기술을 개발. (테스트가아닌 "증명"을 수행하여 신뢰할 수 있는 마이크로 커널을 만들게 됨)

=> 고 신뢰성을 보장. security, availability, reliability ...



2. 기본적인 특징 

: flexibility, safety, modularity


a. flexibility

: mechanism과 policy를 분리하여 유연한 운영체제를 구현. 모노리틱커널운영체제보다는 훨씬 쉽게 구현가능

- 하나의 microkernel 상에서 다수의 운영체제를 동시에 수행시킬 수 있음.

   ex. linux OS, windows OS

- 하나의 microkenel 상에서 다수의 정책을 쉽게 구현이 가능 ( 하나의 프로세스에 다수의 policy를 구현 )

   ex. 일반 paging, 멀티미디어용 paging을 동시에 적용 할 수 있음

- 어떤 file system 위에 다른 file system을 쉽게 구현 할 수 있음

   ex. stacked file system


b. safety 안전성

: microkernel과 server program이 분리되면서 microkernel 모듈이 굉장히 줄어들어 커널 자체가 가지는 안전성이 굉장히 높아짐.

: 대부분의 프로그램들이 server program에서 user mode로 수행이 되므로, OS의 한 부분에 문제가 생겨도 kernel이나 다른 서버에 문제가 생길 소지가 적어지게 됨(fault isolation)


c. modularity 모듈성

: 전체 OS가 작은 마이크로커널 + 다수의 서버프로그램으로 모듈화됨

:- os를 개발할 때 하나의 모듈을 개발 할 때 개발비용이 적어짐

- 모노리틱 커널에 비해 테스트가 용이

- 유지비수 비용이 낮아짐

- 운영체제를 재부팅하지 않고 file system 등 크리티컬한 프로그램도 쉽게 업데이트할 수 있음


3. 내부구조


# 마이크로커널 부분

a. thread manager

- thread_create, thread_exit

- thread scheduler : priority 기반의 round robin(scheduler는 policy가 있으므로 서버프로그램으로 구현하여야 하지만 성능의 문제로 아직은 micro kernel 내에 구현)

- data structure

: TCB(Thread Control Block), thread_id, thread_state, thread_quota, address_space(memory), kernel_stack(system call이 아예없지는 않기떄문인듯)


b. IPC(inter-process communication) Manager

: 시스템호출만 제공하여 두 스레드사이에 데이터를 주고받음


- synchronous IPC  : ipc_send, ip_resceive

- asynchronous notification: 데이터를 전달하는 개념보다는 어떤 이벤트가 발생했을 때, asynchronous하게 이벤트를 알려줌

  ipc_notify, ipc_getnotify, ipc_event 필요, 


* synchronous IPC + asynchronous notification

* 현재 microkernel에서는 synchronous IPC를 사용

why? microkernel 운영체제는 IPC 성능이 매우 중요

synchronous IPC를 제공하면서 많은 optimization을 적용할 수 있게됨

(synchronous IPC는 이미 많은 기술들이 발전했으므로 적용가능한 optimiza)


* asynchronous notification을 병행하는 이뉴? 마이크로커널의 성능을 높이기위해 

thread프로그래밍을 할 때 synchronous만 있는 경우는 너무 불편하므로 섞음


c. address space manager

- 모노리티커널의 메모리 관리자와는 완전 다름

- 최소한의 메커니즘만 제공

- as_create(address space create) : address space 생성

- as_map : 하나의 page 할당

- as_unmap : 할당받은 page 반환

- 사용하는 자료구조 

: AS, Address Space 구조제. AS구조체 내에 as_id와 page_table(물리주소) 필드를 사용

(* 실제 페이지를 바꾸는 처리나 page fault exception의 처리는 microkernel이 수행하지는 않고 "페이저"라는 서버프로그램이 담당)


d. interrupt manager


- system call : intr_register 새로운 디바이스 드라이버 등록, intr_unregister 등록된 디바이스 드라이버 해제

(device가 user mode에서 실행되는 서버프로그램이므로 인터럽트가 들어오면 어느 프로그램인지 알기위해 정보를 관리해야함)


- kernel interrupt handler : 인터럽트가 발생하면 실제 처리는 하지 않지만, 기본적으로 kernel로 올라오므로 등록된 디바이스 드라이버를 IPC로 호충

- 사용하는 자료구조

: IH, interrupt Handler 구조체. kernel_thread_id, device_driver_thread_id 등등

: Interrupt manager는 실제 처리는 안하고 인터럽트 종류와 처리할 프로세스간의 매핑 정보만 저장. 

ex) 인터럽트 5번은 인터럽트 스레드 50번에서 처리해

(-> Interrupt manager는 각 interrupt의 semantics를 알 지 못함, policy를 알지 않는다는 뜻)



# 서버프로그램부분

a. pager : page fault exception을 처리


- user_thread()에서 page fault가 발생하면, ipc_send(pager, faddr) 시스템 콜로 마이크로커널을 통해 pager_thread()에게 전달만 하게함

- pager_thread()에서 ip_receive(user, faddr)로 정보를 전달받음

- pager_thread()에서 kernel에게 as_map(faddr)시스템 콜을 통해 커널이 페이지매핑 요청만 하게함

- 다시 ipc_send(user, _)와 ipc_receive(pager, _)를 사용하여 마무리


b. device driver


- 인터럽이 발생하면 policy를 갖지않는 커널의 인터럽트 핸들러가 호출되어 인터럽트 처리는 하지 않고, irq 커널스레드를 통해서 처리해주는 thread와 맵핑. 실제 ipc 번호를 식별하여 인터럽트 처리 프로그램이 동작하게 됨.


# 결국, 마이크로커널운영체제에서는 모노리틱커널운영체제보다 ipc가 훨씬 많이 사용하게 된다.



4. 성능향상 기술


# 마이크로커널 운영체제에서 IPC

- 모노리틱커널운영체제 : function call

- 마이크로커널 운영체제 : IPC(IPC는 마이크로커널 운영체제에서 성능과 가장 많은 연관성을 가지고있음)

* 1세대의 microkernel은 IPC 성능을 향상시키지 못해 성능이 떨어졌다.

2세대의 microkernel은 IPC성능을 향상시키기위해 다양한 방법이 적용되었다.

현재의 microkernel은 모노리틱 커널과 거의 유사한 성능을 날 수 있음.


# IPC 성능향상 기술

a. Message Direct Transfer

: thread A에서 thread B로 IPC를 전달할 때, 주소공간이 다르므로 중간에 커널주소공간을 거쳐서 message가 복사된다. (2 copies)

-> 1 copy로 전환. Synchronous IPC와 temporary mapping을 사용. 


: 커널은 메시지 복사 전에 thread A의 주소공간 중 메시지가 있는 page를 thread B의 주소 공간에 임시매핑


- thread A의 message를 복사할 때,

- thread A의 message가 있는 page를 Thread B의 특별한 부분에 잠시 임시로 맵핑. 

- 커널이 그 사이 message를 copy

- 임시 매핑 해제


b. Short Message 사용

: 발생하는 수많은 IPC 중 50%-80%가 8bytes 이하의 짧은 메시지

: message를 메모리가아닌 register를 사용하여 zero message 기법으로 메시지 전달을 수행

(register는 어디에서나 접근이 가능하니까..)


c. Direct Process Switching

: thread A에서 thread B로 message전달 시, kernel의 스레드 스케줄러라는 또 다른 thread C가 수행되어 thread를 전환한 후 thread B가 수행됨

(thread A  ->  thread C(kernel의 스레드 스케줄러)  -> thread B)

=> 메시지 send/receive에서 성능저하가 나타남


: thread A에서 메시지 복사 후 스케줄러를 수행하지 않고(스케줄러를 무시하기), thread A의 남은 "time slice" 동안 IPC가 thread B로 컨트롤을 넘겨 thread B를 수행 후 다시 thread B가 thread A에게 메시지를 전달

(thread A  ->  thread B  -> thread A)



5. 마무리


최근에들어 보안의 중요성을 절실히 필요로하는 고신뢰성을 가지는 시스템을 구현하기에 마이크로 운영체제는 최적화되어있으며, 

many core(core가 1000~2000개) 시대가 도래할 것으로 예측되며, 이런 환경에서는 마이크로커널운영체제가 급 부상 할 수 있음




'System > Etc.' 카테고리의 다른 글

[OS기초] CPU Scheduling  (0) 2015.09.22
[OS기초] Process & Thread  (0) 2015.09.21
[OS기초] 개요  (0) 2015.09.17
KVM/KSM  (0) 2015.08.13
RAID  (0) 2015.08.12

http://www.jqueryscript.net/blog/Top-100-Best-Free-jQuery-Plugins-From-2014.html





다들 아시다시피 지능형 웹, 인공지능 웹, 시맨틱 웹 같이 현재 웹 3.0 환경에서 생활 하고 있습니다.
실제로 구글에서, 위와 같은 내용의 메일을 받아보면 메일의 내용이 수집되어 해당 내용과 관련된 추천을 제공하는 등의 서비스를……..

사용자 모르게 개인정보관련하여 동의를 받아서 제공하고 있다고 하네요

사용자가 검색단어를 입력하고 검색결과를 얻는 중간에, 지속적인 피드백을 통해서 인공신경망에는 학습이 이루어 집니다.

이 책에서는 사용자의 클릭 정보를 수집하여 기록하고, 그 기록을 이용해 검색 결과를 향상 시키는 방법을 살펴봅니다.

첫번째로는 학습된 인공신경망이 필요하답니다.

그럼 인공신경망이란 무엇을까요?

인간의 뇌를 기반으로 한 추론모델 뉴런….

잠깐 생각을 하게됩니다 ㅋㅋㅋㅋㅋㅋ

뉴런은 신경계에서 기본적인 정보처리를 하는 단위입니다.

학교다닐때 많이들 보셨던 그림입니다.

인간의 뇌는 간단히 말하면 매우복잡하고 비선형적이며 병렬처리를 수행합니다.

이 관점에서 다시 말하면,

100개의 뉴런과 각 뉴런을 연결하는 6조개의 스냅스들의 결합체이고,

정보는 신경망 전체에서 동시에 저장되고 처리됩니다.

또 적응성이란 것을 가져서 잘못된정보에 대해서는 뉴런들 사이의 연결이 약해지고, 올바른 정보에 대해서는 뉴런들 사이의 연결이 강해지게 됩니다.

! 그럼 다시 인공신경망으로 돌아가겠습니다.

인공신경망은 인간의 뇌를 기반으로 모델링하였습니다.

학습을 수행하고 가중치도 조정합니다.

인공신경망의 학습은

검색단어, 검색결과, 사용자가 클릭한 것으로 수행됩니다.

인공신경망의 구조에 대해 살~짝 더 들어가보겠습니다.

일반적으로 인풋값이 들어오면 적절한 weight가 곱해지고 더해집니다.

즉 노드간의 연결들을 가중치 있는 값으로 연결된다고 말할 수 있습니다.

1985년 프랭크 로젠블랫이 간단한 인공신경망을 훈련시키기위해 Perceptron algorithm을 발표하였습니다.

이렇게 일반적인 input/output layer로 이루어진 Neural Network의 구조를 Perceptron이라고 합니다.

일반적으로 각각의 노드들은 연결을 통해 여러 입력값을 받을 수는 있지만, 출력값은 오직 하나입니다.

하지만 그림에서 보시다시 단일 perceptron구조에서는 하나의 직선으로 된 판별식만 표현할 수 있어 새로운 모델이 제안됩니다.

단점을 보안하기위해서 중간에 hidden layer 로 여러 판별식을 추가로 둘 수 있어, 보다 복잡한 문제를 해결 할 수 있습니다.

(애니메이션), Hidden layerinput layer에만 반응하기 때문에 hidden layer라고 부릅니다.

이제, 여기서는 수많은 neural networkweight(가중치)값을 어떻게 학습시킬 것 인지 고민해야합니다.

책에나온 그림으로 보겠습니다.

Hidden layer는 원래 여러개의 층으로 구성이 될 수 있지만, 책에서는 단일 층의 경우만 설명하고 있습니다.

외부와 직접상호작용하지 않고 input layer에 따라러만 반응하므로 이 경우 input은 단어들의 집합이 돕니다. 그래서 이 layer를 쿼리층이라고도 합니다.

layer의 노드들은 인접한 layer의 모든 노드들과 연결됩니다.

여기서 최적의 결과는 검색어 안에 있는 단어들에 대한 입력값이 1이 되어야 합니다.

이게 무슨말이냐면,
아까 인공신경망은 실제 생물학적 신경망의 지능적 처리를 단순 모방하여 지능적 형태를 재현하는 것으로,

뉴런간에 교신정보의 세기가 강할 수록 신호 전달이 잘 되는 것이라고 생각하면 될 것 같은데요,

무한대의 값을 0~1사이의 적당한 값으로 표현할 때 1이 가장 최적화 된 값이 되는 겁니다. (맞는건지 모르겠음..ㅋㅋ)

따라서 1이 입력으로 들어오면 입력노드들에서 출력이 On이 되어 은닉층을 활성화 시키고,

충분히 강한 입력을 받은 은닉층 내 노드들이 차례로 On이 되어 출력층의 노드들까지 On을 시키게 됩니다.

이런식으로 계산을 한다는데..다음기회로 넘기도록 하겠습니다.

ㅠㅠ~

다시 그림으로 돌아와서 보겠습니다.

이런 상황에서 입력층 또는 은닉층의 노드들의 연결형태로 앞장에서 보신 계산식등으로 가중치가 정해지게 되고, 이에따라 출력층내의 노드들도 여러등급으로 활성화됩니다.

즉 이 활성화 레벨은 원래의 검색어안에 있는 단어들과 출력 URL간에 얼마나 관련이 있는지 결정하는데 사용됩니다.

우선 책의 그림에서는 bold체는 활성화된 노드를 의미하고, 실선은 강한연결을 의미합니다.

“world”bank”를 검색했을때 두 입력노드가 활성화되고, 은닉1 노드가 활성화 되었을때,

출력쪽에서 “World Bank”가 활성화되었다는 그림입니다.

연결 강도의 정확도에 따라 결과는 달라지며, 정확도는 검색을 하고 검색결고에서 링크를 클릭할 때마다 네트워크를 학습하여 얻어집니다.

데이터 베이스를 설정해야합니다.

데이터 베이스에 저장할 정보로는

단어, URL, 은닉층에 대한 테이블, 단어층에서 은닉층으로의 연결정보와 은닉층에서 출력층으로의 연결정보를 가지고 있어야합니다.


+ Recent posts