컴퓨터 공학에서의 동기화

limprove·2020년 7월 6일
1
post-thumbnail

주제: 전산에서 사용되는 동기화 개념에 대한 조사

목적: 클럭 동기화, 데이터 동기화, 동기/비동기 호출 등 동기화란 용어는 컴퓨터과학에서 다양하게 사용되고 있다. 이러한 다양한 영역에서의 동기화에 대한 내용을 요약 정리하고 이해하여 많은 곳에서 중요하게 사용되는 동기화의 활용 능력을 향상시킨고자 한다.

  1. 조사 상세 목록
    1. 동기가 의미하는 바에 대한 다양한 해석
    2. 컴퓨터 공학 프로그래밍 영역에서의 동기화(Synchronization)
    3. 네트워크 데이터 전송에서의 동기화
      1. 비동기식 전송과 동기식 전송의 차이점
      2. 비트동기
      3. 문자동기

기술적 이해가 아닌 개념적 이해를 집중적으로 살펴보자

1. 동기가 의미하는 바

동기 : 같을 동(同), 기약할 기(期) // 같은 기간, 같은 주기
synchronous [adjective]

: happening, existing, or arising at precisely the same time

=> 정확히 같은 시간에 발생, 존재하는 것,

동기화 : Synchronous한 상태

synchronization

: the state of being synchronous

=> 정확히 같은 시간에 발생 존재하는 상태화하는것


동기의 개념?

데이터를 보낼때와 받을때의 시간을 맞춰주는 행위

컴퓨터 과학에서의 동기화란? 혼란증가

전송매체로 연결되는 두 장치 간에 데이터를 교환하기 위해 전송되는 비트들의 타이밍 (전송율, 전송시간, 간격)이 송신측에 있어서 똑같아야 한다. 동기화란 송신측과 수신측이 정확히 송수신할 수 있게 시간을 맞추는 것

동기화는 컴퓨터 과학에서 다양한 계층에 활용되고 있다.

물리 계층, 데이터 링크 계층, 응용 계층 등에서 동기/비동기식 통신이 이루어진다.

동기화는 컴퓨터 시스템(기능적 모듈간의 통신, 메모리와 CPU간의 데이터 전송), 네트워크, GPS등 많은 부분에 사용된다. 또한 동시의 데이터베이스상의 데이터 일치를 의미하기도 한다.

프로세스 ? 쓰레드 ?

최신 운영체제의 필수요소 중 하나
예전에는 프로그램을 실행하는 흐름이 오로지 프로세스뿐이었으나, 소프트웨어가 진보하면서 하나의 프로그램에서 복잡한 동시 작업을 요구하기 시작하였다. 이를 위해서는 하나의 프로그램이 여러개의 프로세스를 만들어야 했는데 프로세스 특성상 하나의 프로그램이 이러한 동시 작업을 수월하게 할 수가 없었다.
그래서 프로세스보다 더 작은 실행 단위 개념이 만들어지게 되는데 이것이 스레드이다.

프로세스는 서로 완벽한 독립적인 공간(메모리)을 가진다. 각자가 각자의 스택과 데이터 영역을 가지고, 보호받는다. 프로세스는 시작할 때 운영체제에서 PCB와 메모리 공간을 할당받고 초기화하는 과정이 필요하다. 다른 프로세스의 영역을 들여다볼 수 없기 때문에 프로세스끼리 통신하기 위해서 프로세스간 통신(IPC)을 활용하거나 공유 메모리를 생성해 데이터를 주고받는 등의 번거로운 과정을 거쳐야만 한다.
스레드는 스택은 분리되어있지만, 데이터는 하나를 공유한다.

위에 설명한 컴퓨터 시스템에서의 동기화는 멀티프로세스, 멀티스레드 환경에서의 데이터 전송을 의미한다. (싱글프로세스 안에서 싱글 쓰레드 일 경우에는 동기화의 이유가 없음)

화장실에 비유 / 노트 와 문잠그기 / 하나의 공간에 두개가 침입 !문제발생 ! => 레이스컨디션 (race condition)

동기화는 동시의 데이터베이스상의 데이터 일치를 의미하기도 한다.
예를 들어 은행 서버에 접속한 클라이언트의 계좌에는 10만원이 있다. 클라이언트가 자신의 계좌에서 10만원을 인출하는 거래를 실행한다고 할 때, 클라이언트와 서버가 데이터가 일치하지 않는다면 서버의 기록에는 방금 전 클라이언트의 인출 정보가 없을 것이다. 따라서 클라이언트는 10만원을 한 번 더 인출할 수도 있을 것이다. 그렇게 되면 클라이언트는 10만원의 정보로 20만원을 인출하게 되는 것이므로 일종의 오류라 볼 수 있겠다. 이런 일이 없기 위해서는 클라이언트와 서버는 항상 데이터가 일치해야 하고, 이 데이터 일치화를 '동기화'라고 한다.

