일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택
- 해시테이블
- 연결리스트
- vue3
- 자바스크립트
- 프로그래머스
- 브라우저
- APOLLO
- cors
- RT scheduling
- GraphQL
- 프로세스
- 포인터
- 웹팩
- 자료구조
- RxJS
- 릿코드
- 큐
- C
- alexnet
- 이진탐색
- 컨테이너
- Machine Learning
- pytorch
- 배열
- 알고리즘
- 타입스크립트
- 연결 리스트
- 코딩테스트
- 프론트엔드
- Today
- Total
프린세스 다이어리
[OS] 가상메모리 메커니즘 중 하나인 세그멘테이션 기법 정리 본문
1. 세그멘테이션 기법과 페이징 시스템의 차이
세그멘테이션 기법은 서로 크기가 다른 논리적 단위인 세그멘트로 가상 메모리를 관리하는 기법으로, 물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용한다. 물리 메모리가 세그멘트 단위의 연속된 크기의 메모리를 제공해주지 못하는 문제가 발생할 수 있고 이 경우에는 페이징 시스템에서처럼 그왑 영역을 사용한다.
이에 반해 페이징 시스템은 특별한 의미 없는 4KB의 페이지 단위로 메모리 주소에 접근하는 방식이다. 페이지 블록 4KB만큼 잘라서 메모리를 사용할 수 있지만, 4KB 단위만큼 데이터가 딱 맞아떨어지지 않는 경우에는 불필요한 메모리 공간을 낭비하게 되는 문제점이 있다.
2. 세그멘테이션 기법의 가상주소 변환
세그멘테이션 기법에서의 페이지 테이블은 페이징 시스템에서의 페이지 테이블과 비슷하다. 가상 주소는 VA=<S, D>로 표현한다.
VA = <S, D>
S는 세그먼트 번호, D는 시그먼트 시작 지점에서 해당 주소까지의 거리(distance)를 의미한다. 세그먼테이션 기법에서 가상 주소를 물리 주소로 변환하는 과정도 페이징 시스템과 유사하다.
(1) 가상 주소를 구한다. 어떤 프로세스 A가 세그먼트 0으로 분할이 되었고 사용자가 지정한 주소가 32이면 가상 주소는 VA = <0, 32>이다.
(2) 세그멘테이션 테이블에서 세그먼트 #0의 시작 주소를 알아낸 후, 시작 주소에 해당 주소까지의 거리를 더한 물리 주소를 구한다.
(3) 해당 주소까지의 거리가 세그먼트의 크기보다 큰 경우, 메모리를 벗어난다는 의미이기 때문에 메모리 오류를 출력한다. 해당 주소까지의 거리가 세그먼트의 크기보다 크지 않으면 물리 주소를 구한다.
(4) 물리 주소에 접근하여 원하는 데이터를 읽거나 쓴다.
3. 리얼모드에서의 메모리 관리 방식
인텔 80286 cpu 이후부터 보호모드(protection ring)를 지원하기 시작했다. 이를 위해 커널 모드, 사용자 모드를 지원하는 운영체제가 만들어졌다. 동시에 이전 버전의 CPU에서 제작되어 구동하던 기존 소프트웨어도 호환이 되도록 호환모드가 필요했는데 이것이 바로 리얼모드다. 리얼모드는 intel CPU를 쓰는 컴퓨터가 부팅을 할 때의 모드이고, 그 다음에 어떠한 과정을 통해 보호모드로 바뀌어서 구동된다.
이 리얼모드에서는 메모리 공간이 최대 1MB이고, 세그멘테이션만 지원한다. 세그먼트의 크기는 64KB로 고정이고 CS(Code Segment), DS(Data Segment), SS(Stack Segment), ES(Extra Segment) 등으로 나누어서 메모리에 접근한다. 리얼모드에서는 세그먼트의 시작 어드레스는 세그먼트 레지스터에 직접 설정해주며 페이징을 사용하지 않기 때문에 물리주소로 변환하는 방식이 심플하다. 반면 보호모드에서는 세그멘테이션 기법에 페이징 기법을 혼합해, 사용자가 어떤 주소에 있는 데이터를 요청하면, 해당 주소가 몇 번째 세그먼트의 + 몇 번째 페이지로부터 + 얼마나 떨어져 있는지까지 계산해야 하기 때문에 비교적 복잡해진다.
'운영체제, 컴퓨터 구조' 카테고리의 다른 글
[OS] 파일 시스템이란? 파일을 저장하는 방법과 파일 시스템의 종류 (0) | 2022.02.05 |
---|---|
[OS] 작은 C언어 코드가 실행될 때 어떻게 메모리를 사용하는지 설명 (0) | 2022.02.04 |
[OS] 페이지 교체 알고리즘(Page Replacement Algorithm) 5가지와 스레싱(Thrashing) 현상 (0) | 2022.02.02 |
[OS] 요구 페이징(Demand Paging)과 관련해 페이지 폴트 인터럽트(Page Fault Interrupt) 발생하는 과정 설명 (0) | 2022.02.01 |
[OS] 페이징 시스템의 "공유 메모리(Shared Memory)" 개념 (0) | 2022.01.31 |