Process

Jin·2022년 2월 27일
0

운영체제

목록 보기
1/3

※ 운영체제 정리에 앞서 정리한 자료는 한국외대 컴퓨터전자시스템공학부 이윤석 교수님의 수업 자료를 참고하였음을 밝힙니다.

1. 프로세스란 무엇인가?

  • 실행 중인 프로그램
  • 실행과 스케줄링의 기본 단위
  • 각각의 프로세스는 고유한 id를 가지고 있어서 그것으로 구분 (pid)
  • 각 프로세스가 소유하고 있는 것:
    • CPU contexts (registers)
    • OS resources (memory, open files, etc.)
    • Other information (PID, state, owner, group, etc.)

각 프로세스는 그들 자신만의 address space와 open files, virtual CPU를 가져서 독립적으로 작동합니다.

2. Process Address Space

위의 그림은 우리가 흔히 프로그램을 구성하는 영역이라고 알고 있는 code, data, heap, stack입니다. 프로세스를 배우면서 알아야 점은 code와 data는 실행 중이 아니더라도 공간을 차지하고 있는 영역입니다. heap과 stack은 프로세스 즉, 프로그램이 실행 중일 때에 비로소 공간을 차지하는 영역입니다.

3. Process States

위의 그림은 process가 생성되어 실행, 대기의 과정을 거쳐 종료될 때까지의 과정을 state 중심으로 나타낸 것입니다.

  • running: 현 시점에서 CPU 자원을 소유하고 있는 프로세스의 상태
  • ready: running 상태는 아니지만 CPU 자원만 소유하게 된다면 언제든지 실행될 수 있는 상태 (scheduling queue에 존재)
  • waiting (blocking):
    • 실행이 정지된 상태
    • 기다리던 이벤트가 끝날 때까지는 스케줄링될 수 없음
    • sleep queue에 존재
    • CPU를 소유하지 않는 경우에도 I/O device는 이 프로세스를 위해 동작할 수 있음
    • waiting이 끝나면 ready 상태가 됨
    • Process-blocking은 CPU/IO의 overlap을 가능하게 함
    • e.g. waiting from (I/O, lock, shared resources, etc.)

4. PCB (Process Control Block) & Context Switch

프로세스의 모든 정보를 담고 있는 자료구조로 다음과 같은 것을 포함합니다.

  • process id
  • user id
  • Binary program file info. (e.g. hwp, vi, etc.)
  • Scheduling priority
  • state
  • the event waiting for
  • open file table
  • allocated resources
  • working directory
  • memory management info.
  • pending signals
  • machine context

여기서 중요한 것이 machine context라는 개념입니다. 이것은 PC, SP, register 같은 hardware state의 값들을 말하는데 이것은 Context Switch가 되기 위해 반드시 필요합니다.

위의 그림은 Context Switching이 일어나는 과정을 보여주고 있습니다.

1. 현재 실행 중인 프로세스에서 다른 프로세스로 실행의 흐름이 넘어가려면 지금 실행 중인 프로세스는 멈추고 제어권을 넘겨주어야 합니다.
2. 이때 실행 중인 프로세스의 hardware state는 CPU에서 여러 작업을 처리하며 그 값이 변하고 있는데 작업들을 멈추고 CPU에 있던 hardware state를 다시 프로세스의 PCB에 옮겨 담아서 저장시킵니다.
3. 이제 실행되어야 할 프로세스에 CPU 자원을 넘겨주면 가장 먼저, 실행될 프로세스의 PCB에 있던 hardware state들이 CPU로 옮겨가게 됩니다.
4. CPU에서는 해당 프로세스의 작업을 처리하면서 자연스럽게 다른 프로세스로 흐름이 넘어가게 되는 것입니다.

우리가 여러 가지 프로그램을 동시에 쓰는 것처럼 느끼게 해주는 역할을 context switching이 해주고 있습니다. 너무 switching이 빨라서 느끼지 못할 뿐입니다. (1초에 몇 백 ~ 몇 천 번)

context switch는 커널 안에서만 일어나고 멈추는 시점에서 다시 CPU 자원을 얻었을 때 이어서 진행되므로 사용자 입장에서는 끊김 없이 여러 프로그램을 동시에 사용하는 것 같이 느낄 수 있게 됩니다.

profile
배워서 공유하기

0개의 댓글