ํ์ผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ๊ฐ๋ ฅํจ์ ์์๋ณด์ธ์. ์ ์ธ๊ณ ์์คํ ์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ธ์.
๋ฉ๋ชจ๋ฆฌ ๋งคํ: ํจ์จ์ ์ธ ํ์ผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ์
์ํํธ์จ์ด ๊ฐ๋ฐ ๋ถ์ผ, ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ํ์ผ I/O ์์ ์ ์ฑ๋ฅ์ ์ข ์ข ์ค์ํ ๋ณ๋ชฉ ํ์์ด ๋ฉ๋๋ค. ๋์คํฌ์์ ์ฝ๊ณ ์ฐ๋ ๊ธฐ์กด ๋ฐฉ์์ ๋๋ฆฌ๊ณ ๋ฆฌ์์ค ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. ํ์ผ์ ์ผ๋ถ๋ฅผ ํ๋ก์ธ์ค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ์ธ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ๋งค๋ ฅ์ ์ธ ๋์์ ์ ๊ณตํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํนํ ์๋นํ ํ์ผ๋ก ์์ ํ ๋ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ผ๋ฏ๋ก ์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ ์ค์ํ ๋๊ตฌ๊ฐ ๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋งคํ ์ดํด
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ๋ณธ์ง์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ๋์คํฌ์ ๋ฐ์ดํฐ์ ์ง์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ, ๋ง์น ๋ฐ์ดํฐ๊ฐ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ด์ ์ฒด์ ๋ ์ด ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ์ฌ ํ์ผ๊ณผ ํ๋ก์ธ์ค์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ์์ญ ๊ฐ์ ๋งคํ์ ์ค์ ํฉ๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฐ์ดํธ์ ๋ํด ๋ช ์์ ์ธ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์คํ ํธ์ถ์ ํ ํ์๊ฐ ์๊ฒ ํฉ๋๋ค. ๋์ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ๋ก๋ ๋ฐ ์ ์ฅ์ ํตํด ํ์ผ๊ณผ ์ํธ ์์ฉํ์ฌ OS๊ฐ ๋์คํฌ ์ก์ธ์ค ๋ฐ ์บ์ฑ์ ์ต์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ค๋ฒํค๋ ๊ฐ์: ๊ธฐ์กด I/O ์์ ์ ์ค๋ฒํค๋๋ฅผ ํผํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ์ผ ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ํฅ์: OS ์์ค ์บ์ฑ ๋ฐ ์ต์ ํ๋ ์ข ์ข ๋ ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์์ผ๋ก ์ด์ด์ง๋๋ค. OS๋ ํ์ผ์ ์์ฃผ ์ก์ธ์ค๋๋ ๋ถ๋ถ์ ์ง๋ฅ์ ์ผ๋ก ์บ์ฑํ์ฌ ๋์คํฌ I/O๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ ๋จ์ํ: ๊ฐ๋ฐ์๋ ํ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒ์ฒ๋ผ ์ทจ๊ธํ ์ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ๋จ์ํํ๊ณ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
- ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํฐ ํ์ผ๋ก ์์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. OS๋ ํ์์ ๋ฐ๋ผ ๋์คํฌ์ RAM ๊ฐ์ ๋ฐ์ดํฐ ํ์ด์ง ๋ฐ ์ค์ํ์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋งคํ ์๋ ๋ฐฉ์
๋ฉ๋ชจ๋ฆฌ ๋งคํ ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค.
- ๋งคํ ์์ฑ: ํ๋ก๊ทธ๋จ์ ์ด์ ์ฒด์ ์ ํ์ผ์ ์ผ๋ถ(๋๋ ์ ์ฒด ํ์ผ)๋ฅผ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ๋งคํํ๋๋ก ์์ฒญํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก POSIX ํธํ ์์คํ
(์: Linux, macOS)์์
mmap๊ณผ ๊ฐ์ ์์คํ ํธ์ถ ๋๋ ๋ค๋ฅธ ์ด์ ์ฒด์ (์: Windows์CreateFileMapping๋ฐMapViewOfFile)์ ์ ์ฌํ ๊ธฐ๋ฅ์ ํตํด ์ํ๋ฉ๋๋ค. - ๊ฐ์ ์ฃผ์ ํ ๋น: OS๋ ํ์ผ ๋ฐ์ดํฐ์ ๊ฐ์ ์ฃผ์ ๋ฒ์๋ฅผ ํ ๋นํฉ๋๋ค. ์ด ์ฃผ์ ๋ฒ์๋ ํ๋ก๊ทธ๋จ์ ํ์ผ ๋ณด๊ธฐ ๋ฐฉ์์ด ๋ฉ๋๋ค.
- ํ์ด์ง ํดํธ ์ฒ๋ฆฌ: ํ๋ก๊ทธ๋จ์ด ํ์ฌ RAM์ ์๋ ํ์ผ ๋ฐ์ดํฐ์ ์ผ๋ถ์ ์ก์ธ์คํ ๋(ํ์ด์ง ํดํธ ๋ฐ์), OS๋ ๋์คํฌ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ์ฌ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ด์ง์ ๋ก๋ํ๊ณ ํ์ด์ง ํ ์ด๋ธ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ก์ธ์ค: ๊ทธ๋ฌ๋ฉด ํ๋ก๊ทธ๋จ์ ํ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ง์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ๋งคํ ํด์ : ํ๋ก๊ทธ๋จ์ด ์๋ฃ๋๋ฉด ๋ฆฌ์์ค๋ฅผ ํด์ ํ๊ณ ์์ ๋ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๋ค์ ๊ธฐ๋ก๋๋๋ก ํ์ผ์ ๋งคํ์ ํด์ ํด์ผ ํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก
munmap๊ณผ ๊ฐ์ ์์คํ ํธ์ถ ๋๋ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
ํ์ผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋งคํ
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ์ผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํนํ ์ ๋ฆฌํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ธ๋ฑ์ฑ ์์คํ ๋๋ ํ์ผ ์์คํ ์์ฒด์ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ณด์ธ์. ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ฑ๋ฅ์ ํ๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ๊ฒ์: ๋ฐ์ด๋๋ฆฌ ๊ฒ์ ๋๋ ๊ธฐํ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ๋ ํจ์จ์ ์ด ๋ฉ๋๋ค.
- ์ธ๋ฑ์ฑ: ๋์ฉ๋ ํ์ผ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๊ณ ์ก์ธ์คํ๋ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
- ๋ฐ์ดํฐ ์์ : ๋ฐ์ดํฐ์ ๋ํ ์ ๋ฐ์ดํธ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ํํ ์ ์์ผ๋ฉฐ OS๊ฐ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๊ธฐ๋ณธ ํ์ผ ๊ฐ์ ๋๊ธฐํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๊ตฌํ ์์ (C++)
๊ฐ๋จํ C++ ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ ์์์ด๋ฉฐ ์ค์ ๊ตฌํ์๋ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๋ณด๋ค ์ ๊ตํ ๋๊ธฐํ ์ ๋ต์ด ํ์ํฉ๋๋ค.
#include <iostream>
#include <fstream>
#include <sys/mman.h> // For mmap/munmap - POSIX systems
#include <unistd.h> // For close
#include <fcntl.h> // For open
int main() {
// Create a sample file
const char* filename = "example.txt";
int file_size = 1024 * 1024; // 1MB
int fd = open(filename, O_RDWR | O_CREAT, 0666);
if (fd == -1) {
perror("open");
return 1;
}
if (ftruncate(fd, file_size) == -1) {
perror("ftruncate");
close(fd);
return 1;
}
// Memory map the file
void* addr = mmap(nullptr, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (addr == MAP_FAILED) {
perror("mmap");
close(fd);
return 1;
}
// Access the mapped memory (e.g., write something)
char* data = static_cast<char*>(addr);
for (int i = 0; i < 10; ++i) {
data[i] = 'A' + i; // Write 'A' to 'J'
}
// Read from the mapped memory
std::cout << "First 10 characters: ";
for (int i = 0; i < 10; ++i) {
std::cout << data[i];
}
std::cout << std::endl;
// Unmap the file
if (munmap(addr, file_size) == -1) {
perror("munmap");
}
// Close the file
if (close(fd) == -1) {
perror("close");
}
return 0;
}
์ด C++ ์์ ์์ ํ๋ก๊ทธ๋จ์ ๋จผ์ ์ํ ํ์ผ์ ์์ฑํ ๋ค์ mmap์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํํฉ๋๋ค. ๋งคํ ํ ํ๋ก๊ทธ๋จ์ ๋ฐฐ์ด์ ์ก์ธ์คํ๋ ๊ฒ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ง์ ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค. OS๋ ๊ธฐ๋ณธ ํ์ผ๊ณผ์ ๋๊ธฐํ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, munmap์ ๋งคํ์ ํด์ ํ๊ณ ํ์ผ์ด ๋ซํ๋๋ค.
๊ตฌํ ์์ (Python)
Python์ mmap ๋ชจ๋์ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋งคํ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค. ๋ค์์ ๊ฐ๋จํ ์์ ์
๋๋ค.
import mmap
import os
# Create a sample file
filename = "example.txt"
file_size = 1024 * 1024 # 1MB
with open(filename, "wb+") as f:
f.seek(file_size - 1)
f.write(b"\0") # Create a file
# Memory map the file
with open(filename, "r+b") as f:
mm = mmap.mmap(f.fileno(), 0) # 0 means map the entire file
# Access the mapped memory
for i in range(10):
mm[i] = i.to_bytes(1, 'big') # Write bytes
# Read the mapped memory
print("First 10 bytes:", mm[:10])
# Unmap implicitly with 'with' statement
mm.close()
์ด Python ์ฝ๋๋ mmap ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ ๋งคํํฉ๋๋ค. with ๋ฌธ์ ๋งคํ์ด ์ ๋๋ก ๋ซํ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋๋ก ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ ๊ทธ ๋ค์์ ์ฝ์ด ๋ฉ๋ชจ๋ฆฌ ๋งคํ์์ ์ ๊ณตํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ด ์ก์ธ์ค๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์ ์ ํ
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ด ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ์ด๋ฅผ ์ธ์ ์ฌ์ฉํด์ผ ํ๊ณ ๋ค๋ฅธ I/O ์ ๋ต(์: ๋ฒํผ๋ง๋ I/O, ๋น๋๊ธฐ I/O)์ด ๋ ์ ์ ํ ์ ์๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๋์ฉ๋ ํ์ผ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉ ๊ฐ๋ฅํ RAM๋ณด๋ค ํฐ ํ์ผ์ ์ฒ๋ฆฌํ ๋ ๋ฐ์ด๋ฉ๋๋ค.
- ์์ ์ก์ธ์ค: ํ์ผ์ ์๋ก ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ๋น๋ฒํ ์์ ์ก์ธ์ค๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ : ํ์ผ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์์ ํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ ์ ๋๋ค.
- ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ: ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ก์ธ์ค ์๋๋ฅผ ๋์ด๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ผ๋ฉฐ ์ ์ฒด ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฝ์ ๋ค์ ์ก์ธ์คํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฆ ๋๋ค.
- ๋์ ์ก์ธ์ค: ๋ฉ๋ชจ๋ฆฌ ๋งคํ๋ ํ์ผ์ ๋ํ ๋์ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๋์ผํ ๋งคํ๋ ์์ญ์ ์ก์ธ์คํ๋ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค๋ ์ ๋๋ก ์กฐ์ ๋์ง ์์ผ๋ฉด ๋ฐ์ดํฐ ์์์ ์ผ์ผํฌ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๋๋ฆฌ์ค์์๋ ์ ๊ธ ๋ฉ์ปค๋์ฆ(๋ฎคํ ์ค, ์ธ๋งํฌ์ด)์ด ์ค์ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ๋์์ ๊ณ ๋ คํ์ญ์์ค.
- ์๊ท๋ชจ ํ์ผ: ์๊ท๋ชจ ํ์ผ์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ค์ ํ๋ ์ค๋ฒํค๋๊ฐ ์ด์ ๋ณด๋ค ํด ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฒํผ๋ง๋ I/O๊ฐ ๋ ๊ฐ๋จํ๊ณ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
- ์์ฐจ์ ์ก์ธ์ค: ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ๊ฑฐ๋ ์จ์ผ ํ๋ ๊ฒฝ์ฐ ๋ฒํผ๋ง๋ I/O๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ฉฐ ๊ตฌํํ๊ธฐ ์ฌ์ธ ์ ์์ต๋๋ค.
- ๋ณต์กํ ์ ๊ธ ์๊ตฌ ์ฌํญ: ๋ณต์กํ ์ ๊ธ ๋ฐฉ์๊ณผ ํจ๊ป ๋์ ์ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ๋๋ก๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ๋๋ ์ ์ฉ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ์๋ฃจ์ ์ด ๋ ์ ์ ํฉ๋๋ค.
์ค์ฉ์ ์ธ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ผ๋์ ๋์ญ์์ค.
- ์ค๋ฅ ์ฒ๋ฆฌ: ํญ์ ์ฒ ์ ํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ํฌํจํ์ฌ ์์คํ
ํธ์ถ(
mmap,munmap,open,close๋ฑ)์ ๋ฐํ ๊ฐ์ ํ์ธํ์ญ์์ค. ๋ฉ๋ชจ๋ฆฌ ๋งคํ ์์ ์ด ์คํจํ ์ ์์ผ๋ฉฐ ํ๋ก๊ทธ๋จ์ ์ด๋ฌํ ์คํจ๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. - ๋๊ธฐํ: ์ฌ๋ฌ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๋งคํ๋ ํ์ผ์ ์ก์ธ์คํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์์์ ๋ฐฉ์งํ๋ ค๋ฉด ๋๊ธฐํ ๋ฉ์ปค๋์ฆ(์: ๋ฎคํ ์ค, ์ธ๋งํฌ์ด, ๋ฆฌ๋-๋ผ์ดํฐ ์ ๊ธ)์ด ์ค์ํฉ๋๋ค. ๊ฒฝํฉ์ ์ต์ํํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ ๊ธ ์ ๋ต์ ์ ์คํ๊ฒ ์ค๊ณํ์ญ์์ค. ์ด๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๊ฐ์ฅ ์ค์ํ ๊ธ๋ก๋ฒ ์์คํ ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ๋ ํ์ผ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ด ์ฆ์ ๋์คํฌ์ ๊ธฐ๋ก๋์ง ์๋๋ค๋ ์ ์ ์ธ์ํ์ญ์์ค. ๋ณ๊ฒฝ ์ฌํญ์ ์บ์์์ ํ์ผ๋ก ํ๋ฌ์ํ์ฌ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ค๋ฉด
msync(POSIX ์์คํ )๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ OS๊ฐ ์๋์ผ๋ก ํ๋ฌ์ฑ์ ์ฒ๋ฆฌํ์ง๋ง ์ค์ํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ๋ช ์์ ์ผ๋ก ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. - ํ์ผ ํฌ๊ธฐ: ์ ์ฒด ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ ๋งคํํ๋ ๊ฒ์ด ํญ์ ํ์ํ ๊ฒ์ ์๋๋๋ค. ํ์ฑ์ผ๋ก ์ฌ์ฉ ์ค์ธ ํ์ผ์ ๋ถ๋ถ๋ง ๋งคํํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๊ณ ์ ์ฌ์ ์ธ ๊ฒฝํฉ์ ์ค์ผ ์ ์์ต๋๋ค.
- ์ด์์ฑ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํต์ฌ ๊ฐ๋
์ ์๋ก ๋ค๋ฅธ ์ด์ ์ฒด์ ์์ ์ผ๊ด๋์ง๋ง ํน์ API ๋ฐ ์์คํ
ํธ์ถ(์: POSIX์
mmap, Windows์CreateFileMapping)์ ๋ค๋ฆ ๋๋ค. ํ๋ซํผ๋ณ ์ฝ๋ ๋๋ ์ถ์ํ ๊ณ์ธต์ ์ฌ์ฉํ์ฌ ํ๋ซํผ ๊ฐ ํธํ์ฑ์ ๊ณ ๋ คํ์ญ์์ค. Boost.Interprocess์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. - ์ ๋ ฌ: ์ต์ ์ ์ฑ๋ฅ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์์ ์ฃผ์์ ๋งคํ๋ ์์ญ์ ํฌ๊ธฐ๊ฐ ์์คํ ์ ํ์ด์ง ํฌ๊ธฐ์ ๋ง์ถฐ ์ ๋ ฌ๋์ด ์๋์ง ํ์ธํ์ญ์์ค. (์ผ๋ฐ์ ์ผ๋ก 4KB์ด์ง๋ง ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.)
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ์๋ฃ๋๋ฉด ํญ์ ํ์ผ์ ๋งคํ์ ํด์ ํ์ญ์์ค(
munmap๋๋ ์ ์ฌํ ๊ธฐ๋ฅ ์ฌ์ฉ). ์ด๋ ๊ฒ ํ๋ฉด ๋ฆฌ์์ค๊ฐ ํด์ ๋๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ๋์คํฌ์ ์ ๋๋ก ๊ธฐ๋ก๋ฉ๋๋ค. - ๋ณด์: ๋ฉ๋ชจ๋ฆฌ ๋งคํ๋ ํ์ผ์ ์๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ๋ณด์์ ์๋ฏธ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ํ์ผ ๊ถํ์ ๋ณดํธํ๊ณ ๊ถํ์ด ์๋ ํ๋ก์ธ์ค๋ง ์ก์ธ์คํ ์ ์๋๋ก ํฉ๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ๋ชจ๋ํฐ๋งํ์ญ์์ค.
์ค์ ์์ฉ ํ๋ก๊ทธ๋จ ๋ฐ ์
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ ์ธ๊ณ ์ฌ๋ฌ ์ฐ์ ์ ๋ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ : SQLite ๋ฑ๊ณผ ๊ฐ์ ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ ๋ ๋น ๋ฅธ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ํ์ผ ์์คํ ๊ตฌํ: ํ์ผ ์์คํ ์์ฒด๋ ์ข ์ข ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ์ฉํ์ฌ ํ์ผ ์ก์ธ์ค ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ต์ ํํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ์ผ์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์๋๊ฐ ๋นจ๋ผ์ ธ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
- ๊ณผํ ์ปดํจํ : ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ(์: ๊ธฐํ ๋ชจ๋ธ๋ง, ์ ์ ์ฒดํ)๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ข ์ข ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ๋ถ์ํฉ๋๋ค.
- ์ด๋ฏธ์ง ๋ฐ ๋น๋์ค ์ฒ๋ฆฌ: ์ด๋ฏธ์ง ํธ์ง ๋ฐ ๋น๋์ค ์ฒ๋ฆฌ ์ํํธ์จ์ด๋ ํฝ์ ๋ฐ์ดํฐ์ ์ง์ ์ก์ธ์คํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ์ด ํฌ๊ฒ ํฅ์๋ ์ ์์ต๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: ๊ฒ์ ์์ง์ ์ข ์ข ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ์ฌ ํ ์ค์ฒ ๋ฐ ๋ชจ๋ธ๊ณผ ๊ฐ์ ๊ฒ์ ์์ฐ์ ๋ก๋ํ๊ณ ๊ด๋ฆฌํ์ฌ ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
- ์ด์ ์ฒด์ ์ปค๋: OS ์ปค๋์ ํ๋ก์ธ์ค ๊ด๋ฆฌ, ํ์ผ ์์คํ ์ก์ธ์ค ๋ฐ ๊ธฐํ ํต์ฌ ๊ธฐ๋ฅ์ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค.
์: ๊ฒ์ ์ธ๋ฑ์ฑ. ๊ฒ์ํด์ผ ํ๋ ๋์ฉ๋ ๋ก๊ทธ ํ์ผ์ ์๊ฐํด ๋ณด์ธ์. ์ ์ฒด ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฝ๋ ๋์ ๋จ์ด๋ฅผ ํ์ผ์ ์์น์ ๋งคํํ ๋ค์ ๋ก๊ทธ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ ๋งคํํ๋ ์ธ๋ฑ์ค๋ฅผ ๋น๋ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ฒด ํ์ผ์ ์ค์บํ์ง ์๊ณ ๋ ๊ด๋ จ ํญ๋ชฉ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ด ๊ฒ์ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
์: ๋ฉํฐ๋ฏธ๋์ด ํธ์ง. ๋ํ ๋น๋์ค ํ์ผ๋ก ์์ ํ๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ๋ฉด ๋น๋์ค ํธ์ง ์ํํธ์จ์ด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฐ์ด์ธ ๊ฒ์ฒ๋ผ ๋น๋์ค ํ๋ ์์ ์ง์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋์คํฌ์์ ์ฒญํฌ๋ฅผ ์ฝ๊ธฐ/์ฐ๊ธฐํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ์ก์ธ์ค ์๊ฐ์ด ์ ๊ณต๋์ด ํธ์ง ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ต์ฑ์ด ํฅ์๋ฉ๋๋ค.
๊ณ ๊ธ ์ฃผ์
๊ธฐ๋ณธ ์ฌํญ ์ธ์๋ ๋ฉ๋ชจ๋ฆฌ ๋งคํ๊ณผ ๊ด๋ จ๋ ๊ณ ๊ธ ์ฃผ์ ๊ฐ ์์ต๋๋ค.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ๋ก์ธ์ค ๊ฐ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ ํต์ ์ธ I/O ์์ ์ ํ์์ฑ์ ์์ ๊ณ ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC) ๋ฐ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ์ํ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์์คํ ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
- Copy-on-Write: ์ด์ ์ฒด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ์ฌ copy-on-write(COW) ์๋ฏธ ์ฒด๊ณ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋งคํ๋ ์์ญ์ ์์ ํ ๋ ํ์ด์ง๊ฐ ์์ ๋ ๊ฒฝ์ฐ์๋ง ํ์ด์ง์ ๋ณต์ฌ๋ณธ์ด ์์ฑ๋จ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์์ ์ด ์ด๋ฃจ์ด์ง ๋๊น์ง ๋์ผํ ํ์ด์ง๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ต์ ํ๋ฉ๋๋ค.
- Huge Pages: ์ต์ ์ด์ ์ฒด์ ๋ ํ์ค 4KB ํ์ด์ง๋ณด๋ค ํฐ Huge Pages๋ฅผ ์ง์ํฉ๋๋ค. Huge Pages๋ฅผ ์ฌ์ฉํ๋ฉด TLB(Translation Lookaside Buffer) ๋๋ฝ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ผ๋ฉฐ, ํนํ ๋์ฉ๋ ํ์ผ์ ๋งคํํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฉํฉ๋๋ค.
- ๋น๋๊ธฐ I/O ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋งคํ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ๊ณผ ๋น๋๊ธฐ I/O ๊ธฐ์ ์ ๊ฒฐํฉํ๋ฉด ๋์ฑ ํฅ์๋ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ OS๊ฐ ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๋์ ๊ณ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ์ผ I/O๋ฅผ ์ต์ ํํ๊ณ ํจ์จ์ ์ธ ํ์ผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์๋ฆฌ๋ฅผ ์ดํดํจ์ผ๋ก์จ ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด์ ์ ์๋นํ์ง๋ง ์ค์ฉ์ ์ธ ๊ณ ๋ ค ์ฌํญ, ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ์ ์ฌ์ ์ธ ํธ๋ ์ด๋ ์คํ๋ฅผ ๊ธฐ์ตํ์ญ์์ค. ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ๋ง์คํฐํ๋ ๊ฒ์ ์ ์ธ๊ณ ์์ฅ์ ์ํด ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ๋ ค๋ ๊ฐ๋ฐ์์๊ฒ ๊ฐ์น ์๋ ๊ธฐ์ ์ ๋๋ค.
ํญ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ฐ์ ์ํ๊ณ , ์ค๋ฅ๋ฅผ ์ฃผ์ ๊น๊ฒ ์ฒ๋ฆฌํ๊ณ , ์์ฉ ํ๋ก๊ทธ๋จ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ ํํ์ญ์์ค. ์ ๊ณต๋ ์ง์๊ณผ ์์ ๋ฅผ ์ ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ ๊ณ ์ฑ๋ฅ ํ์ผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ ๊ธฐ์ ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.