728x90
반응형
- 하나의 프로세스 당 하나의 Page Table을 가지고 있기 때문에 이를 효율적으로 관리할 필요가 있음
- 따라서 Page Table Structure에 따라 구분 가능
- 페이지를 Hierarchical(계층적)으로 쪼갠 것
- 간단한 기술의 예로는 2레벨 Page Table, 위처럼 큰 범주로 먼저 나누고 그 안에서 또 나누는 형태
- 논리적 주소는 32비트, 4K 크기의 Page로 나뉜다.
- 한 테이블 안에 20bit -> 100만개 entries
- page offset은 12bit -> 4096, 4K
- 그림에서 보이듯 page number는 10bit씩 2개로 나누고 page offset은 12bit로 표현
- p1은 outer page table에 사용되는 주소값, p2는 다음 level에서 사용(다음 내용 이어서)
- P1의 1K entries에서 먼저 찾고 이어서 P2에서 한 페이지 안에 displacement값- 한 페이지를 선택했으면 그 시작위치에서 몇 번째 값이냐 몇 번째 워드냐를 찾아가기 위해서 필요한 값
- 위 설명 과정을 그림으로 나타낸 것 : P1에서 먼저 찾고 그 값에서 찾은 displacement로 p2 찾고 거기서 찾은 것은 Frame Number(가운데 회색 모양)
- 맨 마지막 12bit displacement값을 이용해서 찾은 mapping된 frame그 안에서 displacement값을 찾아가는 것
- 논리적 주소를 나타냄
- 32 bit 이상인 Addr 크기일 때 사용
- Hash 함수 사용 알고리즘에서(Mod) 발생할 수 있는 같은 공간을 나타내는 문제가 발생할 수 있음 (121%10, 11%10)
- 그래서 같은 결과를 나타내는 문제를 처리하기 위해서 포인터로 누구를 가리키는 형태로 표현함
- q,s는 entries안 특정 page number값, 뒤에는 frame number값 이렇게 쌍으로 들어감 (r)
- 그래서 찾은 frame number(r) + 원래 displacement 값 붙여서 physical address로 변환
- 이 방법에서는 어떤 Hashing Algorithm을 쓰느냐가 중요
- logical addr의 p값을 hash function 입력값으로 주고 그 결과값을 hash table에서 찾아가면
- 1개가 아닌 여러 개로 있을 수 있기 때문에 포인터로 연결하여 찾으면 Page Number(p)와 Frame Number(r)값을 찾을 수 있다.
- Physical Addr로 변환
- 반대로 Physical Memory영역에서 부터 시작
- Physical Memory 안에 100개의 Frame 영역이 있으면 Page Table 또한 100개의 entries를 가지고 있어야 함
- 메모리 공간 절약 가능, 우리가 필요한 Page Table은 1개만 있으면 됨
- mapping해서 찾아야해서 시간이 오래 걸릴 수는 있음
- CPU에서 logical Addr 정보가 나옴 [pid, p] + displacement
- Page Table에서 해당하는 값을 찾음 -> 몇 번째 i frame인지 찾음
- 찾은 i + displacement로 physical Addr로 변환
- 공유 코드
- 읽기 전용 - text editor, compiler, windows systems 등
- 예) 같은 프로그램 내 다른 내용을 포함하고 있는 파일 여는 동작
- 위 예를 한글이라고 하면 한글은 메모리에 공유되고 있는 것
- 각각의 프로세스는 Private code와 data를 가짐
- ed : editor프로그램
- 위 그림은 3개의 Process와 그것들의 Pagr Table 존재
- 같은 3개의 ed로 독립된 data를 가지고 있는 형태
- 메모리를 볼 때 사용자 view를 돕는 기법
- 한 프로그램 안에는 여러 구성 요소가 존재 (위에 있음)
- 구성 요소 하나 하나를 Segment라고 함
- 크기는 모두 다름 -> 하나의 단위로 묶어 연속적인 메모리를 할당해주되 그 안에선 서로 떨어져 있을 수 있음
- 각각의 segment가 연속적인 하나의 공간안에 존재하지만 떨어져 있는 것을 나타내는 그림
- 이러한 Segment구조를 메모리 상에서 관리해주어야 함
- Logical Addr는 [seg-number, offset] 형태로 구성
- 그리고 Segment Table 존재
- base - 어느 특정 Segment는 메모리 어디서부터 시작하는지 정보가 존재
- limit - Segment 크기
- Segment-Table이 어디있는지 찾아야 함 -> STBR(Segment-Table Base Register)
- Segment-Table이 몇 개의 Segment로 구성되어있는지 정보 -> STLR(Segment-Table Length Register)
- Segment-Number < STLR
- CPU에서 Logical Addr 발생 두 Part [Segment Number | displacement]
- Segment Table에서 알아내야 하는데 STBR에서 알 수 있음, 몇 개인지도 STLR로 알 수 있음
- 위 마지막 조건, Segment-Number < STRL 조건을 만족하지 않으면 trap : addrs error 발생
- 만족하면 Physical Memory 접근
- Segment 특성
- Relocation
- Segment Table에 의해 동적임
- Sharing
- 같은 Segment Number로 공유 가능
- Allocation
- First Fit or Best Fit
- External Fragmentation 존재 : 어느 프로세스가 요구하는 만큼이 한 공간에 이어져 존재하는 것이 아닌 흩어져 뿌려져서 존재, 그래서 받을 수 없는 상태
- Relocation
- Segment Table에 한 비트씩 추가해서 Valid 판별 가능
- 전용 모드 (read/write/execute) 가능
- 공유 단위도 Segment 단위
- Segment 크기는 모두 다름 -> Dynamic storage-allocation problem 발생 가능
- Segment 5개와 Table(limit, base) 나타냄
- editor는 공유, data는 private
- Table 값도 같으므로 공유 가능
- MULTICS : Segmentation과 Paging 방법을 엮은 것, 운영체제에서 사용
- 한 프로세스 내 여러 개 segment 존재, 크기가 page 단위보다 큼 -> 여러 개 segment를 다시 page 단위로 쪼갬
- 사용자는 여러 개 segment가 하나의 단위로 묶여 연속된 공간에 할당된 것으로 인식되겠지만, 사실은 segment가 page 단위로 쪼개져서 physical memory에 비어있는 Field를 묶어 요청하는 메모리 공간을 제공
- Logical Addr는 [Segment-number | displacement]로 존재
- STBR로 위치를 제공해주고 더해서 특정 위치로 찾아감 -> [segment length | page-table base]로 존재
- Segment length를 가져와서 displacement 값이 범위에 만족하는지 체크 (Segment Length > displacement)
- 만족하면 해당 displacement 값이 [p | d]로 분해
- page-table base값과 위에서 분해된 p값을 더하여 page table에서의 위치를 찾음
- Frame Number를 찾아 d'와 함께 physical addr로 변환
- 그래서 찾은 것이 3번 위치인데 이것이 Page형태로 5개로 나뉨
- 맨 위의 d값이 7123이고 frame 크기가 2k라고 하자
- 나눈 몫 : 3, 나머(d') : 979
- 따라서 오른쪽 page 그림에서 위에서 3번째는 몫에 해당하는 값이고 네 번째가 979값
- 사용자는 Segment가 이어진 하나의 공간에 존재한다고 인식하지만 사실은 Page로 나뉘어서 효율적으로 관리되고 있는 방식
728x90
반응형
'CS > OS' 카테고리의 다른 글
[OS] Process Synchronization(2) - 프로세스 동기화 (2) | 2023.06.15 |
---|---|
[OS] Process Synchronization(1) - 프로세스 동기화 (0) | 2023.06.14 |
[OS] Memory Management - 메모리 관리 (0) | 2023.05.27 |
[OS] Deadlocks (2) - 교착상태 (0) | 2023.05.16 |
[OS] Deadlocks (1) - 교착상태 (0) | 2023.05.09 |