CS/컴퓨터운영체제

OS 0523 - Dynamic Relocation

goliot 2023. 5. 23. 10:12
반응형

★사전 지식★

- 로더
메인메모리 빈자리를 찾아서 로딩(3000~ 라고 가정)
3000을 mmu에 적어두고 mmu 테이블을 로더가 채움
프로세스가 로딩되면 -> 처음 시작주소는 0번지 -> MMU를통해 0번지가 3000번지가 됨

4개 세그먼트를 physical 메모리에 연속적으로 깔면 mmu에도 연속적(contiguous)
따로 로딩한다면 mmu에도 따로 -> 둘다 문제없이 찾을 수 있음

- MMU(Memory Management Unit)
most significant bit(MSB) -> 10비트 주소체계라면 앞 2비트는 세그먼트를 지정하는데 사용
-> 나머지 8비트 오프셋으로 피지컬 주소(256바이트 중 어느 바이트를 지정할 것인지) = 피지컬 주소를 버추얼 주소로 변환하는 과정

 

- 프로세스가 여러개라면?

MMU는 프로세스 개수만큼 존재

두번째 프로세스는 BSS, Stack만 만들어짐

 

#Topics in Memory Management

- Uniprogrammed OS

    > 어셈블링, 링킹, 로딩

    > 정적 메모리 할당

    > 동적 메모리 할당

        > 스택, 힙

        > 빈공간 리스트를 관리

- Multiprogrammed OS

    > 대부분의 토픽을 포함

    > 정적 재배치

    > 동적 재배치

        > Virtual vs physical address

        > partitioning

        > segmentation

        > paging

    > swapping

    > demand paging = lazy operation(뒤로 미뤄두고 한번에 처리)

 

#Static vs Dynamic Relocation

- 정적 재배치의 문제점:

1. 안전성 - 불만족 -> 한 프로세스가 다른 프로세스의 메모리 간섭 가능, OS 메모리까지도 간섭 가능

2. 프로세스가 사이즈를 바꿀 수 없음

3. 프로세스가 한번 돌면 움직일 수 없음

4. MS-DOS, Windows, MacOS에서 사용됨(옛날것들)

 

- 대안: 동적 재배치

    > 기본 아이디어는 메모리 주소를 프로세스가 수행되면서 변경

    > 이 변환은 HW가 처리 - CPU와 메모리 사이에 MMU 존재(가상 주소를 물리 주소로 바꾸는)

        > 이 변환은 프로세스가 만드는 모든 메모리 참조마다 발생

 

#Dynamic Relocation

주소공간의 두가지 다른 관점:

1. 물리 주소 공간: OS만 볼 수 있으며, 기기의 물리적 메모리 크기만큼 큼

2. 가상(논리)주소 공간: 프로세스가 볼 수 있음, 명령어 집합 아키텍처가 허용하는 한 매우 클 수 있음

- 여러 프로세스가 물리메모리를 공유하지만 각각 자체 가상 주소 공간만 볼 수 있음 -> os와 hw는 두 가지 다른 주소를 관리

-> Virtual : 프로세스가 보는 주소

-> Physical: OS가 보는 주소

 

#Implementing Dynamic Relocation

- MMU가 주소공간을 보호, virtual 주소 번역

    > 베이스 레지스터(base register)는 프로세스의 가장 낮은 가상 주소를 보유

    > 한계 레지스터(limit register)는 가장 높은 가상 주소를 보유

    > 변환: 물리적 주소 = 가상 주소 + 베이스

    > 보호: 만약 (가상주소 > 한계) 라면, 주소 예외(address exception)와 함께 OS로 트랩됨(제어 주체가 바뀜) -> 프로세스가 자신의 주소 공간을 벗어나는 접근을 방지

 

#Dynamic Relocation - OS vs User Programs

- 유저 프로그램(프로세스)는 자체 가상 메모리에 접근

    > 재배치 모드에서 실행 - PSW의 비트로 표시되며 user mode에서 실행됨.

        > 유저 프로그램은 재배치 모드를 변경할 수 없음

