프로세스란?
- 사람이 컴퓨터를 키고 리그 오브 레전드 라는 게임 실행파일을 실행하면 OS(운영체제)의 커널이 동작을 시작
- 하드디스크에 저장된 프로그램을 메모리(RAM)에 적재한다 - (코드, 데이터, 스택, 힙 등 메모리 영역에 배치)
- OS(커널)가 해당 코드의 첫 명령어를 fetch(가져오기)를 실행하면 그 순간 프로그램이 실행되면서 프로세스로 변환한다
- 즉 프로세스란 실행중인 프로그램이라고 생각하면 쉽다.
- 그 후 여러 프로세스가 실행이 되면 스케줄러가 효율적으로 어떠한 프로세스를 실행할 지 우선순위를 결정하여 하나의 CPU가 컨텍스트 스위칭을 사용하여 동시성을 갖추게 할 수 있게 해준다.

메모리 구조
- 운영체제는 프로세스에 적절한 메모리를 할당하는데 다음 구조를 기반으로 할당한다.
- 위에서부터 스택(stack), 힙(heap), 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)으로 나눠진다.
- 스택은 위 주소부터 할당되고 힙은 아래 주소부터 할당된다.

-
Code 영역
실행할 프로그램의 코드가 저장됩니다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 됩니다.
Data 영역
전역변수와 정적변수가 저장됩니다. 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸됩니다.
+) 더 자세히 들어가면 BSS(Block Stated Symbol) 영역이 있는데요, 이 영역에는 초기화 되지 않은 전역변수가 저장됩니다. 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 구분해 사용합니다.
Stack 영역
지연변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역입니다. 함수 호출 시 할당되고 함수 반환 시 소멸됩니다. 로드 시(컴파일 타임) 크기가 결정됩니다.
위 세 영역은 컴파일 할 때 data, stack 영역의 크기를 계산해 메모리 영역을 결정합니다!
Heap 영역
동적 데이터 영역입니다. 메모리 주소 값에 의해서만 참조되고 사용되는 영역입니다. 따라서, 프로그램 동작 시(런타임)에 크기가 결정됩니다.
예를 들어, stack에서 pointer 변수를 할당하면 pointer가 가리키는 heap 영역의 임의의 공간부터 원하는 크기만큼 할당해 사용하게 됩니다.
'CS > 운영체제' 카테고리의 다른 글
| 멀티프로세싱과 멀티스레딩 (1) | 2025.05.29 |
|---|---|
| PCB와 컨텍스트 스위칭(context switching) (0) | 2025.05.29 |
| 프로그램 컴파일 과정 (0) | 2025.05.29 |
| 가상메모리, 페이지테이블, 페이지폴트, 스레싱 (0) | 2025.05.28 |
| 인터럽트 (1) | 2025.05.27 |