OS - process management란?

dddwsd·2022년 4월 14일
0

OS

  • os = opearting system의 약자
  • hardware를 관리하고, application과 hardware 사이에서 interface 역할을 하며 시스템의 resource와 동작을 관리하는 시스템 소프트웨어

주된 기능들

process management

  • CPU가 프로세스가 여러개일 때, CPU 스케줄링을 통해 관리하는 것.
  • CPU가 process들에게 잘 할당되어 있는지 확인.
  • process들이 공유자원에 접근하는 것 또는 통신하는 것을 관리.

process & thread

  • process
    • memory에 올라가서 실행이 되는 프로그램
    • 기본적으로 thread하나 이상.
    • process끼리는 독립적임.
  • thread
    • process안에서 실행되는 흐름의 단위
    • 즉, CPU 입장에서 최소 작업 단위
    • thread별로 stack만 할당받고 나머지는 공유한다.

process의 주소 공간

  • 데이터를 최대한 공유해서 메모리 사용량을 줄여주기 위함
  • code: 코드가 저장되어 있는 부분
  • data: 전역변수, 정적변수, 배열등
  • heap: 동적할당을 했을 경우 저장되는 곳
  • stack: 지역변수, 파라미터, return 값을 저장하는 부분.

multi-process

  • 하나의 application을 여러개의 process로 구성하여 다수의 CPU가 각 프로세스를 병렬적으로 처리하는 것.
  • 장점
    • memory 침범문제를 os차원에서 해결
    • 하나의 process가 죽어도 다른 process에 영향을 끼치지 않아 작업이 종료되지 않는다.
  • 단점
    • process별로 독립된 메모리를 갖고 있어서, 작업량이 많으면 overhead 발생. context switching으로 인한 성능저하.
    • context switching: 동작중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정.
    • process는 각 독립된 메모리 영역을 사용하므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 overhead가 발생할 문제가 존재.

multi-thread

  • 하나의 process에서 여러 thread를 구성해 각 thread가 하나의 작업을 처리하는 것.
  • 장점
    • 공유 메모리 만큼의 시간, 리소스 손실이 감소된다.
  • 단점
    • 하나의 thread가 망가지면 모든 thread가 망가진다.
    • 단점은 critical section을 통해 대비함.

multi-programming

  • 하나의 processor가 하나의 process를 수행하는 동안 다른 process에 접근할수 있도록 하는 방법
  • 초기 컴퓨터는 하나의 processor가 하나의 process만 처리할 수 있도록 설계돼서 하나의 프로세스를 처리하는 과정에서 프로세서의 처리 속도와 입출력 속도 간의 차이로 인해 입출력 처리가 완료될때까지 기다려야 했음
  • multi programming은 입출력이 완료될 때까지 기다리는 시간을 버리지 않고 다른 프로세스를 처리할 수 있도록 해준다.

multi-tasking

  • 다수의 task를 os의 스케줄링에 의해 번갈아가면서 수행하도록 해주는 것을 의미
  • processor는 한번에 하나의 작업만 수행할 수 있음에도 불구하고 우리가 여러 프로그램을 동시에 실행할 수 있는건, os가 다수의 작업을 스케줄링하여 우리가 작업이 동시에 수행되는 것처럼 느끼게 해주기 때문.
  • multi-tasking의 스케줄링 방식은 아래 방식들을 사용하여 수행된다.
    • multi-programming
    • time-sharing (시분할 방식)
      • CPU의 전체 사용 시간을 작은 작업 시간량으로 분할하여 그 시간량 동안 작업에게 번갈아가며 CPU를 할당해주는 방식
    • real-time (실시간 시스템 방식)
      • 실시간으로 처리해주는 것.

PCB & TCB

  • PCB = process control block
    • process metadata들을 저장해 놓는 곳, 한 PCB안에는 한 process의 정보가 담김.
    • CPU에서 프로세스의 상태에 따라 교체작업이 이루어질때, 앞으로 다시 수행할 대기중인 process에 관한 저장값을 PCB에 저장해 두는 것.
    • Linked List 방식으로 관리된다.
    • process 완료시 linked list에서 제거된다.
  • TCB = thread control block
    • process내부의 thread의 정보를 저장하기 위함
    • PC, register set(CPU정보), PCB 포인터 저장.
    • context switching의 기본단위.

Context Switching

  • CPU가 이전의 process 상태를 PCB에 보관하고, 또 다른 process의 정보를 PCB에 읽어 register에 적재하는 과정.
  • 인터럽트가 발생하고나, 실행중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 발생.
  • context switching overhead는 context switching을 하기 위해 들어가는 간접적인 처리 시간과 메모리를 의미한다.
  • CPU가 쉬지않고 process를 수행시키도록 하기 위해서 context switching overhead를 감수해야 한다.

IPC - Inter process communication

  • 독립적으로 실행되는 프로세스 간의 통신을 가능하게 해주는 것.
  • process는 kernel에서 제공하는 IPC 설비를 이용해 통신을 한다.
    • kernel: os의 핵심이 되는 프로그램으로, 시스템의 모든 것(보안, 자원관리, 추상화)을 통제한다.

DeadLock

  • process가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태를 의미한다.
  • 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다.

발생하는 경우

  • 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 발생했을 때
  • 한 process가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생하고 process가 대기상태에 들어감
  • 대기 상태로 들어간 process들이 실행 상태로 변경될 수 없을때 deadlock 발생

