본문 바로가기

분산서버

분산 운영체제 (4) - 정리

클라이언트/서버(Client/Server) 시스템

  : 서버는 공유된 다양한 시스템 기능과 자원을 제공하고 클라이언트는 다양한 서비스를 제공받을 수 있는 시스템이다.


1) SISD (Single Instruction Single Data)

- 단일 처리기 컴퓨터로서 한 번에 한 명령어만을 처리한다.

- 1명의 사용자가 1개의 CPU를 사용한다.

- 개인용 컴퓨터 (PC) 급 수준이다.

- 다수의 기계어 명령들이 동시에 서로 다른 단계에서 수행할 수 있게 하는 파이프라인 (Pipe-line) 기법에 응용할 수 있다.


2) SIMD (Single Instruction Multiple Data)

- 다중 처리기 컴퓨터로서 한 번에 한 명령어만을 처리한다.

- 1명의 사용자가 여러 개의 CPU를 사용한다.

- 슈퍼컴퓨터, 과학 기술용 컴퓨터 수준이다.

- 어레이 처리 (Array Processing) 기법에 응용할 수 있다.


3) MISD (Multiple Instruction Single Data)

- 단일 처리기 컴퓨터로서 한 번에 여러 개의 명령어를 처리한다.

- 여러 명의 사용자가 1개의 CPU를 사용한다.


4) MIMD (Multiple Instruction Multiple Data)

- 다중 처리기 컴퓨터로서 한 번에 여러 개의 명령어를 처리한다.

- 여러 명의 사용자가 여러 개의 CPU를 사용한다.

- 일반적으로 다중 처리기 혹은 다중 컴퓨터라고 불린다.


MIMD (Multiple Instruction Multiple Data)


1) 다중 처리기 (Multi-processor)

여러 개의 CPU가 하나의 메모리를 공유하는 형태로 CPU끼리의 결합력이 강하며, 병렬 처리에 적합한 컴퓨터 시스템 구조이다.

- 여러 개의 CPU가 하나의 메모리 (기억 장소)를 공유한다.

- 강 결합 (Tighty-coupled) 시스템이다.

- 병렬 처리 시스템에 적합하다.

- 전송 지연이 짧고 데이터 처리율이 높다.

- 프로세스 간 통신은 공유 메모리를 통해 이루어진다.

- 공유 메모리를 차지하려는 프로세스 간의 경쟁이 발생한다.

- 기억 장소가 하나이므로 운영체제도 종속적으로 사용된다.

- 모든 CPU는 하나의 운영체제에서 통제되는 대칭적인 구조이다.


2) 다중 컴퓨터 (Multi-computer)

여러 개의 CPU가 자신만의 독립적인 메모리를 사용하는 형태로 CPU끼리 결합력이 약하며, 분산 처리에 적합한 컴퓨터 시스템 구조이다.

- 여러 개의 CPU가 독립적인 메모리를 사용한다.

- 약 결합 (Loosely-coupled) 시스템이다.

- 분산 처리 시스템에 적합하다.

- 전송 지연이 길고 데이터 처리율이 낮다.

- 프로세스 간의 통신은 통신망에 메시지 (소켓 : Socket) 전달로 통신할 수 있다.

- 구성 요소 (컴퓨터, 주변 장치 등)의 추가 또는 삭제가 용이하다.

- 기억 장소가 CPU와 독립적으로 사용되므로 운영체제도 독립적으로 사용된다.

- 각 시스템은 자신만의 운영체제를 갖는 분리 수행 구조이다.


MIMD의 위상 (Topology)에 따른 분류


1) 다중 처리기 (Multi-processor)의 위상 (병렬 처리 시스템의 위상)

* 버스형 다중 처리기

* 교환형 다중 처리기


2) 다중 컴퓨터 (Multi-computer)의 위상 (분산 시스템의 위상)

* 버스형 다중 컴퓨터

* 교환형 다중 컴퓨터


다중 처리기와 운영체제 구성


1) 주/종 (Master/Slave) 프로세서 구조

