운영체제 수업시간에 공부했었던 피터슨 알고리즘에 관한 내용이다.

내용

병행 프로세스에서 순서를 지켜서 프로세스가 연산을 할 때 경고 변수와 잠금 변수를 사용하여, 간섭이 일어나지 않도록 하기 위한 알고리즘을 소스코드로 구현합니다.

미리 한번 해보았던 예제 코드의 for문으로 변수의 값을 1씩 5번 증가 시키는 것을 사용하여, 프로세스가 연산하는 값들을 출력하게끔 구현 하여 보았다.

 

Jbaci를 이용하여 테스트한 소스코드

const int FALSE = 0; // FALSE 값을 0으로 정의

const int TRUE = 1; // TRUE 값을 1로 정의

const int N = 2; //

const int m =5; // 각 프로세스가 하는 연산 횟수를 지정하는 변수

int turn; // 자신의 턴을 정하는 변수

int interested[N]; // 상대편의 연산 수행의 끝을 알 수 있는 배열

void leave_region(int process) //leave_region함수는 한 프로세스가 임계구역에 들어가서 수행을 다 한 후

{ //자신이 임계구역에서 나갔음을 알려주기 위한 함수.

cout<<process<<" process is calculate complete"<<endl; // 연산이 끝났다는 출력문 작성.

interested[process] = FALSE; //자신의 interested배열의 값을 FALSE로 바꿔줌으로써 상대편 프로세스의

} //busy Waiting 상태를 풀어 다음 연산을 실행 할 수 있도록 함

void enter_region(int process) //한 프로세스가 실행되고 나면 조건들을 비교하여, 연산 수행 중에 다른 프로세스

{ //가 연산하려고 접근을 할 때, 연산이 완료 될 때까지 while문에서 잡아두는 함수.

int n=0; // 연산을 위한 변수

int i; // 연산을 위한 변수

int other; // 상대편 프로세스 아이디를 담는 변수

other = 1-process; //두 프로세스가 0과1로 되어있으므로, 이 연산으로 상대편프로세스번호를 // 담을 수 있다.

interested[process] = TRUE; //interested의 자신의 번호를 TRUE로 만들어서, 다른 프로세스가 접근을 //할 때 while문의 (interested[other] == TRUE) 부분을 참을 만들어 //waiting 상태로 빠질 수 있게 만든다.

turn = process; //이 trun 변수 로 인하여 둘 다 busy waiting 상태로 빠지는 것을 방지한 한

//다. 두 프로세스가 동시에 접근을 하였을 때, interested값들도 다 TRUE가 //될 것이고, turn 변수도 자신의 이름을 쓰겠지만, turn 은 공용변수라서 조 //금이 라도 늦게 기록한 프로세스 값이 나오게 되고, 그렇다면 그 이외의 프 //로세스 가 진입을 할 수 있게 되고, 늦게 쓴 프로세스는 while 문에 의해 //busy waiting 상태에 빠지게 된다.

 

while( (turn == process) && (interested[other] == TRUE) ) //이 while 문에서 조건이 FALSE 가

{ //될 때 아래 연산을 수행 할 수 있다.

cout<<"["<<process<<" process is Wating...]"<<endl; // 대기 중인 프로세스를 알리는

} // 출력문.

cout<<"enter process is "<<process<<" process"<<endl; //while 문을 통과하여 연산을 시작한

//프로세스를 알리는 출력문.

cout<<process<<" process's calculate"<<endl;

for(i=1; i<=m; i=i+1) // 간단한 더하기 연산을 하는 for문

{

n = n+1;

cout<<process<<" process"<<" n = "<<n<<" i = ";

cout<<i<<" "<<process<<" process"<<endl;

}

cout<<process<<" process's calculate result is "<<n<<endl; //연산의 결과를 알려주는 출력문.

}

void process(int process) // 일을 하는 스레드

{

enter_region(process); //프로세스가 enter_region을 실행후 leave_region을 실행하여 다음 프로세스가

leave_region(process); //진입 할 수 있도록 만들어줌

}

void main()

{

int j;

for(j=0; j<N; j=j+1) // 처음 interested값을 0으로 초기화 함.

{

interested[j] = 0;

}

cobegin

{

process(0); // 두 개의 프로세스를 병행적으로 수행하기 위하여 cobegin을 사용하여

process(1); // 프로세스 두 개를 생성.

}

}

소스 해석

