[운영체제 os] 프로세스 동기화 Process Synchronization

728x90
반응형

동기화

 

한 시스템에 여러 프로세스가 존재하고(병행적, concurrent) 각 프로세스가 독립적으로 동작한다.

(비동기적, asynchronous)

 

이렇게 프로세스가 비동기적으로(서로의 실행순서나 정보를 공유하지 않고)

 

여러 프로세스가 동시에 한 자원을 쓰려고 할 때 문제가 발생할 수 있다. 

 

 

이런 문제를 해결하기 위해 프로세스간 정보를 공유하는 것 혹은 대화하는 것을 동기화라고 한다. 

 

 

임계영역 (cs, critical section)

 

공유데이터(shared data)에 접근할 수 있는 코드 영역이다.

둘 이상의 프로세스가 동기에 이 임계영역에 접근할 수 없도록 상호배제를 해줘야 한다.

 

상호배제 조건 3가지

 

1. 상호배제: 임계 영역 안에 프로세스가 있을 때 다른 프로세스의 진입을 막는다.

 

2. 진행 progress: 임계 영역 안에 있는 프로세스외에는 다른 프로세스가 cs(임계영역) 안에 진입하는 것을 방해하면 안된다. 즉, 임계영역이 비어있다면 들어갈 수 있어야한다.

 

3. 한정 대기, bounded waiting: 프로세스 진입은 유한 시간 내에 임계영역에 진입할 수 있어야한다. (무한 대기가 되면 안된다는 뜻)

 

 

두 개의 프로세스 간 상호배제를 지원하는 알고리즘 

1. 데커 알고리즘 

 

  • 두 개의 프로세스간 상호배제를 보장하는 최초의 알고리즘이다. 
  • flag(현재 자신이 임계영역에 진입할 것이라는 의사를 나타내는 변수), turn 변수 두 개를 모두 쓴다. (그 이전의 알고리즘들에서는 각각 하나만 썼었다.)
  • 일단 두 프로세스 모두 flag=true로 깃발을 든다 (임계영역 들어갈 거야! 일단 들어)
  • 상대방의 turn 순서라면 내 flag를 다시 내린다. (내가 못들어가네 힝구 깃발 내려)
  • 내  turn이 되면 flag를 다시 올린다. (이제 들어갈 수 있다 깃발 들어)

 

 

2. 피터슨 알고리즘 

  • 일단 깃발을 들어 (똑같음)
  • turn을 양보한다 (서로 양보하는 세상이 되자.)
  • 상대편이 깃발을 들고 있고 상대의 turn이면 상태편이 임계영역에 들어간다.

N- process mutual exclusion 해결방법 

1. 다익스트라

flag[] 값

  1. idle: 프로세스가 임계 영역 진입을 시도하지 않을 때
  2.  want-in: 임계 영역 진입시도 1단계
  3. in-cs: 임계 영역 진입시도 2단계 혹은 임계 영역에 있을 때

n개의 프로세스를 while문으로 모두 검사하여 자신 외의 프로세스가 임계영역에 있는 지를 검사한다.

 

위의 해결법들은 sw solutions들이다. 소프트웨어적인 방법! 하드웨어적 해결법은 따로 있다.

 

sw solutions 단점

1. 속도가 느리다. 대부분 while문으로 빙빙 돈다

2. 구현이 복잡하다 

3. 상호 배제 실행 중에 preemption 선점이 일어날 수 있다. os가 관여하여 interrupt를 억제할 수 있으나 overhead가 발생할 수 있다.

4. busy waiting 바쁜 대기의 발생: 동기화 없이 빙빙돌며 (while문) 계속 검사하면서 대기하는 상태를 바쁜 대기라고 한다. 반대는 동기화 대기라고 한다.

 

다음은 hw solutions를 볼 것이다.

 

 

 

출처

www.youtube.com/watch?v=wdaf2gy83uU&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=12

 

728x90
반응형

'운영체제 요약정리' 카테고리의 다른 글

[운영체제] 운영체제의 역사  (1) 2020.10.20
[운영체제] 소개, 필요성, 정의, 역할  (0) 2020.10.20
프로세스 상태 그림 정리  (0) 2020.09.28
프로세스  (0) 2020.09.28
TAGS.

Comments