프로세스 구조

Nam Eun-Ji·2020년 11월 19일
0

프로세스 구조

  • 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;       // 초기값 x
int global_data2 = 1;   // 초기값 o



PC(Program Counter) + SP(Stack Pointer)

컨텍스트 스위칭
CPU에 실행할 프로세스를 교체하는 기술

각각의 프로세스마다 관리하고 있는 PCB(Process Control Block)라는 저장공간에 자신의 상태를 나타내고 있는 PC&SP 값을 저장하여, 컨텍스트 스위칭이 일어날 때마다 CPU에 업데이트 시킨 후 실행하면 된다.

  1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
  2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB정보를 CPU에 넣고, 실행
  • PCB
    프로세스가 실행중인 상태를 캡쳐/구조화해서 저장
    • Process ID
    • Register 값(PC, SP 등)
    • Scheduling Info(Process State) - ready, block, running상태값도 포함되어 있음
    • Memory Info(메모리 사이즈 limit)
profile
한 줄 소개가 자연스러워지는 그날까지

0개의 댓글