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 유지 후 다음 신호 전송
동기식 전송 (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의 갯수가 항상 짝수를 만들게 설정
분류 | 동기식 전송 | 비동기식 전송 |
---|---|---|
정의 | 송수신을 위해 사용되는 클록이 상대측과 서로 계속 같은 주파수(또는 타이밍)으로 동작하며, 일정 시간 간격으로 위상을 조절 또는 보완하는 전송 방식 | 송수신을 위해 사용되는 클록이 상대측과 서로 독립적으로 운용되는 전송 방식 |
특징 | 정보 전송 형태는 블록 단위 송신기와 수신기는 동기 상태를 유지 블록과 블록 사이에 휴지 간격이 없음 전송속도는 보통 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/