프로세스 구조
- text(CODE) : 코드
- data : 변수/초기화된 데이터
- stack : 임시 데이터(함수 호출, 로컬 변수 등) (스택 프레임이라고도 한다)
- heap : 코드에서 동적으로 만들어지는 데이터
레지스터 : PC(Program Counter) + SP(Stack Pointer)
- PC : 코드를 한줄한줄 주소
- SP : 스택 주소
stack 순서 : SP주소 → 함수 리턴 주소 → 함수인자 → 함수 내 변수
- 1000h - SP 주소를 적음
- 0FFFh - 함수가 실행되면 함수가 돌아올 주소가 스택에 쌓임( return address)
- 0FFFh - 함수 인자
- 0FFDh - 함수 인자
- EBP :
- EAX : 리턴 값
- stack은 완료되면 하나씩 삭제된다.
프로세스구조 - Heap
heap : 동적으로 생성되는 메모리
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *data;
data = (int *) malloc(sizeof(int));
*data = 1;
printf("%d\n", *data);
return 0;
}
malloc이라는 함수가 동적메모리를 생성하는 함수.
컴파일러 단계에서 메모리가 얼마만큼 필요한지 알 수 없어서, stack이 아닌 heap 영역에 생성된다.
프로세스 구조 - DATA(BSS&DATA)
BSS - 초기화되지않은 전역변수
DATA - 초기값이 있는 전역변수
int global_data1;
int global_data2 = 1;
PC(Program Counter) + SP(Stack Pointer)
컨텍스트 스위칭
CPU에 실행할 프로세스를 교체하는 기술
각각의 프로세스마다 관리하고 있는 PCB(Process Control Block)라는 저장공간에 자신의 상태를 나타내고 있는 PC&SP 값을 저장하여, 컨텍스트 스위칭이 일어날 때마다 CPU에 업데이트 시킨 후 실행하면 된다.
- 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
- 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB정보를 CPU에 넣고, 실행
- PCB
프로세스가 실행중인 상태를 캡쳐/구조화해서 저장
- Process ID
- Register 값(PC, SP 등)
- Scheduling Info(Process State) - ready, block, running상태값도 포함되어 있음
- Memory Info(메모리 사이즈 limit)