인프런 워밍업 클럽2 cs <day7>
운영체제프로세스간 통신프로세스간의 통신 종류 : 한 컴퓨터 안에 프로세스들 간의 통신다른 컴퓨터 안에 있는 프로세스들 간의 통신한 컴퓨터 안에 프로세스들 간의 통신 방법파일 사용: 하나의 파일을 이용하여 통신하려는 프로세스끼리 읽고 쓰기파이프 사용 : 운영체제가 만든 파이프를 통해 데이터를 읽고 쓰기쓰레드 사용 : 한 프로세스 안에서 여러 쓰레드 간 통신 방법데이터 영역에 있는 전역변수나 힙 영역을 이용하면 통신이 가능하다.네트워크 사용 : 운영체제가 제공하는 소켓, RPC(원격프로 시저 호출)를 이용RPC(Remote Procedure call) - 다른 컴퓨터를 호출 공유자원과 임계구역공유자원 : 통신하면서 공동으로 이용하는 변수나 파일들공유자원은 프로세스 접근 순서에 따라 결과가 달라진다.컨텍스트 스위칭으로 인해서 시분할된다 -> 어떤 프로세스가 먼저 실행될지 예측하기 어렵다.-> 동기화 문제 : 연산 결과가 예측이 어려워 이 과정에서 생기는 문제들.임계구역 (Critical Section) : 여러 프로세스가 동시에 사용하면 안되는 영역.경쟁조건 (Race Condition) : 공유 자원을 서로 사용하기 위해 경쟁하는 것.임계구역에 대한 해결을 위해서 상호배제 매커니즘 필요상호배제 : 둘 이상의 프로세스가 동시에 임계 영역(CS : Critical Section)에 진입하는 것을 방지하기 위해 사용되는 알고리즘상호배제의 요구사항 임계영역엔 동시에 하나의 프로세스만 접근 가능여러 요청에도 하나의 프로세스만 접근 허용한다.임계구역에 들어간 프로세스는 빠르게 나와야한다.(다른 프로세스가 오래 기다리기 때문) 세마포어 https://baebalja.tistory.com/340세마 포어란? 공유자원이 하나 이상일 때 처리하는 동기화 방법현재 공유 자원에 접근할 수 있는 프로세스/스레드(resource)의 수예시 프린터를 사용하려는 다른 컴퓨터 두 대프린터기 : 공유자원컴퓨터 : 프로세스들, 경쟁조건해소 방법 : 프린터실을 만들어 오직 한 컴퓨터만 프린터를 사용할 수 있게 만든다.열쇠관리자 : 운영체제열쇠 : 세마포어프로세스에서 동기화 대상이 여러 개가 될 수있기 때문에 세마포어는 여러 개가 존재할 수있다.wait()함수와 signal()함수를 이용 위 함수에 들어갈 인자 값은 동기화하고있는 프로세스의 개수wait() : 열쇠를 요청해서 열쇠를 받고 문을 잠그는 함수. 다른 함수는 실행되지 않고 멈춘다.signal() : 열쇠 관리자(OS)에게 열쇠 반납 함수. 다음 함수가 실행된다.단점 : 두 개의 함수는 순서를 지키지 않고 호출해서 세마포어를 사용하지 못할 수가 있다. 모니터세마포어를 보완한 상호배제 알고리즘프로그래밍 언어 차원에서 지원하는 방법으로 자바에서 주로 모니터한다.synchronized 가 붙은 함수 : 동시에 여러 프로세스가 실행 시킬 수 없다.ex) synchronized 가 붙은 increase()함수 사용 시 synchronized 가 붙은 decrease()함수도 사용할 수없다.->synchronized 가 붙은 함수가 사용된다면 다른 synchronized 함수도 사용불가.wait(), signal()함수를 임계영역에 감싸지 않아도 된다. 알고리즘재귀적으로 생각하기(재귀적 사고 skrr)for문 vs 재귀함수 => for문이 더 효율적, 재귀함수는 어떨때 효율적일까?하향식 계산에 유리한 재귀함수하향식 계산 : 하위 문제의 결과를 기반으로 현재 문제를 계산한다 (재귀함수)return number * factorial(number -1);상향식 계산 : 일반적으로 실행되는 계산(for문) 재귀함수를 상향식으로 계산한다고 성능이 좋아지진 않아서 굳이 재귀문을 상향식 계산하지 않는다.function factorial(number){ if( number ==1 || number ==0) return 1;//기저 조건 return number * factorial(number-1);// 현재문제 * 하위 문제 } 부족하다고 생각되는 부분은 블로그에 찾아가서 읽어봤다. 이 열정이 얼마나 갈지 모르겠네