다른 예로는 애플의 아이튠즈를 들 수 있다. 아이튠즈와 기기간의 동기화는 기본적으로 아이튠즈의 데이터가 기준이다. 기기에 10곡의 음악파일이 있고 아이튠즈에는 음악파일이 없을 때 동기화를 하게 되면 기기의 데이터가 아이튠즈의 데이터를 따라가기 때문에 기기에 있던 10곡의 음악파일은 사라지게 된다.

2. 컴퓨터 공학 프로그래밍 영역에서의 동기화

동기
: 다른 쓰레드에 작업을 보내고 대기

비동기
: 다른 쓰레드에 작업을 보내고 즉시 리턴

동기화 / 비동기화 => 프로세스의 수행 순서 보장에 대한 매커니즘

블록킹 / 논블록킹 => 프로세스의 유휴 상태에 대한 개념

블로킹 : 블로킹은 자신의 수행결과가 끝날 때까지 제어권을 갖고 있는 것을 의미

논블록킹 : 자신이 호출되었을 때 제어권을 바로 자신을 호출한 쪽으로 넘기며, 자신을 호출한 쪽에서 다른 일을 할 수 있도록 하는 것을 의미

동기방식 + 블록킹

function employee () {
  for (let i = 1; i < 101; i++) {
    console.log(`직원: 인형 눈알 붙히기 ${i}번 수행`);
  }
}

function boss () {
  console.log('사장: 출근');
  employee();
  console.log('사장: 퇴근');
}

boss();

동기방식 + 논블록킹

function* employee () {
  for (let i = 1; i < 101; i++) {
    console.log(`직원: 인형 눈알 붙히기 ${i}번 수행`);
    yield;
  }
  return;
}

function boss () {
  console.log('사장: 출근');

  const generator = employee();
  let result = {};

  while (!result.done) {
    result = generator.next();
    console.log(`사장: 유튜브 시청...`);
  }

  console.log('사장: 퇴근');
}

boss();

비동기 방식 + 논블로킹 방식

function employee (maxDollCount = 1, callback) {
  let dollCount = 0;
  const interval = setInterval(() => {
    if (dollCount > maxDollCount) {
      callback();
      clearInterval(interval);
    }
    dollCount++;
    console.log(`직원: 인형 눈알 붙히기 ${dollCount}번 수행`);
  }, 10);
}

function boss () {
  console.log('사장: 출근');
  employee(100, () => console.log('직원: 눈알 결산 보고'));
  console.log('사장: 퇴근');
}

boss();

비동기 방식 + 블로킹 방식 (거의 없다, 운영체제 I/O 다중화 모델에 활용)

3. 네트워크 데이터 전송에서의 동기화
1. 동기식 전송과 비동기식 전송의 차이점

구분동기식 전송 방식비동기식 전송방식
통신 속도고속저속
회로 복잡도복잡단순
구축 비용고가저가
동기 제어 방식클럭 동기Start bit, Stop bit
전송 단위블럭 단위 전송문자 단위 전송
사용 예시전화 교환망, ATM, 데이터 통신망RS-232C

통신 방식에 따라 동기식과 비동기식으로 나눌수 있다.

동기식 전송 == 연속적 전송(계속 보낸다) => 데이터 신호와 별도의 클럭 신호를 전송, 양측의 타이밍을 일치
비동기식 전송 == 간헐적 전송(간간히 보낸다) => 데이터 신호안에 동기 클럭 신호를 포함하여 전송, 수신 측에서 수신 신호로 타이밍 식별

단극RZ(Unipolar Return to Zero): 신호가 들어왔을 경우, 1 레벨 유지 후 0 복귀, 비트 펄스 사이에서 반드시 일정시간동안 0 유지 후 다음 신호 전송

Unipolar RZ

동기식 전송 (Synchronous Transmission)
두 대의 송수신 시스템이 통신 시 시차가 있을 경우 보내온 데이터를 잘못 해석할 가능성을 막기 위해 양방향 시차를 맞추어 수신자가 정확히 수신할 수 있는 기술이다. 한 글자 단위가 아닌 미리 정해진 수만큼의 글자열을 한 블럭으로 만들어 일시에 전송한다. (박물관 예시)