하나의 컴퓨터 시스템에 두 개의 프로세서 (처리기, CPU)가 있을 경우 입출력과 연산을 각각 독립적으로 수행하지 않고 주 프로세서는 입출력과 연산, 종 프로세서는 연산을 일부 담당하게한다. 주 프로세스가 중단되면 어쩔 수 없이 시스템이 멈추지만 종 프로세서가 중단되면 컴퓨터 시스템은 계속 동작할 수 있기 때문이다.

- 주 프로세서 (Master CPU)는 입출력과 연산을 담당한다.

- 종 프로세서 (Slave CPU)는 연산만을 담당한다.

- 준 프로세서만이 운영체제를 수행한다.

- 종 프로세서는 사용자 프로그램만이 수행한다.

- 주 프로세서에 문제가 발생하면 전 시스템이 멈춘다.

- 종 프로세스에서 입출력 발생 시 주 프로세스에게 서비스를 요청한다.

- 프로세서가 비대칭 구조이다.


2) 분리 수행 (개별적 관리자, Separate-Execution) 구조

- 각 프로세서가 독립적인 운영체제를 갖는다.

- 각 프로세서에서 발생하는 인터럽트도 해당 프로세스에서 독립적으로 수행한다.

- 각 프로세서는 자신만의 파일과 입출력 장치를 제어한다.

- 프로세서가 독립적이므로 프로세서에 따라 유휴 상태 (CPU가 논다)이거나 매우 바쁠 수 있다.

- 한 프로세서의 고장으로 전 시스템이 멈추지는 않으므로 신뢰성이 높다.


3) 대칭적 (Symmetric) 구조

- 여러 프로세서들이 하나의 운영체제에서 동시에 운영된다.

- 여러 개의 프로세서가 동시에 수행될 수 있다.

- 가장 강력한 시스템이지만 매우 복잡한 구조를 갖는다.

- 운영체제는 동등한 프로세서의 Pool (프로세서 정보 테이블)을 갖는다.

- 하나의 프로세서가 중단되면 능력이 다소 떨어지지만 중단 없이 계속 가동된다.

- 프로세서의 수를 늘린다고 해도 시스템 효율은 항상되지 않는다.


분산 운영체제의 기본 개념


1) 분산 운영체제의 정의

각 호스트에 고유한 운영체제가 있는 것이 아니라 전체 네트워크에 공통적으로 단일 운영체제가 실행되는 시스템으로 원격에 있는 자원을 마치 지역 자원인 것처럼 쉽게 접근해 사용할 수 있는 방식이다.


2) 분산 운영체제의 목적

- 자원 공유의 증대성 : 각 시스템이 통신망을 통해 연결되어 있으므로 유용한 자원을 공유해 사용할 수 있다.

- 계산 (연산) 속도의 향상 : 하나의 일을 여러 시스템에 분산해 처리하기 때문에 연산 속도가 향상된다.

- 신뢰성 향상 : 하나의 시스템에 오류가 발생하더라도, 다른 시스템은 계속 작업을 수행할 수 있기 때문에 신뢰도가 향상된다.

- 컴퓨터 통신 : 지리적으로 떨어진 시스템에 통신망을 두어 정보를 교환할 수 있다.


3) 분산 운영체제의 장 단점


* 장점

- CPU의 처리 능력 한계를 극복할 수 있다.

- CPU의 처리 능력을 한 단계 높이려면 현재 가격의 제곱만큼 비싸다. 따라서 처리 속도가 낮은 여러 개의 CPU를 연결해 처리 속도를 향상시킬 수 있기 때문에 경제적이다.

- 반응 시간이 빠르면 계산 능력, 처리량, 신뢰성, 가용성은 모두 향상된다.

- 특정한 시스템의 병목 현상을 제거하기 위해 필요한 자원을 추가할 수 있으므로 확장성이 좋다.

- 부하를 균등하게 배분할 수 있어 처리 효율이 향상된다.

- 다수의 사용자들이 데이터를 공유할 수 있으며, 통신이 용이하다.


