모든 프로그래머가 원하는 메모리는?
크고, 빠르며, 자신이 혼자 사용할 수 있는 비휘발성(nonvolatile) 메모리
메모리 계층 구조(momory hierarchy)
캐시 메모리, 메인 메모리, 디스크 스토리지 등의 서로 다른 특성을 갖는 메모리들을 층 구조로 구성하는 것
캐시- megabyte, 빠르고 휘발성이며 가격이 비싸다.
메인메모리- gigabyte, 중간 속도이고 휘발성이며 중간 정도의 가격을 가진다.
디스크 스토리지- terabyte, 느리고 비휘발성이며 가격이 싸다. (DVD, USB 등의 모바일 스토리지도 포함됨)
메모리 관리자(memory manager)가 메모리 계층 구조 관리를 담당함
-현재 사용 중인 메모리 부분을 파악하고, 프로세스들이 메모리를 필요로 하면 할당해 주고, 더 이상 사용하지 않으면 해제하는 작업을 실행
#메모리 추상화가 없는 컴퓨터
Monoprogramming without Swapping or Paging
운영체제와 하나의 사용자 프로세스를 메모리에 배치하는 3가지 방법
(a)초기 메인 프레임, 미니 컴퓨터 (b)임베디드 시스템, 포켓용 컴퓨터 (c)초기 개인용 컴퓨터
Multiprogramming with Fixed Partitions
(a)다중 입력 대기열(Multiple Input Queues)
메모리를 여러 개의 고정된 파티션으로 나누었으며, 각 파티션마다 별도의 입력 대기열이 존재
프로그램은 자신이 필요로 하는 파티션 크기에 맞는 대기열에 들어가서 해당 파티션이 비면 로드됨
→ 특정 파티션이 비어도 해당 파티션 대기열에 프로그램이 없으면 실행하지 못하는 단점이 있음
ex) Partition 3이 비어있지만, 해당 대기열에 프로그램이 없어 비어 있는 상태로 유지됨
(b)단일 입력 대기열(Single Input Queue)
모든 파티션이 하나의 공통 입력 대기열을 공유
프로그램이 실행 대기 상태에 들어가면 가장 먼저 사용 가능한 파티션에 로드됨
→파티션을 효율적으로 사용하지만, 대기열이 길어질수록 특정 프로그램의 로드가 지연됨
#메모리 추상화: 주소 공간
Relocation and Protection
여러 프로그램들을 동시에 메모리에 적재하고 서로 간섭 없이 실행하기 위한 방법
-Relocation(재배치)
프로그램의 메모리 주소를 동적으로 조정하며 적절한 주소로 변경하는 작업을 말함
프로그램이 메모리의 어느 위치에 로드될지 확실하지 않은 상황이기 때문에, 변수의 코드의 주소 위치가 절대적일 수 없다.
-Protection(보호)
프로그램이 다른 프로세스의 파티션에 접근하지 못하도록 하는 것
메모리 공간마다 보호 키를 연결하고 프로세스가 메모리를 접근할 때 키를 비교하는 방법으로 보호를 제공함
Solution)
- 프로그램을 로드하는 동안 주소 정보를 수정(Linker가 재배치 필요한 주소를 알려주고 Protection 코드를 추가하여 보호)
- Base and Limit Register 사용 (Base register는 프로그램이 시작할 메모리 주소, Limit register는 파티션의 크기를 나타냄)
→단점: 모든 메모리 참조마다 덧셈과 비교 연산이 요구됨
Memory Management
1. Swapping(스와핑)
프로세스를 메모리에 한 번에 전부 로드하여 실행하고, 더 이상 실행되지 않을 경우에 디스크로 다시 돌려보내는 방식
현재 실행되고 있지 않은 프로세스는 메모리를 차지하지 않고 디스크에 존재하게 됨
memory compaction
스와핑 결과 메모리에 여러 개의 분리된 빈 공간들이 만들어지며 프로세스들의 위치를 이동하여 빈 공간들을 모아 하나의 큰 공간으로 합침
-프로세스의 크기가 실행 중에 증가할 것으로 예상된다면 프로세스가 생성되거나 스왑 인 될 때 여분의 빈 공간을 더 할당해주는 것도 좋은 방법
2. Virtual Memory(가상 메모리)
프로그램이 메모리의 일부만 메모리에 올려도 실행이 가능하도록 해줌
→큰 프로그램도 작은 물리적 메모리에서 실행 가능하며, 메모리의 효율적인 사용이 가능
3. Meomory Mangement with Bit Maps
메모리를 여러 개의 할당 단위로 나누어 관리하는 받법
(0: 할당 단위가 가용, 1: 이미 사용중임)
(빗금친 부분이 가용공간)
비트맵 크기는 메모리 크기와 할당 단위의 크기에 의해 결정됨
-할당 단위의 크기가 작아지면 비트맵 공간이 커짐
-할당 단위가 커지면 비트맵의 공간이 작아짐 → 마지막 할당 단위의 일부 공간이 낭비됨
→ 프로세스가 k개의 할당 단위를 요구한 경우, 메모리 관리자가 비트맵에서 연속적인 k개의 0비트를 찾아야함. 많은 시간 소요
4. Memory Mangement with Linked List
할당된 메모리 공간과 가용한 메모리 공간을 연결리스트로 관리하는 방법
(H: 빈 공간, P: 프로세스의 내용, 시작하는 주소, 길이, 다음 엔트리를 가리키는 포인터 로 구성)
종료되는 프로세스는 일반적으로 2개의 이웃을 가짐, 이웃은 다른 프로세스가 차지한 공간이거나 빈 공간
새로 생성되는 프로세스를 위한 메모리 공간을 할당할 때 알고리즘
•최초적합(first fit)
리스트를 순서대로 검색하며 요청한 공간을 담을 수 있는 크기의 빈 공간이 발견되면 그 공간에 할당
→ 검색을 최소한으로 하며 빠른 할당 가능
•다음적합(next fit)
최초적합과 유사하게 동작
단 자신이 빈 공간을 할당해주었을 때 그 위치를 기억해두고, 새로운 할당을 위해 다시 호출되면 기억해두었던 위치부터 검색을 시작
•최적적합(best fit)
리스트의 처음부터 끝까지 모든 엔트리들을 검색하여 요청한 크기에 가장 최적으로 만족할 수 있는 빈 공간을 할당
•최악적합(worst fit)
항상 가장 큰 빈 공간을 할당
가상 메모리
문제점: 메모리의 크기가 증가하는 것보다 더 빠르게 소프트웨어의 크기가 증가함
Solution)
- overlay(오버레이): 작은 조각들로 나누어 실행하는 방법
- virtual address(가상 메모리): Paging 기법 이용
Paging
프로그램이 참조하는 주소는 가상 주소라고 불리며, 가상 주소 공간을 형성함
-가상 메모리를 사용하지 않는 컴퓨터에서는 가상 주소가 그대로 메모리 버스에 실리며 물리 주소(physical address)를 이용
-가상 메모리를 사용하는 시스템에서는 가상주소가 MMU에 의해 물리 주소로 매핑됨
-MMU(Memory Management Unit)
가상 주소 공간은 고정된 크기의 단위들로 구분되어 있으며 이 단위를 페이지 라고 부름
반면, 물리 메모리 상에 대응되는 단위는 페이지 프레임이라고 부름
페이지의 크기=페이지 프레임의 크기
-페이지 테이블: 가상 주소와 물리 주소 간의 관계를 표현
Page fault(페이지 부재)
보통 virtual page> physical page이므로 mapping 안 된 곳이 있음 → CPU 에게 트랩을 발생시켜 운영체제에게 이것을 알림 → 참조하려는 페이지의 내용을 페이지 프레임에 적재하고, 맵을 수정한 후, 트랩을 야기한 명령을 다시 실행
Page Tables
가상 주소를 물리 주소로 매핑하는 과정
- 가상 주소를 페이지 번호(상위 4비트)와 오프셋(하위 12비트)로 구분
- 페이지 번호를 인덱스로 이용해 페이지 테이블에서 가상 주소에 대응되는 엔트리를 찾음
- 가상 주소에서 페이지 번호가 차지하던 부분을 프레임 번호로 대치하면 물리 주소가 됨
two issues
- 페이지 테이블이 매우 커질 수 있음
- 매핑이 매우 빨라야함
Solution)
1. Single page table
빠른 매핑을 위해 하드웨어 레지스터에 페이지 테이블을 저장
→메모리 참조가 필요없어서 빠른 매핑 가능
→각 context switch마다 전체 페이지 테이블을 다시 로드해야 해서 비용이 많이 듦
2. Page table in main memory
페이지 테이블을 메인 메모리에 저장
페이지 테이블의 시작 위치를 가리키는 단일 레지스터 사용
→레지스터 하나만 로드하면 되기 때문에 빠르게 메모리 맵 변경 가능
→각 명령을 실행할 때마다 매핑에 메모리 참조가 필요하여 많은 시간 소요
Multilevel Page Table
단일 페이지 테이블은 페이지 테이블의 크기가 매우 커질 수 있음
Multilevel page table: 큰 주소 공간을 작은 페이지 테이블로 나누어 메모리 사용량을 줄이는 방식
(PT1: 상위 레벨 페이지 테이블, PT2: 하위 레벨 페이지 테이블, offset: 페이지 내부의 위치)
모든 페이지 테이블을 항상 메모리에 유지할 필요가 없음(특히 주소 공간에 비어 있는 부분)
페이지 테이블 엔트리 구조
일반적으로 32비트
Page frame number: 가상 주소를 물리 주소로 매핑하는 기능을 담당
present/absent: 1이면 엔트리가 유효하며 페이지 프레임 번호를 사용 가능, 0이면 해당 엔트리에 대응되는 페이지가 물리 메모리에 존재하지 않은 상태
Protection bit: 어떤 접근이 허용되어 있는지 표시
1비트의 보호 정보를 가지는 경우- 1: 읽기, 0: 읽기/ 쓰기
3비트로 구성- 각 비트는 읽기/ 쓰기/ 실행이 가능한지 여부를 표시
Modified bit(dirty bit): 페이지의 내용이 변경되면 비트가 1로 설정
Referenced: 읽기 또는 쓰기로 접근되었을 때
Caching disabled: 해당 페이지가 캐싱될 수 있는지 여부를 가리킴
TLB
페이징의 속도를 높이고 큰 주소 공간을 지원하는 실제 구현 기법 중 하나
TLB(Translation Lookaside Buffer) 또는 연관 메모리: 페이지 테이블 참조 없이 가상 주소를 물리 주소로 매핑할 수 있는 작은 하드웨어
MMU 내부에 존재하며 적은 개수의 엔트리를 가짐
각 엔트리는 한 페이지에 대한 정보를 포함 (유효한지 여부, 가상 페이지 번호, 페이지 수정 여부를 나타내는 비트, 보호 코드(읽기,쓰기,실행 허가), 물리 페이지 프레임 번호 등)
동작 방식
- MMU에게 가상 주소 부여
- 하드웨어는 해당 가상 페이지 번호가 TLB에 있는지 확인
- TLB에 일치하는 항목이 있고 접근이 보호 비트를 위반하지 않으면(위반하는 경우 protection fault), 대응되는 페이지 프레임을 사용하여 주소 변환 실행
- 일치하는 항목이 없으면(TLB 미스), MMU는 페이지 테이블을 검색하여 해당 페이지 테이블 엔트리를 찾고, 조회한 페이지 테이블 항목을 TLB에 추가하며 기존 항목을 대체
- TLB에서 항목이 제거될 때, 수정된 비트가 메모리에 있는 페이지 테이블 항목으로 복사됨 (데이터가 손실되지 않도록)
역 페이지 테이블(Inverted page table)
가상 주소 공간의 각 페이지마다 엔트리가 하나씩 존재하는 것이 아니라 물리 메모리의 각 페이지 프레임마다 하나의 엔트리가 존재
→ 페이지 테이블은 메모리 효율성을 높이고, 해시 테이블을 활용하여 페이지 검색 시간을 줄임
#전통적인 페이지 테이블
주소 공간 크기가 2^64 bytes일때, 페이지 크기가 4KB=2^12bytes, 하나의 페이지가 2^12개의 주소를 관리한다는 뜻
즉, 2^64bytes의 주소 공간을 4KB 페이지로 관리하려면 2^52개의 페이지가 필요
#역 페이지 테이블
물리메모리 크기가 256MB=2^28bytes이고 페이지 크기가 4KB=2^12bytes일때, 물리적 페이지 프레임의 개수 2^16개
크고, 빠르며, 자신이 혼자 사용할 수 있는 비휘발성(nonvolatile) 메모리
'컴퓨터공학 > 운영체제' 카테고리의 다른 글
[운영체제] 02. scheduling (0) | 2024.10.28 |
---|---|
[운영체제] 02. ipc (0) | 2024.10.25 |
[운영체제] 02. process (2) | 2024.10.23 |
[운영체제] 01. systemcall (0) | 2024.10.23 |