프로세스를 병행 실행을 할 수 있도록 cobegin 함수를 사용하여 일꾼에 해당하는 프로세스를 2개 생성합니다.

그리고 각각의 프로세스는 일을 수행하기 전에 enter_region에 들어가서 각 조건을 확인하고 while문안의 조건 값이 FALSE 가 될 때 연산을 실행합니다. 한 프로세스가 진입을 한 후에는 다른 프로세스는 진입을 할 수 없게 되며, 앞의 프로세스가 연산을 완전히 완료한 후 leave_region 함수를 통하여 끝을 알려주면, 연산을 할 수 있도록 하여, 공용 변수 사용함에 있어서 병행으로 수행되는 두 프로세스가 연산함에 있어 서로의 간섭으로 인해 결과 값이 틀어지는 것을 방지 하게 됩니다. 각각 수행되는 상세 부분은 주석으로 설명을 달아놓았습니다.

실행화면

 

 

'Study > OS' 카테고리의 다른 글

Test-And-Set  (0) 2012.04.27
Bakery 알고리즘  (1) 2012.04.22
jBACI 사용법  (0) 2012.04.15
JBACI  (0) 2012.04.14
BACI 툴  (0) 2012.04.14

이전에 올려둔 jBaci 툴을 사용하는 방법을 정리 ㅎ

이전에 올려둔 jbaci파일을 다운 받아서 압축을 풀면 run.bat파일이 있다. 그 파일을 실행하면 CMD 창과 함께 다음과 같은 화면이 나온다.

 최초 실행화면  

여기서 에디트에다 테스트 소스를 다음과 같이 입력해본다.

cobegin 문은 병렬로 프로세스들을 실행할때 사용하는 구문이다.

작성이 완료 되었으면 저장을 하는데 저장 할 때, 파일명.cm으로 저장을 한다

 

저장이 된후에 컴파일 을 눌러주면 소스가 이상이 없을시 다음과 같은 문구가 와 CMD창에도 변화가 생긴다. 그리고 .cm이 있는 폴더에 파일명.lst와 파일명.pco 파일이 생성이 된다.

 

제대로 완료가 되었으면 Run 탭을 눌르면 다음과 같은 창이 나온다.

 

Go 버튼을 눌르면 실행이 되는데 옆에 Processes 탭에서 각 프로세스를 더블클릭하면 다음과 같이 각 프로세스별 상황이 다 출력된다.

참고 ) 디버그 하는방법

1.  Run화면에서 Step Pcdoe 를 눌르면 한스텝씩 계속해서 진행이된다.

2. Go를 누른후 Pause를 눌르고 Step Source를 눌르면 한스텝씩 진행이된다.

'Study > OS' 카테고리의 다른 글

Test-And-Set  (0) 2012.04.27
Bakery 알고리즘  (1) 2012.04.22
Peterson 알고리즘  (0) 2012.04.22
JBACI  (0) 2012.04.14
BACI 툴  (0) 2012.04.14

 

jbaci1-4-5.zip

baci 툴을 더 쉽게 사용할수 있도록 만든

Jbaci 툴입니다.

'Study > OS' 카테고리의 다른 글

Test-And-Set  (0) 2012.04.27
Bakery 알고리즘  (1) 2012.04.22
Peterson 알고리즘  (0) 2012.04.22
jBACI 사용법  (0) 2012.04.15
BACI 툴  (0) 2012.04.14

 

badosxe-2005Nov09.zip

 

BACI 툴 입니다. 운영체제 교육 자료

'Study > OS' 카테고리의 다른 글

Test-And-Set  (0) 2012.04.27
Bakery 알고리즘  (1) 2012.04.22
Peterson 알고리즘  (0) 2012.04.22
jBACI 사용법  (0) 2012.04.15
JBACI  (0) 2012.04.14

로마의 정치가 카토는 80세가 되었을 때 그리스어를 배우기 시작했다. 그러자 그의 친구들은 카토를 놀리며 말했다.

 

"아니, 그 나이에 왜 그렇게 어려운 그리스 어를 배우나?"

 

"응. 오늘이 내게 남은 날 중에서 가장 젊은 날이라 시작했네."

 

오늘이 내 인생에서 가장 어린날, 젊은 날이라는 생각을 할 수 있다면 오늘이 행복해지기 위한 최고의 날임을 알게 됩니다. 세상 어떤 달력에도 '나중에' 라는 날은 없습니다. 오늘 우리 인생에서 최고로 젊은 날을 즐겨야 한다.

 

