All
프로세스와 메모리
프로세스의 동작 - 프로그램 카운터(PC)를 참조해 수행될 명령을 메모리에서 읽어 CPU로 수행하는것
기억장치 계층구조
종류 | 특징 |
CPU 레지스터 | 가장 빠름 / 매우 비쌈 / 용량 가장 적음 |
캐시 메모리 | CPU와 메모리 속도 차이를 줄이기 위한 고속 저장소 |
주기억 장치 (메인 메모리, RAM) | 비교적 빠름 / 상대적으로 저렴 / 용량 중간 |
보조 기억장치 (디스크, SSD, HDD 등) | 느림 / 매우 저렴 / 대용량 저장 가능 |
메모리 관리
•
메모리 호출: 새로운 프로세스를 언제 메모리에 적재할지 결정
•
메모리 배치: 프로세스를 메모리 어느 위치에 둘지 결정
•
메모리 교체: 메모리가 가득 찼을 때 어떤 프로세스를 제거할지 결정
단일 프로그래밍 환경
•
하나의 프로세스만 메모리를 전용으로 사용
•
연속 메모리 할당 - 하나의 연속된 블록에 프로세스 적재
문제점
•
메모리의 용량을 초과하는 프로세스는 실행 못함
•
메모리 낭비 심함 - 지속적으로 사용되지 않는 프로세스도 메모리에 계속 적재
•
주변장치 등 자원의 낭비 심함 (계산 위주, 입출력 위주의 프로세스)
다중 프로그래밍 환경
•
여러개의 프로세스를 메모리에 동시에 적재
•
CPU 연산과 입출력을 동시에 함으로써 CPU용도와 시스템 처리량 증가
메모리 분할
•
여러 프로세스 적재를 위한 메모리 분할
•
하나의 분할에 하나의 프로세스 적재
고정 분할
•
메모리를 여러개의 고정된 크기의 영역으로 분할
•
프로세스 배치 방법 1
◦
분할 영역마다 큐를 두고 큐에 들어온 프로세스는 해당 분할영역에만 적재
◦
절대 번역 및 적재 (메모리 주소 고정)
◦
낮은 효율성
•
프로세스 배치 방법 2
◦
하나의 큐만 두고 프로세스를 어느 분할영역에든 적재
◦
재배치 가능 번역 및 적재
◦
높은 복잡도
내부 단편화
•
고정분할의 문제점
•
프로세스의 크기가 적재된 분할영역의 크기보다 작아서 분할영역 내에 남게되는 메모리 발생
•
수행할 프로세스의 크기를 미리 알고 고정 분할해줘야 하지만 현실적이지 못함
동적 분할
•
가변 크기의 메모리 영역 분할
•
각 프로세스에 필요한 만큼의 메모리만 할당
외부 단편화
•
동적 분할의 문제점
•
메모리의 할당과 반환이 반복됨에 따라 작은 크기의 공백이 메모리 공간에 흩어져 생김
•
해결방법
◦
통합: 인접한 공백을 하나로 합치기
◦
집약: 모든 공백을 모아 하나로 만들기
메모리 보호
•
프로세스 간 메모리 침범 방지
•
하한-상한 또는 하한-크기 레지스터 쌍으로 제한
•
이 제한 넘어 운영체제 호출하려면 시스템 콜 이용
메모리 배치기법
•
동적 분할 다중 프로그래밍에서 새로 반입된 프로그램이나 데이터를 어느 위치 메모리에 할당 할 것인지
종류 | 설명 |
최초 적합(First Fit) | 첫 번째로 발견된 빈 공간에 프로세스 적재 |
후속 적합(Next Fit) | 이전 탐색 위치 다음부터 탐색하여 빈 공간에 적재 |
최적 적합(Best Fit) | 가장 작은 충분한 빈 공간 선택 큰 빈 공간을 최대한 보존 |
최악 적합(Worst Fit) | 가장 큰 빈 공간 선택 작은 자투리 공간 최소화 |
가상 메모리
•
물리 메모리보다 큰 주소 공간을 제공하는 기술
•
보조 기억 장치를 확장된 메모리처럼 사용하는 방식
•
프로그램 전체를 메모리에 올리지 않고 필요한 부분만 적재하여 실행 가능
사상(Mapping)
•
프로세스 실행을 위해 가상주소를 실주소로 변환하는 과정
•
동적 주소변환(DAT): 프로세스 실행 중 실시간으로 주소 변환 수행
•
인위적 연속성: 가상주소는 연속되지만, 실제주소는 연속될 필요 없음
블록단위 주소변환
•
블록 단위로 주소변환
•
가상 메모리의 각 블록이 메모리의 어디에 위치하는지 관리
•
가상 주소 v = (b, d)
◦
b: 블록 번호
◦
d: 블록의 시작점으로부터의 변위(offset)
◦
주소변환 사상표
•
동적 주소변환을 위한 정보를 가진 표
•
바이트나 워드 단위는 변환에 필요한 정보량이 너무 많아 비효율적임
블록 크기 결정
블록 크기 증가 | 사상표 크기 감소, 블록 전송 시간 증가, 동시에 적재 가능한 프로세스 수 감소 |
블록 크기 감소 | 사상표 크기 증가, 블록 전송 시간 감소, 동시에 적재 가능한 프로세스 수 증가 |
블록 구성방식
•
페이지(Page): 고정 크기 블록
•
세그먼트(Segment): 가변 크기 블록
페이징 기법 (Paging)
•
가상 메모리를 고정 크기 페이지로 분할
•
물리 메모리도 동일 크기의 페이지 프레임으로 분할
•
가상 주소를 페이지 번호와 오프셋으로 구분
•
페이지 사상표를 이용해 동적 주소 변환
페이지 사상표(Page Table)
•
페이지 번호 → 페이지 프레임 번호 매핑
•
페이지 항목 구성
◦
페이지 존재 비트
◦
보조 기억 장치 주소
◦
페이지 프레임 번호
동적 주소 변환 방법
•
직접 사상
◦
페이지 번호를 페이지 테이블에서 직접 조회해 물리 주소 변환
◦
매번 메모리에 접근해야 하므로 속도 느림
◦
구조 단순, 구현 쉬움
◦
예시
▪
가상주소 v = (3, 8), 페이지 크기 M = 1024
▪
실주소 r = 5M + 8 = 5128
•
연관 사상
◦
연관 메모리(TLB) 에서 페이지 번호를 병렬 검색해 바로 변환
◦
메모리 접근 없이 고속 변환 가능, 속도 매우 빠름
◦
TLB 크기 제한으로 일부 페이지만 저장 가능
•
연관/직접 혼용 사상
◦
먼저 TLB에서 빠르게 검색, 실패 시 페이지 테이블에서 조회
◦
자주 쓰는 페이지만 TLB에 캐싱하여 속도 향상
◦
현실 CPU가 사용하는 일반적인 방식
페이징 기법의 특징
•
논리적 의미와 무관한 동일 크기 페이지로 나눔
•
메모리 보호는 페이지 단위로 이루어짐
•
외부단편화 없음
•
내부 단편화 발생 가능
세그멘테이션 기법
•
가상 메모리를 논리적 단위(세그먼트)로 분할
•
세그먼트마다 크기가 다를 수 있음
•
세그먼트 사상표를 이용해 동적 주소 변환
세그먼트 사상표(Segment Table)
•
세그먼트 번호 → 세그먼트 시작주소 저장
•
항목 구성
◦
세그먼트 존재 비트
◦
보조 기억 장치 주소
◦
세그먼트 길이(오버플로 확인용)
◦
세그먼트 시작주소
페이징/세그먼테이션 혼용기법
•
세그멘테이션 기법의 논리적 장점 + 페이징 기법의 메모리 관리 장점 결합
•
가상 메모리를 세그먼트 단위로 분할 후 각 세그먼트를 페이지 단위로 추가 분할
•
메모리는 페이지 프레임으로 분할
•
가상 주소 v=(s, p, d)
◦
s: 세그먼트 번호
◦
p: 페이지 번호
◦
d: 페이지 내 변위
•
세그먼트 테이블 > 페이지 테이블 > 메모리 주소
메모리 호출 기법
어느 시점에 페이지 또는 세그먼트를 메모리에 적재할 것지 결정하는 기법
요구 페이지 호출 기법
•
프로세스가 필요한 페이지를 요청할 때 메모리에 적재
•
페이지 폴트 발생
•
불필요한 페이지 적재 최소화
•
프로세스 시작 시 다수의 페이지 폴트 발생 가능
예상 페이지 호출 기법
•
곧 필요할 것으로 예상되는 페이지를 사전에 메모리에 적재
•
예상이 잘못된 경우 시간과 메모리 공간 낭비
•
프로세스 시작 시점에 적용하면 성능이 개선







