티스토리 뷰
프로그램을 메모리에 할당하는 방식은 2가지가 존재합니다.
1. contiguous allocation
2. non-contiguous allocation
연속적 할당과 비연속적 할당으로 나뉩니다.
조금 더 자세히는
코드를 물리적으로 연속적인 위치에 할당할 것인가?
파편화시켜 나누어서 할당할 것인가?입니다.
📗1. contiguous allocation(연속적 할당)
P1(Program1)이 메인메모리에 연속적인 위치에 적재됩니다.
연속 할당에서는
고정 분할, 동적 분할 방식이 존재합니다.
고정 분할
미리 메모리를 고정적으로 분할하여
분할된 파티션마다 하나의 프로세스만 올라올 수 있습니다.
메인 메모리를 3의 크기로 조각하였습니다.
P1(process) 크기 2
P2(process) 크기 5
P1 크기 < 파티션 크기
들어갈 수는 있으나 3 - 2 = 1의 값만큼 손해를 봅니다.
저 공간은 다른 프로세스에서 사용할 수 없습니다.
이를 내부 단편화라고 합니다.
그렇다면 파티션들에서 연속적으로 내부 단편화가 일어나는 문제가 생깁니다.
P2 크기 > 파티션 크기
들어갈 수 조차 없습니다.
이를 외부 단편화라고 합니다.
가변 분할
프로그램 크기마다 가변적으로 파티션 크기를 설정해줍니다.
고로 모든 파티션이 들어올 수 있습니다.
하지만 P2(process2)가 종료되었고
P4(process4)가 들어오고 싶지만
P1과 P3 사이의 파티션은 P4를 받을 수 없는 크기입니다.
이를 외부 단편화라고 합니다.
📗2. non-contiguous allocation(비연속적 할당)
하나의 덩어리의 process를 여러 block으로 나누어 main memory에
비연속적으로 할당하는 방식입니다.
연속적 할당방식에 의한 내부, 외부 단편화의 단점의 솔루션이 될 수 있습니다.
하지만 완벽한 솔루션이라고는 할 수 없습니다.
Non-contiguous allocation(비연속적 할당)의 여러 기법
1. paging
프로그램의 모든 코드들이 메모리상에 한번에 올라가지 않습니다.
필요한 부분만 그때그때 올려 메모리 낭비를 막는 방식입니다.
프로그램 코드들이 연속적으로 있다고(virtual address) 논리적으로 가정을 합니다.
이 코드들이 메모리에 올라갈 때는 address mapping과정을 통해
메모리에 비연속적인 위치에 올라가게 됩니다.
이때 올라가지 못한 코드들은 swap device에 위치하며
second storage(HDD, SSD)에 존재합니다.
프로그램을 모두 동일한 크기의 block으로 분할합니다.
종료된 프로세스의 위치에는 어떤 프로그램 block이어도 올릴 수 있으므로
외부 단편화가 일어나지 않습니다.
😭
하지만 내부 단편화는 일어날 수 있습니다.
페이징 기법에서 내부 단편화는 마지막 페이지에서 발생할 수 있습니다.
만약 페이지의 크기가 1024byte이고 프로세스가 7856byte이면
페이지(1024byte)가 8개가 필요합니다.
페이지 7개의 크기는 약 7782byte이며
나머지 74byte를 위해 페이지 1개에 할당하여
마지막 페이지에서 950byte의 내부 단편화가 발생합니다.
💬 페이징 기법에서의 매핑 방법 두 가지
1. direct mapping
2. associcative mapping
2. segmentation
페이징 기법과는 다르게 프로그램을
함수, 데이터같은것을 기준으로 하여 논리적 단위로 나누었습니다.
그러므로 segment(block)의 크기가 모두 다를 수 있습니다.
연속적 할당의 가변 분할과 같이 외부 단편화 발생 가능
페이징 기법에서는 고정크기로 조각내 버리기 때문에
논리 단위로 보호가 어렵지만
세그멘테이션 기법에서는 논리적 단위로 block을 나누기 때문에
보호가 가능합니다.
세그멘테이션에서 사용되는 SMT(PMT와 같은 역할)에서는
추가적으로 block의 길이, 보호 여부가 추가적으로 들어갑니다.
'OS' 카테고리의 다른 글
프로세스 상태 전이도 (0) | 2022.10.18 |
---|---|
메모리 관리 1 (0) | 2022.10.17 |
Computer System (0) | 2022.09.25 |
- Total
- Today
- Yesterday
- 관계설정
- jvm
- 백엔드
- springboot
- 백준 제로 자바
- 스타트업
- 코딩테스트
- jre8
- 스택
- 알고리즘
- 개발자채용
- 자바
- Spring
- JDK8
- jre
- 백준 제로
- 프로그래머
- JPA
- 자사서비스
- 다대일
- jdk11
- boot
- JDK
- boot 일대다
- jre11
- mappedby
- ㅃ
- 백준
- java8
- 문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |