[OS] 2. Processes

Date:     Updated:

카테고리:

태그:

CPU Virtualization

CPU 가상화Virtualization를 위해선 도구, 지능이 필요하다.

가상화 : 각 Process에게 CPU가 하나씩 존재하는 것처럼 하는 것이다.
Process : memory에 있는 어떤 프로그램을 실제 실행하는 것이다.

도구(매커니즘) → context changing
지능(알고리즘) → scheduling policy

Multiple processes 인 경우
사용할 수 있는 CPU가 한정적이기 때문에 CPU 가상화를 통해 각각이 할당받은 것 처럼 만든다.

Virtualizing the CPU

Time sharing of the CPU

하나의 process에 어느정도 쓰고 다른 process에게 할당할건지 조절한다. OS code 가 interleaving control을 하는데 이것을 통해 CPU 이동 관리를 한다.

Time Quantum 길이

너무 짧은 경우 : 고유의 CPU가 할당된 것 처럼 느끼긴 하지만 OS의 overhead가 커지게 된다.
너무 긴 경우 : 일이 동시에 처리된다는 느낌이 아니다.

⇒ 적절한 Time Quantum 값을 기준으로 time sharing 하는 것이 CPU 가상화에서 중요한 점이다.

A Process

process : 실행중인 프로그램
program : 원래 디스크의 저장장치에 가만히 있는 상태

디스크에서 program을 불러와서 실행시키면 process가 된다.

  • Memory(address space)
    • code(Text)
    • Data
    • Stack : 함수, 변수 저장
    • Heap : 메모리 동적할당
  • Register
    • Program counter
    • Stack pointer

프로세스의 경우에 따라 더 많은 것이 필요할 수도 있다.

Process API

process를 활용하기 위한 API는 다음과 같은데 어떠한 OS에서도 동작이 가능하다

  • Create : 프로그램 실행시킬 새로운 프로세스를 만든다.
  • Destroy : 실행중인 Process를 중단시킨다.
  • Wait : Process의 실행이 멈추는것을 기다린다.
  • Miscellaneous Control : 프로세스를 중단시키고 재개시키는 방법
  • Status : 프로세스의 상태 정보를 받는다.

Process Creation

  1. 메모리로 프로그램 코드를 가져온다, 그리고 프로세스의 주소 공간으로 넣는다.
    1. 프로그램은 처음에 실행 가능한 형태로 디스크에 저장되어 있다
    2. OS는 프로그램 실행을 하면서 필요할 때 필요한 부분을 불러온다

코드나 데이터의 일부만 로딩을 하고 그 후에는 필요할때 마다 가져온다.

  1. Stack을 할당한다.

    1. 스택은 지역 변수나, 함수 파라미터, 리턴 주소등에 사용한다.
    2. 변수들의 초기화도 진행한다.
  2. 프로그램의 Heap 영역 생성

    1. Heap : 동적으로 할당된 데이터를 사용하기 위해 사용된다.
    2. malloc()을 통해 할당하고 free()를 통해 해제한다.

dynamically : 동적 : 실행 도중에
statically : 정적 : 컴파일 할 때

  1. OS는 초기화 작업을 한다.
    1. 입출력과 관련된 setup
      1. 각각의 프로세스는 디폴트 파일 디스크립터를 오픈한다.
      2. standard input 0, output 1 and error 2
  2. 프로그램 실제 실행 주로 main()안에 서술되어있다.
    1. OS는 CPU가 새롭게 생성된 프로세스에 할당할 수 있게 조정한다.

Process States

프로세스는 3가지 중 한 상태일 수 있다.

image

  • Running
    • 프로세서에서 프로세스가 실행중이다.
  • Ready
    • 아직 할당 받은 상태는 아니고 대기중인 상태
  • Blocked == waiting == sleep
    • 특정 연산에 의해 이 상태에 도달한다.
    • 입출력을 할때 CPU는 사용되지 않기 때문에 Block이 된다. 그럴 때 다른 프로세스가 CPU 사용한다.

Process가 1개여도 위와 같은 상태를 지난다.

Data structures

OS는 프로세스 정보를 저장하기 위한 자료구조 형태를 가지고 있다.

  • Process list
    • Ready processes
    • Blocked processes
    • Current running process
  • Register context

위와 같은 정보들을 PCBProcess Control Block라는 형태의 자료구조로 OS가 정보 접근을 한다.
C-structure 자료구조의 형태는 각각의 프로세스마다 PCB를 가지고 있어서 OS가 상태를 모니터링하고 스케쥴링한다.

PCB를 Process Descriptor라고도 하는데, 안에 프로세스에 대한 다음과 같은 정보들을 가지고 있다.

  • CPU registers
  • PID, PPID, process group, priority, process state
  • CPU scheduling information

Context Switching

Context : 프로세스의 레지스터 값

context switching : 프로세스를 바꾼다.

CPU가 다른 프로세스로 바꾸면, 시스템은 기존의 프로세스 상태를 저장하고 새로운 프로세스의 상태를 읽는다

전환중에는 아무런 일을 할 수 없기 때문에 Context switching 시간을 overhead라고 한다.
Context switching 시간은 HW 마다 register set이 다르기 때문에 시간이 다르다.

image

위 처럼 P0에서 P1으로 바꾸게 될 때 P0 프로세스 상태를 저장하고 새로운 P1 프로세스의 상태를 읽는다.

맨 위로 이동하기

OS 카테고리 내 다른 글 보러가기

댓글남기기