본문 바로가기

운영체제/Segmentation and Paging

Segmentation and Paging - (1) Segmentation

Segmentation and Paging - (1) Segmentation

컴파일(Compile), 링킹(Liking)과정을 거쳐 만들어진 .exe파일은 1)Text Section, 2)Data Section, 3)ZI(=BSS) Section을 갖는다.

이렇게 만들어진 .exe파일을 운영체제의 로더가 메인 메모리(main memory)로 로드하게 되면 다음과 같은 Segment 구조를 갖는다

  1. Text(=Code) Segment(Read Only)
  2. Data Segment(Read and Write)
  3. Stack Segment
  4. Heap Segment
각 Segment는 각기 다른 특성을 갖는다.

Q. 이렇게 하나의 프로세스를 각기 다른 영역(Segment)로 나누어 관리하는 이유는 무엇일까?(= 한 User Process의 Memory Section들이 하나의 Memory Segment를 할당받을 때 발생하는 문제점은 무엇일까?)
  1. 두 User Process가 동일한 코드(Text Segment)를 공유하기 힘들다.
  2. 각 Memory Section들에게 각기 다른 Read/Write 권한을 설정하기 힘들다.

즉, 위 문제점을 해결하기 위해 Segmentation 개념이 도입되었다.

Q. 이런 Segmentation 기법은 어떻게 구현될까?
- 기존의 multi-programming batch monitor를 떠올리면 각 process를 나누기 위해 Base register, Bound register를 제공하는 MMU(memory management unit)을 사용하였다.
- Segment도 위와 마찬가지로 구현될 수 있다. 즉, Process는 무조건 4개의 segment를 가지고 있다고 하고 4개의 bound, base register를 제공하는 것.
- 다른 구현 방법도 있는데, 이는 main memory에 "Segment Table"을 구현하여 각 segment별로 base address(=base register의 역할), segment의 크기(bound register의 역할)을 저장해 놓는 것이다.

*MMU(memory management unit)
- CPU가 physical memory에 접근하는 것을 관리하는 하드웨어 장치

<그림 1>


<그림 2 : Segment Table in main memory>

즉, Segment Table을 활용하는 방법으로써 CPU는 virtual address를 사용하고 MMU가 이를 physical address로 매핑(mapping)해주는 메커니즘을 사용한다.

따라서, virtual address에는 지금 접근하고자 하는 주소(메모리)가 어떤 Segment인지 나타내 주는 지표가 필요하다.
이를 위해, 32bit system에서는 상위 2bit을 이용해 <그림 2>처럼 segment를 구분짓는 용도로 사용한다.

<그림 2>을 통해 만약 Segment 0에 해당하는 주소에 Write 명령이 발생했다면 segment table을 보고 해당 segment가 Read only라는 정보를 파악하고 Memory fault(=interrupt)를 발생시킬 수 있는 것이다. - memory protection

- MMU는 main memory에 존재하는 Segment table의 주소를 알기 위해 STBR(Segment Table Base address Register)를 지니고 있다.
- Context-Switching이 발생할 때 마다 새로운 process가 가진 Segment table주소로 STBR값을 수정해야 한다.(=context switching의 오버헤드)
- MMU는 CPU와 함께 하나의 칩(chip)으로 구성된다.


Segmentation의 장점

  1. 두 User Process가 동일한 코드(Text Segment)를 공유하기 용이하다.
  2. 각 Memory Section들에게 각기 다른 Read/Write 권한을 설정할 수 있다.
Segmentation의 단점
  1. Memory reference연산이 one-way에서 two-way(table을 접근해서 물리주소로 바꾼 뒤 그 물리주소로 다시 접근)로 변경함에 따른 메모리 접근에 필요한 시간이 증가.(오버헤드)
  2. Memory fragmentation(external fragmentation)문제가 발생한다. <심각한 문제>

Q. memory fragmentation 문제는 왜 발생하는 것이었나?

  1. 프로세스들이 요구하는 메모리의 크기가 각기 다름
  2. 요구하는 메모리를 연속적으로 할당(allocation)해야 한다.
따라서, memory fragmentation문제를 해결하기 위해 Paging기법이 등장하게 되었다.