발생 조건

아래 네가지 조건을 모두 만족해야 함.

  1. Mutual exclusion - 상호배제
    • 자원은 한번에 한 프로세스만 사용할 수 있음
  2. Hold and wait - 점유 대기
    • 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함.
  3. No preemption - 비선점
    • 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음
  4. Circular wait - 순환대기
    • 각 프로세스는 순환적으로 다른 프로세스가 요구하는 자원을 갖고 있다.

처리방법

  1. prevention - 예방
    • 교착 상태 발생 조건 중 하나를 제거한다. -> 자원낭비 심함
    • 상호배제 부정: 여러 프로세스가 공유자원 사용
    • 점유대기 부정: 프로세스 실행 전 모든 자원 할당
    • 비선점 부정: 자원 점유중인 프로세스가 다른 자원 원할경우 빼았을 수 있음.
    • 순환대기 부정: 자원이 고유한 번호를 갖고 있고 필요한 자원을 번호가 작은 것부터 순서대로 사용하도록 함.
  2. avoidance - 회피
    • 은행원 알고리즘(banker's algorithm)
      • 프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 사전에 검사함.
      • 안정 상태면 자원을 할당하고, 아니면 다른 프로세스들이 자원을 해지할때까지 대기함으로써 deadlock 방지
  3. deadlock 탐지 및 회복
    • 교착 상태가 되도록 허용한 다음에 회복시키는 방법
    • Detection - 탐지
      • 자원 할당 그래프를 통해 교착 상태를 탐지함.
      • 자원 요청 시, 탐지 알고리즘을 실행시켜 그에 대한 오버헤드 발생.
    • Recovery - 회복
      • 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복시킴
      • 프로세스 종료 방법
        • 교착 상태의 프로세스를 모두 중지
        • 교착 상태가 제거될 때까지 하나씩 중지
      • 자원 선점 방법
        • 교착 상태의 프로세스가 점유하고 있는 자원을 선점해 다른 프로세스에게 할당(해당 프로세스 일시 정지)
        • 우선 순위가 낮은 프로세스나 수행 횟수가 적은 프로세스 위주로 선점.

Race condition - 경쟁상태

공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태를 race condition이라 한다.

발생 조건

  1. 커널 작업을 수행하는 중에 interrupt 발생할 때
    • 커널모드에서 데이터를 로드하여 작업을 수행하다가 interrupt가 발생하여 같은 데이터를 조작하는 경우
    • 커널모드에서 작업을 수행하는 동안, interrupt를 disable하게 하면 방지할 수 있다.
  2. 프로세스가 system call을 하여 커널 모드로 진입하여 작업을 수행하는 도중 context switch가 발생할 때
    • 프로세스1이 커널모드에서 데이터 작업을 하던중, 소모시간이 끝네 프로세스2로 넘어가고 이게 또 같은 데이터를 조작하는 경우
    • 프로세스가 커널모드에서 작업할 때, 시간 제한을 두지 않으면 방지할 수 있음
  3. 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때
    • 멀티 프로세서 환경에서 2개의 CPU가 동일한 커널 내부의 공유 데이터에 접근하여 조작할 경우
    • 커널 내부에 있는 공유 데이터에 접근할 때마다, 해당 데이터에 lock/unlock을 걸면 방지할 수 있다.

semaphore

  • 공유 자원에 여러 thread가 접근하는 것을 막는 것.
  • count변수를 통해 공유자원에 접근하는 thread의 수를 제한.
  • count값에 따라 여러 thread가 공유자원에 접근할수도 있음.
  1. 최초 S값은 1이고, critical section을 수행할 process가 A, B가 있음
  2. 먼저 도착한 A가 S를 0으로 만들고 critical section에 들어감
  3. 그 뒤에 도착한 B가 critical section에 들어가려 하지만 S가 0이므로 대기
  4. A가 critical section 끝나면 빠져나오고 S는 1이됨.
  5. B는 S가 1이 되었으니 critical section으로 들어감.

critical section

  • multi-thread 환경에서, thread가 공유 데이터에 접근하는 코드 부분.
  • 공유 데이터에 여러 thread가 동시에 접근하면 잘못된 결과를 만들 수 있기 때문에, 한 thread가 critical section을 수행할 때 다른 thread는 접근할 수 없어야 함.
  • 해결 방안
    1. mutual exclusion
      • 하나의 thread가 critical section에서 수행되고 있다면, 다른 thread는 critical section에서 실행될 수 없다.
    2. progress
      • critical section을 실행되고 있는 thread가 없을 경우, 들어갈 thread를 적절히 선택해줘야 한다.
    3. bounded waiting
      • process starvation을 방지하기 위해, 한번 critical section에서 실행된 thread는 우선순위가 떨어진다.

mutex

  • critical section을 가진 thread들의 실행시간이 서로 겹치지 않고 단독으로 실행되게 하는 기술
  • 오직 한개의 thread만이 공유자원에 접근할 수 있음
  • mutual exclusion의 약자를 따서 mutex라고 지칭
  • lock, unlock을 통해 통제
    • lock: critical section에 들어갈 권한을 얻음
    • unlock: critical section에서 빠져 나옴을 알림.

semaphore mutex 모두 multi-process 또는 multi-thread 환경에서 공유자원에 대한 deadlock을 막기위한 방법.

profile
Github - https://github.com/dddwsd

0개의 댓글