★사전 지식★
- 로더
메인메모리 빈자리를 찾아서 로딩(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 |