운영체제 프로세스 동기화 /병행프로세스/ 세마포 / 모니터
운영체제 프로세스 동기화 /병행프로세스/ 세마포 / 모니터
운영체제 프로세스 동기화 /병행프로세스/ 세마포 / 모니터
|
프로세스 동기화
병행프로세스 : 두 개 이상의 프로세스들이 동시에 존재하며 있는 것, (노트그림참고 )
서로 관련없이 독립적으로 수행/ 다른프로세스들과 협력 필요 :기능수행
협력적 병행프로세스 : 제한된 자원을 공유하기 위해 상호작용 필요/교착상태,임계구역
문제를 해결하기위해 동기화 필요
(프로세스동기화 -> 공유된자원 읽기/쓰기문제 해결위해 동기화(피터슨->세마포)
병행처리의 문제점 해결해야할 문제점
-공유자원을 상호배타적으로 사용가능해야함(=상호배제가 되어야함) (상호배타적이라함은 공유자원을 특정 A프로세스가 차지하면 A만사용할수 있어야한다는 것, 동시사용은 할수 없도록하는것)
-임계구역(공유자원중에도 나혼자 쓸수있는 구역)에 진입해서 쓰는동안은 나혼자만 사용할수 있어야 한다. =임계구역에 접근한 프로세스는 상호배제를 보장
-교착상태 문제 ( A B 둘다 나아가지 못하는 상태 )
하드웨어에 의한 동기화
트랜잭션(더쪼갤 수 없는 일의 단위)
TestAndSet 하드웨어에 가기위한 한 방법 / 락 비어있는지 확인하고 비어있으면 내가 가져감,
세마포(semaphore) : 동기화 도구 (피터슨은 이론적인 방법이라고 볼수 있으며 보통 사용하는 것은 세마포이다.) P와 V 연산 이용 // 공유자원에 대해 하나의 S (세마포)를 줌
세마포를 이용한 동기화
세마포를 이용한 생산자/소비자 문제 (버퍼의문제)
쓰는동안 읽으면X 읽는동안 쓰면 X (노트 그림)
세마포를 이용한 읽기/쓰기 문제
여러개의 읽기 프로세스가 동시에 공유자료 접근 가능(읽기는 많아도 동시허용됨)
읽기프로세스와 쓰기프로세스가 동시에 접근은 안됨 (세마포사용)
여러개의 쓰기 프로세스도 동시에 공유자료 접근 안됨
<v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /><v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> <o:lock v:ext="edit" aspectratio="t" /><w:wrap type="topAndBottom" />
모니터 : 세마포는 하나의 공유변수, P() V()함수를 썼지만 모니터는 클래스개념, 안에 세마포 변수와 이를 이용할수 있는 함수 포함
메시지: 송신측 프로세스와 수신측 프로세스간에 교환될수 있는 정보의 집합
메시지 실행시 고려사항
네이밍문제
직접네이밍 : A는 B에게 보내겠다 / B는 A에게 받겠다 (송,수신측간 상대방 설정)
간접네이밍 : 우편함을 하나 두고(버퍼링 비슷한것처럼) 이 우편함을 통해 프로세스들은 메 시지를 교환함
|
복사문제 : 메시지의 포인터를 전달.
버퍼링문제: 수신 준비가 안되있을 경우 메시지를 버퍼에 저장 (비동기적 통신을 위해 버퍼링필요)
길이문제 : 메시지길이를 고정으로할지(구현 용이/빠른 처리속도/낭비), 가변으로할지(구현 복잡/높은 적용력) 결정,
정해진 길이가 있으면->처리속도는 빠르지만 낭비가 있음
경우에 ㄸㆍ라 길이지정하면-프로그램이 복잡 (우리입장에선 가변길이가 좋음)
정리
프로세스동기화 -> 공유된 자원을 읽기 쓰기 할 경우 어떻게 하냐
->해결하기 위해 피터슨(중간에인터럽트문제있음),세마포(읽,쓰기 인터럽트 걸리지 않는형태/공유자원에접근시 좋음) -> 세마포업글 –모니터
서로 동시에 사용할수 없는 구조인 경우 임계구역 컨트롤 어떻게 할것인가
공유된 자원을 여러 프로세스가 사용하고자 할 때는(락열고 쓰기는 읽고-없뎃-씀)
P()=wait ->락얻음 // V()=signal ->락 풀어줌 0 (누군가 사용하는상태) 1 (기다리는상태)
컴퓨터언어로보면 세마포는 C언어 / 모니터는 C++
서로 상대방이 공유자원을 잡고 안놔줌-교착상태(deadlock)