본문 바로가기

OS

[OS] 분산 운영체제_방통대 교재 정리

728x90

#####. 분산 운영체제

###. 분산운영체제의 개요

#. 분산 시스템

 - 현대 컴퓨터 시스템은 강력하지만 비례하여 문제도 어려워짐

 - 빅데이터 응용, 인공지능 => 복잡한 연산 등 고도화

 - 이를 해결하기 위해 수직적인 CPU 증가도 있지만, 수평적인 여러개의 프로세서를 연결해서 분담하는 방식으로 해결가능

 - 복수의 컴퓨터가 각각의 프로세서를 가지고 네트워크를 통해 연결된 약결합 시스템

 - 과거엔 강결합 된 슈퍼컴퓨터를 많이 개발했지만, 현대는 약결합을 개발

 - 약결합 시스템 구분

 : 로컬(local) : 자신이 속한 컴퓨터

 : 원격(remote) : 네트워크를 통한 컴퓨터

 - 효과적인 분산 시스템 => 원격 자원을 로컬 처럼 쉽게 사용하도록 하는 운영체제

 

#. 분산시스템의 장점

 - 자원 공유

 : 과거에 프린터는 컴퓨터 한 대에만 연결될 수 있어 직접 라인을 꼽아야 했지만, 공유하면 편리하게 이용가능

 : 1000대의 컴퓨터 SSD가 256기가라면 256테라로 사용 가능

 - 성능 향상

 : 문제를 빨리 처리하기위해 수직적인 개발도 방법이지만, 병렬적으로 동시에 수행하는 방식으로 성능을 향상 시킬 수 있다.

 - 신뢰성 향상

 : 로드 밸런싱으로 인한 이중화로 신뢰성 향상 시킬 수 있음

 - 통신의 편리성

 : RPC 방식을 활용가능

 

#. 분산 시스템 구축 시 비용적 측면

 - 망 구축비용 : 통신 링크를 통해 사이트들을 물리적으로 연결해서 분산 시스템을 구축하는데 드는 비용

 - 통신비용 : A에서 B로 메세지를 보내는 통신 비용

 - 신뢰성 : 이중화의 여부

 

#. 네트워크 구성 형태 ( 완전연결, 부분연결, 트리, 스타, 링, 버스형)

 - 부분 연결 : 네트워크에서 직접 연결이 되지 않은 노드의 쌍이 존재하여 구축 비용은 저렴하지만 중간에 노드와 링크가 끊기면 통신이 불가능

 - 트리구조 : N개의 노드가 있을 때 N-1개의 링크가 존재. 부분과 마찬가지로 통신 불가 발생

 - 스타형 :  N개의 노드가 있을 때 N-1개의 링크가 존재. 중심 노드 불량시 전체 통신 불가 발생

 - 링형 : N개의 노드가 있을 때 N개의 링크가 필요. 두 노드 사이의 링크의 개수는 최소 1, 최대 N/2이며 하나의 링크가 고장나도 연결이 끊기지 않는 장점

 - 버스형 : 모든 노드가 버스라고 부르는 빠른 링크에 연결된 형태. 한 노드가 버스에 메세지를 보내면 모든 노드가 이를 읽을 수 있다는 장점이 있는 반면, 버스가 고장나면 전체 네트워크에 문제가 발생

 

