[운영체제] 프로세스 구조 - (1)
지금까지 내용을 학습하면서 프로세스와 연관된 내용들이 많았는데 그렇다면 프로세스 구조가 어떻게 구성되어 있는지 알아보자.
-
일반적인 프로세스의 구성
- text(CODE): 코드
- data: 변수/초기화된 데이터
- stack: 임시 데이터(함수 호출, 로컬 변수 등)
- heap: 코드에서 동적으로 만들어지는 데이터

-
예
- stack
- 함수를 위한 공간
- 함수의 return adress(:함수 관련 code 1행에 대한 주소)를 저장
- 함수의 인자를 저장
Return Address: 0050h a= 1 b= 2-
heap
- 동적 공간(C. malloc)
-
data
- 프로그램의 변수 선언 : fixed
- 전역에 선언된 변수만 저장
- 함수 안에서 선언된 변수는 저장되지 않음
c= 0- code
def func(a, b): print(a+b) c = 0 c = func(1, 2) print(c)- program
def func(a, b): print(a + b) c = 0 c = func(1, 2) print(c) #005h - stack
EAX 레지스터
- 함수의 반환 값을 저장하는 레지스터
EBP 레지스터
- 함수가 문제가 있을 때, 해당 문제를 빠르게 트래킹하는 레지스터
- 코드에서 문제 발생 시, 해당 스택 포인터 최상단에 기록하고 EBP라는 레지스터에 기록
heap
- 함수가 문제가 있을 때, 해당 문제를 빠르게 트래킹하는 레지스터
- 코드에서 문제 발생 시, 해당 스택 포인터 최상단에 기록하고 EBP라는 레지스터에 기록
heap
힙은 동적으로 생성되는 메모리 공간이다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *data; // 포인터 변수
data = (int *) malloc(sizeof(int));
*data = 1;
printf("%d\n", *data);
return 0;
}
heap을 이해하기 위해서 다음 코드를 살펴보자.
malloc이라는 함수는 동적으로 메모리를 생성하는 함수이며 정수 타입의 사이즈를 메모리 공간에 할당한다.
int에 포인터 변수를 만들어주면 malloc(할당)의 리턴값은 동적으로 만든 메모리의 주소를 반환한다.
이렇게 반환된 변수를 data라는 변수에 할당해주면 동적 메모리에 접근할 수 있는 변수가 된다.
동적 메모리를 free(해제) 시키는 함수도 존재한다.
- 왜 힙이라는 공간이 필요한가
- 실행 코드 안에서 어떻게 실행이될지 모르는 코드에 대해서 정해져 있는 값이 없기 때문에 동적으로 데이터의 크기를 파악하는 공간이 필요
data
데이터 메모리 공간은 BSS와 DATA 두 가지의 공간으로 나뉜다.
int global_data1;
int global_data2 = 1;
int main()
{
int *data; // 지역변수는 stack에 저장
data = (int*) malloc(sizeof(int));
*data = 1;
printf("%d₩n", *data);
return 0;
}
-
BSS: 초기화 되지 않은 전역 변수
- global_data1
-
DATA: 초기값이 있는 전역 변수
- global_data2
Author And Source
이 문제에 관하여([운영체제] 프로세스 구조 - (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zero_mountain/운영체제-프로세스-구조-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)