[OS] Process

sujin·2023년 4월 21일
0

OS

목록 보기
3/3

OS에서 제공하는 Process 관리에 대해서 알아보자

Process에 대한 개념을 파악하고, process scheduling방식, 그리고 동작에 대해서 알아보자!
Process가 communication하는 방식에 대해서 알아보고 IPC, Client-server System까지의 내용으로 마무리하겠다.

Process란 무엇인가?

a program in execution; Process 란 프로그램이 처리되는 job or task의 실행단위를 process라고 한다.

저번장에서도 알 수 있었듯이 program은 수동적이라면 process는 직접 동작하기에 능동적이라고 보면 된다.
job과 task를 거의 구분하지는 않지만 job의 경우에는 Batch 작업처럼 사용자와의 소통이 없어도 되는 작업시에 사용되고 Time-shared system(multi-process방식)어서 task라고 사용한다.

Process의 구성요소
PC, data section, stack 등이 존재한다.

Process in Memory

processs는 작업이 실행되면서 data를 memory에 저장한다.
1. stack에 loval variable(parameter 처리방식 - 이전장에서 언급했다)을 저장하고 Systemcall 등에서 필요한 parameter를 저장하고 그 주소값이 System call의 code에 넘어가서 값들을 읽어오는 과정에서 사용된다.
2. heap : 동적으로 할당되는 메모리이고 더 필요하다면 위의 stack과 heap사이의 공간으로 확장한다.
3. data : global(전역변수)를 포함한다.
4. text : 실제 동작하는 로직이 담긴 code를 포함한다.

Process의 동작

process는 실행되면서 상태를 가지게 되고 5단계로 나눠질 수 있다.
가지는 상태별로 각각에 맞는 queue에 저장되는데 queue에서 어떤 process를 다른 상태로 넘길지에 대해서 결정할 때 process Schduling이 진행된다.
해당과정에 대해서 알아보자!

Process State 5가지

  1. New : 새로운 JOB이 들어오고 JOB queue에 존재하는 상태
  2. Ready : process에 대한 모든 정보가(PCB) loading되어 메모리에 쓰여졌지만 CPU를 할당받지 못해서 CPU 할당을 ready queue에서 기다리는 상태
  3. Running : process가 CPU를 할당받아서 사용하고 있는 상태
  4. Waiting : CPU에서 처리도중 interrupt(Disk I/O or fork child or time 초과)가 발생하여 interrupt 관련 처리가 일어나고 있는 상태
  5. terminated : CPU에서 처리가 모두 완전히 끝마친 상태

5가지 Process 상태가 존재한다. 각 상태에서 queue에 존재할 수 있게 되고 queue에 의해서 스케줄링이 된 process들은 다음 상태가 된다. 그렇다면 schduling이 어떻게 이루어지는지 알아보자!

Process Scheduling Queues

  1. Job queue & Long-term Scheduler : set of all processes in the system
    모든 작업에 대한 프로세스의 집합이고 단순히 어떤 프로세스를 실행할 것인지에 대한 스케줄링이 일어날 수 있다. 따라서 second or minutes단위로 스케줄링이 발생가능하고 long-term 스케줄러가 동작하게 된다. 이때 long-term scheduler는 multiprogramming의 degree를 결정한다.
  2. Ready queue & Short-tem Scheduler : set of all process residing in main memory, ready and waiting to be executed
    실행전 main memory에 필요한 모든 데이터들이 올려져서 CPU 할당만 되며 동작하게끔 준비된 상태로 CPU I/O는 매우 빠르게 동작하기 때문에 해당 queue에서 어떤 process를 실행할 것인지 선택하는 Scheduling이 millisecond 단위로 매우 빠르게 일어난다.
  3. Device queue : set of processes waiting for an I/O device
    running 상태에서 disk I/O작업이 발생하여 실행중이던 프로세스가 기다리고 있는 상태로 device queue에서 대기하다가 이후 ready queue로 넘어가게 된다.
  4. Medium term Scheduling : CPU에서 작업을 하다가 모든 프로세스가 interrupt 되면 ready queue로 넘어간다면 ready queue는 memory 부하가 절릴 수 있다. 따라서 disk에서 작업들을 처리하게 따로 모아서 처리하는데 이를 swapping한다고 한다.
    Swap out : cpu to disk
    Swap in : disk to memory(ready queue)

Process의 생성 및 삭제

Process의 생성

parent는 child를 생성할 수 있다.
이때 resource를 parent와 child간에 공유할 수도 있으며 일부만 공유할 수도 있고 혹은 아예 단절되어 있을 수도 있다.
execution 역시 concurrently하게(동시에 작업) 할 수 있으며 child가 마무리 될 때까지 기다린다.

  • Address space
  1. child duplicate of parent ( Same program and data) - 동일한 작업을 하기에 같은 데이터를 가지고 있어서 주소값이 동일하다
  2. child has a new program loaded into it (fork then exec) - 다른 작업을 처리하게 되어 address space는 다르다.



  • fork , exec
  1. child와 parent의 동작이 같은 경우 fork()만 하면 된다.
  2. child에게 다른 일을 부여할 경우, exec()를 fork()이후 해준다.

