νλ‘μΈμ€μ λ©λͺ¨λ¦¬ 곡κ°
μ΄μ체μ κ° κ΄λ¦¬νλ λ©λͺ¨λ¦¬ μμμ μ»΄ν¨ν° μμ€ν
μμ νλ‘μΈμ€λ€μ΄ μ€νλκ³ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ μ¬μ©λλ λ©λͺ¨λ¦¬ 곡κ°μ μλ―Έν©λλ€. μ΄ λ©λͺ¨λ¦¬ μμμ κ°κ°μ νλ‘μΈμ€κ° μμ νκ² μ€νλκ³ λ€λ₯Έ νλ‘μΈμ€μ 격리λλλ‘ κ΄λ¦¬λ©λλ€. λ€μν λ©λͺ¨λ¦¬ μμμ νλ‘μΈμ€μ μ€ν λ¨κ³μ μν μ λ°λΌ λΆλ₯λ©λλ€. μΌλ°μ μΌλ‘λ λ€μκ³Ό κ°μ λ©λͺ¨λ¦¬ μμμ΄ μμ΅λλ€.
1. μ½λ(Code) μμ:
- μ€ν κ°λ₯ν νλ‘κ·Έλ¨ μ½λκ° μ μ₯λλ μμμ
λλ€.
- νλ‘μΈμ€μ λͺ
λ Ήμ΄λ€μ΄ μ μ₯λμ΄ CPUμ μν΄ μ€νλ©λλ€.
- μ½κΈ° μ μ©μΌλ‘ μ€μ λμ΄ μμ΄ νλ‘κ·Έλ¨ μ½λλ₯Ό μμ ν μ μμ΅λλ€.
2. λ°μ΄ν°(Data) μμ:
- μ μ λ³μμ μ μ (static) λ³μκ° μ μ₯λλ μμμ
λλ€.
- νλ‘κ·Έλ¨μ μμκ³Ό ν¨κ» ν λΉλλ©° μ’
λ£λ λκΉμ§ μ μ§λ©λλ€.
- μ΄κΈ°νλ λ°μ΄ν°μ μ΄κΈ°νλμ§ μμ λ°μ΄ν° μμμΌλ‘ λλ©λλ€.
3. μ€ν(Stack) μμ:
- ν¨μ νΈμΆκ³Ό κ΄λ ¨λ μ λ³΄κ° μ μ₯λλ μμμ
λλ€.
- μ§μ λ³μ, λ§€κ° λ³μ, ν¨μμ λ°ν μ£Όμ λ±μ΄ μ μ₯λ©λλ€.
- νμ
μ μΆ(LIFO) λ°©μμΌλ‘ λμνλ©° ν¨μ νΈμΆκ³Ό ν¨κ» μμ±λκ³ λ°νλ©λλ€.
4. ν(Heap) μμ:
- λ°νμμ λμ μΌλ‘ ν λΉλλ λ°μ΄ν°κ° μ μ₯λλ μμμ
λλ€.
- νλ‘κ·Έλλ¨Έκ° μ§μ κ΄λ¦¬ν΄μΌ νλ©°, νμμ λ°λΌ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ ν΄μ ν©λλ€.
- λμ μΌλ‘ ν λΉλ λ°μ΄ν°λ ν μμμ μ μ₯λλ©°, μ΄λ₯Ό ν΅ν΄ λμ λ°μ΄ν° ꡬ쑰λ₯Ό μμ±ν μ μμ΅λλ€.
μ΄μ체μ λ μ΄λ¬ν λ©λͺ¨λ¦¬ μμμ κ΄λ¦¬νλ©΄μ λ€μ€ νλ‘μΈμ€ κ°μ μΆ©λμ΄λ λ°μ΄ν° μΉ¨λ²μ λ°©μ§νκ³ , κ° νλ‘μΈμ€κ° μ μ ν λ©λͺ¨λ¦¬ μμμ μ¬μ©νλλ‘ μ‘°μ ν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ μ μ΄κ³ ν¨μ¨μ μΈ νλ‘μΈμ€ μ€ν λ° λ©λͺ¨λ¦¬ κ΄λ¦¬κ° κ°λ₯ν΄μ§λλ€.
μ»΄νμΌλ¬μ λ©λͺ¨λ¦¬ ν λΉ
code(text), data, stack μμμ μ»΄νμΌλ¬κ° μμμ λ©λͺ¨λ¦¬μμμ κ²°μ ν©λλ€. μ¦ μ»΄νμΌ ν λ dataμμκ³Ό stackμμμ ν¬κΈ°λ₯Ό κ³μ°ν΄μ νμν λ©λͺ¨λ¦¬ 곡κ°μ κ°μ§λλ€. heap μμμ κ°λ°μκ° μμ±ν μ½λμ μν΄ νλ‘κ·Έλ¨ λμμ κ²°μ λ©λλ€.
code, data, heap μμμ νμ λ©λͺ¨λ¦¬λΆν° ν λΉλκ³ , stack μμμ μμ λ©λͺ¨λ¦¬λΆν° ν λΉλ©λλ€.
λ©λͺ¨λ¦¬ ν λΉμ ν λΉ μμ μ λ°λΌ μλμ κ°μ΄ λλ©λλ€.
1. SMA (Static Memory Allocation) : μ μ λ©λͺ¨λ¦¬, λ©λͺ¨λ¦¬μ data μμ, stack μμμ μ¬μ©ν©λλ€.
- Data μμ : νλ‘κ·Έλ¨ μμκ³Ό λμμ ν λΉλ μμμ΄ μ‘νκ³ λλλ©΄ OS μ λ°νν©λλ€.
- Stack μμ : ν¨μ μμκ³Ό λμμ ν λΉλ μμμ΄ μ‘νκ³ λλλ©΄ OSμ λ°νν©λλ€.
2) DMA (Dynamic Memory Allocation) : λμ λ©λͺ¨λ¦¬, λ©λͺ¨λ¦¬μ heap μμμ μ¬μ©ν©λλ€.
- Heap μμ : stackμμ pointer λ³μλ₯Ό ν λΉνκ³ , κ·Έ pointerκ° κ°λ¦¬ν€λ heap μμμ μμμ 곡κ°λΆν° μνλ
ν¬κΈ° λ§νΌ ν λΉν΄ μ¬μ©ν©λλ€.
HEAP overflowλ heapμ΄ μμμλΆν° μ£Όμκ°μ μ±μμ Έ λ΄λ €μ€λ€κ° stackμμμ μΉ¨λ²νλ κ²½μ°μ΄κ³ Stack overflowλ stackμμμ΄ heap μμμ μΉ¨λ²ν κ²½μ°μ
λλ€.
BSSμμ
BSS(Block Started by Symbol) μμμ νλ‘κ·Έλ¨μ λ°μ΄ν° μΉμ
μ€ νλλ‘, μ΄κΈ°νλμ§ μμ μ μ λ³μμ μ μ (static) λ³μκ° μ μ₯λλ λ©λͺ¨λ¦¬ μμμ λνλ
λλ€. μ΄ μμμ νλ‘κ·Έλ¨μ΄ μ€νλκΈ° μ μ μ΄μ체μ μ μν΄ 0μΌλ‘ μ΄κΈ°νλ©λλ€. BSSμμμ λ°μ΄ν° μμ μμ μμΉν©λλ€.(BSSμμμ λ°μ΄ν° μμμ ν¬ν¨ν΄μ 보기λ ν©λλ€)
BSS μμμ μ μ₯λλ λ³μλ€μ μ΄κΈ°κ°μ κ°μ§μ§ μκΈ° λλ¬Έμ, λͺ
μμ μΌλ‘ μ΄κΈ°ννμ§ μμΌλ©΄ 0μΌλ‘ μ΄κΈ°νλ©λλ€. λ°λΌμ νλ‘κ·Έλλ¨Έκ° μλ¬΄λ° κ°μ ν λΉνμ§ μμλ λ³μλ 0μΌλ‘ μ΄κΈ°νλμ΄ μμνκ² λ©λλ€. μ΄κΈ°νλμ§ μμ λ³μλ€μ μ€ν μκ°μ λ©λͺ¨λ¦¬μ ν λΉλλ©°, μ΄λ¬ν λ³μλ€μ νλ‘κ·Έλ¨μ ν¬κΈ°μ μν₯μ λ―ΈμΉμ§λ§ μ€ν μμ μ€μ λ‘ νμν λ©λͺ¨λ¦¬ μμ 0μΌλ‘ μ΄κΈ°νλ κ°λ§νΌλ§ μ¬μ©λ©λλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ C νλ‘κ·Έλ¨ μ½λλ₯Ό μκ°ν΄λ³΄κ² μ΅λλ€.
#include <stdio.h>
int global_var; // μ΄κΈ°νλμ§ μμ μ μ λ³μ
int main() {
static int static_var; // μ΄κΈ°νλμ§ μμ μ μ λ³μ
return 0;
}
μμ μ½λμμ global_varμ static_varλ μ΄κΈ°νλμ§ μμμ§λ§, μ€ν μμ BSS μμμ ν λΉλκ³ 0μΌλ‘ μ΄κΈ°νλ©λλ€.
μμ½νλ©΄, BSS μμμ μ΄κΈ°νλμ§ μμ μ μ λ³μμ μ μ λ³μκ° ν λΉλλ μμμΌλ‘, μ΄ λ³μλ€μ νλ‘κ·Έλ¨ μ€ν μ μ 0μΌλ‘ μ΄κΈ°νλμ΄ μμν©λλ€.
'μ΄μ체μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
IPC(Inter-Process Communication, νλ‘μΈμ€ κ° ν΅μ ) (0) | 2023.08.29 |
---|---|
Context Switching(λ¬Έλ§₯ κ΅ν) (0) | 2023.08.28 |
κ°μλ©λͺ¨λ¦¬(Virtual Memory)λ 무μμΌκΉ? (0) | 2023.08.23 |
Vimμμ Auto Indent μ¬μ© (0) | 2023.05.30 |
[Linux] deamonκ³Ό fork μ΄μΌκΈ° (0) | 2023.04.13 |
λκΈ