-긍정力사전

'좋은글' 카테고리의 다른 글

-  (0) 2012.11.09
열정의 정체  (0) 2012.04.27
나무꾼의 여유  (0) 2012.04.09
성공이라는 글자  (0) 2012.04.04
실패의 지혜  (0) 2012.04.01

FND500 (캐소드) FND507(애노드) 방식 (FND : Flexible Numeric Display)

 

 

 

모든 LED의 공통단자가 VCC에 물려 있어 각 단자에 GND를 연결할 때 불이 들어오는 방식이 Common-anode 방식

 

anode를 검색해보면 양극 이라는 뜻이다. 즉, 공통단자에다가 양극(VCC)을 물리는 것이 anode방식이란 뜻

 

모든 LED의 공통단자가 GND 에 물려 있어 각 단자에 VCC를 연결할때 불이 들어오는 방식이 Common-cathode 방식

 

cathode를 검색해 보면 음극 이라는 뜻이다. 즉, 공통단자에다가 음극(GND)를 물리는 것이 cathode방식이란 뜻

 

 

 

헷갈리지 말자 ! ㅎㅎ

해밍코드_데이터전송값_구하기.exe

컴퓨터 구조론 시간에 했던.

해밍코드를 이용한 데이터 전송 비트 값을 구하는 프로그램

 

해밍 코드란?

 

해밍코드는 에러정정 코드(error correction code) 중 가장 간단한 형태의 코드로 한 비트에 에러를 검출하고 자동으로 정정까지 해주는 코드이다. 패리티 비트를 가지며 문자 코드의 경우 4개의 여분 비트를 가지고 있다.

 

관계식 (해밍 코드를 만드는식)

2의p승 >= m + p + 1

p : 페리티 비트의 수

m : 정보 비트의 수

 

페리티 비트 수는 각각 데이터 사이에 들어가서 전송중 애러가 있는지를 검출한다 2의 지수승 자리에 들어가서 검출함

 

2의 1승 2의 2승 2의 3승 2의 4승 .. 이런식으로 들어가므로

 

1번째자리 2번째자리 4번째자리 8번째 자리에 들어감

 

전송할 데이터가

1 0 1 1 0 1 1 1   이라면

관계 식에 의해서 m = 8 이되고 p 는 4가 된다. 

 

16 >= 8 + 4 + 1 이므로

 

여기서 이제 페리티비트수를 집어넣어주면된다

 

p1  |  p2  |  1  |  p3 |   0 |   1  |  1  |  p4  |  0  |  1  |  1  |  1    이렇게 p의 자리에 0과 1중의 숫자를 계산해서 넣으면 완료

 

여기서 짝수 페리티랑 홀수 페리티가 있는데, 두 페리티는 반대 개념이며, 짝수 페리티만 설명 해 보겠다.

 

p1  의 값은 1, 3, 5, 7, 9, 11, 13 번째 비트를 점검하여 1의 개수가 짝수 개가 되도록 하면된다.

여기서는 p1, 1, 0, 1, 0, 1 로써 p1을 제외 하고 1의 갯수가 3개 이므로 짝수 페리티비트를 만들려면  p1의 값이 1이 되어야한다.

 

p2의 값은 2, 3, 6, 7, 10, 11, 14 번째 자리를 점검하고

여기서는 p2, 1, 1, 1, 1, 1  14번자리는 없음

이므로 1이 5개가 되고 짝수페리트를 맞추려면 역시 p2가 1이 되어야 6개로 짝수개가 된다.

 

여기서 점검할 자리를 결정하는것은 2진수 의 비트수를 검사하는것인데

 

예제 데이터(p1,p2,1,p4,0,1,1,p8,0,1,1,1)의 순서로 보면

p1의 경우 1번째 자리이므로 이진수로 0001

p2의 경우 2번째 자리이므로 이진수로 0010

 1 의 경우 3번째 자리이므로 이진수로 0011

p4의 경우 4번째 자리이므로 이진수로 0100

 0 의 경우 5번째 자리이므로 이진수로 0101

 1 의 경우 6번째 자리이므로 이진수로 0110

 1 의 경우 7번째 자리이므로 이진수로 0111

p8의 경우 8번째 자리이므로 이진수로 1000

 0 의 경우 9번째 자리이므로 이진수로 1001

 1 의 경우10번째 자리이므로 이진수로 1010

 1 의 경우11번째 자리이므로 이진수로 1011

 1 의 경우12번째 자리이므로 이진수로 1100

 

