tlov

[스터디] 3-1. 프로세스 개요 본문

개발/운영체제

[스터디] 3-1. 프로세스 개요

nowitzki 2024. 8. 15. 15:06

더블 클릭하거나 커맨드 라인을 통해 저장 장치에 저장된 어떤 응용 프로그램을  실행하면 운영체제는 이를 메모리에 적재하고 실행한다. 이 때 실행되는 프로그램은 '프로세스(Process)'가 된다. 이러한 과정을 프로세스를 생성한다고 한다.

 

프로세스는 크게 두 가지로 나눌 수 있다.

1. 포그라운드 프로세스 (foreground process)

  - 사용자가 볼 수 있는 공간에서 실행되는 프로세스 (ex. 웹 브라우저, 게임, 워드 ...)

2. 백그라운드 프로세스 (background process)

  - 사용자가 볼 수 없는 공간에서 실행되는 프로세스

    - 사용자와 직접 상호작용이 가능한 백그라운드 프로세스

    - 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 (데몬, 서비스)

 

 

프로세스 제어 블록

실행의 주체는 CPU이기 때문에 모든 프로세스는 CPU가 필요하다. 하지만, CPU 자원은 한정되어 있다. 그래서 프로세스들은 돌아가며 한정된 시간만큼 CPU를 이용하고 한정된 시간이 지나면 타이머 인터럽트가 발생하여 다른 프로세스에 CPU를 양보한다.

 

이렇게 양보한 프로세스는 나중에 다시 실행되기 위해서 현재까지 실행한 정보들을 어딘가에는 저장해야 하는데 이때 이용되는 자료구조가 바로 '프로세스 제어 블록(PCB; Process Control Block)'이다. PCB는 프로세스 생성 시 커널 영역에 생성되어 프로세스와 관련 정보를 저장하고 종료 시 폐기된다.

 

PCB에 담기는 대표적인 정보 (세부적인 정보는 운영체제마다 차이가 있음)

- 프로세스 ID (=PID)

  ㄴ 특정 프로세스를 식별하기 위해 부여하는 고유한 번호

- 레지스터 값

  ㄴ 프로세스가 실행되면서 CPU 레지스터에 저장한 프로그램 카운터, 스택 포인터 등의 값

- 프로세스 상태

  ㄴ 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태 등 (생성 상태, 대기 상태, ...)

- CPU 스케줄링 정보

  ㄴ 프로세스가 언제 어떤 순서로 CPU를 할당받아서 사용할지에 대한 정보

- 메모리 정보

  ㄴ 프로세스가 어느 메모리 주소에 저장되어 있는지에 대한 정보

  ㄴ 페이지 테이블 정보

- 사용한 파일과 입출력 장치 정보

  ㄴ 할당된 입출력 장치, 사용 중인 파일 정보

 

 

컨텍스트 스위치 (문맥교환; Context Switch)

한 프로세스의 CPU의 이용 시간이 끝나고 다른 프로세스로 CPU 이용을 양보할 때 일어나는 일.

 

기존에 실행되던 프로세스에서 다른 프로세스로 실행 순서가 넘어가면, 기존에 실행되던 프로세스는 지금까지의 중간 정보를 백업한다. 백업되는 정보들에는 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일 등이 포함된다. 그리고 이러한 중간 정보를 '문맥(context)'이라고 한다. 그리고, 뒤이어 실행할 프로세스의 '문맥'을 복구하며 자연스럽게 실행 중인 프로세스가 바뀌게 된다. 이러한 전 과정을 문맥이 교환된다해서 문맥교환 또는 컨텍스트 스위치라고 한다.

 

문맥 교환

 

지금까지는 커널 영역에 저장되는 프로세스 정보에 대해 알아보았다. 그렇다면 프로세스는 사용자 영역에는 어떻게 저장될까? 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

 

[정적 할당 영역]

- 코드 영역 (=텍스트 영역)

실행할 수 있는 코드, 기계어로 이루어진 명령어가 저장되는 영역이며 데이터가 아닌 프로세스의 코드가 중간에 수정되는 경우는 없으므로 해당 영역은 쓰기가 금지된 영역이다. (read-only)

 

- 데이터 영역

프로그램이 실행되는 동안 유지할 데이터를 저장하는 영역 (ex. 전역변수)

 

[동적 할당 영역]

- 힙 영역

프로그램을 만드는 사용자(개발자)가 직접 할당할 수 있는 저장 공간

일반적으로 낮은 주소 -> 높은 주소로 할당

 

- 스택 영역

데이터가 일시적으로 저장되는 공간 (ex. 매개변수, 지역변수)

일반적으로 높은 주소 -> 낮은 주소로 할당