운영체제 정리-11 메모리 시스템(1)

beenyyy·2023년 6월 21일

<메모리 시스템>

<Base Register & Limit Register>


Batch 모니터 시절

각 프로세스가 사용하는 공간을 명확히 알아야 함.
base-시작 주소
limit-마지막 레지스터 주소

Base ~ Limit의 범위 안에 주소 접근하는지 확인 필요

<하드웨어 주소 보호>


• CPU→메모리 주소 접근: 범위 내 접근만 허용
• 그 외 주소 접근: 트랩 같은 예외 발생시킴
• 좋은 방법X: 주소 영역을 실행 순간 바꿔줘야 함.

<Memory-Management Unit (MMU)>

• 논리적 주소를 물리적 주소로 매핑 시켜주는 하드웨어 기기
• 물리적 주소= (논리적 주소) + (base 레지스터 value)
• 메모리 요청 시 바로바로 수행 / 실행 시간 바인딩

<연속 할당 Contiguous Allocation>

• 한정된 자원, 효율적으로 메모리 할당해야 함.
• 초기 방법 중 하나이다.
• 메인 메모리가 보통 2가지 파티션으로 나뉨
① 운영체제를 위한 파티션
-일반적으로 인터럽트 벡터와 낮은 메모리에 보관됨.
② 사용자 프로세스를 위한 파티션
-사용자 프로세스는 높은 메모리에 보관됨.
-각 사용자 프로세스는 연속된 단일 영역을 할당받음.

[연속 할당 – 메모리 보호]

• 운영체제를 사용자 프로세스로부터 보호해야 하고, 사용자 프로세스를 다른 사용자 프로세스로부터 보호해야 함.
-이를 위해 base 레지스터, limit 레지스터를 사용함.
base register: 가장 작은 물리적 주소 값
limit register: 논리 주소 범위
• MMU는 논리 주소를 동적으로 매핑
(b <= a <= b+l)

[연속 할당 – Multiple-partition 메모리 할당]

• 파티션 수에 의해 결정되는 다중 프로그래밍 정도
• 효율성을 위한 가변 파티션 크기
• hole: 사용 가능한 메모리 블록
• 프로세스가 도착하면 충분히 큰 구멍에 메모리 할당됨.
• 종료되는 프로세스는 파티션 해제 및 인접 hole 결합
• 운영체제는 할당된 파티션, hole에 대한 정보 유지

[동적 스토리지 할당 문제] - free hole 할당 방법

First-fit / Best-fit / Worst-fit

[Fragmentation 단편화]

① External 단편화

  • 모든 홀을 합하면 프로세스를 수용할 수 있으나 연속 공간이 아니기 때문에 할당될 수 없는 현상
  • 해결 방법: compaction

② Internal 단편화

  • 할당된 메모리가 실행 프로세스보다 커서 프로그램의 사용 공간을 할당한 후 사용되지 않고 남는 영역 (그림의 20MB 영역)

• 50% 규칙:
최초 적합의 경우를 통계적으로 분석해보면, N개의 블록이 할당되었을 때 0.5N개의 블록이 단편화 때문에 손실될 수 있다. 이것은 기억장치의 3분이 1이 쓸 수 없게 될 수 있다는 것을 의미한다.

[외부 단편화 해결 – compaction 압축]

• 모든 free hole을 하나의 큰 블록에 함께 배치하기 위해 메모리 내용을 섞음.
• 압축은 재배치가 동적인 경우에만 가능 / 실행 시간에.
• load, store,... 계속 반복. 다른 작업 불가.
• I/O 문제: I/O에 관여하는 동안 메모리에 작업 latch.
-OS버퍼로만 I/O 수행.

<Swapping 스와핑>
• Swapping은 시스템의 실제 물리적인 메모리를 초과해 프로세스가 더 많은 논리적인 주소 공간을 갖게 하는 것을 가능하게.

• 메모리에 프로세스의 사용할 부분만 올리고 프로세스의 다른 부분과 교환해 메모리에 올려서 사용하는 것
• Backing store: 충분히 큰 고속 디스크 (디스크 안에)
• Roll out, roll in / Swap out, swap in:
-프로세스 전체를 메인 메모리에서 Backing Store로 내보내는 것 / 공간을 각각 미리 구비-뭐가 올지 몰라서
-프로세스를 Backing Store에서 메인 메모리로 올림
• 문제점: 프로세스를 메모리와 Backing Store 사이에서 교환하는 것은 비용이 너무 큼.
• 스왑 시간의 대부분은 전송 시간. / 전송 시간은 스왑되는 메모리 양에 정비례.

<연속 할당의 문제점>

• 프로세스당 하나의 세그먼트(파티션)이었음.
• 프로세스는 세그먼트의 모음
-세그먼트는 논리적 단위: 메인 프로그램 ,스택, 기능 등 메모리 공간을 여러 세그먼트로 나누는 방법 다양.
• 특징들이 다 다른데 이전 방식을 따로 통제할 수가 없어서 세그먼트 방식이 생겨남.

<Segmentation 세그먼테이션>

• 서로 다른 프로세스간 공유가 가능해짐
• read only, write only가 가능해짐
-protection bits 추가 사용
• 각 세그먼트마다 base, limit 레지스터를 따로 가짐
(별도 비용 발생o)
• logaldms 균등하게 나누고 physical은 균등하지 않을 수 있다.

[세그먼테이션 아키텍처] - 논리 주소 공간에서

• 각 세그먼트 구성: (segment-number, offset)
ex) 세그 4개로 나눌 때, 넘버는 상위 2bit
• physical 주소: base + offset
• 테이블 필요: 1. STBR, 2. STLR #base, length

profile
📚beenyyy의 개발공부

0개의 댓글