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
- dfs
- 정렬
- Express
- TypeScript
- nodejs
- MongoDB
- Queue
- Bull
- jest
- game
- Nest.js
- JavaScript
- nestjs
- typeORM
- Python
- AWS
- MySQL
- OCR
- GIT
- react
- 자료구조
- Sequelize
- flask
- Dinosaur
- class
- cookie
- 공룡게임
- mongoose
- 게임
Archives
- Today
- Total
포시코딩
[운영체제] 7. Memory Management (4) 본문
728x90
키워드
multilevel paging, valid-invalid bit, protection bit, inverted page table, shared page, segmentation
Multilevel Paging and Performance
- Address space가 더 커지면 다단계 페이지 테이블이 필요
- 각 단계의 페이지 테이블이 메모리에 존재하므로 logical address의 physical address 변환에
더 많은 메모리 접근 필요 - TLB를 통해 메모리 접근 시간을 줄일 수 있음
- 4단계 페이지 테이블을 사용하는 경우
- 메모리 접근 시간이 100ns, TLB 접근 시간이 20ns이고 TLB hit ratio가 98%인 경우
- effective memory access time
= 0.98 * 120 + 0.02 * 520
= 128 nanoseconds - 결과적으로 주소 변환을 위해 28ns만 소요
Valid(v) / Invalid(i) Bit in a Page Table
- Page는 5까지 있고 Page 6, 7은 사용하지 않는 페이지지만 page table의 6, 7번 entry에 존재한다.
프로그램의 주소 공간이 가질 수 있는 maximum size 만큼 page table entry가 생겨야 하기 때문 - table이라는 자료구조 특성상 위에서부터 index를 통해 접근해야 하기 때문
Valid-Invalid bit
- 사용되지는 않기 때문에 Invalid(i)로 표시되고 있음
0으로 표시되있다고 페이지에 대한 정보가 없다는게 아니라(0번지를 나타내는 것일 수도 있기 때문에)
v, i인지에 따라 여부가 나뉨 - Invalid에는 두가지 의미가 있다.
- 프로세스가 그 주소 부분을 사용하지 않는 경우
- 해당 페이지가 물리적인 메모리에 올라와 있지 않고 swap area에 있는 경우
Protection bit
- page에 대한 접근 권한 (read/write/read-only)
- 즉, 연산에 대한 권한을 표시하기 위한 bit
Inverted Page Table
page table의 문제
- 이전에 설명한 page table은 많은 용량을 차지한다는 문제가 있었다.
- 모든 process별로 그 logical address에 대응하는 모든 page에 대해 page table entry가 존재
- 대응하는 page가 메모리에 있든 아니든 간에 page table에는 entry로 존재
- 공간 오버헤드가 큼
Inverted page table
- 원래의 page table을 통한 주소 변환을 역발상으로 뒤집어 놓은 모습
- page frame 하나당 page table에 하나의 entry를 둔 것(system-wide)
- 각 page table entry는 각각의 물리적 메모리의 page frame이 담고 있는 내용 표시
(process-id, process의 logical address) - page table의 공간을 줄이고자 위함
- 테이블 전체를 탐색해야 하는 단점이 있기 때문에
병렬적으로 동시에 검색할 수 있게 associative register 사용(expensive)
Shared Page
Shared code
- Re-entrant Code(=Pure code)라고도 부른다.
- 여러 프로세스가 공유할 수 있는 code 부분을 같은 물리적인 메모리 frame으로 mapping 해주는 기법
- (조건 1) read-only로 하여 프로세스 간에 하나의 code만 메모리에 올림
ex) text editors, compilers, window systems - (조건 2) Shared code는 모든 프로세스의 logical address space에서 동일한 위치에 있어야 한다.
쉽게 말해서 동일한 logical address에 위치해야 함
-> 컴파일된 코드 안에는 logical address가 적혀있기 때문
Private code and data
- 각 프로세스들은 독자적으로 메모리에 올림
- private data는 logical address space의 아무곳에 와도 무방
Segmentation
- 프로세스를 구성하는 주소 공간을 의미 단위로 쪼개는 방법
- 프로그램은 의미 단위인 여러 개의 segment로 구성
- 작게는 프로그램을 구성하는 함수 하나하나를 세그먼트로 정의
- 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능
- 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의된다.
- 세그먼트 크기가 다 다르기 때문에 어디에서 시작 되는지 바이트 단위 주소로 매겨져야 하는지가
페이징 기법과의 차이점
Segmentation Architecture
Protection
- 각 세그먼트 별로 protection bit가 있음
- Each entry
- Valid bit = 0 -> illegal segment
- read / write / execution 권한 bit
Sharing
- shared segment
- same segment number
- * segment는 의미 단위이기 때문에 공유(sharing)와 보안(protection)에 있어 paging보다 훨씬 효과적
Allocation
- first fit / best fit
- external fragmentation(외부 조각) 발생
- * segment의 길이가 동일하지 않으므로 가변분할 방식에서와 동일한 문제점들이 발생
Segmentation with Paging
- pure segmentation과의 차이점
- segment-table entry가 segment의 base address를 가지고 있는 것이 아니라
segment를 구성하는 page table의 base address를 가지고 있음
- segment-table entry가 segment의 base address를 가지고 있는 것이 아니라
- 먼저 segment에 대한 주소 변환 진행 -> 각 프로그램이 가지고 있는 논리 주소는 segment 번호와 offset으로 구성됨
- STBR에 있는 segment table 시작 위치를 찾아 가면 해당 segment에 대한 주소 변환 정보를 얻을 수 있음
- 메모리에 올라갈 때 page로 쪼개져서 올라감
-> allocation 문제가 생기지 않는 장점 존재 - segment는 page 개수의 배수로 구성
- segment 하나가 여러 개의 page로 구성되기 때문에 segment 당 page table 존재
-> 프로세스 당 page table이 존재하는 것과 대조
728x90
'CS (Computer Science)' 카테고리의 다른 글
[운영체제] 8. Virtual Memory (1) (0) | 2023.05.18 |
---|---|
[운영체제] 7. Memory Management (5) - 정리 (0) | 2023.05.17 |
[운영체제] 7. Memory Management (3) (0) | 2023.05.17 |
[운영체제] 7. Memory Management (2) (0) | 2023.05.11 |
[운영체제] 7. Memory Management (1) (0) | 2023.05.10 |