운영체제(3) - 프로세스(1)

‘운영체제’를 공부하여 정리한 내용입니다.

1. Process Cocept

프로그램이 메모리상에 적재될 때 가지는 것 - 프로세스가 될 때 가지는 것

  • 우리는 이것을 프로세스라고 부른다.
  • 구성 요소
    • 텍스트 세그먼트
      • 기계어
    • 데이터
      • 전역 변수 등
    • 스택과 힙

Process State

  • 상태는 다음과 같은 것들이 있다.

    • new: 프로세스 생성 중
    • running: CPU 시간을 소비중이다, 명령어가 실행되는 중이다.
    • waiting: 프로세스가 어떤 사건을 기다린다. (입출력 등)
    • ready: 프로세스가 처리기에 할당되기를 기다린다.
    • terminated : 프로세스가 실행을 종료했다.
  • 처리기는 CPU라고 생각하면된다.

    • 처리기는 어느 순간에나 무조건 하나의 프로세스만 실행한다는 것을 기억하자.

PCB(Program Control Block)

  • PCB는 특정 프로세스와 관련한 여러 정보를 가지고 있다.
    • Process State
    • PC(Program Counter)
    • CPU 레지스터에 저장되어 있던 값들
    • CPU-scheduling info.
      • 우선순위, Schedule Queue에 관한 포인터와 매개변수
    • 메모리 관리 정보
      • MMU(Memory Management Unit)에서 계산에 사용할 base, limit 레지스터 값
      • 페이지 테이블, 세그먼트 테이블 정보
    • 회계(Accounting) 정보
    • 입출력 상태 정보
      • 프로세스에 할당된 입출력 장치
      • 열린 파일 목록

Threads

  • 지금은 아직 크게 고려되지는 않았지만, 본래 Thread 정보도 PCB에 포함된다.

2. Process Scheduling

Scheduling Queues

  • ready queue

    • linked list의 형태를 가진다.
    • 첫번째 프로세스의 PCB와 큐의 마지막 PCB를 가리키는 포인터를 포함한다.
  • device queue

    • 각 장치는 모두 가진다.
    • 모든 프로세스가 한번에 CPU를 쓸 수 없듯이, 장치도 한번에 사용할 수 없기 때문에 큐가 필요하다.

프로세스가 CPU 제어를 다른 프로세스에게 넘기는 상황

  • 입출력 요청
  • sub-process를 만들어서 wait 할 때
  • 인터럽트로 인해, 인터럽트로 그 제어를 넘길 때.
    • 예시로는, 일정 시간이 지났을 때, 타이머 인터럽트를 생각해볼 수 있다.

Schedulers

  • Job Scheduler
    • long term scheduler라고도 불린다.
    • 메인 메모리에 모든 프로세스를 못 올리는 상황이 있다.
    • 이런 상황에는 메인 메모리로 올리기 전에, 어떤 것을 올릴지를 선택하는 스케쥴러가 필요하다.
    • 기다리는 프로세스들은 디스크에 저장되어 실행되는 것을 기다린다.
  • CPU Scheduler

    • short term scheduler라고도 불린다.
    • ready가 완료된 프로세스들 중에 선택한다. (메인 메모리 위에 적재되어있다.)
    • CPU를 할당하기 위한 스케쥴러다.
  • Job Scheduler가 고려해주어야 하는 것

    • 프로세서가 생성되는 주기는 프로세스가 이탈되는 주기와 같아야 한다.
      • 그래야 메인 메모리가 최대한 사용되고 있는 것이 보장되기 때문이다.
    • 또한 CPU 중심 프로세스와 입출력 중심 프로세스를 적절히 섞어서 실행시켜야 한다.
      • 어느 한쪽이 많아지면 ready queue나 device queue 중 하나에 프로세스가 몰려서 퍼포먼스가 떨어진다.
  • 현대의 OS들은 Job Scheduler를 두지 않는다.
    • 메인 메모리에 프로세스를 얼마나 올리고, 나중에 실행할지를 유저에게 맡기자는 철학을 가진다.
    • 그리고 이게 잘 동작한다.
    • 쓸모없는 구현 비용을 줄인다.

Context Switch

  • CPU 제어가 현재 프로세스에서 다른 프로세스로 넘어갈 때 일어나는 작업이다.
    • 현재의 프로세스가 다시 CPU 제어를 차지했을 때 이전의 연산을 이어서 진행하기 위해 필요한 정보를 PCB에 백업한다.
    • 저장하는 정보는 주로 PC, 레지스터 정보 등등이다.
  • 이건 알고리즘 적으로 최적화하는 것이 거의 불가능한 순수한 오버헤드다.
  • 하드웨어가 가끔 서포트하기도 하지만, 한계가 있다.
    • Sun UltrSPARC 등의 예시를 찾아보자.

Leave a Comment