Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- Spring
- C++
- 분할메모리할당
- js to ts
- 정렬
- 코드업
- memory
- 프로그래머스
- 기초100제
- Java
- 일상
- CPU 스케줄링
- codeup
- 파이썬
- 리덕스장바구니
- 토이프로젝트
- Operating System
- 스프링
- 공부
- 타입스크립트
- react-redux
- 협업
- Redux
- OS
- error
- 알고리즘
- 백준
- 자료구조
- web
- react
Archives
- Today
- Total
감자튀김 공장🍟
[OS] 분할 메모리 할당 - 세그먼테이션(Segmentation) 본문
반응형
세그먼테이션
- 세그먼테이션(segmentaion)은 프로세스의 주소 공간을 크기가 다른 여러 개의 세그먼트로 나누고 각 세그먼트를 하나의 연속된 물리 메모리 블록에 배치하는 메모리 관리 기법이다.
- 세그먼트는 프로세스 내에서 연관된 기능을 하는 코드나 데이트들의 블록으로 그 크기는 서로 다르다.
- 코드 세그먼트 : 프로그램 전체에 걸쳐 작성된 모든 코드들을 모아 하나의 논리적 단위로 구성
- 데이터 세그먼트 : 프로그램 전체에 걸쳐 선언된 전역 변수들과 정적 변수들을 모은 것
- 스택 세그먼트 : 함수가 호출될 때, 지역 변수나 매개 변수, 리턴값들을 저장하는 메모리 공간
- 동적 할당 세그먼트 : 프로세스가 실행 중에 동적으로 할당받는 메모리 영역
세그먼테이션의 구현 - 1. 하드웨어 지원
- 논리 주소 구성
- 컴파일러는 프로그램 세그먼트들로 나누고 세그먼트 번호를 매긴다.
- 코드나 데이터의 주소는 세그먼트 상대 주소(offset / 옵셋)로 컴파일한다.
- 논리 주소 = 세그먼트 번호 + 옵셋(세그먼트 내 상대 주소)
- CPU
- 세그먼트 테이블의 시작 주소를 가리키는 레지스터가 필요하다.
- CPU에 의해 발생하는 논리 주소는 세그먼트 번호 + 옵셋 형태이다.
- MMU
- 논리 주소가 세그먼트 영역 크기를 넘어서는지를 판별하는 기능이 구현되어야 한다.
- 또한 논리 주소를 물리 주소로 바꾸는 기능이 구현되어야 한다.
- 세그먼트 테이블
- 프로세스의 논리 세그먼트가 물리 메모리의 어느 위치에 할당되어 있는지 관리하기 위해 세그먼트 테이블을 사용한다.
- 시스템 전체에 1개의 세그먼트 테이블을 이용한다.
- 테이블 항목
- 논리 세그먼트가 할당된 '물리 세그먼트의 시작 위치와 세그먼트의 크기'로 구성
- 현재 실행 중인 모든 프로세스에 대해 각 논리 세그먼트 당 하나의 항목이 저장
세그먼테이션의 구현 - 2. 운영체제 지원
- 물리 메모리에 현재 할당된 세그먼트의 리스트와 빈 영역(홀 / hole) 리스트를 만들고 관리해야 한다.
- 세그먼트 테이블을 생성, 관리, 유지 해야한다.
- 프로세스가 생성될 때마다 빈 영역 리스트에서 물리 메모리의 빈 영역(free area)을 찾아 세그먼트들을 할당한다.
- 프로세스가 종료할 때마다 할당된 세그먼트를 반환하는 기능을 가지고 있어야 한다.
세그먼테이션의 구현 - 3. 컴파일러, 링커, 로더 지원
- 컴파일러가 사용자 프로그램을 사전에 정의된 세그먼트들로 분할하여 컴파일하고 링킹해야 한다.
- 로더(loader) 역시 실행 파일에 만들어진 논리 세그먼트들을 인지하고 이들을 물리 메모리의 빈 영역을 할당받아 논리 세그먼트를 로딩해야 한다.
프로세스의 논리 세그먼트와 물리 세그먼트의 매핑
단편화
- 물리 메모리에서 가변 크기의 세그먼트들을 할당하므로 작은 크기의 홀들이 생기는 외부 단편화가 발생한다.
- 논리 세그먼트와 동일한 크기의 물리 세그먼트를 할당하기 때문에 세그먼트 내에서 홀은 발생하지 않아 내부 단편화는 없다.
출처
운영체제(Operating system), 황기태 지음
반응형
'Study > Operating System' 카테고리의 다른 글
[OS] 페이지 교체 알고리즘(Page replace algorithm) (0) | 2022.04.14 |
---|---|
[OS] 분할 메모리 할당 - 페이징(Paging) (0) | 2022.04.13 |
[OS] 연속 메모리 할당 (0) | 2022.04.11 |
[OS] 메모리 할당(Memory Allocation) (0) | 2022.04.10 |
[OS] 메모리(Memory)와 메모리 계층 구조 (0) | 2022.04.09 |
Comments