[운영체제] 3. Process

do_large·2021년 1월 30일
0

운영체제강의

목록 보기
3/8
post-thumbnail

프로세스의 개념

"Process is a program in execution" 즉, 실행중인 프로그램을 의미
프로세스를 이해하려면 프로세스의 문맥을 이해해야 한다.

프로세스의 context

  • 특정시점에서 프로세스가 어디까지 수행을 했는지에 대한 정보를 담고있음.

  • 프로세스의 문맥은 프로그램카운터가 어디를 가리키고 있는지(코드의 어디까지 실행했는가), 메모리에 담고있는정보, 스택정보 등을 담고있기때문에 현재시점에 프로세스의 진행상황을 알 수 있다.

  • CPU 수행 상태를 나타내는 하드웨어 문맥
    Program Counter, 각종 register

  • 프로세스의 주소공간(메모리와 관련)
    code, data, stack
    현재시점에 위의 메모리공간에 어떤 값이 들어있는가

  • 프로세스 관련 커널 자료구조
    - PCB(Process Control Block)
    OS는 프로그램이 하나 실행될때마다 프로세스를 관리하기 위해서 자신의 데이터영역에 PCB라는 자료구조를 하나 둔다.
    - Kernel stack

프로세스의 상태(Process State)

프로세스는 상태가 변경되며 수행된다.

  • Running
    - CPU를 잡고 instruction을 수행중인 상태

  • Ready
    - CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

  • Blocked(wait, sleep)
    - CPU를 주어도 당장 instruction을 수행할 수 없는 상태!
    - process 자신이 요청한 event(예:I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    - (예) 디스크에서 file을 읽어와야 하는 경우

  • Suspended (stopped)
    - 중기스케줄러를 사용하기때문에 추가된 state
    - 외부적인 이유로 프로세스의 수행이 정지된 상태
    - 프로세스는 통째로 디스크에 Swap out된다.
    - (예) 사용자가 프로그램을 일시 정지시킨경우 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (메모리에 너무많은 프로세스가 올라와 있을때)
    - 중기스케줄러에 의해서 메모리에서 쫒겨난 상태라고 보면됨
    - 메모리상에 존재하지않기때문에 CPU와 관련된 작업은 할 수 없지만, I/O같은 작업은 가능하다.

    Blocked와 Suspended

  • Blocked는 자신이 요청한 event가 만족되면 다시Ready 상태로 돌아감

  • Suspended는 외부에서 정지시켜놓은 상태임. 외부에서 재개를 시켜줘야 Active한 상태로 돌아갈 수 있다.

  • New
    - 프로세스가 생성중인 상태

  • Terminated
    - 수행이 끝난 상태

Process Control Block(PCB)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
  • 다음의 구성요소를 가진다
  1. OS가 관리상 사용하는 정보
    • Process State, Process ID
    • scheduling information, priority
  2. CPU 수행 관련 하드웨어 값
    • Program counter, registers
  3. 메모리 관련
    • Code, data, stack의 위치정보
  4. 파일 관련
    • Open file descriptors

문맥교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
    - CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장 (CPU에서 가지고있던 해당 프로세스에대한 레지스터내부의 정보나 PC에 대한 정보를 프로세스내부에 저장해놓는다)
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴(프로세스가 가지고있던 실행정보를 다시 CPU로 불러와서 복원을 시킨다.)

시스템콜이나 인터럽트 발생시 반드시 Context Switch가 일어나는것은 아니다.

사용자 프로세스로부터 운영체제커널로 cpu가 넘어가는게 문맥교환이 아니라,
사용자 프로세스하나로부터 다른 사용자프로세스로 cpu가 넘어가는거를 말하는거임

1의 경우에도 CPU 수행정보 등 context의 일부를 PCB에 저장하지만,
문맥교환을 하는 2의 경우 그 부담이 훨씬 크다.

프로세스를 스케줄링하기위한 큐

  • Job queue
    현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready queue
    현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queue
    I/O device의 처리를 기다리는 프로세스의 집합
  • 프로세스들은 각 큐를 오가며 수행된다.


이 그림을 보니깐 한눈에 이해하기 쉽구먼!

마지막 부분은 좀 잘못된 그림이라고 한다. 프로세스가 실행중일때 인터럽트가 발생하게 되면 그림상으로는 실행중인 프로세스는 다시 레디큐에 들어간다고 나와있지만 실제로는 그렇지 않다고 한다. 이부분에 대해서는 추후 설명예정

스케줄러

순서를 정해주는 것!

  • Long-term scheduler(장기 스케줄러, job scheduler)
    - 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    • 프로세스에 memory 및 각종 자원을 주는 문제
    • degree of Multiprogramming을 제어(메모리의 올라가는 프로그램의 수를 조정할 수 있음)
    • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)
  • Short-term scheduler(단기 스케줄러, CPU Scheduler)
    - 어떤 프로세스를 다음번에 running시킬지(CPU를 줄 지) 결정
    • 프로세스에 CPU를 주는 문제
    • 충분히 빨라야 함 (millisecond단위)
    • 짧은 시간단위로 스케줄이 실행됨
  • Medium-Term Scheduler(중기 스케줄러, Swapper)
    - 사실 우리가 평소에 사용하는 것에는 장기스케줄러가 없다. 프로그램을 실행시키면 바로 메모리에 올라가기는한다. 그래서 이 중기 스케줄러로 메모리에 올라간 여러개의 프로그램을 조절
    - 여유공간마련을 위해 프로세스를 통쨰로 메모리에서 디스크로 쫒아냄
    • 프로세스에게서 memory를 뺐는 문제
    • degree of Multiprogramming을 제어

