본문 바로가기

OS

[OS][운영체제] 3. Processes / 프로세스

반응형
  1. Process 개념
  2. Process 스케줄링
  3. Operations on Processes
  4. Cooperating Processes
  5. Inter-process Communication; IPC
  6. Communication in Client-Server Systems

1. Process 개념

(job == process) 프로세스는 실행하는 프로그램을 말한다

이는 다음 세 가지가 메모리에 포함된다.

  • PC; Program Counter
  • stack
  • data section

[사진 1] Process in Memory

메모리 영역 : (snupi.tistory.com/9?category=819647)

 

- 프로세스는 다음 state가 있다.

  • new
    • : 프로세스가 생성될 때의 상태
  • running
    • : 명령이 실행될 때
  • waiting
    • : 이벤트가 발생하기를 기다리는 상태
  • ready
    • : CPU에 적재되어 기다리는 상태
  • terminated
    • : 실행이 끝났을 때

[사진 2] 프로세스 State

- PCB: 프로그램이 프로세스가 될 때 각종 정보를 가진 PCB; Process Control Block의 형태를 가지고 다음과 같이 구성된다.

-> 이는 ready 상태일 때 Main Memory에 저장된다.

  • Process 상태
  • PC
  • CPU 레지스터
  • CPU 스케줄링 정보
  • Memory-management 정보 (base/limit reg, page/seg table)
  • Accounting 정보 (CPU time used/limit, job/process num)
  • I/O 상태 정보 (list of IO 디바이스 및 open files)

 

- Context Switch: CPU가 다른 프로세스로 switch 할 때, 시스템은 전 프로세스의 상태를 저장하고, 새 프로세스의 저장된 상태를 로드한다

-> Context switch Timeoverhead가 일어난다. (<- hardware support)

[사진 3] Context Switching


2. Process 스케줄링

프로세스는 스케줄링 되어 큐에 저장된다.

  • Job queue
    • : 모든 프로세스
  • Ready queue
    • : in main memory, ready and waiting
  • Device queues
    • : I/O 디바이스를 기다리는 프로세스

[사진 4] 프로세스 스케줄링

- 스케줄러

  • Long-term scheduler (job scheduler)
    • : ready queue로 가는 프로세스를 선택한다
    • : 빈도가 낮고, 속도([s], [m])가 느리며, CPU 사용이 적다
    • : multiprogramming의 정도(메모리에 올리는 개수)를 제어한다
  • Short-term scheduler (CPU scheduler)
    • : 다음 실행될 프로세스를 선택하고 CPU에 할당한다
    • : 빈도가 높고 속도([ms])가 빠르며, CPU 사용이 많다
  • Medium-term scheduler
    • : 일시적으로 디스크로 swapped-out될 프로세스를 선택한다
    • : Time-sharing 시스템으로 CPU에 경쟁하는 프로세스를 swap out 하여 Multiprogramming 정도를 완화한다
    • : 후에 다시 ready queue(메모리)로 swap in 한다

[사진 5] 스케줄러

 


3. Operations on Processes

프로세스 생성

부모 프로세스가 자식 프로세스를 만들며 트리 형태를 가진다.

[사진 6] 부모 프로세스 - 자식 프로세스

- 자원 공유 유형

  • 부모와 자식 간에 자원을 모두 공유
  • 부모의 일부 자원 공유
  • 공유 X

- 실행 유형

  • 부모와 자식 동시 실행
  • 자식이 끝날 때까지 기다림

- 주소 공간

  • 부모와 같은 주소 (같은 프로그램, 데이터)
  • 자식이 새로운 프로그램 (fork하고 exec)

ex) UNIX

  • fork 시스템 콜이 새 프로세스를 만든다
  • exec 시스템 콜fork 후에 새 프로그램에 프로세스의 메모리 공간을 둔다
int main()
{
  Pid_t pid;
  /* fork another process */
  pid = fork(); /* fork() 라는 System Call을 이용하여 pid 생성 */
  if (pid < 0) { /* error occurred */
    fprintf(stderr, "Fork Failed");
    exit(-1);
  }
  else if (pid == 0) { /* child process */
    execlp("/bin/ls", "ls", NULL); / fork() 다음에 ‘execlp()’ = ‘exec()’ /
  }
  else { /* parent process */
    /* parent will wait for the child to complete */
    wait(NULL);
    printf("Child Complete");
    exit(0);
  }
}

종료

프로세스가 마지막 명령을 실행하고 Output 데이터는 자식에서 wait 상태의 부모에게 간다.

OS에 삭제할지를 묻고 (-> exit), 프로세스의 자원이 할당 해제된다.

