인프런 워밍업 클럽2 cs <day7>

인프런 워밍업 클럽2 cs <day7>

운영체제

프로세스간 통신

  • 프로세스간의 통신 종류 : 한 컴퓨터 안에 프로세스들 간의 통신


    다른 컴퓨터 안에 있는 프로세스들 간의 통신

  • 한 컴퓨터 안에 프로세스들 간의 통신 방법

    • 파일 사용: 하나의 파일을 이용하여 통신하려는 프로세스끼리 읽고 쓰기

    • 파이프 사용 : 운영체제가 만든 파이프를 통해 데이터를 읽고 쓰기

    • 쓰레드 사용 : 한 프로세스 안에서 여러 쓰레드 간 통신 방법
      데이터 영역에 있는 전역변수나 힙 영역을 이용하면 통신이 가능하다.

    • 네트워크 사용 : 운영체제가 제공하는 소켓, RPC(원격프로 시저 호출)를 이용


      RPC(Remote Procedure call) - 다른 컴퓨터를 호출

     

공유자원과 임계구역

  • 공유자원 : 통신하면서 공동으로 이용하는 변수나 파일들

  • 공유자원은 프로세스 접근 순서에 따라 결과가 달라진다.

  • 컨텍스트 스위칭으로 인해서 시분할된다 -> 어떤 프로세스가 먼저 실행될지 예측하기 어렵다.


    -> 동기화 문제 : 연산 결과가 예측이 어려워 이 과정에서 생기는 문제들.

  • 임계구역 (Critical Section) : 여러 프로세스가 동시에 사용하면 안되는 영역.

  • 경쟁조건 (Race Condition) : 공유 자원을 서로 사용하기 위해 경쟁하는 것.

    • 임계구역에 대한 해결을 위해서 상호배제 매커니즘 필요

  • 상호배제 : 둘 이상의 프로세스가 동시에 임계 영역(CS : Critical Section)에 진입하는 것을
    방지하기 위해 사용되는 알고리즘

    • 상호배제의 요구사항

       

      • 임계영역엔 동시에 하나의 프로세스만 접근 가능

      • 여러 요청에도 하나의 프로세스만 접근 허용한다.

      • 임계구역에 들어간 프로세스는 빠르게 나와야한다.(다른 프로세스가 오래 기다리기 때문)

 

세마포어 https://baebalja.tistory.com/340

  • 세마 포어란? 공유자원이 하나 이상일 때 처리하는 동기화 방법
    현재 공유 자원에 접근할 수 있는 프로세스/스레드(resource)의 수

  • 예시 프린터를 사용하려는 다른 컴퓨터 두 대image

  • 프린터기 : 공유자원
    컴퓨터 : 프로세스들, 경쟁조건

  • 해소 방법 : 프린터실을 만들어 오직 한 컴퓨터만 프린터를 사용할 수 있게 만든다.

image

  • 열쇠관리자 : 운영체제

  • 열쇠 : 세마포어

  • 프로세스에서 동기화 대상이 여러 개가 될 수있기 때문에 세마포어는 여러 개가 존재할 수있다.

  • wait()함수와 signal()함수를 이용

    • 위 함수에 들어갈 인자 값은 동기화하고있는 프로세스의 개수

    • wait() : 열쇠를 요청해서 열쇠를 받고 문을 잠그는 함수. 다른 함수는 실행되지 않고 멈춘다.

    • signal() : 열쇠 관리자(OS)에게 열쇠 반납 함수. 다음 함수가 실행된다.

    • 단점 : 두 개의 함수는 순서를 지키지 않고 호출해서 세마포어를 사용하지 못할 수가 있다.

     

모니터

  • 세마포어를 보완한 상호배제 알고리즘

  • 프로그래밍 언어 차원에서 지원하는 방법으로 자바에서 주로 모니터한다.

image

  • 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);// 현재문제 * 하위 문제
    }

     


    부족하다고 생각되는 부분은 블로그에 찾아가서 읽어봤다. 이 열정이 얼마나 갈지 모르겠네

 

댓글을 작성해보세요.

채널톡 아이콘