인프런 워밍업 클럽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);// 현재문제 * 하위 문제 }
부족하다고 생각되는 부분은 블로그에 찾아가서 읽어봤다. 이 열정이 얼마나 갈지 모르겠네
댓글을 작성해보세요.