패리티 비트(Parity Bit)란 송수신 되는 데이터의 오류를 검출하기 위해 추가된 비트이다.

문자열 내 1비트의 모든 숫자가 짝수 또는 홀수인지를 보증하기 위해 전송하고자 하는 데이터의 각 문자에 1비트를 더하여 전송하는 방법으로 1개의 비트 오류만을 검사할 수 있다.

패리티 비트는 오류 발생의 여부만을 확인할 수 있으며 오류의 수정은 불가능하다는 단점이 있다.

 

각각의 패리티 코드 내의 1의 개수에 따라 홀수 패리티와 짝수패리티로 나뉜다.

  • 짝수 패리티는 실제 송신하고자 하는 데이터의 각 비트의 값 중에서 1의 개수가 짝수가 되도록 패리티 비트를 정하는 것인데 이를테면 데이터 비트에서 1의 개수가 홀수이면 패리티 비트를 1로 정한다. 

  • 홀수 패리티는 전체 비트에서 1의 개수가 홀수가 되도록 패리티 비트를 정하는 방법이다.

예를들어 0010110 이라는 7비트 데이터에서 짝수 패리티가 되게 하기 위해서는 뒤에 1의 패리티 비트를 붙여 00101101 로 만들고 홀수 패리티 비트가 되게 하려면 뒤에 0의 패리티 비트를 붙여 00101100 으로 만든다.

 

패리티 비트는 전송 중 두 비트가 동시에 에러가 나는 경우에는 오류를 잡아낼 수 없기 때문에 절대적으로 확실한 에러 점검 방법은 아니다.

 

해밍코드(Hamming Code)

패리티 비트는 에러 검출만 할 수 있지만 해밍 코드는 에러를 검출할 뿐 아니라 수정까지 할 수 있다. 이 코드는 패리티 비트를 정보 비트 수에 따라 필요한 만큼 사용하고 그 코드 그룹의 적당한 장소에 놓는다. 

 

만약 정보 비트의 수를 d로 표시하면 그때 패리티 비트 수 p는 아래 식에 의해 결정된다. 

2^p + 1 >= d + p , 좌측의 식을 만족하는 p의 최소값

(p은 패리티 비트의 수, d는 데이터 비트의 수)

 

만약 데이터 비트가 4개 있다면 식을 이용하여 적절한 패리티 비트의 수를 얻을 수 있다. 

p가 2라고 가정하면 좌변의 값은 2^2 = 4 가 되고 우변의 값은 4 + 2 + 1 = 7 이 된다.

4 >= 7 따라서 p=2는 식을 만족시키지 못하므로 적당하지 않다.

p를 3이라고 가정하면 8 >= 8 이므로 식을 만족시킨다. 

 

정리하면 정보 비트가 정해지는 위의 식에 의해 필요한 패리티 수가 결정된다.

이렇게 결정된 후 배치방법은 다음 포스팅에서 알아보도록 하자.

 

 

 

 

C언어의 문법에 대해서 알아보자.

 

 

  • 세미콜론

C 언어는 구문이 끝날 때 ;(세미콜론)을 붙인다.

printf("Hello|n");

세미콜론을 생략하면 컴파일 에러가 발생하게 되므로 주의해야 한다.

 

 

  • 주석

C언어에서 사람만 알아볼 수 있도록 작성하는 부분을 주석이라고 한다.

주석은 컴파일러가 처리하지 않으므로 프로그램의 실행에는 영향을 주지 않는다.

주석의 쓰임세는 보통 코드 중간에 자세한 설명을 붙이거나, 특정 코드를 임시로 컴파일되지 않도록 만들때 사용한다.

// Hello 출력
printf("Hello|n");

 

//를 이용하여 주석을 표시한다.

 

 

코드의 가장 앞쪽에 주석을 넣으면 해당 줄은 모두 주석이 된다.

따라서 아래의 printf 함수는 동작하지 않는다.

//printf("Hello|n");

 

반대로 코드의 맨 뒤에 주석을 작성할 수도 있다. 이때 앞에 있는 코드는 동작하고 //뒤에 있는 코드는 동작하지 않는다.

printf("Hello|n")//printf("world|n")

 

다른 방법으로는 범위 주석이 있다.

범위 주석은 /*로 시작하여 */로 끝나며 여러 줄을 주석으로 만들거나 한 줄에서 특정 부분만 주석으로 만들 때 사용한다.

/*
printf("Hello|n");
printf("world|n");
*/

 

printf("Hello"/* 인사 */);

 

 

 

 

 

 

 

 

스레드의 정의

스레드(Thread)란 간단히는 어떠한 흐름의 단위라고 할 수 있다.

제어의 흐름을 의미하는 것으로 프로세스에서 실행의 개념만을 분리한 것을 말한다.

프로세스의 구성을 제어의 흐름 부분과 실행환경 부분으로 나눌때, 프로세스의 실행 부분을 담당함으로써 실행의 기본 단위가 되는 것이다.

하나의 프로세스 내에서 병행성을 증대시키기 위한 매커니즘이다.

프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 한다.

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

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

 

프로세스의 정의

운영체제가 관리하는 실행단위이다.

비동기적 행위를 일으키는 주체이다.

실행중인 프로그램이다.

프로시저의 활동을 말한다.

 

 

프로세스가 은행지점 이라면 스레드는 은행  지점 하나에 속한 고객 창수 여러개로 비유될 수 있다.

 

 

 

 

 

플린(Flynn)의 분류

가장 널리 사용하는 분류방식이다.

단일 명령어 스트림, 복수 명령어 스트림, 단일 데이터 스트림, 복수 데이터 스트림 네가지로 구분한다.

스트림(stream)이란 하나의 프로세서에 의해 순서대로 처리되는 명령어들과 데이터의 흐름을 말한다.

 

SISD (Single Instruction stream / Single Data steam)

하나의 명령이 하나의 데이터를 처리한다. (직렬컴퓨터 구조)

실행속도를 높이기 위해 파이프라이닝 되어 있다.

현재 많이 사용하고 있는 컴퓨터 구조이다.

 

SIMD (Single Instruction steam / Mutiple Data stream)

하나의 명령이 다수의 데이터를 처리한다.

벡터 컴퓨터, 배열 처리기에 사용된다.

 

MISD (Multiple Instruction stream / Single Data stream) 

다수의 명령이 하나의 데이터를 처리한다.

현실적으로 사용하지 않는다.

 

MIMD (Multiple Instruction stream / Single Data stream)

다수의 명령이 다수의 데이터를 처리한다.

멀티프로세서에 사용된다.

 

 

'프로그래밍 & IT' 카테고리의 다른 글

해밍 코드(Hamming Code)의 오류 검사  (0) 2020.04.27
해밍코드의 체크 비트 구하기  (0) 2020.04.26
해밍코드(Hamming Code)  (0) 2020.04.25
패리티 비트(Parity Bit)  (0) 2020.04.24
스레드(Thread)  (0) 2020.04.08

 

 

그래프 (Graph)

그래프는 정점들과 정점을 연결하는 간선으로 이루어진다.

 

그래프의 용어

  • G = (V, E)로 표기한다.

  • V = {v1, v2, v3...}로 표기한다.

  • E = e1, e2 = {(v1,v2),(v1, v3)}로 표기한다. 

 

그래프 정의하기

G=(V,E)

V={v1,v2,v3,v4}

E={e1,e2,e3} = {(v1,v2),(v1,v3),(v3,v3)}

 

 

 

+ Recent posts