HJW's IT Blog

OS: Segmentation 본문

OS

OS: Segmentation

kiki1875 2023. 5. 23. 11:15

 Segementation 기본 개념

          > 프로세스를 메모리 내에서 여러 segement로 나눈다

          > 각 segement는 분명한 목적이 존재:

                    >> 예) code, static data, heap, stack

                    >> Segement 는 다른 크기일 수 있다

          > 전체 프로세스는 여전히 메모리에 로드 되어 있지만, 그 프로세스를 구성하는 segment들은 연속적으로 메로리에 올라가지 않아도 된다

          > Segment는 protection bit 을 가진다

                    >> Read-only (code)

                    >> Read-write (data, heap, stack)

                    >> 프로세스들이 코드와 데이터를 공유할 수 있게 해준다.

Segment Address

          > Segment의 가상 주소는 다음으로 이루어 진다

                    >> Segment Number

                    >> Segment의 시작 offset

                    >> 둘 모두 Assembler가 생성

          > Instruction 에는 무엇이 저장되는가?

                    >> 간단한 방법

                              >>> 주소의 최상위 비트가 segment를 구분

                              >>> 최하위 비트는 offset을 구분

                    >> Implicit Segment 지정

                              >>> 실행되는 명령에 따라 segment 가 암시적으로 선택된다

                    >> Explicit Segment 지정

                              >>> Instruction prefix가 특정 segment를 사용중임을 요청

 

Segment 구현

          > Segment table은 특정 프로세스 내의 모든 segment를 기록

                    >> 각 entry는 base 와 limit을 가진다

                    >> 각 entry는 protection information을 가진다

          > HW support 필요

                    >> 여러개의 base & limit register

                    >> Segment table base pointer

 

Segment Table Example

          > Part of Segment Table

          > Address Space Mapping

          

Managing Segments

          > 프로세스가 생성되면...

                    >> 해당 프로세스의 모든 segment 에 대해 가상 메모리에 공간을 할당 받는다

                    >> Segment Table 생성해서 PCB에 저장해 둔다

          > Context Switch 발생시...

                    >> OS의 segment table을 old process's PCB에 저장

                    >> 새로운 프로세스의 PCB에서 OS의 segment table을 로드하며, 물리적 메모리를 할당한다

                              <프로세스가 처음으로 실행될 경우>

          > 만약 물리적 메모리 공간이 부족할 경우

                    >> 연속적인 공간을 만들기 위해 compact memory

                    >> 공간이 충분할 때 까지 다른 segment들을 swap out

                              >> 해당 프로세스를 다시 실행하려면 모든 segment를 다시 swap in 시켜야 한다

          > Segment 크기를 늘리려면

                    >> Segment 위의 공간이 free하다면, segment의 limit을 update

                    >> Segment 를 더 큰 free space 로 옮긴다

                    >> 해당 segment 위의 다른 segment를 swap out

                    >> 

          > Segmentation Advantage

                    >> Segment 끼리 연속적이지 않아도 된다.

                    >> Segment 들은 개별적으로 swapped 될 수 있다

                    >> Segment는 공유될 수 있다

          > Segmentation Disadventage

                    >> 메모리 할당이 복잡하다

                    >> external fragmentation (공간중 작은 공간이 분산되어 있는상태)

'OS' 카테고리의 다른 글

OS: File System  (0) 2023.06.06
OS: Paging  (0) 2023.05.23
OS: Dynamic Relocation  (0) 2023.05.23
OS: Memory Management  (0) 2023.05.16
OS: Deadlock Avoidance  (0) 2023.05.16