일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- design pattern
- 네트워크
- Algorithm
- mongoDB
- JPA
- spring webflux
- Java
- Data Structure
- Kafka
- 알고리즘
- 디자인 패턴
- 파이썬
- Proxy
- 자료구조
- 컴퓨터구조
- redis
- Heap
- 백준
- 자바
- IT
- MSA
- C
- c언어
- Galera Cluster
- MySQL
- JavaScript
- Spring
- OS
- 운영체제
- react
Archives
- Today
- Total
시냅스
페이징과 스와핑, Main Memory 본문
페이징과 스와핑
페이징 Paging
- 프로세스가 할당되는 물리 메모리를 frame(고정된 크기 block)으로 쪼갬
- frame(e.g. 4kb)을 logical memory(e.g. 4kb)와 맞춤 -> page
- logical memory 와 physical memory를 완전히 분리한다.
- Os가 Logical 과 Physical을 Mapping
- 물리주소 공간이 연속적이지 않도록 관리하는 체계
- 외부 단편화, 관련 압축 필요성 방지
- 대부분 o/s에서 사용 된다.
- cpu가 생성하는 논리주소는 Page number(p, 페이지 테이블 인덱스) + Page offset(d, 페이지 내 offset)로 이뤄져 있다.
- page size는 하드웨어에 따라 다르지만 반드시 2의 거듭제곱 꼴이다.
- 만약 logical address 2^m, page size 2^n 이라면 2^m-n = page number, 2^n = page offset이다.
- 외부 단편화는 없으나, 내부 단편화 존재
- 페이징은 메모리는 일정하게 같은 크기로 나눠 할당한 것이고
- 세그멘테이션은 메모리를 다른 크기의 논리적인 단위로 나누어서 할당하는 것이다
- 페이지 테이블
- 물리 메모리의 할당에 관한 정보, 어느 프레임이 할당되어 있고 사용가능한지 등, 시스템에 하나 밖에 없는 자료구조이다.
TLB
- 메인 메모리에 페이지 테이블을 저장하면 메모리 액세스 시간이 지연되고 원하는 페이지에 접근하기 위해 메모리 상의 페이지 테이블에 먼저 접근하고 그 다음에 메모리 상의 페이지에 접근해야하기 때문에 메모리에 2번 접근해야한다.
- Context switching이 일어날 때마다 Page 테이블이 바껴야 하는 비효율 개선
- 페이지 번호를 찾으면 프레임 번호를 즉시 사용, 메모리 엑세스
- 페이지 번호가 TLB에 없으면 페이지 테이블에 대한 메모리 참조를 새로 생성
- 1. cpu가 논리주소를 생성하면 MMU는 해당 페이지 번호가 TLB에 있는지 확인한다.
- 2. TLB에서 페이지 번호가 발견되면 프레임 번호를 알아내 메모리에 즉시 접근한다.
- 3. TLB에 페이지 번호가 없으면 페이지 테이블에 접근하여 프레임 번호를 알아내며 해당 페이지 번호와 테이블 번호는 TLB에 저장하여 다음번에는 빠르게 찾을 수 있도록 한다.
- 4. TLB가 다 차면 여러 교체 정책 중 하나를 선택하여 교체한다.
- 소형 하드웨어 캐시
- 성능을 위해 작게 유지해야 한다. (탐색 시간)
- TLB Hit : 메모리 주소가 TLB 안에 있어 바로 참조할 수 있을 때
- TLB Miss : TLB에 cache가 없을 때
- Hit ratio : Hit이 일어나는 비율
Shared pages
- 자기 코드가 변경될 일 없는 것들의 공통의 코드를 공유한다(e.g. libc)
보호 Protection
- 메모리 보호는 각 프레임과 관련된 보호 비트에 의해 수행
- 보호 비트 : 읽고 쓰기 또는 읽기 전용인지 정의
- 유효 비트 : 페이지에 접근하는 것이 합법적인지 검사
페이지 테이블의 구조
- 계층적 페이징
- 페이징의 크기가 커지는 경우 테이블을 나눠서 저장한다.
- 해시 페이지 테이블
- 주소 공간이 32비트 보다 커지면 해시 페이지 테이블을 사용한다.
- 해시 페이지 테이블의 각 항목은 연결 리스트를 가지고 있다.
- 해시값이 같은 원소들이 연결 리스트에 연결되게 된다.
- 각 원소는 세개의 필드를 가진다.
- 1. 페이지 번호
- 2. 페이지가 저장된 프레임 번호
- 3. 연결 리스트 상의 다음 포인터
- 페이지 번호를 받으면 해싱하고, 해싱한 값에 대한 항목을 찾는다.
- 해당 항목에서 연결 리스트를 따라가며 일치하는 페이지 번호를 찾는다.
- 페이지 번호에 대한 프레임 번호를 통해 물리 주소를 알아내고 접근한다.
- 64비트 시스템에서는 해시페이지 테이블의 항목이 여러 페이지를 가리키는 클러스터 페이지 테이블을 사용한다.
- 역 페이지 테이블
- 시스템 상에 하나만 존재하며 메모리 프레임마다 한 항목을 할당한다.
- 한 페이지 테이블에 여러 프로세스의 페이지를 표현하기 때문에 페이지 테이블의 각 항목은 어떤 프로세스의 페이지인지 표시해야 한다.
- 메모리 참조가 발생하면 역 페이지 테이블을 순차적으로 돌면서 pid와 페이지 번호가 일치하는 페이지가 있는지 확인한다.
- i 번째 항목에서 일치한다면 실제 메모리 상의 i 번째 프레임에 존재하는 것이다.
스와핑 Swapping
- 프로세스가 실행 중에 임시로 백업 저장장치로 보내졌다가 다시 돌아오는 것
- 필요한 것만 올린다.
- Swap-in : 메모리에 올리는 것
- swap-out : 메모리에서 빼는 거
- 하지만, page 단위로 이뤄지기 때문에 page-in, page-out 이라고 한다.
'운영체제' 카테고리의 다른 글
대용량 저장장치 구조, Mass-Storage Structure (0) | 2022.06.06 |
---|---|
가상 메모리, Virtual Memory (0) | 2022.05.24 |
주메모리의 관리 Main Memory (0) | 2022.05.20 |
교착상태, Deadlock (0) | 2022.05.15 |
뮤텍스 락, 세마포어, 모니터, 라이브니스, Mutex Locks, Semaphores, monitors, Liveness (0) | 2022.04.28 |
Comments