추가설명

동기식 입출력과 비동기식 입출력


사용자 프로세스가 운영체제에게 입출력에대한 요청을 한다.
입출력이 수행되는 동안에
사용자프로세스가 아무것도 안하고 기다려야되면 동기식 입출력이고,
입출력요청을 해놓고 사용자 프로세스가 곧바로 CPU를 잡아서 무언가를 수행하면 비동기식 입출력이다.


Thread(lightweight process)

  • 프로세스 내부의 CPU수행 단위
  • 스레드의 구성
    - program counter
    - register set
    - stack space
  • 스레드가 동료 스레드와 공유하는 부분(=task)
    - code section
    - data section
    - OS resources
  • 전통적인 개념의 heavyweight process는 하나의 스레드를 가지고 있는 task로 볼 수 있다.
  • 다중 스레드로 구성된 태스크구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있다.
  • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
  • 스레드를 사용하면 병렬성을 높일 수 있다. 이 특징은 CPU가 여러개 달린 장치에서만 얻을 수 있는 장점이다. 왜냐하면 여러개의 스레드에서 2개 이상의 CPU가 작동을 해야 병렬적으로 일을 한다고 말할 수 있기때문이다.

프로세스에 대한 정보를 담고있는 PCB를 보면

스레드는 CPU수행과 관련된 정보를 가지고 있다.



프로세스가 하나 주어지면 코드 데이터 스택으로 구성된 주소공간이 생성된다.

하나의 프로세스안의 여러개의 CPU수행단위를 스레드라고 한다
스레드는 프로세스 내에서 독자적으로 가져야할 정보만 가지고 있음.

스레드의 장점

  • Responsiveness(응답성)
    사용자 입장에서 빠르다
    스레드가 여러개라서 대기시간을 줄일 수 있다.
  • Response Sharing
    여러개의 스레드는 코드, 데이터, 프로세스의 자원을 공유한다.
  • Economy
    프로세스를 하나 만드는것은 오버헤드가 상당히 크다. 프로세스안에 스레드를 만드는것은 프로세스를 새로 만드는것보다는 오버헤드가 작다. 문맥교환은 오버헤드가 상당히 크다. 같은 프로세스내에서 스레드간 이동해서 사용하는게 간단함.
  • Utilization of MP Arcitectures(CPU가 여러개 일때 얻을수있는 장점)
    각 스레드가 서로다른 CPU에서 병렬적으로 일을 할 수 있다.
    그래서 결과를 빠르게 얻을수있다.

0개의 댓글