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 | 31 |
Tags
- 자바 문제풀이
- Segmentation with Paging
- 메모리의 불연속적 할당
- 프로세스 할당
- jpa
- 자바 알고리즘
- Shared Page
- 문제풀이
- spring
- linux
- 다단계 페이지 테이블
- 프로세스 불연속 할당
- 프로세스 동기화
- Allocation of Physical Memory
- Page Table의 구현
- 스프링부트
- 메모리 관리
- 스프링
- 웹개발
- CS
- springboot
- 웹 프로그래밍
- 리눅스
- 알고리즘
- 코드스테이츠 백엔드 과정 39기
- Effective Access Time
- 운영체제
- annotation
- Inverted Page Table
- 2단계 Page Table
Archives
- Today
- Total
GrowMe
[운영체제] 메모리 관리 (6) : Segmentation에 대하여 본문
메모리 관리 (6) : Segmentation에 대하여
# Segmentation
# Segmentation Architecture
# Segmentation HardWare
# Shared of Segments
# Segmentation with Paging
✍️ 본 포스팅은 이화여자대학교 반효경 교수님의 "운영체제" 강의를 들으며 정리한 내용입니다.
이전 포스팅 까지 프로세스의 불연속적 할당에서의 Paging 처리를 알아보았다. 불연속적 할당에는 Paging 처리 외에도 Segmentation이라는 방법도 존재하는데, Paging 처리가 주소의 "공간"을 같은 크기로 쪼갠 것이고 Segmentation은 주소의 공간을 "의미단위"로 쪼갠 것이다. 좀 더 자세히 알아보도록 하자.
* Segmentation
- 프로그램은 의미 단위인 여러 개의 segment로 구성된다.
- 작게는 프로그램 구성하는 함수 하나하나를 모두 세그먼트로 정의하기도 한다.
- 크게는 프로그램 전체를 하나의 세그먼트로도 정의가 가능하다.
- 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의된다고 한다.
- Segment 예시
- main ()
- function
- global variables
- stack
- symbol table, arrays
* Segmentation Architecture
- Logical address의 구성
- segment-number : 세그먼트의 번호
- offset : 세그먼트 안에서 얼마나 떨어져 있는지를 나타냄
- Segment 별로 physical 공간에 올라가게 됨 -> Segment 별로 주소 변환 필요하다.
- Segment table
- 테이블 내 각 엔트리 구성
- base : physical address에서의 시작지점
- limit : 해당 세그먼트의 길이
- 테이블 내 각 엔트리 구성
- Segment-table base register(STBR) : physical memory에서의 세그먼트 테이블 시작 위치를 나타낸다.
- Segment-table length register(STLR) : 세그먼트 테이블의 길이(프로그램이 사용하는 segment의 수)
* Segmentation HardWare
- CPU가 logical 주소를 준다.
- 주소를 두 부분(세그먼트 번호, 세그먼트 offset)으로 나눈다.
- 세그먼트 테이블의 시작위치를 STBR로부터 받아내어 세그먼트 번호와 offset을 통해 위치를 찾아낸다.
- 세그먼트 테이블의 해당 위치로 가면, 해당 세그먼트가 physical memory의 어떤 주소에 올라가 있는지 알 수 있다.
- 체크 1 : 세그먼트 번호가 세그먼트 개수보다 작은 값인지를 확인한다.
- 만약 크다면 trap을 발생시킨다.
- 체크 2 : 세그먼트의 offset이 세그먼트의 길이(limit)보다 크지 않는지 확인한다.
- 만약 크다면 trap을 발생시킨다.
- 모두 정상이라면 주소변환을 실행한다.
-> 세그먼트 테이블의 해당 엔트리 값의 base 값 + offset 위치에 할당한다.
* Segmentation Architecture (Cont.)
- Protection
- 각 세그먼트 별로 protection bit가 존재한다.
- 각 엔트리
- Valid bit =0 : 유효하지 않은 세그먼트
- Read/Write/Execution 의 권한 bit
- Sharing
- 공유 세그먼트
- 같은 세그먼트 번호를 가진다.
- segment는 의미 단위이기 때문에 공유(Sharing)와 보안(Protection)에 있어 paging보다 훨씬 효과적이다.
- Allocation
- firtst fit / best fit
- 외부 조각(external fragmentation) 발생
segment의 길이가 동일하지 않으므로, 남는 공간이 발생한다.
*Shared of Segments
- Paging에서와 같은 원리로, 여러 프로세스가 똑같은 세그먼트를 사용할 경우 physical memory의 동일한 공간을 사용하여 공간을 절약한다.
- 위 그림에서 editor 세그먼트가 공유 세그먼트, data1, data2가 private 세그먼트에 해당한다.
* Segmentation with Paging
- 순수 segmentation 과의 차이점
- Paging 기법과 Segmentation 기법을 혼합한 방법이다.
- Segment 하나가 여러 개의 Page를 가지고 있다. (Segment 하나 당 Page Table이 존재)
- segment-table 엔트리가 segment의 physical 메모리에서의 base address를 갖고 있는 것이 아니라
segment를 구성하는 page table의 base address를 가지고 있다. - 장점 : 외부 조각 (쓰고 남은 메모리 공간 낭비 문제)이 생기지 않는다.
- 먼저 segment에 대한 주소 변환을 하게된다.
- 각 프로그램이 갖고있는 logical address : 세그먼트 번호 / offset
- segment table에서 page table의 base address와 offset으로 page table의 위치를 찾는다.
- offset이 세그먼트의 길이를 넘으면 trap을 발생시킨다.
- 세그먼트의 길이를 벗어나는 page-table 위치가 요청되면 trap을 발생시킨다.
- logical address에 들어있는 offset은 segment 내에서 얼마나 떨어져 있는지를 나타내므로
이를 다시 페이지 별로 쪼개어, 앞은 페이지 번호, 뒷부분은 페이지 내 offset인 엔트리를 만든다. - 해당 페이지 번호를 page table에 대응 시켜(frame 번호) 페이지 offset 값을 더해 physical memory 위치를 찾는다.
'CS(Computer science)' 카테고리의 다른 글
[운영체제] 메모리 관리 (5) : 다단계 Page Table 및 Paging 기타 (0) | 2023.01.22 |
---|---|
[운영체제] 메모리 관리 (4) : 프로세스의 불연속적 할당에 대해 (0) | 2023.01.19 |
[운영체제] 메모리 관리 (3) : physical memory 할당에 관하여 (0) | 2023.01.17 |
[운영체제] 메모리 관리 (2) : 동적인 메모리 관리에 대하여 (0) | 2023.01.17 |
[운영체제] 메모리 관리 (1) : 컴퓨터가 메모리를 관리하는 방법 (0) | 2023.01.17 |
Comments