분산시스템
네트워크와 분산 시스템
운영체제에서 분산처리란? 컴퓨터 사용자 간에 서로 데이터를 교환하여 처리할 수 있도록 네트워크로 상호 연결한 것이다.
- 강결합 시스템: 프로세서들이 메모리를 공유하는 다중 처리 시스템. 프로세서 간에 경쟁을 최소화 해야한다.
다중처리 시스템(병렬 처리): 하나이상의 프로세스, 프로세스들이 메모리와 출력을 공유
- 약결합 시스템: 둘 이상의 독립된 프로세스를 통신선으로 연결.다른 시스템의 파일참조, 부하조절 가능
네트워크의 구조(토폴로지)
-
망(mesh) 구조: 각 노드를 시스템의 모든 노드와 연결하는 완전연결방법이다. 설치비용이 많이든다. 많은 링크가 고장이 나야 시스템을 분할하므로 신뢰성이 놓다.
-
트리 구조: 주로 회사의 컴퓨터 네트워크에 사용한다. 기본 비용은 일반적으로 망 구조보다 낮다. 형제간에는 부모노드를 통해야 통신이 가능하다.
-
성형 구조: 모든 노드를 중앙노드에 직접 연결하고, 중앙 노드외의 다른노드는 연결하지 않는다. 중앙에서 병목이 발생하면 성능이 현저히 떨어짐, 비교적 간단한구조로 비용이 적게들고 집중제어로 유지보수가 쉽다.
-
링 구조: 각 노드를 정확히 다른 2개의 노드와 연결하는 방법이다. 단방향인지 양방향인지에 따라 메시지를 한쪽 혹은 양쪽으로 전달하는 것이 나뉜다.
-
버스 구조: 연결 버스하나에 모든 노드를 연결하는 방법이다. 링크가 고장나면 모든 노드가 통신불가능 하지만 각 노드의 고장은 나머지 노드와의 통신에 영향x, 신뢰성이 높고 추가 변경이 쉬워 확장성이 좋다.
원격 프로시저 호출(RPC)
단일 시스템과 달리 공유메모리가 없어. 클라이언트와 서버의 요청, 응답형태로 통신한다. 대표적인 프로세스간 통신방법이 RPC이다. RPC는 클라이언트와 서버 모델은 전제로 하는데, 클라이언트의 프로시저가 서버의 프로시저를 호출하면 프로시저를 실행후 반환값을 클라이언트에 전달한다. 요청과 응답은 1:1이다.
stub: 전송 데이터를 준비, 수신데이터를 변환하고 올바르게 해석할 수 있도록 지원하는 모듈이다.
분산 시스템의 구조와 구축 목적
분산 시스템의 소프트웨어는 하드웨어와 소프트웨어의 시스템 자원을 공유할 수 있게 한다. 단일 시스템에 비해 성능이 뛰어나고 저장용량이크며 신뢰성이 향상된다. 하지만 네트워크와 관련된 통신지연, 시스템 고장 처리 등 구현과 관리가 복잡하다.
구축 목적은 다음과 같다.
- 자원 공유 용이
- 연산 속도 향상: 여러 노드에 연산을 분산시켜 이들을 동시에 수행할 수 있다. 부하분담도 가능하다.
- 신뢰성 향상: 한 노드가 고장나도 다른 노드가 작동하므로 동작의 신뢰성을 보장한다.
- 통신 가능
- 액세스 투명성: 서로 다른 컴퓨터 구조와 프로그램 언어사이에서 상호 교류할 수 있게 한다.
- 위치 투명성: 자원 위치와 각 컴포넌트가 상호작용하는 위치를 몰라도 된다.
- 고장 투명성: 시스템 구성요소와 통신 오류 때문에 사용에 장애받지 않도록한다.
- 중복 투명성: 동일한 자원이 다수의 컴퓨터에 있더라도 사용자에게는 하나만 보이도록 한다.
- 이동 투명성: 자원을 다른시스템으로 이동해도 사용자는 이를 모드록 한다.
- 영속 투명성: 자원이 저장된 위치(메모리나 디스크)정보를 감춘다.
- 자원 투명성: 자원의 배당과 해제정보를 감춤
- 트랜잭션 투명성: 데이터무결성, 일관성 확보
- 재배치 투명성
- 규모 투명성: 구성 요소를 추가하거나 제거해도 사용자는 모른다.
- 병행 투명성: 사용자와 응용 프로그램이 서로 간섭 없이 공유 데이터 또는 객체에 동시에 액세스 가능하다.
네트워크 운영체제
= 과거 단일 운영체제+ 네트워크 기능
네트워크 운영체제의 원리
네트워크 운영체제는 자원공유(프린트 서비스, 등), 파일 전송, 액세스 권한(원격 처리), 데이터보호, 관리제어 등 기능을 제공한다. LAN의 전체 자원을 관리하며 위의 기능들을 실현할 수 있게 한다. 최근 네트워크 운영체제는 디렉터리 서비스를 지원, 자원의 위치 투명성을 지원한다. 흔히 알고 있는 File server이 예이다.
기능
- 자원 공유: 네트워크와 연결된 서버와 클라이언트간 하드디스크나 프린터 등 자원을 공유
- 액세스 권한 부여
- 파일 전송
- 데이터 보호
- 관리 제어
운용 방법
P2P 모델
LAN에 연결된 각 컴퓨터가 상황에 따라 클라이언트 또는 서버로 동작하는 방법이다. 가정의 컴퓨터가 하나의 예이다.
장점 | 단점 |
---|---|
적은 초기비용, 자원활용 극대화 | 중앙이 없어 관리가 어렵, 보안제공 x |
클라이언트/서버
클라이언트는 클라이언트, 서버는 서버의 역할만 수행하는 시스템이다. 클라이언트가 서버 서비스를 포함할 수도 있다. 파일 서버는 보안과 자원 액세스를 제공하는 시스템의 핵심으로 개별 클라이언트는 이 서버에 있는 자원에 액세스 한다.
장점 | 단점 |
---|---|
중앙집중식, 유연성, 접근성 | 비용, 네트워크 운영체제 소프트웨어, 의존성(다운 시 작업중지), 유지관리자가 필요 |
분산 운영체제의 연산
데이터 이동
파일 전체를 보내거나 일부분만 보낼 수 있다.
연산 이동
데이터 이동과 달리 다른 사이트에 위치한 대용량 파일에 액세스 후 연산결과를 반환하는 방법이다.
프로세스 이동
프로세스의 전체나 일부를 다른 사이트에서 실행하는 것이 다음 관점에서 유리할 때가 있다.
- 부하균등화: 프로세스는 네트워크로 작업량을 분산시킬 수 있다.
- 연산 속도 향상: 다른 사이트에서 동시에 수행할 수 있는 여러 서브 프로세스로 나눈다면 전체 프로세스의 반환시간이 줄어든다.
분산운영체제 구현
대부분의 분산운영체제는 마이크로 커널 기반구조이다. 프로세스와 스레드 관리, 메모리 관리, 프로세스 간 통신, 장치관리와 시스템 인터럽트 처리 등 기본 부분만 커널로 유지하고 나머지 기능은 마이크로커널의 응용프로세스로 취급한다. 마이크로 커널 vs 모놀리식 커널
-
프로세스 기반 분산 운영 체제: 시스템의 모든 프로세스와 자원을 하나의 집합으로(프로세스의 집합)으로 해석한다. 프로세스단위 해석
-
객체 기반 분산 운영체제: 각각의 객체는 프로세서, 메모리, 프린터, 디스크, 하드웨어, 파일 각각이 될수 있다. 이들은 독립되 객체로 인식하고 관리한다.
분산 시스템에서 프로세스 관리
자원 할당 교착 상태
서버의 데이터 객체 혹은 자원에서 일어난 교착상태를 일컫는다. 자원 액세스는 제어 프로세스의 지역 정보를 기반으로 결정
-
교착 상태 예방: 상호배제, 점유와 대기, 비선점, 순환 대기 조건 중 하나만 방지해도 분산 교착상태를 예방할 수 있다.
- 교착 상태 탐지: 탐지를 위해선 모든 자원의 점유와 요구사항을 자원그래프로 표현하여 사이클 여부를 검사한다. 프로세스 간 의존관계는 대기 그래프로 나타낼 수 있다.
- 중앙 집중형 제어: 노드 하나가 교착상태를 전담한다. 구현이 쉽고 비교적 작고 통신 속도가 높은 LAN에 효율적, 하지만 자원요청이 중앙프로세서에 집중되어 병목현상이 발생할 수 있다.
- 계층형 제어
- 분산형 제어: 모든 프로세서가 협력하여 교착상태를 해결, 정보를 먼저교환해야 하기 때문에 상당한 오버헤드가 발생한다.
-
교착 상태 회피: 자원 할당 요구를 허용한 후 교착 상태 여부를 결정해야하기 때문에 어렵다. 특히 모든 노드가 시스템의 전역상태를 파악해야 하는부분이 그러하다.
- 교착 상태 복구: 다른 프로세스에 필요한 자원을 많이사용하는 프로세스를 제거하고 처음 부터 재실행하도록 하는것이다.
메시지 전송 교착상태
프로세스가 메시지를 기다리는 상태로, 상호대기와 메시지 버퍼 미적용으로 발생할 수 있다.
-
상호대기: 순환대기와 비슷, 한 프로세스가 다른프로세스의 메시지를 기다리며 이 상태가 꼬리에 꼬리를 물어 사이클이 형성된 상태
-
메시지 할당 버퍼 불충분: 전송중인 메시지를 저장하는 버퍼의 할당이 부족해서 교착상태가 발생한다.
클라이언트/서버 분산 컴퓨팅
정의
클라이언트는 다른 프로그램에 서비스를 요청하는 프로그램(윈도우, GUI) 서버는 클라이언트가 동일한 데이터베이스에 액세스하여 데이터를 공유할 수 있도록 관리, 이들은 네트워크(LAN, WAN)으로 서로 연결한다.
WAN: 광역 네트워크 ex)전화선
요청
사용자 -> 클라이언트 -> 서버
응답
사용자 <- 클라이언트 <- 서버
구조
클라이어트/서버 시스템은 2계층과 3계층 구조로 나뉜다
2계층
-
팻 클라이언트: 대부분의 처리를 클라이언트단에서 처리하고 서버는 데이터베이스 읽기/쓰기만 처리한 결과를 다시 클라이언트로 보낸다.
-
씬 클라이언트: 팻 클라이언트와는 반대로 응용 프로그램 처리 모듈과 데이터베이스가 위치, 클라이언트에는 프레젠테이션 로직만 위치한다. 즉 클라이언트는 단순히 호출하는 기능
- 2계층 모델의 문제점 통신량 증가로 성능이 떨어져 병목현상 발생, 응용 프로그램이 특정 데이터베이스에 종속되어 데이터가 증가하면 통합하기 어렵고 유연성이 떨어진다.
3계층
클라이언트와 응용프로그램과 미들웨어 데이터베이스 서버로 나눈다.
- 3계층 모델의 장정 클라이언트의 부담을 덜고 중간과 데이터베이스로 역할을 명확히 분리해 성능과 서버의 융통성, 확장성이 증가한다. 작업로직을 응용 프로그램 서버에 배치하여 프로그래밍 언어와 관계없이 개발가능
미들웨어
서로 다른 시스템 간에 상호 운영을 하는데 필요한 소프트웨어이다. 클라이언트와 서버간 데이터 교환이 가장 큰 역할이다. 특정 데이터베이스에 액세스하려고 작성한 프로그램이 다른 데이터베이스에도 액세스 할 수 있도록 기능을 제공한다. 예로 DBMS뿐만 아니라 GUI, 통신소프트웨어 모두를 포함한다.
다중 처리 운영체제
다중처리 == 병렬처리, 다중 프로그래밍이 소프트웨어관점이라면 다중 처리는 하드웨어관점이다. 2개 이상의 프로세서가 동일한 메모리를 공동으로 사용하며 입출력 채널과 제어장치 등을 공동으로 사용한다.
다중 처리 시스템의 연결방법
공동 버스 시스템, 크로스바 교환 행렬 시스템,다중 포트 메모리 시스템, 하이퍼큐브 시스템으로 구분한다.
공동버스 시스템
각종 장치간 정보 전송을 해당 장치의 버스 인터페이스가 제어한다.
- 어드레싱 : 버스에서 모듈을 구분, 데이터의 목적지를 결정할 수 있어야함
- 중재 : 버스 제어는 우선순위 방법을 사용해 경쟁상태를 제어한다.
- 시간 공유 : 하나의 모듈이 버스를 제어할때 다른 모듈은 잠김 및 버스 액세스를 달성할때 까지 작업을 일시 중단해야한다.
공동 버스 시스템은 경제적이고 확장성이 있으나 버스의 한계 때문에 소규모에서 사용한다.
크로스바 교환 행렬 시스템
공동 버슷 시스템의 버스수를 메모리 수만큼 증가시킨다. 메모리마다 회선이 다르므로 서로다른 메모리 2개를 동시에 참조 가능하다. 하드웨어가 복잡해질 수 있지만 각종 장치의 인터페이스를 간단하게 할 수 있다. 회선의 교차포인트에선 프로세서와 메모리 사이의 전송 경로를 설정하는 제어로직이 포함되어있다.
다중 포트 메모리 시스템
한 메모리에는 여러개의 메모리 포트가 있고 각 장치마다 메모리 포트를 할당하여 사용하는 방식이다. 높은 전송속도를 얻을 수 있지만 비싼 메모리제어 논리와케이블, 커넥터수가 필요하다는 단점이있다.
하이퍼 큐브 시스템
프로세서 2^n 개로 구성된 약결합시스템으로 n은 경로수이다. 큐브 구조에선 한노드당 경로가 3개, 8개의 프로세서로 구성되어있다.
다중 처리 시스템의 운영체제
다중 처리 시스템의 운영체제를 구성할 때는 3가지 방법이 있다.
주종 운영체제
가장 구현하기 쉬운구조, 프로세서 하나를 ‘주’로 정하고 나머지는 ‘종’으로 정한다. 주 프로세서는 연산뿐만 아니라 입출력까지 담당, 종 프로세서는 연산만 담당한다. 종 프로세서에서 실행하던 프로세스에 운영체제를 개입할 필요가 있으면 인터럽트를 발생, 주 프로세서에서 처리하도록 한다 이때 주 프로세서에는 대기 큐가 생길 수 있다. 이 방법은 ‘주’가 고장나면 전 시스템이 가동할 수 없어 신뢰성이 낮다. 또한 ‘주’는 ‘종’과 밸런스 조절을 통해 작업을 분담해야하므로 시스템의 부하가 잘알려져 있을때만 적합하다. 가장 큰 문제는 ‘주’와 ‘종’ 하드웨어의 비대칭성으로 ‘주’에 종속되어 있어 효과적으로 하드웨어를 사용하기 힘들다
분리 실행
각 프로세서마다 운영체제가 다르고 각 프로세서에서 발생하는 인터럽트는 해당 프로세서에서 처리한다. 주종에 비해 신뢰성이 높지만 고장난 프로세서를 고치려면 많은 작업이 필요하다. 각 프로세서에 입출력장치를 직접 연결하므로 입출력 장치는 수동으로 재구성해야하는 등 번거로운 작업이 동반된다.
대칭
가장 설계하기 복잡하지만 가장 강력하다. 여러 프로세서 한 운영체제를 동시에 수행할 수 있으므로 재진입 코드와 상호배제가 필요. 한 프로세서에서 실행중인 작업을 다른 프로세서로 옮겨실행 할 수 있어 협력이가능하다. 운영체제는 여러 프로세서로 옮겨가며 실행하는데 한순간에 프로세서 하나만 운영프로세서가 되게 하여 정보를 일관성있게 운영할 수 있다.
클러스터
-
네트워크로 컴퓨터 여러대를 연결하여 마치 단일 컴퓨터처럼 동작하도록 하는것이다. 대칭형 다중처리를 할 수 있는 대안으로 높은 성능과 확장성을 제공한다.
-
노드는 단일시스템, PC, 워크스테이션 등이 될 수 있고 물리적으로 분리되어 있고 LAN으로 연결한다.
-
서버노드는 외부 네트워크를 위해 공인IP를 사용, 클러스터내에서 사용하는 IP는사설IP이다.
-
액티브메시지와 같은 통신 프로토콜을 사용한다.
-
고성능 클러스터, 부하분산 클러스터, 고가용성 클러스터로 구분한다.
액티브 메시지: 병렬 분산처리 시스템에서 널리 사용하는 통신 시스템으로 메시지 기반 시스템이다. 메시지에 핸들러를 포함해 전송, 메시지 도착시 비동기 적으로 핸들러르 수행한다. 따라서 병렬화 장점이 있다.
고성능 클러스터
대규모 연산에 사용한다. 한 노드의 계산결과를 다른노드에선 미래계산에 적용, 과학기술 분야에서 사용한다. 예로 자원 관리 시스템이 있다.
부하분산 클러스터
한 사용자가 요구하는 작업량은 적지만 많은 수의 사용자를 수용해야할 때 사용하는 구조이다. 단일 서버를 사용할때 생기는 부하는 다른 노드로 분산시켜 웹서버의 과부하를 줄인다. 부하 분배 알고리즘이 시스템 전체의 성능을 좌우하게 된다.
-
DR 방법: 부하 분산 서버가 요청을 다른 컴퓨터에 분배하고 할당받은 컴퓨터가 직접적으로 응답하는 방식이다. 이때 클러스터의 실제 서버는 모두 공인 IP를 사용해야한다.
-
NAT 방법: DR과 비슷하지만 응답을 부하분산 서버를 통하여 목적지에 보내는 것이 차이점이다. 이때 공인IP는 부하 분산 서버만 필요하다.
이때 부하분산 서버는 순환할당, 최소연결등 스케줄링을 사용한다.
-
순환 할당 스케줄링(라운드 로빈): 각 프로세서에 일정시간을 할당, 다른프로세서에 기회를 준다.
-
가중치 기반 순환 할당 스케줄링: 각 서버에 가중치를 부여하고 할당한다.
-
최소 연결 스케줄링: 가장 연결이 적은 서버에서 요청을 직접처리. 서버들의 처리용량이 다양하다면 비효율적일 수 있다.
-
가중치 기반 최소 연결 스케줄링: 최소 연결+ 가중치 기반
고가용성 클러스터
하나의 컴퓨터에서 작업을 수행하다 고장이나면 다른 컴퓨터에 서비스를 넘겨받아 계속 수행할 수 있다. 부하분산 클러스터의 부하분산서버가 정지하면 서비스를 넘겨 받을 노드를 사용하기 위해 고가용성 클러스터를 같이 사용하기도 한다.
클러스터의 성능에 미치는 요소
-
네트워크의 성능: 전송속도와 신뢰도를 포함한다.
-
프로세서의 성능: 병목현상의 발생을 감소해야한다. 노드를 추가하거나 디스크 배열 시스템을 추가하여 해결
-
클러스터는 SSI(Single System Image)기능을 제공하여 편의성, 확장성, 신뢰성 측면에서 클러스터 이용률을 높인다.
출처: 그림으로 배우는 구조와 원리, 운영체제