8.1 가상메모리
프로그램을 작은 조각으로 나누어 적재한다.
사실은 제한적인 크기지만 큰 메모리가 있는 것처럼 여겨지게 한다.
가상메모리의 관리 : 한 번에 전송되는 단위(블록)
페이징 | 세그멘테이션 시스템 |
조각의 크기가 같음 (페이지) | 조각의 크기가 다름 (세그먼트) |
주소의 사상(mapping) : 가상 주소를 실 주소로 변환해주는 작업
- 가상주소: 프로그램에서 참조하는 주소
- 실제주소: 메모리상 주소
주소 사용
- 주소의 지정 컴파일 시에 일어남: 프로그램이 실행될 때 참조하는 주소가 컴파일 시 지정
- 참조 주소 = 실 주소
- 프로그램은 항상 메모리의 지정된 곳으로 적재(고정분할, 절대로더)
- 재배치: 메모리에서의 위치를 적재될 때마다 바꿈
- 프로그램이 통째로 연속적으로 메모리에 적재
- 프로그램의 첫 번째 줄을 0, 나머지는 첫 번째 줄과 거리(Offset or Distance)로 지정
- 상대 주소: 떨어진 offset
- 실 주소: 메모리 적재될 때 시작 주소(재배치 레지스터가 갖고 있음)
- 주소 변환 : 재배치 레지스터 값 + 상대 주소
- 가상메모리: 메모리에 비연속적으로 다른 프로그램의 조각과 섞여 적재
- 메모리에 적재되어있는 프로그램 다중 프로그래밍의 정도에 포함
- 가상주소: 참조하고자 하는 명령어나 변수가 어느 위치(offset)에 있는지 알려준다
- ex) <3,5>는 3번째 조각 5번째 위치
8.2 페이징(paging)
페이지 | 프레임 |
같은 크기의 프로세스 조각, 주로 2의 승수배 크기 | 같은 크기의 메모리 조각, 일련번호 |
페이지 사상 테이블(map table)
가상주소를 실 주소로 변환하기 위해 프로세스당 하나의 페이지 테이블을 만드는 것
메모리의 커널 영역에 보관
페이지 테이블 기준 레지스터(page table origin register)
- 실행 중인 프로세스의 페이지 테이블 시작 주소
엔트리 : 페이지당 하나씩 존재→ (k개의 페이지는 k개의 엔트리)
- 존재(residence) 비트: 메모리에 적재되어 있는가 아닌가
(메모리에 적재되어있지 않을 경우에 디스크에 있음)
- 1: 적재되어있는 프레임의 번호
- 0: 디스크의 주소를 나타내는 필드
- 디스크로부터 페이지를 메모리에 적재해야 함
- 존재 비트를 1로 바꾸고 프레임 번호 기입 후 mapping 진행
📌 페이징의 사상
가상 주소: p(page), d(위치)
실 주소 : frame number X page_size + d
frame number = α(시작 주소) + p
(word_size == entry_size)
+) 보류 상태의 프로세스 테이블은 디스크, 메모리에 있는 테이블은 다중 프로그래밍의 정도에 포함
+) 두 번 메모리 접근( 페이지 테이블 접근, 실 주소 접근)의 시간을 줄이는 것이 가상메모리에 중요
TLB(Translation Lookaside Buffer)
- key값으로 찾고자 하는 워드를 동시에 접근하는 연관 메모리(Associative Memory)
- 검색이 빠르고 비싼 하드웨어
최근 빈번하게 검색된 엔트리들을 TLB에 넣으며, 페이지 번호 P값을 key로 검색
- 엔트리가 있을 경우: 엔트리에 적혀있는 프레임 번호로 실 주소를 찾는다
- 검색된 엔트리들의 페이지는 모두 메모리에 있음(존재비트 필요X)
- 엔트리 검색 실패: page fault
엔트리의 검색 성공 확률 (hit ratio)
페이지의 보호와 공유
보호 : 엔트리에 보호 비트(protection bits)를 두어 허용되는 접근 설정
- 1: 페이지 쓰기 허용
- 0: Trap발생 (보호에 위반)
- offset > page_size → 다른 페이지를 침범하므로 trap발생
공유: 재진입코드(Reentrant, Pure code)로 컴파일되어있다(실행 도중 변경되면 X)
- 각 프로세스의 페이지 테이블의 엔트리에 같은 프레임 번호를 가지도록 함
- mapping을 통해 같은 프레임에 접근 → 프레임 내용 공유
페이지
- 코드페이지(명령어페이지) - 가상주소를 참조
- 공유하려면 가상주소를 참조해야 함
- 데이터페이지 - X
페이징에서 사상 테이블의 구성(저장용량을 아끼는 방법)
2단계 페이징
계층구조 2의 10승개의 엔트리
역 테이블 페이징
시스템 전체에 고정 크기의 페이지 테이블 하나만 둔다
역페이지 테이블은 메모리의 프레임 수만큼 엔트리를 가진다
페이징의 장점과 단점
- 장점 : 고정 크기의 페이지로 메모리를 관리 → 구현이 쉽다
- 단점 : 마지막 페이지의 내부 단편화(평균적으로 페이지 크기의 반)
8.3 세그멘테이션(Segmentation)
논리적인 단위별로 프로그램의 조각을 다른 크기로 자름
TLB 사용 못함
세그먼트 테이블 엔트리
- 존재비트 - 실주소(메모리 주소 필드)
- 세그먼트 길이 필드
- 접근제어키
세그먼테이션의 사상(mapping)
- 메모리 적재는 배치기법 홀 생길 수 있음
세그먼트의 보호와 공유
보호
공유
페이징 할 때와 같이 엔트리에서 같은 주소 값을 가지게 함
장점은 보호와 공유와 논리적 단위
8.4 페이징을 사용하는 세그멘테이션
프로그램을 세그먼트로 나누고, 각 세그먼트는 페이지로 나눈다.
세그먼트는 각각의 여러 페이지로 이루어짐
메모리는 페이지와 같은 크기의 프레임
세그먼트 테이블의 엔트리 개수 = 페이지 테이블
세그먼트 테이블의 각 엔트리는 나누어진 자신의 페이지들을 위한 페이지 테이블의 시작주소를 가리킴
세그먼테이션/페이징의 사상(mapping)
'CS > 운영체제' 카테고리의 다른 글
Chapter 11: 디스크와 스케줄링 (0) | 2022.05.23 |
---|---|
Chapter 9: 가상 메모리의 관리 (0) | 2022.05.11 |
Chapter 7: 메모리 관리 (0) | 2022.05.09 |
Chapter 6: 교착 상태(Dead Lock) (0) | 2022.05.05 |
Chapter 5: 병행 프로세스와 동기화 (0) | 2022.05.03 |