본문 바로가기
ComputerScience/운영체제

프로그램과 프로세스

by Ji-Hyeong 2021. 1. 17.

1. 프로그램과 프로세스의 개념

프로그램 : 프로그램은 하드 디스크에 저장되어 있는 것(ex. 한글, 워드)

프로세스 : 프로그램이 실행 상태로 실제 구현된 것.

프로그램이 실행되면 HW Resource에 CPU와 Memory가 할당된다. 프로그램은 하드디스크에 한 개만 저장되지만, 프로세스는 여러 개가 생길 수 있다. (ex. 여러 개의 인터넷 창)

1.1 Process State

  • running : CPU를 할당받고 실행 중인 상태
  • ready : CPU를 할당받고 있지 않지만, 즉시 run 할 수 있도록 대기하고 있는 상태
  • block : 어떠한 이벤트를 기다리거나, 자연스럽게 CPU에서 할당되어진 것이 release 되어진 상태
    • 기다리고 있는 이벤트가 발생하기 전까지는 실행할 수 없다.
    • 이벤트가 발생하면 바로 ready state로 바뀐다.
    • block state는 CPU allocation의 candidate가 아니다. block state는 이벤트가 있기 까지 실행 할 수 없으므로 CPU에 아무런 변화가 생기지 않는다. 즉, useless / resource 낭비이기 때문이다.

하드디스크에 저장되어 있는 프로그램이 execution되면 process가 생성되고, memory에 process를 저장하는 공간이 생성된다.

1.2 Process Address Space

메모리에 있는 프로세스를 담는 공간으로, memory에 4개의 별도공간이 생긴다.

  • Code segment : Program의 실행 Code가 저장된다. (Read-only) -> 공유

  • Data segment : 전역변수(Process life time과 같다고 할 수 있다.)와 같은 프로그램의 Data가 저장된다. (Read-Write)

  • Stack segment : Function을 호출하는 정보와Function 안의 지역변수(함수가 종료되면 지역변수는 Memory에서 제거된다.)들을 저장한다. (Read-Write)

  • Heap : Dynamic memory allocation (malloc함수 사용 시 heap 영역이 사용됨.)

  • Code segment가 분리되어 있는 이유
    • Program code는 같은 프로그램이라면 모두 동일한 code를 갖고 있다. 즉, 하나의 프로그램은 여러 프로세스를 가질 수 있는데 실행을 위한 code는 동일하다는 의미이다.
    • 그렇기 때문에 여러 개의 프로세스가 프로그램 코드를 공유하기 위해 분리하였고, 메모리 사용량 또한 줄였다.
    • Data, Stack은 각각의 process에서 사용되는 변수들은 같은 프로그램임에도 불구하고 달리 쓰일 수 있기 때문에 공유하지 않는다.
  • Stack이 Data와 분리되어 있는 이유
    • Stack은 함수 호출과 지역변수를 저장하는데, 이를 위해서는 LIFO 구조인 stack이 적합하기 때문에 분리시켰다.

1.3 Multi Programming

  • CPU를 공유하면서 두 개 이상의 프로세스가 실행되는 컴퓨팅 환경이다.
  • Process Management : CPU Resource Allocation을 위해 OS는 live process를 계속 추적해야 하고, 각각의 process state를 추적해야한다.
    • 효율적이고 공정한 CPU Scheduling
    • Protection between processes
    • Syncronization between processes
    • Memory allocation

1.4 Process Metadata & PCB

  • Process Metadata는 각 Process ID, Process state, Process priority와 같이 프로세스가 갖고 있는 중요한 정보들을 말한다.
    • Process ID는 다른 프로세스와 구별을 위해 unique 해야 한다.
    • priority는 각 프로세스들마다 중요도가 다르기 때문에 OS는 프로세스의 우선순위를 항상 추적해야한다.
  • PCB(Process Control Block)
    • 구조체로 되어 있으며, 프로세스의 메타데이터가 PCB에 저장되어 있다.
    • 각각의 PCB는 하나의 PCB를 갖는다. (Unique)
    • 프로세스의 중요한 것들이 모두 PCB에 저장되어 있으므로, OS는 PCB만을 추적하면 된다.
    • PCB는 메모리에 따로 저장된다. (Process Address Space 외의 다른 공간)
  • How to keep track of live process?
    • live process끼리 서로 연결시켜 linked list로 관리해줌으로써 이를 해결
    • 프로세스가 생성되면(프로그램이 실행되면) PCB가 생성되고, 생성된 PCB는 live PCB의 헤드 혹은 먼저 연결되어 있던 live PCB와 연결된다.
    • 각각의 PCB들은 기본적으로 before와 next 두 개의 PCB와 연결되어 있다.
    • *그렇기 때문에 OS는 여러 개의 linked list가 존재한다. *
      • linked list for live processes
      • linked list for ready processes(레디 상태인 프로세스는 Candidate of CPU Scheduling이므로 ready list를 따로 갖는다.)

'ComputerScience > 운영체제' 카테고리의 다른 글

운영체제 개념  (0) 2021.01.17

댓글