[OS] 메모리 구조

mingsso·2023년 11월 18일
0

CS

목록 보기
21/30
post-custom-banner

일반적으로 Memory = Main Memory = 주기억장치 = RAM

프로세스의 명령어와 데이터를 저장하는 부분으로, 프로그램이 실행되려면 반드시 메모리에 적재되어야 한다!


메모리는 크게 커널 영역과 유저 영역으로 나눠진다
유저영역은 다시 스택영역, 힙영역, 데이터영역, 코드영역으로 나뉘며, 유저영역을 제외한 영역을 커널영역이라고 한다

1️⃣ 커널 영역

커널 영역에는 커널(kernel)이 위치하고 있으며, 커널은 운영체제의 핵심이라고 할 수 있다
즉, 커널은 하드웨어와 소프트웨어 간의 인터페이스를 제공하고 시스템 자원(메모리, 파일 시스템, 네트워크 등)을 관리한다

커널은 시스템의 모든 것을 완전히 통제하기 때문에 사용자가 직접 접근할 수 없으며, 접근 시 System Call을 통한 커널모드로의 전환이 필요하다



2️⃣ 사용자 영역

유저 영역은 일반적으로 사용자 프로세스(응용 프로그램)의 메모리 공간을 의미한다
코드 영역, 데이터 영역, 스택 영역, 힙 영역 4가지로 나눠진다

Code 영역(텍스트 영역)

실행할 프로그램의 코드가 저장되는 영역

  • 기계어 형태로 저장, 읽기전용(코드가 변경되면 안되니까)
  • CPU가 코드영역에 저장된 명령어들을 하나씩 가져가 처리함

Data 영역

프로그램이 실행되는 동안 유지해야 할 데이터(전역변수, 정적변수 등)가 저장되는 공간

  • 데이터영역은 다시 초기화된 데이터영역과 초기화되지 않은 데이터영역으로 나눌 수 있는데 초기화되지 않은 데이터 영역을 BSS(Block Started by Symbol)영역이라고 함
  • BSS영역이 데이터영역보다 더 높은 주소에 위치

Stack 영역

함수 내에서 지역변수와 매개변수가 저장되는 영역

  • 처음 생성될 때(함수가 실행될 때) 필요한 크기만큼 만들어지고, 데이터를 저장함
  • 지역변수가 저장되는 영역이기 때문에, 함수가 끝나게 되면 해당 영역은 소멸됨
  • 다른 영역들과 달리 높은 주소에서 낮은 주소로 자라나는 형태를 가짐
    • 스택영역이 운영체제의 핵심인 커널영역을 침범할 수 없도록 하기 위해
    • 스택영역과(높은 주소에서 낮은 주소로) 힙영역(낮은 주소에서 높은 주소로)이 공간을 공유하면서 사용하게 되면 공간을 효율적으로 사용할 수 있기 때문
  • 후입선출 구조를 가짐

Heap 영역

동적 할당을 위한 메모리 공간을 제공함

  • 동적할당이란 필요한 크기만큼 만들어 놓는 스택영역과 달리 프로그램이 실행되는 도중에 메모리를 할당하는 것을 말함 (자바의 객체 등)
  • 프로그래머가 직접 할당/해제해야하는 공간으로, 메모리 해제 안하면 메모리 누수 발생 (자바에서는 GC가 알아서 해제 해줌)






참고자료

https://velog.io/@seungho1216/CS-메모리-구조
https://dev-leeyang.tistory.com/23
https://jinshine.github.io/2018/05/17/컴퓨터 기초/메모리구조/
https://hdacker.tistory.com/6

profile
🐥👩‍💻💰
post-custom-banner

0개의 댓글