HolaJun

35 object(s)
 

프로세스

프로세스란?

PCB(Process Control Block)

프로세스 상태

  1. 준비상태(Ready)
    • 프로세스 생성 후 CPU가 할당되기 전 상태
  2. 실행상태
    • CPU가 할당된 상태. 실행중인 프로그램을 의미.
    • 프로세스가 정상적으로 실행을 완료하면 프로세스는 종료됨.
    • CPU 할당 시간 초과가 된 경우
      • 하나의 프로세스가 오랜 시간동안 CPU를 사용하지 못하도록 막고있어 일정 시간동안만 CPU를 사용할 수 있도록 제한한다. CPU 할당시간이 초과된 경우 준비(READY)상태로 돌아간다.
    • 자신이 요청한 사건이 완료됐을 경우
      • 어떠한 사건을 요청하면 CPU는 다른 메모리의 주소에 할당되게 되고 사건을 요청한 프로세스는 대기상태로 들어가게됨
      • 요청한 작업이 끝나면 다시 준비상태로 돌아가고 CPU할당을 기다리게 됨.
      • 프로세스의 상태가 PCB에 입력됨
  3. 대기상태(Wait)
    • 프로세스가 CPU를 할당받아 실행되다가 어떤 사건이 발생할때까지 멈추어있는 상태
    • 대기상태에 있던 프로세스가 기다리던 어떤 사건의 발생으로 인해 나머지부분의 실행을 위해 준비(Ready)상태로 전이되는 과정

프로세스 메모리 구조

  1. Code(Text) 영역

    • 코드 자체를 구성하는 메모리 영역. Hex, Bin파일 메모리
    • 프로그램 명령이 위치하는 곳으로, 기계어로 제어되는 메모리 영역
  2. Data 영역

    • 전역변수, 정적변수, 배열, 구조체 등이 저장
    • 프로그램이 실행될 때 생성되고 종료되면 시스템에 반환됨
    • 함수 내부에 선언된 Static 변수는 실행될 때 공간만 할당되고, 그 함수가 실행될 때 초기화된다.
  3. Stack 영역

    • 프로그램이 실행되어 일시적으로 저장할 데이터를 담아두는 공간

      (프로그램은 실행되는 것이 아니기 때문에 스택이 필요하지 않다.)

    • 스택에 저장되는 데이터는 루틴들을 처리하며 되돌아갈 주소를 저장함.

      선입후출(LIFO) 방식.

    • 데이터영역에 일시적으로 사용할 지역변수를 저장하는 것보다는 스택영역에 지역변수를 저장하는 것이 더욱 효율적이다.

  4. Heap 영역

    • 프로그램이 자동으로 사용하는 임시 메모리 영역
    • 지역변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역
    • 함수 호출시 생성되고, 함수가 끝나면 시스템에 반환

문맥교환(Context Switch)

하나의 프로세스가 CPU를 사용중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태를 PCB에 보관하고 새로운 프로세스의 상태를 적재하는 작업

프로세스 스케줄링

준비큐에 등록된 여러개의 프로세스들 중, 스케줄링 전책에 따라 하나의 프로세스를 선정하고 선정된 프로세스에세 CPU를 할당하는 것

스케줄링 정책

선점 기법

  1. RR(Round Robin)
    • FCFS(First Come First Served) + 선접방식.

    • FCFS 기법과 같이 준비상태 큐에 먼저 들어온 프로세스가 먼저 CPU를 할당받음

      시간을 할당해서 할당시간 종료 후 완료하지 못하면 폐기

    • 우선순위의 형평성을 위해 타임 슬라이스 or 시간 할당량에 의해 시간 제한 받음

      • 시간 할당량이 클 경우: FIFO 스케줄링 방법과 차이가 없음
      • 시간 할당량이 작을 경우: 문맥교환 오버헤드가 상대적으로 ↑
  2. SRT (Shortest Remaining Time)
    • SJF(Shortest Job First) + 선점방식
    • SJF에 비해 평균대기시간이 단축됨.
    • 준비상태 큐에 새로 도착한 프로세스의 실행 시간과 현재 실행중인 프로세스의 남은 시간을 비교, 수행 시간이 적은 프로세스에 CPU를 할당하는 기법.
    • CPU 사용시간이 긴 프로세스가 무한정 기다리게 되는 기아현상(starvation)이 발생할 수 있음.
  3. 다단계 큐(Multi Level Queue)
    • 프로세스를 특정 그룹으로 분류할 수 있을 경우, 그룹에 따라 각기 다른 준비상태 큐를 사용. 큐 사이에 우선순위를 부여하는 기법
  4. 다단계 피드백 큐(Multi Level Feedback Queue)
    • 특정 준비상태 큐에 들어간 프로세스가 다른 준비상태 큐로 이동할 수 없는 다단계 큐 기법을 준비상태 큐 사이를 이동할 수 있도록 개선한 방법
    • 다양한 특성의 작업이 혼합된 경우 유용

