2021. 12. 3. 11:20ㆍOperating System
핵노잼 운영체제
프로세스 간 통신 : 데이터를 어떻게 주고받는가?
1-1. 프로세스 간 통신의 개념
- 프로세스 내부 데이터 통신 : 전역변수나 파일을 이용하여 통신. 한 프로세스 내 스레드 여러 개 있을 때.
- 프로세스 간 데이터 통신 : 공용 파일 또는 운영체제가 제공하는 파이프를 이용.
- 네트워크를 이용한 데이터 통신 : 소켓을 이용.
1-2. 프로세스 간 통신의 분류
- 양방향 통신 : 실시간으로 전화하듯이 동시에 데이터 주고받는 것이 가능. (e.g. 소켓)
- 반양방향 통신 : 양방향으로 데이터 주고 받는 것이 가능하지만 무전기로 통신하듯 한 시점에서는 한 방향으로만. 한번에 한놈만 보내거나 읽어오거나.
- 단방향 통신 : 한쪽 방향으로만 전송 가능. (e.g. 전역변수, 파이프, 파일)
1-3. 프로세스간 통신의 종류
- 전역변수 이용한 통신 : 특정 프로세스에 얽메이지 않는 데이터를 주고받을 때 이용. 공동으로 관리하는 메모리를 사용. 데이터를 보내는 쪽은 전역변수에 값을 쓰고, 받는 쪽은 전역변수의 값을 읽음. 단방향 통신.
- 파일을 이용한 통신
- 파이프를 이용한 통신 : 한 프로세스가 파이프에 데이터를 채워넣으면 다른 프로세스가 이를 가져가는 일방통행으로 통신이 이루어짐. 단방향 통신. 따라서 양방향 통신을 하려면 데이터 보내는 파이프, 받아오는 파이프 2개가 있어야 한다.
ㄴ 이름 없는 파이프 : 보통 부모프로세스 - 자식프로세스 사이 처럼 특수한 관계의 프로세스끼리의 파이프. 일반적으 로 파이프라고 하면 이름 없는 파이프를 가리킨다.
ㄴ 이름 있는 파이프 : 서로 관계 없는 프로세스 간의 통신은 이름 있는 별도의 파이프로 데이터를 처리한다.
- 소켓을 이용한 통신 : 프로세스가 데이터를 자기 컴퓨터의 소켓에 쓰면, 그 소켓이 다른 소켓에 데이터를 전달한다. 그럼 데이터를 받을 프로세스가 자신과 연결된 소켓, 데이터를 받은 소켓에 적힌 데이터를 가져간다. 통신하고자 하는 프로세스가 자신의 소켓과 상대의 소켓을 연결하는 식.
2-1. 공유자원의 접근
- 공유 자원 : 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등.
공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 썼느냐에 따라 결과가 달라질 수 있다. 곱하기를 먼저 하느냐 더하기를 먼저 하느냐의 값은 달라지는 것처럼, 어떤 프로세스가 먼저 데이터를 썼느냐에 따라 결과가 달라질 수 있다.
예를 들어, 프로세스 P1이 예금이 얼마 있는지 확인(10만원)하는 작업까지 하고 타임아웃이 걸려 프로세스 P2가 작업을 시작해 예금에 5만원을 더해주고 저장까지 하는 작업을 완료 후 다시 P1의 순서가 오면, P1은 시분할 시스템의 작동 원리에 따라 자신이 수행하던 작업을 그대로 불러오므로 예금은 15만원으로 읽는 것이 아닌 10만원으로 불러온다. 이처럼 프로세스의 순서가 중간에 바뀜으로써 공유 자원의 결과가 달라지는 문제가 생긴다.
2-2. 임계구역
임계 구역 : 위에서 언급한 것처럼 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 임계 구역이라 한다.
2-4. 임계구역 해결 조건
- 상호 배제 : 한 프로세스가 임계구역에 들어가면 그 작업을 끝내기 전까지는 타임아웃을 못 거는 것. 즉 다른 프로세스는 임계구역에 들어갈 수 없도록 하는 것.
- 한정 대기 : 다만, 어떤 프로세스도 무한정 대기하지는 않아야 한다.
- 진행의 융통성: 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다.
3-1. 임계구역 해결 조건을 고려한 코드
여기서부터는 사실 코드적인 면에서 이해가 안 간 부분이 많다. 대략적으로는: 코드로 다른 프로세스의 임계구역 진입을 막아놔 접근을 막는다. > but 임계 구역 진입 전에 타임아웃이 걸리면 잠근 의미가 없어진다, > so 프로세스 각자가 모두 락을 따로 다른 공유변수에 해놓는다, > but 서로가 서로의 접근을 막아 CPU가 공회전하게 되는 문제
피터슨 알고리즘: while(lock==true)문과 락을 걸어놓는 lock=true문을 한꺼번에 실행하도록 한 줄로 합친다. > but 두 개의 프로세스만 사용 가능하고 그보다 많아지면 사용하기 힘들다는 문제. 데커 알고리즘: ???세마포어: 프로세스가 임계구역에 진입하기 전에 스위치를 '사용 중'으로 놓고 들어감. 이후 도착한 프로세스는 작업 마칠 때까지 기다림. 작업 마치면 다음 프로세스에 임계구역 사용하라는 신호를 보내고 다음 프로세스도 들어가면서 스위치를 '사용 중'으로 놓고, 반복.> but 프로세스가 세마포어(스위치)를 사용하지 않고 바로 임계구역에 들어가면 임계구역을 보호할 수 없음. 이후 도착한 프로세스들에 의해 작업이 방해될 수 있어 원하는 결과 못 얻어낼 수 있다.모니터: 운영체제가 직접 자원을 관리하는 방식으로, 운영체제가 공유 자원을 내부적으로 숨기고, 공유자원에 접근하기 위한 인터페이스만 제공한다. 프로세스 작업이 끝나면 자원을 돌려주고를 반복.
'Operating System' 카테고리의 다른 글
[til_211130][운영체제] CPU 스케줄링 (0) | 2021.11.30 |
---|---|
[til_211129][운영체제] 데드락 Deadlock 교착상태 (0) | 2021.11.30 |