본문 바로가기

Computer Science/OS

[OS] Process Management

반응형

1. Process

 

Process는 실행 중에 있는 프로그램을 의미한다. 우리가 작성한 소스 파일이나 이를 빌드한 바이너리 코드는 모두 프로그램이다. 이런 프로그램이 실행되면 프로세스가 된다.

 

프로세스는 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있다. OS로부터 주소 공간, 파일, 메모리 등을 할당 받으며, 이것들을 총칭하여 프로세스라고 한다. 구체적으로 함수의 매개변수, 복귀 주소와 로컬 변수와 같은 임시 자료를 갖는 프로세스 스택과 전역 변수들을 수록하는 데이터 섹션을 포함한다. 또한 프로세스는 프로세스 실행 중에 동적으로 할당되는 메모리인 heap을 포함한다.

 

 

2. 프로세스 메모리 구조

 

process memory structure

 

1) Stack

  • 프로그램이 자동으로 사용하는 임시 메모리 영
  • 지역변수, 매개변수, 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역
  • 함수 호출 시 생성되고 함수가 끝나면 반환된다.
  • Stack 사이즈는 각 프로세스마다 할당되지만 프로세스가 메모리에 로드될 때 Stack 사이즈가 고정되어 있어 런타임 시 Stack 사이즈를 바꿀 수 없다.
  • 명령 실행 시 자동으로 증가/감소하기 때문에 보통 메모리의 마지막 번지를 지정합니다.

 

2) Heap

  • 필요할 때 동적으로 메모리를 할당하여 사용하는 영역으로 동적 데이터 영역이라고 부른다.
  • 메모리 주소 값에 의해서만 참조되고 사용되는 영역

 

3) Data

  • 프로그램이 실행될 때 생성되고, 종료되면 반환되는 영역으로 전역변수, 정적변수, 배열, 구조체 등이 저장된다.
  • Data 영역은 Data와 BSS 영역으로 나뉘어지는데, 이때 초기화 된 데이터는 Data 영역에 저장되고 초기화 되지 않은 데이터는 BSS 영역에 저장된다.
  • Data 영역과 BSS 영역을 나누는 이유

 

4) Text (Code)

  • 코드 자체를 구성하는 메모리 영역으로 실행 가능한 instruction들을 저장한다.
  • Hex나 bin 파일 메모리, 기계어로 제어되는 메모리 영역
  • heap과 stack 메모리의 아래에 위치하여 오버플로우로 인한 오버라이팅을 방지한다.

 

※ Code, Data, Bss, Stack 영역은 컴파일 시에 크기가 결정되고, Heap 영역은 런타임 시에 크기가 결정된다.

※ Stack의 지역변수는 사용하고 소멸하므로 데이터 용량이 불확실합니다. 그렇기 때문에 밑에서부터 채워올리고 Heap은 위에서부터 채워나갑니다. 이렇게 서로 주소값을 채워나가다가 Heap에서 Stack 방향으로 영역을 침범하는 경우 HEAP overflow라고 하며 반대로 Stack에서 Heap 방향으로 영역을 침범한다면 STACK overflow라고 합니다.

 

 

3. PCB (Process Control Block)

 

PCB 특정 프로세스에 대한 중요한 정보를 저장하고 있는 OS 자료구조이다. OS 프로세스를 관리하기 위해 process 생성과 동시에 고유한 PCB 생성한다. 프로세스는 CPU 할당 받아 작업을 처리하다가도 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환해야 하는데 이때 작업의 진행 상황을 모두 PCB 저장하게 된다. 그리고 다시 CPU 할당 받게 되면 PCB 저장되어 있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행한다.

 

PCB에 저장되는 정보 (context of the process)
- 프로세스 식별자, PID (Process ID)
- 프로세스 상태: new, ready, running, waiting, terminated
- 프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소
- CPU register
- CPU scheduling info: process 우선순위, 스케줄 큐에 대한 포인터 등
- memory management info: 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보
- IO status info: 프로세스에 할당된 입출력 장치들과 열린 파일 목록
- accounting info: 사용된 CPU 시간, 시간 제한, 계정 번호 등

 

 

4. State of Process

 

프로세스는 다음의 상태들 중 하나의 상태를 가지게 된다.

  1. New: 새로 생성된, 생성 중인 프로세스
  2. Ready: 프로세스의 생성이 완료된 이후 ready 상태가 된다. 실행을 대기하고 있는 프로세스
  3. Run: CPU에서 현재 작업을 수행하고 있는 프로세스
  4. Wait (Block): 프로세스가 I/O 접근을 요청하고 있는 상태
  5. Complete (Terminated): 프로세스가 작업 수행을 완료한 상태
  6. Suspended Ready: 대기 큐가 꽉차서 몇몇 프로세스들이 suspended ready 상태로 이동한 상태
  7. Suspended Block: waiting queue가 꽉 찬 상태

states of process

 

 

5. Context Switching

 

한 프로세스의 context를 저장하고 다른 프로세스의 context를 로드하는 과정을 context switching 이라고 한다. 간단하게 말하면 running state 상태에 있는 프로세스를 ready state로 unload하고 load하는 작업이다.

 

context switching이 일어나는 순서는 다음과 같다.

1) 높은 우선순위의 프로세스가 ready state가 된다. (높은 우선순위란 현재 running 중인 프로세스보다 높은 우선순위를 말한다.)

2) Interrupt가 발생한다.

3) User mode와 kernel mode가 변경된다. (필수적인 것은 아니다. 프로세스의 성격에 따라 mode switching이 필요한 경우에 발생)

4) preemptive CPU scheduling (선점 스케줄링)이 사용된다.

 

※ user mode vs kernel mode

운영체제는 여러 프로그램이 동시에 실행될 수 있는 다중 프로그래밍 환경에서 동작한다. 그렇기 때문에 각 프로그램들이 다른 프로그램을 방해하거나 충돌하지 않도록 이를 방지하는 보안 기법이 필요한다.
하드웨어적인 보안을 유지하기 위해서 운영체제는 기본적을 두가지 모드, 커널모드와 사용자 모드를 제공한다.

커널 모드는 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드로, 이 모드에서는 모든 종류의 명령을 다 실행할 수 있다. 반면에 사용자 모드에서는 일반 사용자 프로그램이 실행되며 제한적인 명령만을 수행할 수 있다. 시스템에 중요한 영향을 미치는 연산의 경우 커널 모드에서만 실행 가능하도록 함으로써 하드웨어의 보안을 유지하는 것이다.

 

 

6. CPU-Bound vs I/O-Bound processes

 

CPU-Bound 프로세스는 running state에서 CPU 연산을 더 요구하는 프로세스이다.

반면에 I/O-Bound 프로세스는 I/O 작업을 하는 시간이 CPU 연산 시간보다 더 큰 프로세스이다. I/O 프로세스는 대부분의 시간을 waiting state에서 보낸다.

 

 

[reference]

- https://www.geeksforgeeks.org/introduction-of-operating-system-set-1/

 

Introduction of Operating System - Set 1 - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

반응형

'Computer Science > OS' 카테고리의 다른 글

[OS] Thread & Multithreading  (0) 2021.10.22
[OS] Process Synchronization  (0) 2021.10.22
[OS] CPU scheduling  (0) 2021.10.21
[OS] Process Scheduling  (0) 2021.10.21
[OS] Operating System (운영체제)  (0) 2021.10.16