윤개발

4. 프로세스 동기화 본문

컴퓨터과학/운영체제

4. 프로세스 동기화

DEV_SJ 2021. 5. 17. 00:00

 

 

프로세스간 통신(IPC)

  • 프로세스 내부 데이터 통신: 하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우 전역변수나 파일을 이용하여 데이터를 주고 받는다.
  • 프로세스 간 통신: 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로 공용파일이나 운영체제가 제공하는 파이프를 사용
  • 네트워크를 이용한 데이터 통신: 프로세스 소켓을 이용하여 데이터를 주고받는다.

동일컴퓨터에서 프로세스에서는 소켓을 이용하지 않는 이유 - 많은 전체리 작업이 있기 때문에 오버레드가 발생한다.

바쁜 대기

전역변수를 사용하는 방식의 가장큰 문제점으로 언제 데이터를 보낼지 몰라 반복문을 무한 실행하며 기다리는 것.

⇒ 해결하기 위해 데이터가 도착했음을 알려주는 동기화를 사용한다.

  • 전역 변수를 이용한 통신 ⇒ 바쁜대기
  • 파일을 이용한 통신 ⇒ 부모와 자식 프로세스간에 많이 사용되며 운영체제가 동기화를 제공해주지 않아 알아서 해야한다. 따라서 wait() 함수를 사용해서 기다린다.
  • 파이프를 이용한 통신 ⇒ 동기화 통신방식
  • 단병향 통신으로 양방향을 하려면 2개를 사용해야한다.
  • 소켓을 이용한 통신 ⇒ 소켓 또는 원격 프로시저 호출을 이용(다른 컴퓨터의 함수를 호출)

공유 자원 접근

⇒ Race Condition 발생

OS 에서 race condition은 언제 발생할까?

1. 커널 작업을 수행 중에 인터럽트가 발생할 때

2. 프로세스가 system call을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때

3. 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근할 때

임계구역

공유 자원 접근 순서에 따라 실행 결과가 달라지는 영역

해결조건

  • 상호배제
    • 한 프로세스가 임계구역에 들어가면 다른 프로세스는 들어갈 수 없다.
  • 한정대기
    • 어떤 프로세스도 무한대기 하면 안된다. 즉 특정 프로세스가 임계구역에 진입하지 못하면 안된다.
  • 융통성
    • 한 프로세스가 다른 프로세스를 방해하면 안된다.
  1. 상호배제 코드
    • lock 하나를 boolean 사용으로 동시에 임계구역 진입
  2. 한정대기 코드
    • 공유 변수로 lock1, lock2 사용으로 서로 같이 lock을 건 경우
  3. 융퉁성
    • lock을 프로세스 번호를 표시하는 공유 변수로 사용 → 번갈아가면서만 사용해야한다.

피터슨 알고리즘

lock1, 2를 boolean 과 turn를 프로세스 번호로 사용

해결 조건 3가지를 모두 만족하지만 2개의 프로세스만 사용가능하다는 한계가 있다.

데커 알고리즘

락을 걸고 들어가서 내부에서 또 확인한다. ⇒ 알고리즘이 복잡해진다.

세마포어

임계구역에 진입하기 전에 스위치를 사용중으로 놓고 들어간다.

작업을 마치면 동기화 신호를 보낸다.

공유 자원이 여러개일 때도 사용 가능하다.

뮤텍스(Mutex) 는 상호배제 를 뜻하며, Binary Semaphore 와 같은 의미이다. 즉, 자원에 단 하나의 작업만이 접근할 수 있다는 뜻이다.

모니터

세마포어는 잘못된 사용으로 인해 보호받지 못할 수 있다. ⇒사용자가 고의 또는 실수로 세마포어를 사용하지 않음

내부는 숨기고 요구사항을 처리할 수 있는 인터페이스만 제공

 

 

그림 참조 : https://hibee.tistory.com/297

'컴퓨터과학 > 운영체제' 카테고리의 다른 글

6. 물리메모리  (0) 2021.05.17
5. 교착상태  (0) 2021.05.17
3. cpu 스케쥴링  (0) 2021.05.17
2. 프로세스와 스레드  (0) 2021.05.16
1. 하드웨어 구성  (0) 2021.05.16
Comments