[운영체제] 프로세스 구조 - (1)

Yeongsan Son·2021년 6월 28일
0

지금까지 내용을 학습하면서 프로세스와 연관된 내용들이 많았는데 그렇다면 프로세스 구조가 어떻게 구성되어 있는지 알아보자.

  • 일반적인 프로세스의 구성

    • 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

EAX 레지스터

  • 함수의 반환 값을 저장하는 레지스터

EBP 레지스터

  • 함수가 문제가 있을 때, 해당 문제를 빠르게 트래킹하는 레지스터
    • 코드에서 문제 발생 시, 해당 스택 포인터 최상단에 기록하고 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
profile
매몰되지 않는 개발자가 되자

0개의 댓글