process의 종료

  • 정상 종료 (exit) : cpu처리가 끝나서 정상 종료
  • 비정상 종료 (aborting) : cascading termination(parent가 죽으면 child도 죽음), 시간초과 죽음

Cooperating Process

만약 Independent process라면 서로 연관되어 있지 않아서 효율성이 떨어질 것이다.
따라서 서로 연관되어 협력적으로 처리되는 Cooperating process를 사용해야한다.

예를 들어서 parent와 child 사이의 자원을 공유하고 서로 협력적으로 처리되는 경우를 들 수 있다.

  • Cooperating Process의 장점
    모듈화 : 처리해야하는 일을 여러개의 process가 나눠서 협력적으로 처리하면 더 효율적이다.
    정보 공유 : 리소스를 공유하기 때문에 여러개의 process에서 발생할 수 있는 일관성 문제를 줄이고 일관성을 유지하기 쉽다는 장점이 존재한다.
    빠른 스피드 : 나눠서 분할정복 처리가 가능하기 때문에 빠른속도로 처리가 가능하다.
    편리성 : 변경이 쉽고 병렬처리가 가능해서 편리하다.

  • Producer와 Consumer의 구조의 대표적인 문제점

서로 협력하며 communication 하는 경우에 producer(server)와 consumer(client)가 있을 수 있다. 그러나 producer가 쓰는데 Consumer가 가져가지 않는다거나 Producer가 쓰지 않았는데 Consumer 가져가는 경우의 문제가 있을 수 있다.

producer -> buffer -> clinet의 구조를 가진다.

  • Unbouned buffer와 bounded-buffer가 존재하는데 사이즈가 정해져있을 때 Shared-Memroy Solution을 사용할 수 있다.
  • Share-Memory Solution

producer : Insert() method를 사용, consumer : Remove() method를 사용

Communication

IPC

IPC란 InterProcess Communication로 process 사이에서 일어나는 communication을 처리하고 순서를 맞춰주는 메커니즘이다.

  • Message System : Message Passing 방식을 사용(packet 전달)
    kernel을 우체통이라고 생각하고 편리를 넣고 편지가 배달되는 방식으로 진행되기 때문에 공유되는 변수는 존재하지 않는다.
  • Two operation
  1. send, 2. receive
    명확하게 msg를 send할 것인지 receive할 것인지 Link를 통해 알려줘야한다.
  • Link
    physical, logical 영역에서 link 구현방법을 생각해야한다.
  1. shared memory, network, hardware bus 등의 피지컬 영역에서 선택한다.
    이때 shared memory란 사이의 공유되는 영역을 사용하는 방식이다.
  2. link의 capacity를 고려해야한다.
  3. link의 연결개수, link당 process 연결 개수를 고혀한다.
  4. 직접 연결되는지 간접 연결되는지 고려해야한다.

간접 연결되는 경우에는 MailBox를 통해서만 msg를 주고받을 수 있다.
다만, 하나의 Mailbox에서 3개 이상의 process가 존재할 때 하나의 Mailbox에 send가 들어오고 거의 동시에 다른 프로세스에 Receive 요청이 들어온 경우 send된 msg가 어디로 가야할지에 대한 문제가 발생가능하다.
이때는 애초에 process를 2개만 하나의 mail box에 연결하도록 한다거나 receive 요청은 하나의 프로세스만 할 수 있게 해주거나 MailBox만 명시하는 것이 아니라 receiver process를 같이 명시해서 send를 전달한다.

  1. 단방향 혹은 양방향을 결정해야한다.

동기화와 Buffering

  • Synchronization : buffer필요없음

    communication에서의 동기를 맞추는 것은 send와 receive가 둘다 준비 된 상태일 때 함께 send, receive하는 것을 의미한다.

그렇다면 중간에 보관자가 필요없어서 별다른 메모리 공간을 사용하지 않고도 그 때마다 서로 주고 받으면 된다.
그러나, 준비가 되지 않았다면 계속 기다려야하고 blocking이 된다.

  • Asynchronous : buffer가 필수

기다리지 않고 중간에 buffer를 둬서 vuffer로 부터 읽고 쓰기를 원하는 때에 하도록 한다.
Non-blocking 방식이기에 빠르게 작업이 가능하지만 buffer의 용량 문제가 발생가능하다.

clinet-server communication

  • socket : ip + port 를 통해서 endpoint끼리 communication
  • RPC(Remote Procedure Call) : network상에서 "원격"으로 Stub를 통해서 원하는 동작을 처리한다.

client는 원하는 처리 메서드에 대한 정보를 STUB로 marshalling해서 server에 넘기고 server는 unmarshalling(server의 stub를 skeleton이라고 함)해서 데이터를 가지고 코드에 접근하여 결과를 client에게 보내준다.

  • RMI(Remote Method Invocation) : method를 invoke하는 방식으로 JVM끼리 통신가능

지금까지 OS가 제공하는 process 기능 및 동작에 대해서 알아보았다.
process별 실행단위를 cpu가 실행할 수 있는 더 작은 unit인 thread로 나눌 수 있는데 다음 챕터에서는 thread와 OS에 대해서 알아보자!

0개의 댓글