프로세스 메모리 구조

라마·2023년 7월 10일

운영체제

목록 보기
8/32

※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.

메모리 주소

메모리 주소는 메모리내 위치를 식별하기 위한 식별자 역할을 합니다.

CPU 주소 공간 ( CPU address space )

이 공간을 물리 메모리 ( 주소 ) 라고도 합니다.

( 물리 주소 공간 == CPU BUS 의 크기에 의해 결정 == Word )

만약 CPU 주소 공간보다 큰 메모리를 쓸 경우, CPU 주소 공간을 넘어가는 공간에는 엑세스를 할 수 없습니다.

왜냐하면 CPU 는 CPU 범위보다 벗어나는 공간에는 접근할 수 없기 때문입니다.

마찬가지로, 만약 CPU 주소 공간보다 작은 양의 메모리를 쓸 경우, 메모리 주소 공간이 CPU 주소 공간보다 더 작기 때문에 사용가능하지만 CPU 가 메모리 공간을 넘어서 접근하려 하는 경우 오류가 발생합니다.

프로세스 주소 공간

이 메모리 공간을 여러 개의 프로세스가 나눠서 사용해야 하는데, 어떻게 해야 잘 나눠서 쓸 것인지가 고민할 부분입니다.

CPU 관점에서 먼저 살펴보면, Segmentation 기법을 도입하여 프로세스가 실행 중 접근할 수 있도록 허용된 주소의 최대 범위를 설정합니다.

그래서 만약 범위를 벗어났다면 범위를 벗어났다고 알려줍니다.

프로세스의 관점에서 살펴보면 가상 메모리 라는 개념이 적용됩니다.

프로세스는 자신이 CPU 주소 공간 전체를 독점하는 것처럼 느낍니다. ( 모든 프로그램에 대한 동일한 메모리 공간 제공 )

왜 이렇게 설정했냐 하면, 프로세스 하나당 어느정도의 CPU 를 차지해야하는지 구분을 짓는 것이 어렵기 때문입니다.

( 이 프로세스는 이만큼 줬다가 만약 더 써야하는 일이 발생하면.. → 이런 일을 막고자 가상 메모리 사용! )

그래서 모든 프로세스는 자신만의 가상 주소 공간을 가지게 됩니다.

만약 32Bit CPU 에서 작동되는 프로세스의 경우, 물리 메모리가 2GB 여도 논리적으로는 4GB 의 메모리를 할당받은 것 처럼 느낍니다.

더 중요한 부분은, 바로 메모리에 대한 확장성 때문입니다.

물리 메모리의 공간은 한정적이지만, 가상 메모리는 더 큰 공간으로 구성할 수 있기 때문에 가상 메모리를 사용하는 것이 더 이득입니다.

프로세스의 주소 공간은 2부분으로 나뉘어지는데, 크게 사용자 공간 ( User space ) 과 커널 공간 ( Kernel space ) 으로 나뉘어집니다.

  • 사용자 공간 : 코드, 데이터, 힙, 스택 영역
  • 커널 공간 : 커널 코드, 커널 데이터, 커널 스택
    • 프로세스가 시스템 호출을 통해 이용하는 커널 공간
    • 커널 공간은 모든 사용자 프로세스에 의해 공유

프로세스가 메모리에 올라갈 때

  • 코드 영역 : 실행될 프로그램 코드가 적재되는 영역
  • 데이터 영역 : 전역 변수, 정적 데이터 공간
  • 힙 영역 : 프로세스가 실행 도중 동적으로 사용할 수 있도록 할당된 공간
  • 스택 영역 : 함수가 실행될 때 사용될 데이터를 위해 할당된 공간

이렇게 영역을 나눈 이유는, 공유할 수 있는 데이터는 공유함으로써 메모리 사용량을 줄이고, 스택 구조와 전역변수의 활용성을 높이고자 영역을 나누게 되었습니다.

0개의 댓글