CS/OS

[OS] 프로세스 동기화

psy_er 2024. 4. 30. 22:50
728x90

[OS] 프로세스 동기화

 

 

학습목표

- 프로세스 간 통신의 개념을 이해하고 종류를 파악한다.

- 공유 자원 사용 시 임계구역의 문제를 알아본다.

- 임계구역 문제를 해결하기 위한 조건과 해결 방법을 알아본다.

 

 

< 프로세스 간 통신 (IPC Inter Process Communication)의 종류 >

 

공유 메모리나 공유 파일을 이용한 통신

- 일정한 메모리 영역이나 파일을 공유하고 이를 통해 데이터를 주고받는다.

- 데이터를 주고받는 방법을 프로세스끼리 알아서 결정해야 하므로 가장 원시적인 방법이다.

 

파이프를 이용한 통신

- 프로세스 간 통신을 위해 운영체제가 제공하는 통신 기법

- ex) fork()로 만들어진 부모-자식 간 통신에 파이프 사용

 

소켓을 이용한 통신

- 네트워크로 연결된 컴퓨터에서 데이터를 주고받기 위한 통신 기법

- 소켓 방식은 초기화할 내용도 많고 시스템 자원도 많이 사용하므로 같은 컴퓨터 내에서 소켓으로 통신하는 것을 비효율적이다

 

 

< 통신 방향에 따른 분류 >

 

양방향 통신 (duplex communication)

데이터를 양쪽 방향으로 동시 전송할 수 있는 구조로, 일반적인 통신은 모두 양방향 통신이다.

프로세스 간 통신에서는 소켓 통신이 양방향 통신에 해당한다.

ex) 전화, 소켓

 

반양방향 동신 (halfduplex communication)

데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 구조

ex) 무전기

 

단방향 통신 (simplex communication)

모스 신호처럼 한쪽 방향으로만 데이터를 전송할  수 있는 구조

ex) 공유메모리/공유 파일 이용 통신, 파이프 이용 통신, 모스 부호

 

 

< 통신 구현 방식에 따른 분류 >

 

동기화 : 멀티스레드 환경에서 여러 스레드가 하나의 공유자원에 동시 접근하지 못하도록 막는 것

 

대기가 있는 통신 (blocking communication)

- 동기화를 지원하는 통신 방식 (synchronous communication)

- 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있음

- 파이프 이용 통신, 소켓 이용 통신

 

대기가 없는 통신 (non-blocking communication)

- 비동기화 통신 방식 (asynchronous communication)

- 데이터를 받는 쪽은 바쁜 대기(busy waiting)를 사용하여 데이터가 도착했는지 여부를 직접 확인

- 공유 메모리나 공유 파일 이용 통신

 

 

< 파일을 이용한 통신 >

 

하드디스크로 읽고 쓸 수 있다.

 

파일 열기

open("com.txt", O_RDWR) : com.txt 파일을 읽기와 쓰기를 할 수 있는 형태로 준비

파일이 열리면 open 함수는 그 파일에 접근할 수 있는 권한인 파일 기술자 fd를 사용자에게 반환

fd = com.txt

 

파일 쓰기 또는 읽기

write(fd, "Test", 5) : fd, 즉 com.txt 파일에 Test라는 문자열을 쓰라는 뜻

read(fd, buf, 5) : fd, 즉 com.txt 파일에서 5B를 읽어 변수 buf에 저장

 

파일 닫기

close(fd) : fd가 가리키는 파일, 즉 com.txt 파일을 닫음

 

 

< 파이프를 이용한 통신 >

운영체제가 제공하는 동기화 통신 방식

파일 입출력과 같이 open() 함수로 id를 얻고 작업 후 close() 함수로 마무리

파이프로 양방향 통신을 하려면 파이프 2개 사용해야 한다.

 

이름 없는 파이프 (anonymous pipe) : 일반적인 파이프

이름 있는 파이프 (named pipe) : FIFO라 불리는 특수 파일을 이용하며, 서로 관련 없는 프로세스 간 통신에 사용

 

 

< 소켓을 이용한 통신 >

 

소켓을 이용한 통신은 여러 컴퓨터에 있는 프로세스끼리 통신하는 방법

네트워크에서 데이터를 보내는 것은 클라이언트 소켓이 서버 소켓에 데이터를 보내는 것이므로

네트워크 프로그래밍을 소켓 프로그래밍이라 부른다.

프로세스가 소켓에 쓰기 연산을 하면 데이터를 보내고, 읽기 연산을 하면 데이터를 받는다.

 

 

< 공유 자원에 대한 접근 >

 

공유자원 (shared resource)

- 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다.

- 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 결과가 달라짐

 

경쟁조건 (race condition)

- 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황

- 경쟁 조건이 발생하면 공유 자원 접근 순서에 따라 실행 결과가 달라짐

 

생상자/소비자 프로세스 - 실행에 따른 결과 차이

count/변수가 공유 자원으로 생산자, 소비자의 실행 순서에 따라 결과가 다르다

=> 잘못된 결과이다.

 

 

< 임계 구역 (critical section) >

- 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역

- 임계구역에서는 프로세스를 동시에 작업하면 안 됨

- 어떤 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 하며 임계구역에 들어간 프로세스가 나와야 들어갈 수 있음

 

 

< 생산자-소비자 문제 >

임계구역과 관련하여 언급되는 전통적인 문제

생산자는 수를 증가시키며 물건을 채우고 소비자는 생산자를 쫓아가며 물건을 소비한다.

생산자 코드와 소비자 코드가 동시에 실행되면 문제가 발생한다.

공유변수뿐만 아니라 하드웨어 자원도 임계구역에 포함된다.

 

 

< 임계구역 문제 해결 조건 >

임계구역 문제 해결을 위한 단순한 방법은 lock을 이용하는 것이다.

 

상호배제 (mutual exclusion)

한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없음

 

한정대기 (bounded waiting)

어떤 프로세스도 무한 대기(infinite postpone) 하지 않아야 함

 

진행의 융통성 (progress flexibility)

한 프로세스가 다른 프로세스의 진행을 방해해서는 안됨

임계구역에 프로세스가 없으면 임계구역 사용을 원하는 프로세스 중에 하나를 선택해 진행시켜야 함

728x90

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

[OS] 임계구역  (1) 2024.05.01
[OS] 프로세스와 스레드  (1) 2024.04.09