비선점 기법

  1. FIFO(First In First Out) = FCFS(First Come First Served)
    • 준비 큐에 처음 오는 프로세스를 맨 처음에 실행

      생성된 순서가 아니라, 준비큐에 등록된 순서대로 실행된다.

      (꼭 프로세스가 생성된 순서대로 준비큐에 등록된다고 할 수는 없다.)

    • 응답시간 차가 적어 예측이 쉬움

    • 구현은 가장 쉬우나, 효율성이 많이 떨어짐

    • CPU 사용이 긴 프로세스에 의해 짧은 프로세스들이 오래 기다리는 ‘호송 효과(convoy effect)’에 의해 평균 대기시간이 길어짐(ex. 은행)

  2. SJF(Shortest Job Frist)
    • 최신작업선 처리

    • CPU 사용 시간이 가장 짧은 프로세스부터 처리.
    • 평균 대기시간이 짧음.
    • 각 프로세스의 CPU 요구시간 알기 어려움
  3. HRN(Highest Response Ratio Next)
    • SJF 기법의 약점인 ‘긴 작업과 짧은 작업의 지나친 불평등(기아현상 방지)’을 보완한 기법

    • 응답률 = (CPU 대기시간 + CPU 사용시간) / CPU 사용시간

    • CPU 사용시간이 짧고 대기시간이 길수록 우선순위가 높아진다

      = 에이징(aging) 기법

  4. 우선순위(Priority)
    • 준비상태 큐에서 대기중인 각 프로세스마다 우선순위 부여

      우선순위가 가장 높은 프로세스에 먼저 CPU 할당

      우선순위가 같을 경우, FIFO 또는 SJF 도입

    • CPU 사용시간, 입출력 대기시간 등의 내적요소와 프로세스의 중요성, 사용자의 직급 등의 외적 요소를 검사하여 우선순위 부여.

  5. 기한부(Deadline)
    • 프로세스에게 일정한 시간을 주고 그 시간안에 완료하도록 하는 기법

프로세스 동기화

협력하는 프로세스 사이의 실행 순서 규칙을 보장하는 것. 이를 통해 공유되는 데이터의 일관성을 보장한다. 공유되고 있는 변수를 사용해 한 프로세스가 작업하고 있을 때, 다른 프로세스가 그 변수 이용이 끝나기 전까지 사용하는 것을 막아주는 것이다.

프로세스 경쟁조건(Race condition)

프로세스 코드영역

  1. 진입영역
    • 임계 영역으로의 진입을 요청하는 부분
    • 결정성 보장을 위해 프로세스가 임계영역에서 처리를 할 때, 다른 프로세스가 끼어들지 못하도록 처리함.
  2. 임계영역

    • 다중 프로그래밍 운영체제에서 여러 프로세스가 데이터를 공유하면서 수행될 때 각 프로세스에서 공유 데이터를 액세스하는 프로그램 코드 부분.

    • 공유 자원(메모리)에 접근하는 코드(공유하는 자원이 아님.)

    • 임계영역이 존재하면 다른 프로세스에게 영향을 받거나 줄 수 있다.

      (모든 프로세스에 임계영역이 존재하는 것은 아니다.)

  3. 출구영역
    • 임계 영역에서 빠져 나왔음을 알리는 영역
    • 결정성 보장을 위해 프로세스가 임계영역에서 처리를 할 때, 다른 프로세스가 끼어들지 못하도록 처리함.
  4. 잔류영역
    • 위 3개 영역을 제외한 나머지

