메모리 관리의 복잡성
일괄처리 시스템은 한번에 하나의 프로그램만 실행-> 단순
시분할 시스템에서는 모든 응용프로그램이 메모리에 올라와 실행-> 복잡
메모리 관리의 이중성
프로세스 -> 메모리를 독점하려고함
메모리 관리자 -> 관리를 효율적으로 하고 싶음
컴파일러 vs 인터프리터
자바-컴파일러, 자바스크립트-인터프리터
메모리 관리를 담당하는 하드웨어
작업: 가져오기(메모리로), 배치(메모리의 어디에), 재배치(메모리가 꽉 찼을 때 오래된 프로세스 내보내기)
정책: 가져오기 정책(언제), 배치 정책, 재배치 정책(어떤 프로세스를 내보내)
한 번에 처리할 수 있는 메모리 비트
물리 주소 공간: 하드웨어 입장에서 본 주소 공간. 컴퓨터마다 크기가 다름
논리 주소 공간: 사용자 입장에서 본 주소 공간(사용자 메모리 시작되는 주소를 0번지)
단순 메모리 구조
한번에 한가지 일만 처리(일괄처리 시스템)
사용자 프로세스, 운영체제 영역을 피해서 메모리에 적재
-> 사용자 프로세스를 메모리의 최상위부터 사용
-> 메모리를 거꾸로 사용하기 위해 주소를 변경하는 일이 복잡함(잘 안쓰임)
경계 레지스터
운영체제 영역 / 사용자 영역 경계지점의 주소를 가진 레지스터
절대주소: 실제 물리 주소(물리 주소 공간)
상대주소: 사용자 영역이 시작되는 번지를 0번지로(논리 주소 공간)
메모리 접근 시: 상대주소 + 재배치 레지스터 -> 절대 주소
재배치 레지스터(사용자 영역의 시작 주소값)
프로그램 크기 > 물리 메모리 크기 -> 적당한 크기로 잘라서 가져오는 기법
메모리에 올라가지 못한 프로세스를 모아두는 영역
저장장치는 장소만 빌려주고 메모리 관리자가 관리
사용자 인식 -> 전체 메모리 = 실제 메모리 크기 + 스왑 영역 크기
(시분할 시스템 때문에)
가변 분할 방식
메모리를 프로세스의 크기에 따라 나눔
연속 메모리 할당
장점: 연속된 공간 배치
단점: 비어있는 공간을 합쳐야함.(프로세스의 자리 옮겨야 -> 메모리 관리 복잡)
고정 분할 방식
메모리를 같은 크기로 나눔
비연속 메모리 할당(큰 프로세스 -> 여러 조각으로 배치)
장점: 메모리 관리 수월(메모리 통합 필요X)
단점: 메모리 낭비 발생
외부 단편화
프로세스가 종료되어 생기는 빈 공간
해결법
1. 메모리 배치 방식
결과적으로 외부 단편화가 생겨 조각 모음을 해야함
2. 조각 모음: 빈 칸이 생겼을 때 모아줌
이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 모아줌
1) 프로세스의 동작을 멈춤
2) 프로세스 적당한 위치로
3) 프로세스 재시작
내부 단편화
각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상
메모리를 반으로 나눠 가장 어울리는 메모리에 프로세스 배치
각 구역에는 1개 프로세스
프로세스 종료 -> 주변의 빈조각과 합침
특징
1. 가변분할 방식처럼 메모리가 프로세스 크기대로 나뉨
2. 고정분할 방식처럼 한 구역에 한 프로세스, 내부단편화 발생
3. 비슷한 크기의 조각이 서로 모여 큰 조각을 만들기 쉬움