Operating System
[OS] Memory Management (3&4)
Sara.H
2022. 1. 24. 17:28
❗️Disclaimer : 이화여대 반효경 교수님 수업 자료 입니다. |
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(TLB확인 20 + 실제 접근 100) + 0.02 * 520(페이지테이블 확인400 + TLB확인20 + 실제 접근100) = 128ns
- 결과적으로 주소변환을 위해 28ns 만 소요 (100은 접근시간)
Valid, Invalid Bit
- 페이지 테이블에는 주소변환 정보 뿐만 아니라 부가적인 비트가 저장되어 있음. (Valid, Invalid Bit)
- 6, 7번 페이지는 프로그램이 사용하지 않으나 존재한다.
- 32bit 주소 체계에서 페이지는 최대 1M개 존재할 수 있음. 중간에 사용되지 않는 주소영역 매우 많으나, 페이지 테이블 내에는 사용되지 않는 것에 대한 entry 또한 존재할 수 밖에 없다. (테이블 구조 상)
- 사용이 되지 않는 부분들은 Invalid 로 표시한다.
- 5번 페이지는 9번 프레임에 실재로 올라가 있다. 6번 페이지는 물리 프레임에 올라가 있지 않다.
Memory Protection
- Page Table 의 각 entry 마다 아래의 Bit 을 둔다.
- Protection Bit : Page 에 대한 접근 권한 (read, write, read-only)
- 다른 프로세는 애초에 다른 페이지 테이블에 접근할 수 없기 때문에 그런 의미의 보호가 아니다.
- 여기서 말하는 권한은 "어떤 연산에 대한 접근 권한이 있는지"
- 코드, 데이터, 스택 영역 각각을 담고 있는 페이지들이 있는데 코드 영역은 read only 이다. 데이터, 스택 영역에는 업데이트가 가능하므로 read, write 권한이 모두 필요하다. "해당 페이지에 대하여 어떤 연산을 수행할 수 있는지" 를 나타내는 비트이다.
- Valid-Invalid Bit : Valid 는 해당 주소의 frame 에 그 프로세스를 구성하는 유효한 내용이 있음을 뜻한다. (접근 허용) / Invalid 는 해당 주소의 frame 에 유효한 내용이 없음을 뜻한다. (접근 불허)
- 프로세스가 그 주소 부분을 사용하지 않는 경우
- 해당 페이지가 메모리에 올라와 있지 않고 swap area 에 있는 경우
Inverted Page Table
- Page table 이 매우 큰 이유
- 모든 프로세스 별로 그 논리 주소에 대응하는 모든 페이지에대해 page table entry 가 존재한다. (Process 별로 페이지 테이블 만들어질 뿐만 아니라, 하나의 프로세스가 갖는 논리주소 영역 또한 큼)
- 대응하는 page 가 메모리에 있든 아니든간에 page table 에는 entry 로 존재
- Inverted page table
- page frame 하나당 페이지 테이블에 하나의 entry 를 둔 것 (system wide)
- 각 page table entry 는 각각의 (논리 메모리가 아닌) 물리적 메모리의 page frame 이 담고 있는 내용을 표시(Process ID, Process 의 논리 주소)
- 단점 : 테이블 전체를 탐색해야 함
- 조치 : associative register 사용 (expensive)
- 별도의 하드웨어를 동원해 순차 탐색이 아닌 병렬 탐색을 하도록 한다(?)
Shared Page
프로그램 3개가 돌아가고 있다면, 코드 영역은 공유될 수 있다. 중간에 수정되는 데이터 영역 등만 별도로 존재하면 됨. 이렇게 공유할 수 있는 코드에 대해 각각을 물리 메모리에 별도로 올리는 것이 아닌, 하나의 카피만 올리도록 한다. (위 사진에서 3, 4, 6 프레임 동일하게 매핑된 것 확인)
- Shared Code
- Re-entrant code (=Pure code)
- read-only 로 하여 프로세스 간에 하나의 code 만 메모리에 올림 (e.g, text editors, compilers, window systems)
- shared code 는 (물리 주소가 같은 것은 물론이거니와,)모든 프로세스의 논리 주소 공간에서 동일한 위치에 있어야 한다.
- 왜?
- Private code and data
- 각 프로세스들은 독자적으로 메모리에 올림
- Private data 는 논리 주소 공간의 아무 곳에 와도 무방
Shared Memory 를 통한 IPC 와 여기서의 공유 코드와는 다른 개념이다.
Segmentation
- 프로그램은 의미 단위인 여러개의 segment 로 구성
- 작게는 프로그램을 구성하는 함수 하나하나를 세그먼트로 정의
- 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능
- 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의됨
- segment 는 다음과 같은 logical unit 들임
main()
function
global variables
stack
symbol table
arrays
Paging 기법은 프로그램을 구성하는 주소 공간을 페이지 단위로 쪼갠 것이고,
Segmentation 기법은 프로그램을 의미 단위로 쪼갠 것이다.
Segmentation Architecture
- Logical Address 는 다음의 두 가지로 구성
- <segment number, offset>
- Segment Table
- each table entry has :
- base - starting physical address of the segment
- limit - length of the segment
- each table entry has :
- Segment table base register (STBR)
- 물리적 메모리에서의 segment table 의 위치
- Segment table length register (STLR)
- 프로그램이 사용하는 segment 의 수
- segment number s is legal if s < STLR
세그먼트는 의미 단위로 자르는 것이기 때문에, 페이지와 다르게 길이를 갖고 있어야 한다.
s 가 limit 보다 큰지 작은지 확인한다. 잘못된 경우 트랩 일으킴.
base 만큼 떨어진 곳에서 시작하여, d 오프셋 만큼 움직이면 해당 세그먼트의 물리 주소를 알 수 있다.
장점 : 의미 단위로 일을 할 때 효과적. 프로택션을 하는 경우에, 어떤 부분은 read, write 가능하고 어떤 부분은 read only ...
단점 : 길이가 일정하지 않기 때문에 파편화 문제 발생
Memory Management Cont'd (4)
Segmentation 기법 이어서 설명
생각할 점
운영체제가 하는 역할은 거의 없고 대부분 하드웨어의 지원을 통해서 메모리 관리가 이루어진다.