-
[Chapter-7] Memory Management개발공부/OS 2024. 8. 10. 16:01
-이대 반효경 교수님 강의 기반으로 작성되었습니다-
logical vs physical
- logical add
- ps마다 독립적으로 가지는 주소 공간
- cpu가 보는 주소
- Physical add
- 메모리에 실제 올라가는 위치
주소 바인딩
= symbolic ==> Logical ==> Physical
- Compile time binding
- 물리적 메모리 주소 컴파일시
- absolute code 생성
- 요즘 거의 안쓰임
- Load time binding
- Loader 책임하에 물리적 메모리 주소 부여
- relocatable code (비어있는곳 어디든 올라갈 수 있음)
- Execution time binding(run time binding)
- 실행 도중에 주소가 바뀔 수 있음.
- cpu가 주소를 참조할 때 마다 binding 점검 ==> 하드웨어적인 지원이 필요
- 지원 by MMU = 논리적 주소 --> 물리적 주소
- Dynamic Loading
- 루틴이 불려질 때 메모리에 load
- 프로그램 자체에서 구현 가능
- Overlays
- ps에서 메모리에 필요한 부분만 올림
- Swapping
- ps를 메모리 ==> 하드 디스크로 쫓아냄
- swap in, swap out
- 중기 스케줄러가 관리
- 우선순위 기반 알고리즘
- execution time binding에서는 빈 메모리 아무곳에 올리기 가능
- Dynamic Linking
- Linking을 실행 시간까지 미루는 기법
- static linking
- 라이브러리가 실행 파일 코드에 포함
- 실행 파일이 커짐
- Dynamic linking
- 라이브러리가 실행시 연결
- 라이브러리 루틴의 위치를 찾기위한 stub 배치
- os 도움 필요
Allocation of Physical Memory
- os 상주 영역 : interrupt vector와 함께 낮은 주소 영역 사용
- 사용자 ps영역 : 높은 주소 영역
- 사용자 ps 영역 할당 방법
- contiguous allocation : 그대로 올리기
- fixed partition
- 분할당 하나의 프로그램 적재
- 융통성이 없다
- variable partition
- 프로그램 크기 고려하여 할당 ==> 관리 기법 필요
- 외부 조각 발생
- fixed partition
- Hole
- = 가용 메모리 공간
- 메모리 여러곳에 흩어져 있음
- Dynamic Storage-Allocation Problem
- 적절한 hole 찾기
- first-fit(먼저 찾은거), best-fit(가장 맞는거), worst-fit(가장 큰거)
- first fit 이 실험적으로 가장 좋다
- Compaction
- 외부조각 해결법
- 메모리 몰고 hole을 모아 큰 block만들기
- 비용이 많이든다.
- contiguous allocation : 그대로 올리기
- noncontiguous allocation : 잘라올리기 (paging, segmentation, paged Segmentation)
- paging
- ps의 가상 메모리를 동일 사이즈 page로 나눔 ==> noncontiguous하게 저장
- 일부는 하드에 일부는 메모리에
- page table을 사용해서 변환 (logical ==> physical)
- 외부조각 안생기나 내부조각 발생가능
- page table 향상ver
- table을 메인 메모리에
- page table base reg 가 페이지 테이블을 가리킴
- page table length register 가 테이블 크기 보관
- 속도향상 : associative reg, TLB 사용 (고속의 hw 캐시)
- associative reg
- page table중 일부가 associative reg에 보관
- TLB는 문맥교환때 flush
- Two-Level Page table
- page table을 page로 구성
- 사용되지 않는 주소의 outer page table 엔트리 값을 null로 만듦
- Multilevel Paging and Performance
- 주소 공간이 더 커지면 필요
- page table이 메모리에 실려서 더 많은 메모리가 필요
- TLB를 통해 메모리 접근 시간을 줄임 (크게 오버헤드가 들지 않는다)
- Memory Protection
- 페이지 테이블 각 entry마다
- protection bit : page의 연산에 대한 접근 권한
- valid : 해당 주소 frame에 그 ps를 구성하는 유효한 내용이 있다.
- Invalid : ps가 안사용하거나 swap area에 내려가 있다.
- Inverted Page table
- ps마다 가 아닌 ps마다 딱 하나 page table이 존재
- but 테이블 전체를 탐색해야함 ==> associative reg 사용 but 비쌈
- shared Page
- 같은 프로그램을 다른 프로세스로 돌리면 코드는 같음
- shared code = read-only 로 하나의 코드만 메모리에 올림
- shared code는 모든 ps의 logical address space에서 동일한 위치에 있어야함
- 같은 프로그램을 다른 프로세스로 돌리면 코드는 같음
- Private code and data
- 각 ps들이 독자적으로 메모리에 올림
- paging
- 사용자 ps 영역 할당 방법
Segmentation
= code, data, stack 부분이 하나씩의 세그먼트
= logical unit ( main(), function, stack, ...)
- 아키텍쳐(Hw)
- 논리주소를 번호, 오프셋 으로 나눈다.
- segment table : base(시작 위치), limit(길이)
- Segment table base reg : 물리적 메모리에서 테이블 위치
- Segment table length reg : 프로그램이 사용하는 segment 수
- protection : 각 seg별 protection bit가 있음 (valid, r/w/exe권한)
- sharing : 의미 단위 이어서 paging보다 낫다
- allocation : first fit, best fit, 외부조각 발생 ==> seg의 약점
Paging + Segmentation
segment table entry = segment를 구성하는 page table의 base address
- 먼저 seg 후 seg별로 paging 수행
- segment table에서 base address 대신 seg의 page table 시작위치 저장
- bound 값 대신 seg 개수 저장
'개발공부 > OS' 카테고리의 다른 글
[Chapter-9] file system (0) 2024.08.24 [Chapter-8] Virtual Memory (0) 2024.08.24 [Chapter-6] Deadlock (0) 2024.08.10 [Chapter-5] Process Synchronization (0) 2024.08.04 [Chapter-4] cpu 스케줄링 (1) 2024.07.21 - logical add