ãã¡ã€ã«ããŒã¹ã®ããŒã¿æ§é ã®ããã®ã¡ã¢ãªãããã³ã°ã®åãæ¢æ±ããŸããã°ããŒãã«ã·ã¹ãã å šäœã§ããã©ãŒãã³ã¹ãæé©åããå€§èŠæš¡ãªããŒã¿ã»ãããå¹ççã«ç®¡çããæ¹æ³ãåŠã³ãŸãã
ã¡ã¢ãªãããã³ã°ïŒå¹ççãªãã¡ã€ã«ããŒã¹ã®ããŒã¿æ§é ã®äœæ
ãœãããŠã§ã¢éçºã®åéãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåããã¡ã€ã«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ã«ãŒãã«ã¯ãããã»ã¹ã®ç®¡çããã¡ã€ã«ã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ãããã³ãã®ä»ã®ã³ã¢æ©èœã«ã¡ã¢ãªãããã³ã°ãåºç¯å²ã«äœ¿çšããŸãã
äŸïŒæ€çŽ¢ã€ã³ããã¯ã¹ãæ€çŽ¢ããå¿ èŠããã倧ããªãã°ãã¡ã€ã«ãæ€èšããŠãã ããããã¡ã€ã«å šäœãã¡ã¢ãªã«èªã¿èŸŒã代ããã«ãåèªããã¡ã€ã«å ã®äœçœ®ã«ãããããã€ã³ããã¯ã¹ãäœæãããã°ãã¡ã€ã«ãã¡ã¢ãªãããã§ããŸããããã«ããããã¡ã€ã«å šäœãã¹ãã£ã³ããã«ãé¢é£ãããšã³ããªããã°ããèŠã€ããããšãã§ããæ€çŽ¢ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
äŸïŒãã«ãã¡ãã£ã¢ç·šéã倧ããªãããªãã¡ã€ã«ãæäœããããšãæ³åããŠãã ãããã¡ã¢ãªãããã³ã°ã䜿çšãããšããããªç·šéãœãããŠã§ã¢ã¯ããããªãã¬ãŒã ã«ã¡ã¢ãªå ã®é åã§ãããã®ããã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸããããã«ããããã£ã¹ã¯ãããã£ã³ã¯ãèªã¿æžããããããã¯ããã«é«éãªã¢ã¯ã»ã¹æéãåŸãããç·šéã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžããŸãã
é«åºŠãªãããã¯
åºæ¬ãè¶ ããŠãã¡ã¢ãªãããã³ã°ã«é¢é£ããé«åºŠãªãããã¯ããããŸãã
- å ±æã¡ã¢ãªïŒã¡ã¢ãªãããã³ã°ã䜿çšããŠãããã»ã¹éã®å ±æã¡ã¢ãªé åãäœæã§ããŸããããã¯ãããã»ã¹ééä¿¡ïŒIPCïŒããã³ããŒã¿å ±æã®ããã®åŒ·åãªææ³ã§ãããåŸæ¥ã®I/Oæäœã®å¿ èŠæ§ãæé€ããŸããããã¯ãã°ããŒãã«ã«åæ£ãããã·ã¹ãã ã§åºã䜿çšãããŠããŸãã
- ã³ããŒãªã³ã©ã€ãïŒãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãã¡ã¢ãªãããã³ã°ã§ã³ããŒãªã³ã©ã€ãïŒCOWïŒã»ãã³ãã£ã¯ã¹ãå®è£ ã§ããŸããããã¯ãããã»ã¹ãã¡ã¢ãªããããããé åã倿ŽãããšãããŒãžã倿Žãããå Žåã«ã®ã¿ãããŒãžã®ã³ããŒãäœæãããããšãæå³ããŸããããã«ãããè€æ°ã®ããã»ã¹ã倿Žãè¡ããããŸã§åãããŒãžãå ±æã§ãããããã¡ã¢ãªäœ¿çšéãæé©åãããŸãã
- 巚倧ããŒãžïŒææ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ãæšæºã®4KBããŒãžããã倧ãã巚倧ããŒãžããµããŒãããŠããŸãã巚倧ããŒãžã䜿çšãããšãTLBïŒTranslation Lookaside BufferïŒãã¹ã®åæ°ãæžãããç¹ã«å€§ããªãã¡ã€ã«ããããããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- éåæI/Oãšã¡ã¢ãªãããã³ã°ïŒã¡ã¢ãªãããã³ã°ãéåæI/Oæè¡ãšçµã¿åãããããšã§ãããã«å€§ããªããã©ãŒãã³ã¹åäžãåŸãããŸããããã«ãããOSããã£ã¹ã¯ããããŒã¿ãããŒãããŠããéããããã°ã©ã ã¯åŠçãç¶è¡ã§ããŸãã
çµè«
ã¡ã¢ãªãããã³ã°ã¯ããã¡ã€ã«I/Oãæé©åããå¹ççãªãã¡ã€ã«ããŒã¹ã®ããŒã¿æ§é ãæ§ç¯ããããã®åŒ·åãªææ³ã§ããã¡ã¢ãªãããã³ã°ã®ååãçè§£ããããšã§ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããæ±ãå Žåã«ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããå©ç¹ã¯å€§ããã§ãããå®éçãªèæ ®äºé ããã¹ããã©ã¯ãã£ã¹ãããã³æœåšçãªãã¬ãŒããªããèæ ®ããããšãå¿ããªãã§ãã ãããã¡ã¢ãªãããã³ã°ãç¿åŸããããšã¯ãã°ããŒãã«åžå Žåãã®å ç¢ã§å¹ççãªãœãããŠã§ã¢ãæ§ç¯ããããšããŠããäžçäžã®éçºè ã«ãšã£ãŠè²Žéãªã¹ãã«ã§ãã
ããŒã¿ã®æŽåæ§ãåžžã«åªå ãããšã©ãŒãæ³šææ·±ãåŠçããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«åºã¥ããŠé©åãªã¢ãããŒããéžæããããšãå¿ããªãã§ãã ãããæäŸãããç¥èãšäŸãé©çšããããšã§ãã¡ã¢ãªãããã³ã°ã广çã«å©çšããŠã髿§èœã®ãã¡ã€ã«ããŒã¹ã®ããŒã¿æ§é ãäœæããäžçäžã§ãœãããŠã§ã¢éçºã¹ãã«ãåäžãããããšãã§ããŸãã