초기 시스템
- 메모리 관점에서 많은 것을 지원하지 않았음
- 초기 운영체제는 메모리에 상주하는 루틴(실제로는 라이브러리)의 집합
- 물리 메모리에 하나의 실행중인 프로세스 존재, 나머지 메모리를 사용
- 가상화 존재하지 않았음
멀티프로그래밍과 시분할
- 시간이 흐른 후 컴퓨터를 더 효과적으로 사용하기 시작하며 멀티프로그래밍(Multi-programming) 시대 도래
- 여러 프로세스가 실행 준비 상태이고, 운영체제가 돌아가면서 실행 → CPU 이용률 증가
- 컴퓨터를 더 많이 사용하기 원해서 시분할(Time Sharing) 시대가 시작
→ 일괄 처리 방식 컴퓨터에 한계를 인식
→ 대화식 이용(interactivity)의 개념이 중요해짐
기본적인 시분할 시스템 구현
- 짧은 시간동안 하나의 프로세스를 실행, 실행중에는 메모리 접근 권한 가짐
→ 프로세스를 중단하고, 중단 시점의 상태를 디스크에 저장
→ 다른 프로세스 선택 후 실행
- 단점: 메모리의 전체 내용을 디스크에 저장하는게 너무 느림
- 프로세스 전환시 프로세스를 메모리에 그대로 유지하면서 시분할 효율적으로 할 수 있게 구현해야함
Adress space (주소 공간)
- 사용하기 쉬운 메모리 개념
- 여러 프로그램이 메모리에 존재하면서 다른 프로세스의 메모리를 읽거나 쓰는 상황을 보호(protection)해야함. 이를 위해 생긴 개념
- 실행 중인 프로그램이 가정하는 메모리의 모습 → 메모리 가상화
- 실행 프로그램의 모든 메모리 상태 가지고 있음. ex) code, stack, heap
- 운영체제가 실행중인 프로그램에게 제공하는 개념(Abstraction)
VM의 Goal
- 투명성
- 실행중인 프로그램이 가상 메모리의 존재를 인지하지 못하도록 가상 메모리 구현해야함
- 오히려 프로그램은 자신이 전용 물리 메모리를 소유한 것처럼 행동해야함
- 효율성
- 가상화가 시간과 공간 측면에서 효율적으로 해야함
- 너무 느리지 않고, 너무 많은 메모리를 사용하면 안됨
- 보호
- 프로세스를 다른 프로세스로부터 보호하고, 운영체제 자신도 보호
- 자신의 주소 공간 밖의 어느 것도 접근할 수 있으면 안됨
- 프로세스를 고립할 수 있어야함
- 프로세스를 다른 프로세스로부터 보호하고, 운영체제 자신도 보호
물리 메모리 관리의 이슈
- Placement (배치)
- 디스크에서 가져온 것을 메모리 어디에 배치할 것인가
- Protection (보호)
- 프로세스가 메모리 침범하지 않게 보호
- Replacement (재배치)
- 잠시 디스크로 옮겨진 프로세스가 주기억장치로 스왑인 되었을 때 기존과 같은 주소를 할당받을 수 있다는 보장이 없다. 이런 경우 프로세스를 적절한 위치에 재배치
- on-demand-loading (요구시 반입)
- 필요할 때 메모리 올림
메모리 관리 기법
고정 분할 다중 프로그래밍
- 절대 번역: 지정된 분할 영역에서만 실행
- 재배치 번역: 모든 작업을 하나의 큐에 넣어, 어느 분할에서든지 실행 가능
- 내부 단편화 발생
- 칸이 50인데 30짜리 프로세스를 넣으면 20 빔
가변 분할 다중 프로그래밍
- 프로세스가 생길때마다 메모리 크기를 계산해서 정확하게 그 크기만큼 분할하여 배치
- 외부 단편화 발생
- 100짜리를 넣어야하는데 50 짜리 두개 남아있으면 못넣음
- 집약 (compaction)을 해서 프로세스들 재배치해서 자리를 만들어줌
- 100짜리를 넣어야하는데 50 짜리 두개 남아있으면 못넣음
- 재배치 문제
- First Fit
- 가장 처음 맞는거에 넣음
- Best Fit
- 가장 딱 맞는거에 넣음
- Worst Fit
- 가장 사이즈 차이 많이 남는 곳에 넣음
- 프로세스 넣어도 남는 자리가 커서 best fit만큼 효과적
- Next fit
- 포인터로 보던 곳 관리하면서 다음꺼 봄, First Fit 사용
- First Fit
가상 메모리
물리 메모리가 계속 커져도, task들 넣을때 경계들을 보호해야하는 문제를 해결하지 못해서 사용
- 페이지 시스템
하나의 프로세스에서 특정 시간 동안 쓰는 메모리 영역은 4GB 중 아주 일부분이기 때문에 일부분만 실제 물리 메모리에 올려놓고 쓰자는 것이 가상 메모리의 컨셉 → 그 올리는 단위가 page
- virtual memory에선 page, disk에선 disk block, physical memory에선 page frame으로 불림, 보통 크기 다 동일
Address transition
pysical address = virtual address + base
- base는 MMU(memory management unit)에서 지원
Paging
- page
- 프로세스의 주소 공간을 고정 크기의 단위로 나눈 것
- page frame
- page에 상응하는 물리메모리를 고정 크기의 단위로 나눈것
- paging
- 외부단편화로 인한 메모리 낭비는 없애고, 내부단편화로 인한 낭비(이것을 줄이기 위해 페이지 크기 줄임)만이 존재하는데 이를 각 프로세스의 마지막 페이지에서만 발생하는 기법을 사용
- 페이지 테이블
- OS는 각 프로세스마다 하나의 페이지 테이블을 유지
- 각 프로세스의 각 페이지들에게 해당하는 페이지 프레임 위치 관리
큰 페이지 테이블 문제 해결 방법
- n단계 페이지 테이블
- 역페이지 테이블
- 가상 주소중 페이지 번호 부분은 간단한 hash함수를 통해 매핑
- TLB(Translation Lookaside buffer) Lookahead 사용
- 큰 테이블 문제 해결보단 속도를 증가 시키는 방법
- 페이지 테이블 항목들을 위한 고속 캐시 이용
Segmentation
- 스택과 힙 사이의 공간은 사용되지 않는데 물리 메모리를 차지하는 문제를 해결하기 위해 등장
- 주소공간을 code, stack, heap 세그먼트로 나눔
Uploaded by N2T