정적공간(READ ONLY)
* CODE: 컴파일된 코드가 저장되어 있는 공간
동적 공간
* STACK: 함수 내에서 사용되는 지역변수, 파라미터, RET(RETURN) 주소 등이 저장되는 공간
esp: Extended Stack Poinater (sp) 스택포인터 (현재 스택의 최상단의 주소 값을 저장하고 있는 레지스터
ebp: Extended Base Pointer (FP) 현재 스택 프레임의 베이스 주소를 갖는다. (스택 프레임의 최하단 주소)
아래 사진이 esp,rsp 차이를 확연히 보여주는 것 같아요.(bit가 다름 64, 32)
https://stackoverflow.com/questions/20637569/assembly-registers-in-64-bit-architecture
힙의 동작 예시 - 동적 할당
정수형 포인터 변수인 data를 생성한 뒤,malloc 함수를 이용해서 int size(4byte or 8byte)만큼의 공간을 할당 한다.
이후 data 변수를 해당 영역을 가리키는 포인터 변수로 만든 뒤, 그 영역에 1을 넣는다.
이 겨웅 stack에는 *data라는 변수가 생기고, heap에는 malloc을 통해 int의 크기만큼의 공간이 할당된다.
A와 B라는 프로그램이 있다고 가정해 보자. OS는 프로그램 A가 실행되던 도중 어떠한 이유로 프로그램 A가 ready 혹은 waiting 상태가 되도록 하고 프로그램 B를 실행하려고 한다. 이때, 추후 프로그램 A의 실행을 위해서 OS는 프로그램 A의 진행 정도를 알고 있어야 할 것이다.
이를 위해서 운영체제에서는 PCB(Process Control Block)이라는 자료구조(구조체)를 만들어 사용한다.Linux의 경우 task_struct라는 구조체를 이용한다.
운영체제에서는
* 실행 중지할 프로세스 정보를 해당 프로세스이 PCB에 업데이트해서 메모리 저장