이후 부모가 자식 프로세스의 실행을 중단한다 (-> abort)

(만약 부모가 중단시키면 모든 자식들은 중단되게 된다 -> cascading termination)


4. Cooperating Processes

다른 프로세스의 실행에 영향을 주고받는 프로세스 (<-> independent)

ex) parent-child 프로세스


장점은 다음과 같다

  • 메모리 공간 등을 공유한다
  • multi CPU를 나눠 처리하여 계산 속도가 향상한다
  • 유사한 기능을 별도의 프로세스로 나누는 모듈화가 이뤄진다
  • 편리하다

이에는 생산자-(버퍼)-소비자 관계가 있다

  • 컴파일러-어셈블리 코드-어셈블러
  • 어셈블러-객체 모듈-메모리로 올리는 로더
  • 웹 서버 - HTML - 웹 브라우저

버퍼의 제한이 있을 경우, 원형 큐와 같은 형태 insert(), remove()가 이뤄진다


5. Inter-process Communication; IPC

프로세스 간에 communicate하고 동기화(순서화)하는 메커니즘 (Message Passing)으로,

Cooperating Processes는 IPC로 통신하며 데이터와 정보를 공유한다

이는 둘을 이어주는 link를 필요로 하며,

다음 명령으로 메시지를 교환한다

  • send(message)
  • receive(message)

통신 link에는 다음 측면이 있다

  • physical 측면
    • : shared memory / hardware bus / switch / network
  • logical 측면
    • : direct - indirect / syn - asyn 통신 / auto - explicit buffer

이 외에도

  • 링크 구현
  • 몇 개의 링크에 몇 개의 프로세스가 연결되는지
  • 링크의 대역폭
  • 메시지의 크기
  • 방향의 종류

등 구현 시의 고려사항이 있다


communication
의 두 가지 모델

kernel로 메시지를 주고받는 message passing 모델과, shared memory 모델이 있다

 

[사진 7] 통신의 두 가지 모델

메세지 패싱 모델은 데이터 업데이트가 빠르나, 많은 메세지가 오갈 경우에 성능이 떨어진다.

반대로 공유 메모리 모델은 많은 공유 메모리가 소모되지만, 공유 속도가 빠른 장점이 있다.

Direct/Indirect 통신

/간접 통신으로도 구분할 수 있다.

 

직접적 communication은 누가 송수신자인지 명시한다.

  • send(P, m): P m 보냄
  • receive(Q, m): Q로부터 m 받음

직접적 communication은 자동적으로 링크가 형성되고,

한 쌍의 프로세스에 하나의 링크가 연결된다.

이는 단방향일 수 있지만 주로 쌍방향이다


이와 반대로 간접적 communication고유의 id를 가진 mailbox를 거쳐 데이터를 전달한다
이는 프로세스들이 공통의 mailbox를 가지고,

다중의 링크 혹은 프로세스가 연결될 수 있다.

  • send(A, m): mailbox A m 보냄
  • receive(A, m): mailbox A로부터 m 받음

이 때, 같은 mailbox를 공유하는 receiver들이 누가 receive할지 불분명하게 되는 상황을 방지한 해결책은 다음과 같다

[사진 8] 간접 통신의 문제

 

  • 두 프로세스에 한 링크만
  • receive 명령을 한 순간에 한 프로세스만 실행 가능함
  • 시스템에서 임의적으로 하나 선택해서 알려줌

버퍼의 용량에 따라

버퍼의 용량에 따라 다음 세 가지 방법으로 나뉜다

  • 버퍼의 용량이 0인 경우
    • : 송수신자가 준비가 될 때까지 기다린다
    • : 이는 blocking 방식이고, 동기식이다 (랑데부; rendezvous: 송수신 처리 시 동기화)
  • 제한이 있는 경우
    • : link가 찰 때까지 보내고 받고, 차게 되면 기다린다
  • 제한이 없는 경우
    • : 이는 기다림 없이 계속 보내고, 필요할 때 메시지나 null을 받는다
    • : 이는 non-blocking, 비동기식이다

6. Communication in Client-Server Systems

- socket은 각 endpoint이고 IP주소 : port번호를 참조한다
ex) web
port 번호는 80, telnet 23, FTP 21이다


- Remote Procedure Call (RPC):
원격에 있는 콜을 실행한다
클라이언트 stub은 서버를 가리키고, 서버 stub은 메시지를 받고 실행하고 결과를 클라이언트한테 전송한다.
- Remote Method Invocation (RMI):
원격에 있는 객체를 실행한다 (RPC와 유사하고 JVM에서 실행한다)

반응형