Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래밍
- Process
- Scratch
- 잘 짜인 코드
- 영어논문
- Deep Learning
- scheduling policy
- xv6
- Lock
- 맛집
- 균형의 정치
- 미국
- The beauty and Joy of computing
- 여행
- control flow
- 푸드트럭
- 독립기념일
- 버클리
- concurrency
- Jupyter Notebook
- 직업으로서의 정치 서평
- 7월4일
- 스크래치
- Snap!
- 코딩
- CLRS
- insertion Sort
- Operating System
- list
- 운영체제 강의
Archives
- Today
- Total
여행다니는 펭귄
Paging 본문
저번에 Segmentation에 대해서 알아보았죠? 그런데 Segmentation에는 문제점이 많습니다.
- Externel fragmentation
- Free space management가 복잡하다는 점
- Compaction이 비싸다는 점
- 또 Code구간 Stack구간 Heap구간이 나뉘어져있는데 Free Space가 있어도 Heap이 자라날 공간이 없다면 더이상 allocation을 해줄수 없다는 점
그래서 새로운 방식인 Paging을 도입합니다.
Paging의 Concept는 다음과 같습니다.
- Virtual Address를 Code Heap Stack에 구분없이 fixed-size의 unit인 page로 나누고 이를 virtual page라고 부릅니다.
- Segmentation은 Variable Size로 (code, heap, stack)으로 나눴습니다.
- Physical memory역시 같은 사이즈의 page로 나눕니다 이를 page frame이라고 부릅니다.
- Virtual address를 Physical address로 mapping해주는 page table이 필요합니다.
이 방식의 장점은
- Flexibility
- address space를 효과적으로 abstract해줍니다. ( Heap 과 Stack이 Grow하는 것을 신경 쓸 필요가 없습니다. )
- Simplicity
- Free space management를 해주기 쉽습니다.
- Externel fragmentation이 존재하지 않습니다.
입니다.
그렇다면 Paging은 구체적으로 어떻게 구현될까요?
와 같이 VPN을 PFN으로 Mapping해주는 Page Table로 구현됩니다.
또 Page Table에는 여러가지 또 다른 Bit가 포함되어 다양한 기능을 제공합니다.
- Valid Bit
- 이 Page에 Data가 저장되어있는지를 알려주는 Bit 입니다.
- Protection Bit
- 이 Page의 데이터에 대한 권한을 알려주는 Bit 입니다.
- MMU에 의해서 Protection됩니다.
- Present Bit
- Swapping에서 사용되는 것으로 이 Page가 Physical memory에 올라가 있는지를 알려주는 Bit 입니다.
- Dirty Bit
- 이 Page가 최근에 수정되어있는지를 알려주는 Bit 입니다.
- Reference Bit
- 이 Page가 Access되었는지를 알려주는 Bit 입니다.
Page Table은 또 Page를 Share 할 수 있는 장점이 있는데, 이것은 fork()와 같은 함수에서 Page Table만을 복제하면서 일어납니다.
다만, 이 방법도 완벽한 것은 아니라 Page Table에도 문제점이 세가지 있습니다.
- Internal fragmentation
- Page Size가 크면 생기는 문제입니다.
- 작은 Size의 Page size를 쓰면 되는 문제입니다.
- 다만 위 방법의 경우 3번 문제점인 Huge Page Table로 연결될 수 있습니다.
- Page Size가 크면 생기는 문제입니다.
- Performance Degradation
- Page Table에 Access하면서 생기는 문제입니다.
- memory에 두번씩 Access해야 합니다 1) PTE에 접근 2) Physical Memory에 Physical Address를 사용하여 접근
- TLB(Translation lookaside buffer)를 사용해서 문제를 회피할 수 있습니다.
- memory에 두번씩 Access해야 합니다 1) PTE에 접근 2) Physical Memory에 Physical Address를 사용하여 접근
- Page Table에 Access하면서 생기는 문제입니다.
- Huge Page Table
- Page Table이 매우 커질 수 있습니다.
- Hybrid solution이나 Multi-level paging이 해결법이 될 수 있습니다.
Translation Lookaside Buffers (TLB) 란 대체 무엇일까요?
MMU의 일부로 CPU chip 내부에 있고(SRAM), 이것이 PTE중 자주 쓰이는것을 저장하게 됩니다.
만약 찾는 PTE가 TLB에 있을 경우 다음과 같이 동작합니다.
이렇게 보면 단 한번 Memory에 Access하기에 효율적입니다. 그러나 TLB안에 없을경우 다시 두번 Memory에 Access 해야 합니다.
다만 Miss가 Locality 덕분에 자주 일어나지 않아, Cache Hierarchy를 이룰 수 있습니다.
TLB에 대해 더 자세한 내용은 별도의 게시글에서 다루겠습니다.
'컴퓨터 > 운영체제' 카테고리의 다른 글
Paging with Smaller Tables (0) | 2021.12.14 |
---|---|
Translation Lookaside Buffer (0) | 2021.12.12 |
File System Implementation (0) | 2021.12.12 |
I/O , File 과 Directory 측면에서 (0) | 2021.12.10 |
Flash-based SSD (0) | 2021.12.10 |