BuNa_
IT Story
BuNa_
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (117)
    • CS (14)
      • ์šด์˜์ฒด์ œ (8)
      • ๋„คํŠธ์›Œํฌ (0)
      • Design Pattern (1)
      • OOP (4)
    • ๋Œ€์™ธํ™œ๋™ (24)
      • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค (14)
      • DND ๋™์•„๋ฆฌ (4)
      • UMC ๋™์•„๋ฆฌ (5)
      • ํ•ด์ปคํ†ค (1)
    • Android (29)
      • MVVM (2)
      • ์Šคํ„ฐ๋”” (11)
      • Compose (3)
      • Unit Test (1)
    • Project (5)
      • ์–ด๋”ฐ์„ธ์›Œ (5)
      • DnD ๊ณผ์™ธ ์„œ๋น„์Šค (0)
    • Programming (11)
      • Kotlin (4)
      • ํŒŒ์ด์ฌ (7)
    • Git (1)
    • ์ธ๊ณต์ง€๋Šฅ (22)
    • ๋ฐฑ์ค€ (8)
    • ๊ธฐํƒ€ (3)
      • IntelliJ (1)
      • ์ผ์ƒ (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ๋”ฅ๋Ÿฌ๋‹
  • External fragmentation
  • ํŒŒ์ด์ฌ
  • Baekjoon
  • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
  • ๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ์ฒด์กฐ
  • UMC
  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • k-means++
  • ์šฐํ…Œ์ฝ”
  • ์ธ๊ณต์ง€๋Šฅ ๋ถ„๋ฅ˜
  • ์•ˆ๋“œ๋กœ์ด๋“œ
  • MVVM
  • ์ปด๊ณต์„ ๋ฐฐ
  • K-means
  • ์›์‹œ๊ฐ’ ํฌ์žฅ
  • ์šด์˜์ฒด์ œ
  • ์„ ํ˜•ํšŒ๊ท€
  • Compose
  • ์™ธ๋ถ€ ๋‹จํŽธํ™”
  • ๋ฐฑ์ค€
  • ์šฐํ…Œ์ฝ” ํ”„๋ฆฌ์ฝ”์Šค
  • ์–ด๋”ฐ์„ธ์›Œ
  • ViewModel
  • Ai
  • ์ธ๊ณต์ง€๋Šฅ
  • ์šฐํ…Œ์ฝ” 5๊ธฐ
  • RecyclerView
  • ์…€๋ ˆ๋‹ˆ์›€
  • Android

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
BuNa_

IT Story

[์šด์˜์ฒด์ œ] Contiguous Allocation๊ณผ MMU(Memory Management Unit)
CS

[์šด์˜์ฒด์ œ] Contiguous Allocation๊ณผ MMU(Memory Management Unit)

2023. 1. 1. 22:31

 

๋ชฉ์ฐจ

  • ๐Ÿค”  MMU(Memory Management Unit)๋ž€?
  • ๐Ÿ’™  ์—ฐ์† ํ• ๋‹น(Contiguous allocation)
  • ๐Ÿ’œ  Memory protection fault

 

๐Ÿค”  MMU(Memory Management Unit)๋ž€?

MMU(Memory Management Unit)๋Š” CPU ๋‚ด๋ถ€์— ํƒ‘์žฌ๋˜์–ด ๋…ผ๋ฆฌ ์ฃผ์†Œ(Logical Address)๋ฅผ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฌผ๋ฆฌ ์ฃผ์†Œ(Physical Address)๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•˜๋“œ์›จ์–ด์ž…๋‹ˆ๋‹ค.

 

'Execution time binding'

์ด์ „ ํฌ์ŠคํŒ…์— ๊ณต๋ถ€ํ–ˆ๋“ฏ์ด, Execution time binding์€ ์‹ค์ œ๋กœ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์— ์ฃผ์†Œ ๋ณ€ํ™˜์„ ํ•˜๋Š” Address binding ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” 0x198000๋ฒˆ์ง€์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” data์— 10์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด store #98000, 10 ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด 98000๋ฒˆ์ง€๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๊ณ  ์ž‘์„ฑ๋˜์–ด ์žˆ์ง€๋งŒ, ์ด๋Š” ์ƒ๋Œ€ ์ฃผ์†Œ, ๋…ผ๋ฆฌ ์ฃผ์†Œ๋กœ ์‹ค์ œ data์˜ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— CPU๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ, MMU๋ฅผ ๊ฑฐ์ณ์„œ ์ƒ๋Œ€์ฃผ์†Œ์— ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ base๋กœ ๋”ํ•˜์—ฌ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ•„์š”ํ•œ ์ˆœ๊ฐ„๋งˆ๋‹ค ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. (= Base + ๋…ผ๋ฆฌ ์ฃผ์†Œ)

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ Load time binding๊ณผ ๋‹ฌ๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฌ๋ฆด ๋•Œ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ํ•œ ๋ฒˆ์— ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์ ์žฌ ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฐ์†Œํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ๋งํ•ด, Contiguous allocation์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ MMU๊ฐ€ ๋…ผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๋Œ€์‹ ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ’œ   Memory protection fault

'MMU์˜ ์ฃผ์†Œ ๋ณ€ํ™˜ ๊ณผ์ •'

MMU๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ์ฃผ์†Œ ๋ณ€ํ™˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•ด์„œ๋„ ๊ฒ€์ฆํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ CPU๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ Logical address๊ฐ€ Base address๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€์ง€, Base + Limit ๋ณด๋‹ค ์ž‘์€์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ base register์—๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์ž‘ ์ฃผ์†Œ, limit register์—๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ”„๋กœ์„ธ์Šค์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ๋‚˜์„œ, ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ CPU์˜ PC๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ OS๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๋…ผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด Memory protection fault๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Memory protection fault๋Š” CPU๊ฐ€ ์ž์‹ ์—๊ฒŒ ๋ฐœ์ƒ์‹œํ‚ค๋Š” Interrupt์ž…๋‹ˆ๋‹ค.

CPU๋Š” CPU Dispatcher๊ฐ€ PC๋กœ ๊ฐ€์ ธ์˜จ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ๋ฐ–์— ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์˜ˆ์™ธ ์ƒํ™ฉ์—์„œ ๋ฌด์–ธ๊ฐ€ ์กฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— CPU๋Š” ์ž๊ธฐ ์ž์‹ ์—๊ฒŒ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์„œ OS๊ฐ€ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ Memory protection fault ๋˜๋Š” Exception, trap์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

 

๐Ÿ’™   ์—ฐ์† ํ• ๋‹น(Contiguous allocation)

์œ„์—์„œ MMU์˜ ์ฃผ์†Œ ๋ณ€ํ™˜ ๊ณผ์ •์€ ๋ชจ๋‘ ์—ฐ์† ํ• ๋‹น์ธ ๊ฒฝ์šฐ์— ํ•ด๋‹น์ด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฐ์† ํ• ๋‹น(Contiguous allocation)์€ ๋ฌด์—‡์ผ๊นŒ์š”?

์šฐ์„ , ์ตœ์‹  OS์™€ ๋‹ฌ๋ฆฌ, ๊ณผ๊ฑฐ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ํ†ต์งธ๋กœ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

'Memory์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฐ์ด์–ด ์กด์žฌํ•จ'

0x100000๋ฒˆ์ง€์— ํ”„๋กœ๊ทธ๋žจ์„ ์ ์žฌ์‹œ์ผฐ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์‚ฌ์ด์— ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ž์—ฌ ์žˆ์ง€ ์•Š๊ณ  ์˜ค์ง ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฐ์ด์–ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Contiguous allocation ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด, MMU๋Š” ๋‹จ์ˆœํžˆ Base(0x100000) ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์— ๋…ผ๋ฆฌ ์ฃผ์†Œ(0x98000)๋ฅผ ๋”ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฌผ๋ฆฌ์ฃผ์†Œ(0x198000)๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

Simplicity comes at a loss.

ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ•จ์—๋Š” ์†์‹ค์ด ๋”ฐ๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

Contiguous allocation์€ MMU๋ฅผ ๋ณด๋‹ค ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์˜คํžˆ๋ ค ์‚ฌ์ด์‚ฌ์ด์— ์ƒ๊ธฐ๋Š” ๋นˆ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„(Hole)์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์™ธ๋ถ€ ๋‹จํŽธํ™”(External fragmentation) ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ž๋ฉด, OS๋Š” HW ์ž์›์„ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ๋ฐ, ์—ฐ์† ํ• ๋‹น ๊ธฐ๋ฒ•์€ ๋‹จ์ˆœํ•จ๋งŒ ์ œ๊ณตํ•  ๋ฟ ํšจ์œจ์„ ์–ป์ง€๋Š” ๋ชปํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” Contiguous allocation ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐœ์ƒํ•˜๋Š” ์™ธ๋ถ€ ๋‹จํŽธํ™”์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

github : https://github.com/tmdgh1592

 

tmdgh1592 - Overview

๋А๋ฆฌ๋”๋ผ๋„ ์ฒœ์ฒœํžˆ..!! ๐Ÿ˜. tmdgh1592 has 21 repositories available. Follow their code on GitHub.

github.com

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    BuNa_
    BuNa_
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž๋ฅผ ํ–ฅํ•ด ๋‹ฌ๋ฆฌ๊ณ  ์žˆ๋Š” ๊ณต๋Œ€์ƒ์ž…๋‹ˆ๋‹ค! ๐Ÿง‘ Android, Kotlin, Java, Python ๋“ฑ ํ•™์Šตํ•˜๊ณ  ์žˆ๋Š” ๋‚ด์šฉ๊ณผ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ๋กœ ์—…๋กœ๋“œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ ๊ณผ ์กฐ์–ธ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค!๐Ÿ˜Š github : https://github.com/tmdgh1592

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”