* 단점

- 여러 개의 컴퓨터 시스템이 연결되어 있으므로 보안이 매우 취약하다.

- 여러 개의 컴퓨터를 하나의 컴퓨터처럼 운영해야 하므로 소프트웨어 개발이 매우 어렵다.

- 적응성이 하나의 CPU를 사용할 때보다는 떨어진다.

- 에러 발생 시 원인 파악이 어렵다.


4) 분산 시스템의 결함

- 링크 결함 : 두 개의 사이트 (컴퓨터, 노드, 교환기) 간에 연결이 잘못되어 발생하는 결함

- 사이트 결함 :사이트 자체에 발생할 수 있는 결함

- 메시지의 분실 : 통신 회선을 통에 해당 사이트로 메시지가 전달되는 과정에서 시간 지연이나 다른 이유로 메시지를 잃어버리는 결함


분산 운영체제의 위상

1) 성형 연결 (Star Connected) 구조

- 각 노드들이 Point To Point 형태로 중앙 컴퓨터 (중앙 노드)에 연결되고, 중앙 컴퓨터를 경유한다.

- 제어가 집중되고 모든 동작이 중앙 컴퓨터에 의해 감시된다.

- 중앙 컴퓨터에 과부하가 걸리면 성능이 현저히 감소한다.

- 중앙 컴퓨터에 장애가 발생되면 전체 시스템이 마비된다.

- 한 노드의 고장은 다른 노드에 영향을 주지 않는다.

- 터미널 (노드, 사이트)의 증가에 따라 통신 회선 수도 증가한다.

- 최소 두 개의 노드만 사용할 수 있으므로 통신 비용이 저렴하다.


2) 환형 연결 (Ring Connected) 구조

- 각 사이트는 정확히 다른 두 사이트와 물리적으로 연결되어 있다.

- 정보 전달 방향은 단방향 또는 양방향일 수 있다.

- 기본 비용은 사이트의 수에 비례한다.

- 메시지가 링을 순환할 경우 통신 비용은 증가한다.

- 근거리 네트워크 구조로 가장 많이 사용된다.


3) 다중 접근 버스 연결 (Multi-access Bus Connection) 구조

- 한 사이트의 고장은 나머지 사이트들 간의 통신에 아무런 영향을 주지 않는다.

- 한 시점에 단지 하나의 전송만이 가능하다.

- 처리기나 기타 장치의 증설 절차가 복잡하지 않다.

- 버스의 사용을 위한 경쟁 상태가 발생하여 시스템 성능의 심각한 저해를 가져올 수 있다.

- 버스에 이상이 생기면 전체 시스템이 마비된다.

- 시스템의 전체 통신량이 전송률에 의한 제한을 받는다.

- 시스템이 바빠지면 버스 사용은 성능 효율을 저하시키낟.

- 통신 회선이 1개이므로 물리적 구조가 간단하다.


4) 완전 연결 (Fully Connected) 구조

- 네트워크의 각 사이트는 시스템 내의 다른 모든 사이트들과 직접 연결 (Direct Link)된 구조이다.

- 기본 비용이 매우 높다.

- 사이트 간의 메시지는 매우 빠르게 전다로딘다.

- 하나의 링크가 고장나도 다른 링크를 이용할 수 있으므로 신뢰성이 높다.


5) 부분 연결 (Partially Connected) 구조

- 시스템 내의 사이트 간에만 부분적으로 연결된다.

- 기본 비용이 완전 연결보다는 낮다.

- 메시지 전달이 중간 사이트를 경유할 수 있으므로 늦어질 수 있다.

- 완전 연결에 비해 신뢰성이 높지 않다.


6) 계층 연결 (Hierarchy Connected) 구조

- 사이트들은 트리 (Tree) 형태로 구성된다.

- 루트 사이트와 서브 사이트가 존재한다.

- 루트 사이트를 제외한 다른 사이트를 하나의 부모 사이트와 여러개의 자식 사이트를 갖는다.

