[운영체제] 3. Process (1)

somi·2023년 5월 25일

[CS] 운영체제

목록 보기
3/15

+++ (참고)

프로그램 vs 프로세스 vs 프로세서

프로그램(Program)

프로그램은 컴퓨터에서 실행할 수 있는 명령어들의 집합
일반적으로 소스 코드로 작성되며, 컴파일러나 인터프리터를 통해 실행 가능한 형태로 변환
예) 어떤 작업을 수행하는 소프트웨어 애플리케이션 또는 스크립트
프로그램은 저장 매체에 저장되어 있으며, 실행되기 전에는 정적인 상태

프로세스(Process)

프로세스는 실행 중인 프로그램의 인스턴스(instance)
프로그램이 메모리에 적재되어 실행되면, 해당 프로그램은 프로세스로서 동작
각각의 프로세스는 운영체제에 의해 독립적으로 관리되며, 각자의 주소 공간, 레지스터, 스택 등을 가지고 있음

프로세서(Processor)

프로세서는 컴퓨터 시스템에서 연산과 데이터 처리를 수행하는 하드웨어 장치
프로세서는 명령어를 해석하고 실행하여 프로그램의 연산을 처리하고 데이터를 조작

프로그램은 실행 가능한 명령어들의 집합, 프로세스는 실행 중인 프로그램의 인스턴스, 프로세서는 프로세스를 실행하고 명령어를 처리하는 하드웨어 장치

인스턴스(Instance)는 객체 지향 프로그래밍에서 사용되는 개념, 클래스(Class)를 기반으로 생성된 구체적인 객체를 의미. 클래스는 객체의 설계도이고, 이를 실제로 메모리에 할당하여 사용할 때 그것이 인스턴스

프로세스가 실행 중인 프로그램의 인스턴스라는 말은, 프로그램이 실행될 때 해당 프로그램의 복제본이 메모리에 로드되어 실제로 실행되는 상태~


프로세스의 개념

  • Process is a program in execution
  • 프로세스의 문맥(context) - 특정 시점을 봤을 때 어디까지 수행되었는지를 나타내는 정보
    1. CPU 수행 상태를 나타내는 하드웨어 문맥
      • program counter - 어떤 코드를 읽고 있는가
        : 현재 실행 중인 명령어의 주소를 나타낸다. CPU가 다음에 실행할 명령어의 주소를 알려준다.
      • 각종 register: CPU 내부에 있는 작은 메모리 공간, 데이터를 저장하고 연산에 사용
    2. 프로세스의 주소 공간 - 프로세스는 메모리에 할당된 주소 공간을 가진다.
      - code, data, stack
      • Code: 프로그램의 실행 코드가 저장
      • Data: 전역변수, 정적 변수 등 데이터가 저장
      • Stack: 함수 호출과 관련된 정보, 지역 변수, 함수 호출 시 생성되는 임시 데이터 등
    3. 프로세스 관련 커널 자료 구조
      • PCB(Prcoess Control Block)
        : 각 프로세스마다 PCB라는 자료 구조가 할당되어 해당 프로세스의 정보 저장
      • Kernel stack: 커널 내에서 필요한 임시 데이터 및 함수 호출 관련 정보 저장

프로세스의 상태(process state)

  • 모든 상황은 CPU는 1개인 상황을 가지고 설명

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

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

  • Ready

    • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
  • Blocked(wait, sleep)

    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • Process 자신이 요청한 event(예: IO)가 즉시 만족되지 않아 이를 기다리는 상태
    • 예) 디스크에서 file을 읽어와야 하는 경우
  • New: 프로세스가 생성중인 상태

  • Terminated: 수행(execution)이 끝난 상태


Suspended(stopped)

  • 외부적인 이유로 프로세스의 수행이 정지된 상태
  • 프로세스는 통째로 디스크에서 swap out된다.
  • 예) 사용자가(사람이) 프로그램을 일시 정지시킨 경우(break key) → 사람이 다시 재개해야
    • 시스템이 여러 이유로 프로세스를 잠시 중단시킴
      (메모리에 너무 많은 프로세스가 올라와 있을 때) - 중기 스케줄러가 메모리를 빼앗는 상황

  • blocked: 자신이 요청한 event가 만족되면 Ready 상태로 돌아갈 수 있다.
  • Suspended: 외부에서 정지시켰기 때문에 외부에서 다시 resume해 주어야 Active한 상태가 될 수 있음.

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 등
  • 운영체제는 PCB를 통해 프로세스를 관리, 자원 관리 가능

문맥 교환(context switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 떄 운영체제는 다음을 수행
    - CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    - CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
    -사진 출처: https://aktnfl.tistory.com/25
  • System call이나 interrupt 발생시 반드시 context switch가 일어나는 것은 아님
  • 사용자 프로그램으로 부터 cpu가 운영체제로 넘어가는 것이다. - 문맥 교환이 아님!
  • 다른 프로세스로 넘겨주게 된다면 문맥 교환이 맞음

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

  • Job queue <- ready, device queue 포함됨
    • 현재 시스템 내에 있는 모든 프로세스의 집합, 메모리에 적재되지 않은 모든 프로세스들이 대기
  • Ready queue - cpu를 할당받기 위해 기다림
    • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queues
    • IO device의 처리를 기다리는 프로세스의 집합
    • 각 IO 장치 마다 해당 장치를 사용하기 위해 대기 중인 프로세스들이 별도의 큐에 포함됨
  • 프로세스들은 각 큐들을 오가며 수행된다. 스케줄러는 이러한 큐들을 관리하여 프로세스들이 공정하게 CPU와 자원을 이용할 수 있게 조정한다.

스케줄러(scheduler)

프로세스들이 자원을 공정하게 이용할 수 있도록 자원의 할당을 관리

  • Long-term scheduler(장기 스케줄러 / job scheduler) ⇒ 메모리

    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    • 프로세스에 memory(및 각종 자원)을 주는 문제
    • degree of Multiprogramming을 제어 - 메모리에 올라가 있는 프로세스의 수를 제어
    • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready 큐로 보냄. 그래서 보통 중기 스케줄러가 제어)
  • Short-term scheduler(단기 스케줄러 / CPU scheduler) - 짧은 시간 단위

    • 어떤 프로세스를 다음번에 running 시킬지 결정
    • 프로세스에 CPU를 할당하는 역할
    • 충분히 빨라야 함(milliseconds 단위)
  • Medium-term scheduler(중기 스케줄러 / swapper) - 너무 많이 올라가있으면 쫓아낸다.

    • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    • 프로세스에게서 memory를 뺏는 문제
    • degree of multiprogramming을 제어, 메모리에 올라간 프로세스의 수를 조절
profile
📝 It's been waiting for you

0개의 댓글