#. WAN / LAN 차이 ( WAN :Wide Area Network / LAN : Local Area Network )

 - WAN : 속도 느림, 지연 큼, 혼잡 높음, 구현 어렵, 면적 넓음, 비용 큼

 - LAN : 속도 빠름, 지연 작음, 혼잡 낮음, 구현 쉬움, 면적 좁음, 비용 적음

 - LAN을 구성하는 주요 기술인 이더넷 (ethernet)은 가격이 저렴하고 에러가 적으며, 매우 빠른 전송속도를 제공하지만 거리제한이 있다. 따라서 근접한 공간에 있는 서버, 워크스테이션, 랩톱, 게이트웨이 등을 연결하는데 적절

 - WAN은 광케이블, 위성, 네트워크 등으로 넓은 영역을 지원하는 것이 주된 목적. LAN으로 연결된 네트워크를 연결하는 '네트워크들의 네트워크'가 WAN이라고 생각 할 수 있따. WAN에 참여하는 노드는 LAN에 참여하는 노드보다 훨씬 많기 떄문에 많은 데이터가 공유되고 충돌할 수 있어서, 네트워크 자체의 속도뿐 아니라 전송과정에서 혼잡과 지연 등으로 더욱 전송 효율은 낮아짐

 

#. 분산 운영체제

 - 분산 시스템을 관리하기 위한 운영체제가 분산 운영체제

 - 사용자가 원격 자원을 로컬 자원처럼 사용하는 것처럼 쉽게 사용 가능하고, 둘 사이의 구별이 없이 투명성(transparency)를 제공할 수 있어야 함

 - 사용자 입장에서는 어떤 자원이 로컬인지 원격인지 구별할 필요가 없고 원격 자원에 대한 접근에 필요한 일들을 분산 운영체제가 대신해줌

 

#. 운영 체제에 적용 가능한 기본적인 방법

 - 데이터 이주 (data migration)

 : 원격 데이터를 로컬로 전송해 와서 사용하는 방식

 : 데이터가 클 경우 전송이 완료될 때까지 많은 시간이 걸릴 수 있으므로, 필요한 만큼의 데이터를 우선 가져오고 데이터를 처리하는 동안 백그라운드에서 계쏙 데이터를 가져올 수 있다.

 - 계산 이주 (computation migration)

  : 데이터 이주를 고려하기에는 데이터 양이 너무 많은 경우 데이터를 가져오는 대신 원격 프로시저 호출 (RPC)을 통해 계산을 원격지에서 처리한 후 결과를 전송하는 방식

 - 프로세스 이주 (process migration)

 : 프로세스 자체를 원격지로 이주시키는 방식

 : 이를 이해하려면 프로세스의 코드, 실행 정보 등도 네트워크로 전송이 가능하다는 점, 그리고 멀티코어 또는 멀티 프로세서가 갖추어진 컴퓨터에서 한 코어 또는 프로세서에 할당된 프로세스가 다른 코어 또는 프로세서로 이동할 수 있다는 점을 생각해보자. 프로세스 이주의 주된 목적은 작업량 분산 및 목적에 부합하는 하드웨어/소프트웨어에서 프로세스를 실행시킴으로써 성능 향상을 시키는 것 (먼말인지..ㅋㅋ)

 

###. 분산 파일 시스템

#. 분산 파일 시스템 (Distributed File System)은 클라이언트가 원격 파일을 로컬 파일 처럼 사용할 수 있게 해준다.

#. 네트워크를 통해 물리적으로 분리되어 있는 원격 파일 시스템들을 하나의 파일 시스템처럼 이용할 수 있게 해주는 것

#. 일반적인 사용자가 자신이 사용하는 파일이 로컬인지 원격인지 구별할 필요가 없다.

#. 분산 파일 시스템에 참여하는 파일 시스템이 여럿 있을 수 있기 때문에 다른 파일 시스템에 저장되는 같은 이름을 가진 파일들을 구별할 필요가 있다.

#. 가장 간단한 방법은 파일에 호스트 이름과 그 호스트에서의 로컬 이름을 합쳐서 새로운 이름을 주는 것

#. 다른 방법은 원격 디렉토리를 로컬 디렉토리에 마운트하는 방식으로 이방식을 사용한 예로는 Network File System을 들수 있다. 마운트는 원래 로컬 파일 시스템을 디렉토리와 연결하는 명령어지만 이를 확장하여 원격 파일 시스템을 디렉토리와 연결할 수 있다.

 - USB와 NFS의 연결 명령어

 : mount -t ex4 /dev/sda1 /usr/local

 : mount -t nfs 10.0.0.2:/backups /var/backups

 

