Memory Optimization
메모리 관리에 있어서 최적화를 해야 한다.
Optimization Techniques
- Copy-on-write : fork 할 때 처음에 copy를 하지 않고 공유하도록 한다.
- Memory-mapped files : file을 메모리에 올려서 I/O가 메모리에서 일어나도록 한다.
- Modify bit : dirty bit을 사용해서 swap out 될 때 dirty 만 write 한다.
- Prepaging : 프로세스가 시작할 때 working set을 메모리에 불러온다.
Copy-on-Write
write가 발생할 때 copy를 실행한다.
주로 fork에서 사용하는 기법이다.
처음에 child가 만들어질 때는 parent의 address space를 복사하는 것이 아니라 공유하도록 되어있다.
이후 child나 parent에서 write를 할 때 해당 page만 복제해서 수정한다.
처음의 child의 stack 영역에는 garbage 공간을 제공한다.
Data 영역은 copy-on-write를 적용하지 않고, zero-fill-on-demand 를 적용한다.
Data 영역은 0으로 초기화해서 별도의 공간을 배정한다.
Memory-Mapped Files
file I/O를 줄여서 I/O에 대한 비용을 줄이는 기법이다.
disk에 저장되어있는 file을 메모리에 다 올린 후, file에 대한 access를 메모리에서 수행한다.
따라서 모든 I/O 작업이 메모리에서 진행된다.
disk보다 memory access time이 더 빠르기 때문에 더 효율적이다.
메모리에서 disk에 반영하기 전에 중단되면 손실이 발생한다.
따라서 중간중간에 동기화(sync)하는 것이 필요하다.
일반적으로 중간에 저장하지 않으면 file을 close 할 때 disk에 반영이 된다.
Modify Bit
swap out 되는 비용을 줄일 수 있다.
page table에 추가적인 bit(dirty bit)을 사용한다.
dirty bit이 swap out 될 때 1이면 disk에 write를 하고, 0이면 write 하지 않고 그냥 out 시킨다.
Prepaging
프로세스가 실행될 때의 비용을 줄일 수 있다.
순수하게 demand paging을 하면 초반에 page faults가 많이 발생하게 된다.
프로세스를 중단할 때 working set을 기억하고, 다시 시작되면 전체 working set을 메모리에 가져온다.
'Computer Science > Operating System' 카테고리의 다른 글
I/O Devices (0) | 2021.06.20 |
---|---|
성능에 미치는 요인들 (0) | 2021.06.20 |
Memory Allocation and Trashing (0) | 2021.06.20 |
Page Replacement (0) | 2021.06.20 |
Memory Space Utilization (0) | 2021.06.20 |
댓글