

Batch 모니터 시절
각 프로세스가 사용하는 공간을 명확히 알아야 함.
base-시작 주소
limit-마지막 레지스터 주소
Base ~ Limit의 범위 안에 주소 접근하는지 확인 필요

• CPU→메모리 주소 접근: 범위 내 접근만 허용
• 그 외 주소 접근: 트랩 같은 예외 발생시킴
• 좋은 방법X: 주소 영역을 실행 순간 바꿔줘야 함.
• 논리적 주소를 물리적 주소로 매핑 시켜주는 하드웨어 기기
• 물리적 주소= (논리적 주소) + (base 레지스터 value)
• 메모리 요청 시 바로바로 수행 / 실행 시간 바인딩

• 한정된 자원, 효율적으로 메모리 할당해야 함.
• 초기 방법 중 하나이다.
• 메인 메모리가 보통 2가지 파티션으로 나뉨
① 운영체제를 위한 파티션
-일반적으로 인터럽트 벡터와 낮은 메모리에 보관됨.
② 사용자 프로세스를 위한 파티션
-사용자 프로세스는 높은 메모리에 보관됨.
-각 사용자 프로세스는 연속된 단일 영역을 할당받음.
• 운영체제를 사용자 프로세스로부터 보호해야 하고, 사용자 프로세스를 다른 사용자 프로세스로부터 보호해야 함.
-이를 위해 base 레지스터, limit 레지스터를 사용함.
base register: 가장 작은 물리적 주소 값
limit register: 논리 주소 범위
• MMU는 논리 주소를 동적으로 매핑
(b <= a <= b+l)

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

First-fit / Best-fit / Worst-fit
① External 단편화
② Internal 단편화

• 50% 규칙:
최초 적합의 경우를 통계적으로 분석해보면, N개의 블록이 할당되었을 때 0.5N개의 블록이 단편화 때문에 손실될 수 있다. 이것은 기억장치의 3분이 1이 쓸 수 없게 될 수 있다는 것을 의미한다.
• 모든 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 사이에서 교환하는 것은 비용이 너무 큼.
• 스왑 시간의 대부분은 전송 시간. / 전송 시간은 스왑되는 메모리 양에 정비례.
• 프로세스당 하나의 세그먼트(파티션)이었음.
• 프로세스는 세그먼트의 모음
-세그먼트는 논리적 단위: 메인 프로그램 ,스택, 기능 등 메모리 공간을 여러 세그먼트로 나누는 방법 다양.
• 특징들이 다 다른데 이전 방식을 따로 통제할 수가 없어서 세그먼트 방식이 생겨남.
• 서로 다른 프로세스간 공유가 가능해짐
• 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