- 운영 체제는 직접적으로 물리적 메모리에 접근

    > 운영 체제는 재배치가 꺼진 상태에서 실행되며, 커널 모드에서 실행됨.

- 유저 프로그램이 syscall 수행시:

    > CPU는 원자적으로 커널모드로 전환, 재배치 꺼지며, 트랩 핸들러로 트랩됨

    > os의 트랩 핸들러는 물리적 메모리에 접근하고, syscall을 처리하기 위해 필요한 작업을 수행

    > CPU는 원자적으로 재배치를 켜고, user mode로 전환, 유저 프로그램으로 리턴

 

#Dynamic Relocation and Partitioning

- 물리적 메모리는 파티션들로 나뉘어 있음

    > 프로세스는 빈 파티션(메모리 공간의 hole)에 로드됨

1. 고정 크기 파티션:

    > 메모리는 미리 결정된 고정 크기의 파티션으로 나뉨

        > 파티션은 동일한 크기일 수도 있고, 다른(고정된) 크기일 수도 있음

    > 동적 할당 힙의 경우처럼 first-fit, best-fit(hole을 최소화 하지만 시간이 오래걸림) 등을 사용

    > 파티션의 수는 다중 프로그래밍의 정도를 제한 - 활성 프로세스 수임

2. 동적(가변 크기) 파티션:

    > 프로세스가 메모리에 로드되면 정확히 필요한 크기의 파티션을 할당받음

 

#Effect of Dynamic Relocation with Dynamic Partitioning

프로세스가 계속 이동하면서 구멍이 생김

#Compaction - 디스크 조각 모음

- 평가:

    > Memory moved = 

    > Space created = 

 

#Swapping(Medium-Term Scheduling)

- 모든 프로세스를 수용할 충분한 메모리 공간이 없는 경우, 일부 프로세스를 메모리에서 스왑하여 공간을 확보

    > os는 프로세스의 전체 상태를 디스크에 저장하여 프로세스를 스왑아웃

    > ready or blocked 프로세스가 사용한 공간을 os가 회수할 수 있음

- 프로세스가 다시 활성화되면, os는 그것을 다시 스왑 인(메모리로) 해야 함

    > 정적 재배치에서는 프로세스를 동일한 위치에 대체

    > 동적 재배치에서는 os가 아무 빈 파티션에 프로세스 배치(재배치 및 한계 레지스터를 업데이트 해야함)

- 스왑과 동적 재배치를 통해 프로세스의 크기를 쉽게 늘릴 수 있으며, 메모리 압축도 가능(하지만 느림)

 

#Evaluation of Dynamic Relocation

- 장점:

1. OS가 프로세스를 쉽게 옮길 수 있음

2. OS가 프로세스의 성장을 허용

3. 하드웨어 변경이 최소화되지만 비교적 빠르고 효율적 -> 투명성(TransParency), 안전성 및 효율성이 모두 충족되지만 동적 재배치에는 약간의 오버헤드가 있을 수 있음

* 투명성(transparency):  사용자 또는 애플리케이션에게 이동이 발생하는 사실을 알려주지 않고, 기존 시스템 구서오가 동작을 계속하는 능력. 즉 사용자나 애플리케이션이 시스템의 이동작업을 인식하지 않고 계속 사

 

- 단점:

1. 정적 재배치에 비해 메모리 주소 지정이 느려지며, 번역으로 인해 속도가 떨어짐

2. 메모리 할당은 복잡해짐(파티션, 구멍, 단편화 등)

3. 프로세스가 성장하면 OS가 이를 이동시켜야 할 수 있음

4. 프로세스는 물리적 메모리 크기로 제한됨

5. 코드 또는 데이터를 프로세스간에 공유할 수 없음

반응형

'CS > 컴퓨터운영체제' 카테고리의 다른 글

OS-0523: Paging  (0) 2023.05.23
OS - 0523: Segmentation  (1) 2023.05.23
OS(0516) - Memory Management  (1) 2023.05.16
OS(0516) - Deadlock 처리 방법  (0) 2023.05.16
OS-Deadlock0509  (0) 2023.05.09