운영체제 - 프로세스 메모리 구조

pa324·2019년 11월 29일
2

프로세스 메모리 구조

개발자가 프로그래밍 언어를 이용해서 프로그램을 작성하고 저장하면 디스크에 저장이 된다. 디스크에 저장한 프로그램을 실행 시키면 운영체제는 프로그램을 실행 시키고 메모리에 프로세스가 올라간다. 이때 프로세스는 4개의 영역으로 구분할 수 있다.

스택 영역

  • 스택 영역은 프로그램의 지역변수, 함수, return address 를 포함하고 있다.
  • 아래의 함수는 함수 호출시 스택영역에 저장되어 있다가 return을 하게 되면 스택에서 pop 된다.
int function(int a)
{
 	return a+1; 
}

힙 영역

  • 힙 영역에는 프로그램이 실행되는 동안 동적으로 사용할 데이터들이 저장된다.
  • c언어의 malloc을 이용해서 메모리를 동적할당하면 힙 영역에 저장(free시키지 않으면 힙 영역에 계속 들어 있음)

데이터 영역

  • 데이터 영역에는 전역 변수와 정적 지역 변수가 포함되어 있다.
  • 데이터 영역은 BSS,Data로 나눠진다.
    • BSS는 초기화 되지 않은 변수들이 저장
      • 초기화 된 변수들이 저장
  • BSS,Data로 구분하는 이유?
    • 초기화 된 데이터는 초기값을 저장해야 함으로 Data영역에 저장되서 Rom에 저장된다. 하지만 초기화 되지 않은 데이터 까지 Rom에 저장되면 큰 size의 rom이 필요하므로 구분한다 ( 초기화 되지 않은 데이터는 ram에 저장하자)
#include<stdio.h>
int global_var; // 데이터 영역에 저장
int main() {
	satic int var; // 데이터 영역에 저장
    return 0;
}

텍스트 영역 (코드 영역)

  • 힙과 ,스택영역에서 오버플로우가 발생할 것을 대비해서 힙/스택의 아래부분에 위치한다.
  • 실행 인스트럭션 등이 저장되어 있다
  • 읽기 전용
  • 다른 프로세스에서 참조 가능한 영역
profile
안녕하세요

0개의 댓글