임계영역 문제해결을 위한 요구 조건

  1. 상호 배제(Mutual Exclustion)
    • 어떤 프로세스가 임계 영역 내에서 작업 중일 때, 다른 프로세스는 그 임계 영역으로 들어 올 수 없다.
    • 두개 이상의 프로세스가 임계영역에 동시에 존재해서는 안된다는 조건
  2. 진행(Progress)

    • 임계영역에 아무도 들어가지 못하도록 접근을 통제하는 것.

    • 임계 영역에서 실행되는 프로세스가 없다면, 임계 영역으로 진입하려는 프로세스 중 하나는 유한한 시간 내에 진입할 수 있어야 한다. 예를 들어 코딩을 잘못하여 임계영역이 아님에도 계속해서 다른 프로세스를 막도록 해서는 안된다는 의미.

  3. 제한된 대기(Bounded Waiting)

    • 프로세스가 임계영역에 가지 못하고 무한히 대기하도록 하는 것.

    • 한 프로세스가 임계 영역에 대한 진입을 요청한 후에는 다른 프로세스 의 임계 영역 진입이 유한한 횟수로 제한되어야 한다. 즉, 임계 영역에 대한 진입 요청 후 무한히 기다리지 않는다. 상호 배제를 통해 일관성이 깨지는 것을 해결했다 하더라도, 스케쥴링 특성에 의해 하나의 프로세스만 계속 동작하고 다른 프로세스는 계속 block이 되서는 올바르게 해결했다고 볼 수 없다는 것이다.

임계영역의 문제를 해결하는 소프트웨어적인 방법

  1. Dekker 알고리즘1

    • 하나의 공유변수를 이용하여 다른 프로세스의 접근을 방지하는 방식

    • [프로세스A] ―――――――――――――――――――― while(turn != 0);

      ~임계영역~

      turn = 1; ――――――――――――――――――――

      [프로세스B] ―――――――――――――――――――― while(turn != 1);

      ~임계영역~

      turn = 0;

      ――――――――――――――――――――

    • turn 값이 0이어서 프로세스 A가 임계영역을 실행했다고 가정, 프로세스 B는 임계영역에 들어가고 싶어도 turn 값이 0이기 때문에 진입영역의 while 조건에 막혀 무한루프를 돌며 진입하지 못하다가, 프로세스A의 임계영역 처리가 종료된 후, 출구영역에서 turn 값을 1로 바꿔주면 그제서야 프로세스B는 임계영역으로 접근할 수 있게 된다.(상호 배제 조건 만족)

    • 알고리즘의 문제점

      • 만약 프로세스A가 임계영역에 접근하여 처리하고 난 이후 다시 접근하려고 하면 turn 값(1로 변경됨)에 의해 임계영역에 프로세스가 없음에도 불구하고 들어가지 못한다.
      • 진행조건을 만족하지 못하고 while 안에서 무한정 대기해버리는 제한된 대기 조건을 만족시키지 못함.
  2. Dekker 알고리즘2

    • Dekker 알고리즘1의 문제를 해결한 알고리즘

    • 하나의 공유 변수를 이용하는 것이 아니라, 두개의 공유 변수를 이용함

    • [프로세스A] ―――――――――――――――――――― flag[0] = true; while(flag[1] != 0);

      ~임계영역~

      flag[0] = false; ――――――――――――――――――――

      [프로세스B] ―――――――――――――――――――― falg[1] = true; while(flag[0] != 1);

      ~임계영역~

      flag[1] = false; ――――――――――――――――――――

    • while 조건에 다른 프로세스가 들어있는지 안들어있는지 검사하기 위해 다른 프로세스의 공유변수를 검사한다.

    • flag[0]과 A flag[1]이 B 프로세스의 상태라면 A는 flag[1]을 검사, B는 flag[0]을 검사한다.

    • A 프로세스가 임계영역에 들어갔다가 다시 재진입이 가능하다.

    • 알고리즘 문제점

      • 만약 A프로세스의 flag[0]이 true로 바뀐 후 갑자기 문맥교환이 일어나는 경우, 프로세스 B는 실제로 임계영역에 프로세스가 존재하지 않지만, 변수값에 의해 프로세스가 있다고 판단하므로 임계영역에 어떠한 프로세스도 진입하지 못하고 계속 대기하기 때문에 진행조건과 대기조건을 만족하지 못함.
  3. Peterson 알고리즘

    • Dekker 알고리즘과 유사하나, 다른 프로세스에게 진입 기회를 양보한다는 차이가 존재한다.

프로세스 통신방법