일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UActor
- 셰그먼트트리
- 비재귀셰그먼트
- command not found
- Security
- OS
- 언리얼 커스텀 플러그인
- 의미와 무의미의 경계에서
- C++
- 1253번
- 민겸수
- objtofbx
- 백준 1253번
- 1759번
- SQL
- Linux
- 데이터베이스 배움터
- 실습
- oracle
- 백준
- UnrealMP
- FBX
- 1967번
- 5639
- 2단계로킹
- 오손데이터읽기
- hackerank
- Unreal
- 트랜잭션 관리
- 언리얼 플러그인
- Today
- Total
fatalite
OS - Memory Management 본문
Memory
OS에서의 메모리 관리에 관해 서술한다.
우리는 프로그램이 바이너리화 되어, 저장 장치에 있다는 것을 알고 있다.
이제 프로그램이 메모리에 올라오면 프로세스가 된다.
프로세스는 각각 기준 레지스터와 상한 레지스터(기준 + offset)을 지니며,
프로세스끼리는 침범하지 않는다는 것을 기본으로 한다.
그렇다면 메모리에 프로세스를 어떻게 할당할까?
이 할당하는 시기에 따라 나뉘는데,
1. Compile time
2. Load time
3. Execute time 으로 나뉜다.
3. 실행 시간의 경우, 특별한 하드웨어가 필요하다.
논리 공간에서 생성된 주소는 MMU를 통해 계산되고 물리 메모리 주소로 바뀐다.
그리고 할당하는 방법에 따라 Contiguous하거나 non-contiguous 한 할당으로 나뉜다.
먼저 Contiguous한 할당이다.
여기서는 보통 가변 파티션을 사용한다.
프로세스의 데이터들이 연속적으로 되어있다.
그러나 프로세스가 나갔다 왔다하면서 홀(Hole)이 생긴다.
그래서 단편화가 일어나게 된다.
여기서 어떤 hole에 넣을지가 고민인데, 최초 적합, 최적 적합, 최악 적합으로 나뉜다.
여기서 최초 적합, 최적 적합은 비슷한 복잡도를 띄고, 최초 적합이 근사하게 낫다.
외부 단편화는 Compression으로 해결될 수 있는데, 시간이 많이 걸리는 단계다.
두번째로 Non-contiguous한 할당이다.
여기서 물리 메모리는 프레임이라는 같은 크기의 단위로 나뉘게 된다.
프로세스는 그래서, 물리적 메모리와 상관 없이 메모리를 사용할 수 있게된다.
그 방법은 프레임과 페이지라는 것을 매핑하는것이다.
페이지 테이블은, 각자 프로세스마다 소유하고 있으며 0,1,2,3... 이렇게 페이지 순서대로 보이지만
사실 임의의 물리적 위치로 매핑된다.
페이지 테이블은 주 메모리에 올라와 있다.
그래서 실질적인 데이터에 access하는 시간이 2배가 된다.
이로인해 TLB라는 레지스터를 사용하는데, 이는 프로세스 마다 flush된다. 즉 Context switch마다 말이다.
TLB로 인해 TLB hit가 되면 그 때의 접근 시간은 1배로 바뀐다.
TLB로 향상되는 접근 시간을 계산해보면
2a(1-t) + a(t)이다. TLB hit ratio가 높을 수록 빨라지게 된다. 보통의 히트율은 98% 이상이라고 알려져있다.
그 외에도 사실 페이지 테이블에는 valid bit가 존재한다. 이는 가상 메모리와 관련이 있다.
또한 레지스터에 페이지 테이블이 담겨있지 않기 때문에, 레지스터에는 이를 가르키는 포인터가 존재하게 된다.
page number + page offset = frame number + frame offset
다음은 프레임 기법의 구현이다.
1. 인덱스 프레임
프레임의 entry는 시스템 마다 다르며, 32비트 체계의 경우 엔트리의 개수가 2^32개가 된다.
이는 4MB에 해당하기 때문에 RAM에 이를 올리는 건 비효율적이다.
그래서 프레임 여러 개를 또 묶어서 인덱스를 둔다.
이러면 오히려 공간이 늘지 않나? 싶지만 가용되지 않은 페이지에는 null값을 두어 가용범위가 커진다.
2. 해쉬 프레임 기법
해쉬 기법을 사용한다. 하나의 페이지 테이블만 존재하여도 된다.
각각의 페이지에는 여러 개의 체인된 값이 들어갈 수 있다.
3. 역 프레임 기법
이는 페이지에 프레임을 매핑하는게 아니라, 프레임에 페이지를 매핑한다.
이를 위해서는 어느 프로세스가 이를 사용하는지 알고 있어야한다. PID가 담겨 있게 된다.
그러나 공유 메모리의 경우 사용할 수 없다.
'컴퓨터 공학 > Operating System 운영체제' 카테고리의 다른 글
Operating System - Mass Storage (0) | 2022.12.11 |
---|---|
OS - Security 보안 (0) | 2022.12.10 |
OS - File System (0) | 2022.12.10 |
OS - Virtual Memory (0) | 2022.12.07 |