본문 바로가기
CONCEPT/OS

[OS] 프로세스, 프로세스 제어 블록, 메모리 영역

by 1005 2025. 3. 14.

 

 

프로그램은 실행되기 전까지는 보조기억장치에 있는 "데이터 덩어리"일 뿐이지만 보조기억장치에 저장된 프로그램을 실행하기 위해 더블클릭 등 행동을 해서 메모리에 적재하고 실행하는 순간부터 그 프로그램은 "프로세스"가 된다.

= "프로세스 생성" 과정

 


프로세스 종류

 

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

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

ex) 게임, 메모장

 

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

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

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

      2-2) 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스  ex) daemon, service


모든 프로세스는 실행을 위해 cpu가 필요하다. 그러나 cpu자원은 한정되어있다.

 

 

 

타이머 인터럽트: 클럭 신호를 발생시키는 장치에 의해서 주기적으로 발생하는 하드웨어 인터럽트의 한 종류

 

 

 

* 프로세스ID (=PID)

: 특정 프로세스를 식별하기위해 부여하는 고유한 번호 (학교의 학번, 회사의 사번)

 

* 레지스터 값
: 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원 -> 실행 재게

  ex) 프로그램 카운터, 스택 포인터 등

 

* 프로세스 상태

: 입출력 장치를 사용하기 위해 기다리는 상태,

  CPU를 사용하기 위해 기다리는 상태, CPU 이용중인 상태 등

 

* CPU 스케줄링 정보

: 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보

 

* 메모리 정보

: 프로세스가 어느 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보

 

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

: 할당된 입출력장치, 사용중인(열린) 파일 정보


 

Q) 한 프로세스(e.g. 프로세스A)에서 다른 프로세스 (e.g. 프로세스B) 로 실행 순서가 넘어가면?

* 문맥 교환 (context switch)

: 기존의 실행 중인 프로세스 문맥을 백업하고 새로운 프로세스 실행을 위해 문맥을 복구하는 과정, 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리

 

* 문맥: 다음 차례가 왔을 때 실행을 재개하기 위한 정보 <-- 백업해둠.


 

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

 - 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장

 - 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역 (read-only)

 

* 데이터 영역

 - 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장

   e.g. 전역 변수

 

정적 할당 영역 = 코드 + 데이터

 

* 힙 영역

: 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간

-> 프로그래밍 과정에서 힙 영역에 할당한 메모리는 언젠가는 메모리 공간을 반환해야함.

    요즘에는 가비지 컬렉션(garbage collection)을 통해 자동으로 반환함. 

    힙 영역에 할당한 메모리 공간을 반환하지않으면 메모리 낭비를 초래함. (= 메모리 누수 memory leak)

 

* 스택 영역

 - 데이터가 일시적으로 저장되는 공간

 - (데이터 영역에 담기는 값과는 달리) 잠깐 쓰다가 말 값들이 저장되는 공간

   e.g. 매개 변수, 지역 변수

 

동적 할당 영역 = 힙 + 스택

메모리 영역 충돌 방지를 위해 서로 반대되는 방향으로 메모리 공간을 채움.

댓글