• Process Creation
  • 생성중인 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라 한다.
  • 이런 새로운 프로세스 각각은 다른 프로세스들을 생성할 수 있다.
  • 프로세스는 실행 도중에 프로세스 생성 호출을 통하여 여러 개의 새로운 프로세스들을 생성할 수 있다.
  • 자원의 공유(Resource sharing) 방법
    1. 모든 자원을 공유하는 경우
    2. 자식 프로세스가 부모의 자원을 일부 공유하는 경우
    3. 공유하지 않는 경우
  • 프로세스가 새로운 프로세스를 생성할 때
    1. 부모와 자식은 동시에 실행
    2. 부모가 자식이 끝날 때까지 기다림
  • A Tree of Processes in Linux

  • 부모 -> 자식(부모) -> 자식... 이렇게 트리 형태로 연결되어 있음
  • ex) 로그인을 하는 경우 자식 프로세스를 만들어서 실행
  • C Program Forking Separate Process

  1. fork를 만나면 하나를 복사
  2. 둘 중 하나를 부모, 자식으로 만듦
  3. 둘 중 하나에는 pid에 0을, 다른 하나에는 0과 다른 어떤 값을 주는데 이 값이 0보다 작으면 error
  4. pid가 0인 것은 자식, 0이 아닌 것은 부모
  5. 따라서 서로 조건문에 걸려서 다른 기능을 수행

  • 부모가 자식을 만들어서 자식이 exec()로 작업을 수행할 때, 부모 프로세스는 보통 자식 프로세스가 끝날 때까지 대기함
  • 부모 프로세스는 wait() 하지 않고도 끝낼 수 있는데 이러한 경우 자식 프로세스가 끝나지 않았다면 exit()를 받기 전까지 유령 프로세스로 남아있음
  • windows의 경우는 LINUX와 다름 -> 좀 더 복잡하고 함수 이름이 길다
  • Process Termination
    • 마지막 문장을 끝내고 나면 exit()를 실행 -> 부모 프로세스는 이를 기다림 - wait()
    • 부모 프로세스가 종료되면 자식 프로세스가 계속 실행하지 못하도록(허용 x) 하는 것이 원칙
    • 모든 프로세스는 밑에서 같이 끝나게 됨 - cascading termination
  • 프로세스들의 커뮤니케이션
  • 협업하지 않는 프로세스들은 독립 프로세스(Independent process), 협업을 하도록 만든 프로세스들을 협력 프로세스(Cooperating process)라고 함 -> 만들기 나름
  • 협업을 하게 된다면?
    1. 정보를 공유
    2. 프로세스의 연산속도가 상대적으로 증가
    3. 모듈성이 높아짐 -> 가격이 저렴해짐
    4. 편리함, 안정성 up
  • 커뮤니케이션 모델

  1. 신호(메시지)를 주고 받는 방식
    • 약속된 큐(queue)에 데이터를 집어넣고 가져가는 방식
  2. 메모리를 공유하는 방식
    • 두 프로세스 사이에 두 프로세스만 접근할 수 있는 공유 메모리를 가짐
  • Shared memory : Producer-Consumer model

  • 왼쪽은 생산자, 오른쪽은 소비자 -> 생산자는 데이터를 버퍼에 넣고 소비자는 뽑아내어 쓴다
  • 원형 큐를 사용
  • 예시

  1. in과 out이 0이라는 것은 비어있다는 뜻
  2. 이 말은 in과 out이 같아지면 비어있다는 의미가 되며 따라서 버퍼는 항상 1칸을 비워놔야 함
  • 생산자의 알고리즘 - 데이터를 만들어서 버퍼에 저장

  1. in + 1 이 out과 같아지면 리셋
  2. out은 생산자와 소비자가 함께 사용하기 때문에 늘었다 줄었다 할 수 있음
  • 소비자의 알고리즘 - 데이터를 뽑아감

  • 서로 다른 프로세스가 같은 값을 사용하므로 협조적으로 수행할 수 있음
  • Message Passing
  • send로 메시지를 보내고 receive로 받음
  • 교려 할 점
    1. 연결을 어떻게 해야 하는가
    2. 프로세스 두 개만 하는가 그 이상 해야 하는가
    3. 한 쌍의 프로세스 사이에는 큐가 하나만 있는가 여러 개 있는가
    4. 용량의 크기
    5. 방향은 단방향인가 양방향인가
    6. 길이는 고정인가 가변인가
  • Direct 방식
    1. send(P, message) : P에게 보내겠다.
    2. receive(Q, message) : Q에게 받겠다. 받기 전까지 다른 곳에서 받지 않음
  • Indirect 방식
    1. 받는 것은 메일박스(우편함)로부터 받음
    2. 접근할 수 있는 누구든지 가져갈 수 있음 - 동시에
    3. 누구에게 보낼지, 받을지가 아니라 사서함 번호를 사용한다. -> send(A-사서함 번호, message)
  • 동기화
  • 메시지를 주고받을 때의 동기화는 기다린다는 것
  • Blocking : send후 상대가 받을 때까지 기다림 - ex) 전화를 상대가 받으면 그때부터 말을 함
  • non-Blocking : 보내 놓고 다른 작업을 수행할 수 있음 - ex) 카카오톡 메시지
  • 랑데부 프로토콜(rendezvous) : 보내는 쪽, 받는 쪽 모두 Blocking을 사용 -> 1:1로 연결하여 명확해짐 -> 중간에 버퍼가 필요 없음(zero capacity)
  • 일반적인 것은 사서함이 필요함 - Bounded capacity -> 정해진 크기의 용량의 버퍼가 필요
  • 무한대의 크기도 있을 수 있으나 이론적으로 불가능
  • 프로세스 간의 통신(Communications in Client-Server Systems)
  • 컴퓨터 내에서만 일어나는 것이 아니라 여러 컴퓨터끼리도 통신을 함
  • 소켓(socket) 통신 : (IP주소 + 포트 번호)를 가지고 연결 -> IP주소가 일치하는 컴퓨터는 같은 포트번호를 열어놓고 있어야 주고받을 수 있음

 

'운영체제' 카테고리의 다른 글

Chapter 4 - Threads(6주차)  (0) 2019.04.09
Chapter 4 - Threads  (0) 2019.04.06
Chapter 3 : Processes  (0) 2019.03.28
Chapter 2 - 디스크, system call, 운영체제의 구조  (0) 2019.03.23
Chapter 2 - 시스템 구조  (0) 2019.03.14

+ Recent posts