- 기본 비용이 부분 연결보다는 낮다.

- 마지막 사이트 (단 노드)를 제외한 사이트의 고장은 자식사이트의 중단을 초래한다.


분산 운영체제의 설계 쟁점


1) 투명성 (Transparency)

사용자가 분산된 여러 자원의 위치 정보를 알지 못하고 마치 하나의 커다란 컴퓨터 시스템을 사용하는 것처럼 인식하도록 설계할 수 있는가?

- 위치 투명성 : 사용자가 자원들의 위치를 알 필요가 없다.

- 이주 투명성 : 자원들을 이동해도 사용자는 자원의 이름이나 위치를 고려할 필요가 없다.

- 복제 투명성 : 사용자에게 통보 없이 파일들과 자원들의 부가적인 복사를 자유롭게 할 수 있다.

- 병행 투명성 : 사용자들이 자원들을 자동으로 공유할 수 있다.

- 병렬 투명성 : 몇 개의 처리기가 사용되는지 알 필요가 없다.


2) 융통성

분산 시스템을 구축하고 사용하게 될 때 많은 잘못과 상당한 역행 (Backtracking)을 초래할 수 있다. 이러한 문제를 해결할 수 있는 방법을 최대로 넓힐 수 있도록 설계할 수 있는가?


3) 신뢰성 (Reliabitity)

여러 개의 컴퓨터 중 하나의 컴퓨터가 고장이 나더라도 다른 컴퓨터가 그 일을 양도받아 단일 처리기 시스템보다 더욱 신뢰성 있게 처리할 수 있도록 설계할 수 있는가?


4) 결함 허용 (FAult Tolerance)

어떠한 문제로 서버의 문제가 발생하였을 때 사용자의 손실을 최소로 설계할 수 있는가?


5) 성능

아무리 투명하고 융통성과 신뢰성이 있다고 해도 처리 속도가 느리거나 처리량이 떨어지지 않도록 설계할수 있는가?


6) 확장성 (Scalability)

처리 능력, 처리 환경, 처리 대상 등 여러 형태의 기술을 확대할 수 있도록 설계할 수 있는가?


클라이언트 / 서버 (Client / Server) 시스템

서버는 공유된 다양한 시스템 기능과 자원을 제공하고 클라이언트는 다양한 서비스를 제공 받을 수 있는 시스템이다.


1) C/S 시스템 이전의 중앙 집중 시스템

호스트 (Mainframe) 컴퓨터와 더미 (Dummy) 단말기로 연결된 네트워크 구조이다. 더미 단말기는 메모리나 처리 능력이 없으며 전적으로 호스트에 의존한다. 호스트 컴퓨터는 데이터 저장과 검색, 터미널 사용자가 인터페이스 배치, 사용자 입력 확인 등 모든 작업의 책임을 진다. 또한 터미널의 수가 증가함에 따라 호스트의 부담이 커지며 호스트가 다운되면 모든 작업은 전면 중단된다.


2) NFS (Network File System)

썬 마이크로시스템즈가 개발한 분산 컴퓨터 시스템 환경으로 NFS는 컴퓨터 사용자가 원격지의 컴퓨터에 있는 파일을 마치 자신의 컴퓨터에 있는 것처럼 사용할 수 있는 클라이언트/서버형 응용 프로그램이다. 사용자 시스템에는 NFS 클라이언트가 있어야 하며, 원격지의 컴퓨터에는 NFS 서버가 설치되어 있어야 한다. 또한, TCP/IP를 사용해야 하기 때문에 양쪽 모두 TCP/IP 프로토콜이 설치되어 있어야 한다.

- 네트워크를 통해 원격 파일을 액세스하기 위하여 구현되고 명세화된 파일 관리 시스템이다.

- 독립된 파일 시스템을 가진 서로 다른 워크스테이션이 연결된 형태이다.

- 투명성을 통해 파일 시스템 간에 일정 수준의 공유를 허용한다.


3) LoCUS