데이터 블럭의 전후에 특정한 제어 정보를 삽입하며, 데이터 블럭과 전후의 제어 정보를 합쳐서 프레임이라고 한다.

프리엠블 (Preamble) : 앞부분의 제어 정보 (SYN: 00010110)
포스트엠블 (Postamble) : 뒷부분의 제어 정보 (ETX)

동기식 방식은 전송효율과 전송속도가 높으나, 반드시 수신 측에 버퍼 기억장치를 내장하여야 한다.

프레임의 전송 구조가 비트 위주인지, 문자 위주인지에 따라 결정된다. (하단 설명 참조)

비동기식 전송 (Asynchronous Transmission)
데이터를 전송할 때 하나의 글자를 나타내는 부호(5~8비트)의 전후에 스타트비트와 스탑 비트를 넣어서 블록의 동기화를 취해주는 방식 (Start-Stop 방식이라고도 한다.) 비트열을 전송하지 않을 때는 회선은 휴지 상태(idle, 항상 1)로 있다가 데이터 전송시에 ST상태(0)를 전송하여 수신측은 타임슬랫의 1/2시간 동안 0 상태를 유지함을 감지하여 데이터 수신을 준비한다. 글자를 구성하는 각 비트의 길이는 통신속도에 따라 정해진다.
300 ~ 2400 bps 정도의 비교적 저속 데이터 전송에 사용된다. (봉화 예시)
bps(Bit Per Second) : 초당 전송할 수 있는 비트의 양 = 보오레이트

16진수->2진수 변환 (https://www.easycalculation.com/ascii-hex.php)

비트 하나 정도 혹은 여러개의 비트가 제대로 전송되지 못하는 사태를 대비하기 위해 스탑비트 직전 패리티 비트를 넣어 홀수 패리티는 데이터비트와 패리티비트의 1의 갯수가 항상 홀수를 만들게 설정, 짝수 패리티는 데이터비트와 패리티비트의 1의 갯수가 항상 짝수를 만들게 설정

  1. 비트동기 (동기식 전송방식)
    : 전송 단위를 일련의 비트 묶음으로 보고, 비트 블록의 처음과 끝을 표시하는 특별한 비트인 플래그 비트(01111110)를 추가해 전송, 에러 검출은 FSC 이용, 보낼 데이터가 없어도 항상 플래그를 보내 동기를 유지, 데이터 전송시 투명성을 보장하기 위해 비트 스터핑 (하나의 전송 블록 내에 일반 문자 데이터와 제어문자 데이터를 같이 전송하는 방식) 사용
    (HDLC, SDLC, ADCCP 프로토콜에서 사용)

  1. 문자동기 (동기식 전송방식)
    : 전송되는 데이터의 블록 앞에 특정 동기 문자인 SYN을 붙여 동기를 맞추고 실제 데이터 블록의 앞에는 STX, 뒤에는 ETX를 추가하여 전송 데이터의 시작과 끝을 나타냄
    (BSC 프로토콜에서 사용)

최종 정리

분류동기식 전송비동기식 전송
정의송수신을 위해 사용되는 클록이 상대측과 서로 계속 같은 주파수(또는 타이밍)으로 동작하며,
일정 시간 간격으로 위상을 조절 또는 보완하는 전송 방식
송수신을 위해 사용되는 클록이 상대측과 서로 독립적으로 운용되는 전송 방식
특징정보 전송 형태는 블록 단위
송신기와 수신기는 동기 상태를 유지
블록과 블록 사이에 휴지 간격이 없음
전송속도는 보통 2,000bps 이상 고속
전송 성능이 좋고 전송 대역이 좁음
시작비트와 정지 비트가 없이 출발과 도착시간이 정확한 방식
비트열이 하나의 블록 또는 프레임의 형태로 전송
모뎀이 단말기에 타이밍 펄스를 제공하여 동기가 이루어짐
장비가 복잡함
정보 전송 형태는 문자 단위
송신 측과 수신 측이 항상 동기 상태에 있을 필요 없음(문자 전송 시에만 동기 유지)
전송 문자마다 시작 비트와 정지 비트를 지님(송수신 간의 동기 유지를 위해서)
전송 문자 사이에 일정하지 않은 휴지 간격이 존재
전송속도는 보통 2,000bps 이하로 저속
전송 성능이 나쁘고 전송 대역이 넓음

참고 URL
https://jhnyang.tistory.com/36
https://linecard.tistory.com/34
https://private.tistory.com/24
https://evan-moon.github.io/2019/09/19/sync-async-blocking-non-blocking/

profile
즐겁게 개발하는 프론트엔드 개발자 입니다.

0개의 댓글