개발자가 작성한 프로그램 함수들이 존재합니다.
실행할 프로그램의 코드가 저장됩니다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 됩니다.
실제 프로그램이 사용하는 데이터 공간인데 전역변수, 정적변수, static변수등이 저장되는 부분으로 처리과정에서 쓰이거나 모든 함수에서 사용하거나 정적으로 관리되는 변하지않는 변수들을 의미합니다.
이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸됩니다.
heep에서의 수행이 끝났을때 어느곳으로 복귀해야하는지 복귀할 주소, 데이터(지역변수, 매개변수, 리턴값)등을 저장해두는 곳이라고 생각하면 됩니다.
이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라지는데 메커니즘은 자료구조(stack)에서 배운 LIFO(Last In First Out) 방법으로 저장/출력 합니다.
컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없습니다.
따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생합니다. (알고리즘 시험풀때 많이 발생!)
위 세 영역은 컴파일 할 때 data, stack 영역의 크기를 계산해 메모리 영역을 결정합니다!
실제 프로그래머가 필요할때 사용하는 공간으로 스레드에 프로세스 작업등이 필요할때, 작업에 필요한 데이터를 저장하거나 삭제하거나 연산을 하기위해 전역적이거나 static하지 않은 변수들 즉 동적 데이터를 저장하는곳을 말합니다.
이 공간은 프로그래머가 당장 사용하는 공간을 가리킵니다.
메모리 주소 값에 의해서만 참조되고 사용되는 영역입니다. 따라서, 프로그램 동작 시(런타임)에 크기가 결정됩니다.
heap 영역은 런타임에 결정된다. 자바에서는 객체가 heap영역에 생성되고 GC에 의해 정리됩니다.
리소스들을 관리하기 위한 자료구조가 저장되어있습니다.
PCB(Process Controll Block) 자료구조가 저장
1) 프로세스 : 메모리에 올라온 프로그램
2) 프로세스 생명주기 : 신규 - 준비 - 수행 - 대기 - 종료
3) PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조 (PID, PC, Register, MMU 등)
4) 대기 큐 (Queue) : Job, Ready, Device Queue 등
5) Scheduler : Job, CPU, Device Schduler 등
6) Swapping : 안쓰는 프로세스 HDD로 내리고, 다시 쓰이면 메모리로 올리는 작업
7) Context Switching : Running 프로세스를 Ready로 만들고 다른 프로세스로 전환
8) Dispatcher : 컨텍스트 스위칭할 때 필요한 정보(PCB를 저장하고 꺼내는 프로그램)
9) CPU 시간공유 시스템 : (대부분의)OS에서 프로세스(스레드)가 시간단위로 나누어서 CPU를 사용할 수 있도록 관리해주는 시스템
10) 프로세스 메모리 공간 : 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성됨
11) 커널 : 커널은 대부분의 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스
12) PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조로 커널 프로세스에 존재