Los Angeles의 캘리포니아 대학에서 개발된 분산 컴퓨터 시스템 환경이며 대규모 분산 운영체제를 구축하기 위해 개발된 파일 시스템이다. 사용자에게 하나의 컴퓨터를 사용하는 것처럼 느끼게 하는 네트워크 투명성을 목적으로 개발되었다.


4) Andrew

Carnegie-Mellon 대학에서 개발되어 온 분산 컴퓨팅 환경이며, 클라이언트 머신과 서버 머신으로 구분된 확장성이 큰 분산 파일 시스템이다.


스레드 (Thread)

1) 스레드의 이해

스레드의 사전적 의미는 "실을 꿰다" 이다. 운영체제에서는 스레드를 실행 될 명령어들의 연속이라 정의한다. 프로세스에서는 명령어들이 순차적으로 실행되기 때문에 실행 스레드라 할 수 있다. 하나의 프로세스를 수행하는 과정에서 여러 개의 인터럽트 루틴이나 함수를 순서적으로 수행하는 프로세스라고 한다면 이를 단일 스레드라 하고, 하나의 프로세스에 여러 개의 스레드가 존재한다면 이를 다중 스레드라 한다.

스레드는 순차적 실행과 프로세스 상태 전이의 병렬성을 접속하기 위해 개발되었다. 다중 프로그래밍 기법에서 여러 개의 프로세스는 하나의 시스템을 공유한다. 하나의 컴퓨터 시스템에서 여러 개의 프로세스가 상태 전이를 통해 실행되듯이 하나의 프로세스에서 여러 개의 스레드가 실행될 수 있도록 하는 기술이다.


2) 스레드의 장점

- 단일 프로세스를 다수의 스레드로 생성해 병행성을 증진시킬 수 있다.

- 실행 환경을 공유시켜 기억 장소의 낭비가 줄어든다.

- 프로세스의 생성이나 문맥 교환 등의 오버헤드를 줄여 운영체제의 성능이 개선된다.

- 프로세스 내부에 포함되는 스레드는 공통적으로 접근 가능한 기억 장치를 통해 효율적으로 통신한다.

- 스레드를 사용하면 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있다.

- 하나의 프로세스에 여러 개의 스레드가 존재할 수 있다.

- 스레드는 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능하다.

- 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할을 담당한다.

- 생성된 프로세스가 자신을 생성한 프로세스의 텍스트와 데이터 영역을 그대로 공유하고 스택만 따로 갖는 새로운 프로세스 모델이다.


4) 스레드 운영의 이점

- 하드웨어의 성능을 향상시킬 수 있다.

- 응용 프로그램의 처리율 향상시킬 수 있다.

- 응용 프로그램의 응답 시간을 감소시킬 수 있다.

- 프로세스들 간의 통신 속도가 향상된다.


5) 스레드 패키지의 구현


* 사용자 수준의 스레드

스레드 패키지를 사용자 영역에 두고 커널은 단일 프로세스만을 관리한다. 스레드를 운영하지 않는 운영체제에서 실행할 수 있으므로 이식성이 뛰어난다.


* 커널 수준의 스레드

스레드 패키지를 커널 자체에서 운영 관리한다. 따라서 각 응용 프로그램들은 운영체제에 영향을 많이 받게 되므로 이식성이 낮다.


- 사용자 수준의 스레드

커널 개입이 작다.

런 타임 시스템 (Run-Time System)이 필요하다.

속도가 빠르다

문맥 교환이 적다

독자적 알고리즘이 필요하다

대형 시스템에 적당하다

구현이 어렵다

커널을 스스로 호출하지 못한다

CPU 사용을 해제 못하면 시스템이 중단된다.


- 커널 수준의 스레드

커널 개입이 크다

런 타임 시스템이 필요 없고 커널이 직접 한다

속도가 느리다

문맥 교환이 많다

독자적 알고리즘이 필요 없다

대형 시스템에 부적당하다

구현이 쉽다

커널을 스스로 호출한다

CPU 사용을 해제 못하면 운영체제가 지원한다