윤개발
4. 프로세스 동기화 본문
프로세스간 통신(IPC)
- 프로세스 내부 데이터 통신: 하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우 전역변수나 파일을 이용하여 데이터를 주고 받는다.
- 프로세스 간 통신: 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로 공용파일이나 운영체제가 제공하는 파이프를 사용
- 네트워크를 이용한 데이터 통신: 프로세스 소켓을 이용하여 데이터를 주고받는다.
동일컴퓨터에서 프로세스에서는 소켓을 이용하지 않는 이유 - 많은 전체리 작업이 있기 때문에 오버레드가 발생한다.
바쁜 대기
전역변수를 사용하는 방식의 가장큰 문제점으로 언제 데이터를 보낼지 몰라 반복문을 무한 실행하며 기다리는 것.
⇒ 해결하기 위해 데이터가 도착했음을 알려주는 동기화를 사용한다.
- 전역 변수를 이용한 통신 ⇒ 바쁜대기
- 파일을 이용한 통신 ⇒ 부모와 자식 프로세스간에 많이 사용되며 운영체제가 동기화를 제공해주지 않아 알아서 해야한다. 따라서 wait() 함수를 사용해서 기다린다.
- 파이프를 이용한 통신 ⇒ 동기화 통신방식
- 단병향 통신으로 양방향을 하려면 2개를 사용해야한다.
- 소켓을 이용한 통신 ⇒ 소켓 또는 원격 프로시저 호출을 이용(다른 컴퓨터의 함수를 호출)
공유 자원 접근
⇒ Race Condition 발생
OS 에서 race condition은 언제 발생할까?
1. 커널 작업을 수행 중에 인터럽트가 발생할 때
2. 프로세스가 system call을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때
3. 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근할 때
임계구역
공유 자원 접근 순서에 따라 실행 결과가 달라지는 영역
해결조건
- 상호배제
- 한 프로세스가 임계구역에 들어가면 다른 프로세스는 들어갈 수 없다.
- 한정대기
- 어떤 프로세스도 무한대기 하면 안된다. 즉 특정 프로세스가 임계구역에 진입하지 못하면 안된다.
- 융통성
- 한 프로세스가 다른 프로세스를 방해하면 안된다.
- 상호배제 코드
- lock 하나를 boolean 사용으로 동시에 임계구역 진입
- 한정대기 코드
- 공유 변수로 lock1, lock2 사용으로 서로 같이 lock을 건 경우
- 융퉁성
- 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 |