이 된다. 여기서 p1을 결정할때 확인해봐야하는 요소는 이진수로 끝자리가 1인것,  p2를 결정할때 확인해봐야하는 요소는 이진수로 끝에서 두번째자리가 1인 것 p4를 결정할때 확인해봐야하는 요소는 이진수로 끝에서 3번재자리가 1인것 이런식으로 확인을 하면된다.

 

 

그렇게 해서 완성된 해밍코드는 (짝수페리티)

1(p)  1(p)  1  1(p)  0  1  1  1(p)  0  1  1  1

를 전송한다.

만약 전송비트가 위와같으나 수신비트가

1(p)  1(p)  1  1(p)  0  0(오류)  1  1(p)  0  1  1  1 

이렇다면 수신측에서 검사를 통하여 오류를 잡아낼수있다.

패리티 자리로 검사를 하는데

p1 = 1, 3, 5, 7, 9, 11 번의 자리의 1의 개수를 검사한다. 짝수개이므로 0

p2 = 2, 3, 6, 7, 10, 11번의 자리의 1의 개수를 검사한다. 홀수개이므로 1

p4 = 4, 5, 6, 7, 12번의 자리의 1의 개수를 검사한다. 홀수개 이므로 1

p8 = 8, 9, 10, 11, 12번의 자리에서 1의 개수를 검사한다. 짝수개 이므로 0 이된다.

 

순서대로 나열하면

 

p8   p4  p2  p1

0     1    1    0

이므로 (0110)이진수 는 6을 나타냄

 

6번째 자리의 숫자가 오류라는 판정임 따라서 6번의 0 을 1로 정정해주면 오류가 해결된다.

'Study > C Language' 카테고리의 다른 글

S-DES  (0) 2015.08.11
serial commutnication escape charater  (0) 2014.04.24
짝맞추기 게임  (0) 2012.09.18
베스킨 라빈스 31 게임  (6) 2012.04.27

두 인부가 산에서 부지런히 나무를 베고 있었다.

 

일이 끝날 때 즈음 서로가 벤 나무를 세어보는데 한 인부가 다른 인부보다 두 배를 더 많이 베어서 그 노하우를 물었다.

 

"저는 저 친구가 쉬지도 않고 일을 할 때 가끔씩 쉬면서 휴식도 취하고 도끼날도 갈았을 뿐입니다."

 

마침표는 끝이 아니다. 앞으로 나아가기 위한 시작일뿐,

쉼표도 더 나아가기 위한 쉼이자, 여유 이다.

 

몸은 바쁘지만 마음은 늘 여유가 있었으면 좋겠다.

 

-긍정力사전-

'좋은글' 카테고리의 다른 글

-  (0) 2012.11.09
열정의 정체  (0) 2012.04.27
카토의 인생 철학  (0) 2012.04.14
성공이라는 글자  (0) 2012.04.04
실패의 지혜  (0) 2012.04.01

성공이라는 글자를 현미경으로 들여다 보면, 그 속에는 수없이 작은 실패가 개미처럼 기어다닌다고 한다.

리더라는 말도 수많은 시행착오와 실패를 이겨낸 지혜로 이루어져 있다.

 

어려움은 늘 지혜와 축복의 뿌리이다.

 

-긍정力사전-

'좋은글' 카테고리의 다른 글

-  (0) 2012.11.09
열정의 정체  (0) 2012.04.27
카토의 인생 철학  (0) 2012.04.14
나무꾼의 여유  (0) 2012.04.09
실패의 지혜  (0) 2012.04.01

자료(DATA)

   - 자료란 현실 세계에서 어떤 측정을 통해 얻은 단순한 값이다.

   - 현실 세계에 대한 관찰을 통해 얻은 사실이다.

   - 처리되지 않은 데이터이다.

   예) 온도, 습도, 날씨 의 순수한 값들

 

정보(INFORMATION)

   - 자료를 처리하여 얻은 값.

   - 자료에 대한 분석을 통해 얻은 지식.

   - 의사 결정을 위한 지식

   예) 출근하는 사람에게 날씨(비가온다면) 우산을 챙길지 말지를 결정하는 정보가 됨.

   예) 온도는 외출하는 사람에게 옷의 종류를 결정 할 수 있게 하는 정보가 됨.

+ Recent posts