###. 분산 메모리

#. 분산 시스템의 목퓨 중하나는 자원을 공유하여 효율적으로 이용하는 것이며 여기 메모리토 포함

 

#. 원격 메모리

 - 로컬 메모리는 로컬 메모리와 보조기억장치를 합친 가상 메모리의 형태로 접근

 - 원격 메모리는 원격 메모리 API를 이용하여 클라이언트/서버의 형태로 구성

 - 프로세스는 전역 주소공간에 매핑된 로컬 주소공간의 이름을 통해 원격 메모리를 참조

 - 원격 메모리에 전송 계층 주소 (net#, host#, port#)가 할당되면 프로세스는 해당 서버 주소상의 블록과 오프셋을 참조할 수 있어야 한다.

 - 서버가 1개 이상의 블록을 관리한다고 가정하면 로컬 이름 공간안에서 단순 주소는 다음 형식의 주소에 대응됨

 : <(net#, host#, port#), block, offset>

 

 - 다른 방법으로는 각각 컴파일 시간, 적재시간, 런타임 시 로컬 주소 공간과 원격 메모리의 바인딩을 하도록 시스템을 설계 할수 있다.

 - 컴파일 시간에 바인딩하려면 두 주소공간에 대한 정보를 정확히 알고 있어야 하는데, 이는 거의불가능하다. 적재 시간 바인딩은 링커에서 외부 참조를 해결할 떄 링크 에디터에 의해 네트워크 위치가 정의된다. 이는 프로그램이 링크되고 적재될 때 사용자가 원격 메모리의 위치를 제공하는 것을 의미. 런타임 바인딩은 가장 유연하여 그중 가장 많이 사용된다. 프로그램은 메모리가 처음 참조될 때, 원격 메모리의 위치를 알아내고 이를 로컬 주소 공간에 바인딩하기 위해 이름 서버를 사용한다.

 

 

#. 분산 공유 메모리

 - Distributed Shared Memory : DSM 은 물리적으로 분리된 메모리를 하나의 주소공간을 통해 접근할 수 있게 해준다.

 - 분산 공유 메모리에서는 가상메모리 관리자가 메인 메모리와 보조기억장치 사이의 페이지 관리 뿐 아니라, 네트워크로 연결된 원격 메모리 서버도 관리한다.

 - 가상 메모리 참조에는 가상주소에 실제 로컬 메모리, 보조기억장치, 원격 메모리의 물리주소가 대응되며 이는 참조가 발생하기 전에 수행된다.

 

 - 분산 공유 메모리의 장점

 : 노드의 개수가 늘어나더라도 잘 확장된다.

 : 실제로 메모리를 공유하기 위해 해야할 일들을 프로그래머가 신경쓸 필요가 없다.

 : 복잡하고 큰데이터를 처리하는데 유리

 : 멀티 프로세서 시스템에 비해 저렴

 : 큰 가상 메모리 공간을 제공

 

 - 분산 공유 메모리의 단점

 : 분산되지 않은 공유 메모리에 비해 접근 속도가 느림

 : 공유 메모리에 저장된 데이터에 대해 둘 이상의 접근이 발생할 떄 추가적인 보호 메커니즘이 필요

 : 성능이 떨어질 수 있음

 : 프로그래머가 분산공유 메모리를 직접 제어하는 것이 어렵다

 

 

 

 

 

 

 

#. NUMA (Non- Uniform Memory Access) (분산 공유 메모리)

 

- 가상 메모리에서 통일된 주소 공간에 대응되어 있다 하더라도 실제 데이터를 접근할 떄 로컬 메모리와 네트워크로 연결된 메모리는 속도에 차이가 생길 수 밖에 없다.

 - 분산 공유 메모리를 이해하기 위해서 다음을 생각해보자. 로컬 메모리는 빠르지만, 현대의  CPU는 로컬 메모리 접근속도에 비해서도 데이터를 매우 빠르게 처리하기 떄문에 어차피 메모리와 CPU 사이에 캐시 메모리를 두고 있다. 그렇다면 이 캐시 메모리는 원격 메모리에 대해서도 쓰일 수 있다.

 - 위의 장단점에서 보인 것과 같이 프로그래머 입장에서 분산 공유 메모리는 로컬 메모리와 동일한 방법으로 사용할 수 있으면서 네트워크의 여러 프로세스의 복잡한 형태의 데이터를 공유할 수 있다는 장점을 갖는다.

 - 메세지 패싱의 경우 데이터를 문자열으 형태로 변환하여 전달한 후 다시 원래 형태의 데이터로 복원해야하고, 명시적으로 메세지를 주고 받아야하는 불편한 점이 있다.

 

###. 원격 프로시저 호출

#. Remote Procedure Call : RCP 는 프로세스가 다른 주소공간 (네트어크로 연결된 다른 컴퓨터)에 있는 프로시저를 실행 시키는 것을 말한다. 운영체제는 프로그래머가 RPC를 쉽게 이용할 수 있도록 해당 프로시저가 마치 같은 컴퓨터에 있는 것 처럼 이용할 수 있게 하고 이를 위해 필요한 일을 수행해준다.

 

#. 원격 프로시저 호출의 동작

 - 전통적인 프로시저 호출은 매개변수를 스택에 넣고, 호출할 프로시저가 있는 위치로 점프

 - RPC의 경우 호출할 프로시저는 다른 주소 공간에 있기 때문에 이 방법을 이용 불가

 - 분산 운영체제는 RPC를 일반적인 함수 호출과 구별하지 않고 처리할 수 있도록 하려 한다.

 - RPC를 사용하려는 클라이언트는 같은 주소 공간에 있는 프로지서를 일단 호출한다.

 - 이 프로시저는 스텁(stub) 루틴이라 불리며, 중간에 대리인 역할을 하게 된다

 - 즉, 전달받은 매개변수를 메세지로 포장해서 네트워크를 이용하여 대기하고 있는 특정 서버에 있는 프로세스에 전달한다.

 - 스텁 루틴은 답을 기다리게 되며, 메세지를 받은 프로세스는 이를 해당 프로시저에 전달하여 실행시킨다.

 - 그 실행결과는 다시 메세지로 포장되어 네트워크를 통해 기다리고 있는 스텁 루틴에 전달되고, 스텁루틴은 이를 다시 풀어서 자신의 실행 결과처럼 RPC를 호출한 함수에 전달한다.

 - 프로그래머 입장에서는 호출한 함수가 로컬인지 원격인지 여부를 구별할 필요가 없게 된다.

철자 틀렸다...ㅋㅋㅋ initialization임

 

 

###. RPC 호출 구현 고려사항

#. 고려사항

 - RPC는 네트워크 문제로 함수 호출에 실패할 가능성이 있다. 수행시간이 생대적으로 훨씬 느림

 - 호출하는 프로시저와 호출되는 프로시저는 서로 다른 주소 공간에 속하기 때문에 단순히 메모리 주소를 리턴하는 참조 호출은 의미가 없고 참조하려면 네트워크에서 해당하는 자원의 이름을 이용해야 함

 - RPC 수신자는 호출이 생성된 곳과 유사한 환경에서 실행되어야 함

 

#. RPC 사용

 - 클러이언트 스텁은 자신에게 주어진 매개변수를 Pack 함수를 이용하여 네트워크로 전달될 메세지로 변환

 - 메세지는 기다린 문자열 하나라고 생각할 수 있는데, 이 메세지의 어디부터 어디까지가 첫 번째 매개변수이고 이 매개변수의 타입이 무엇인지의 정보를 넣는 것

728x90