- base and bound register의 문제
- 연속된 빈 공간 찾아주기 힘들다
- address spcae 자유롭게 늘였다 줄였다 못함
- free space를 넓게 physical memory에 잡아야 함 ; for heap
- Segmentation 등장
- Segmentation : 연속적인 virtual address space 조각 → 자유롭게 physical address 매핑 가능
- segment 별로 base와 bound 제공: 내가 쓸 것만 segment 가져옴
- segmentation에서의 주소 번역 : physical address = offset + base
- virtual address에서도 마찬가지로 offset + virtual address segment의 base
- Segmenation fault
- QUIZ ! 초기화 하지 않은 변수 : 표준은 undefined
- 전역변수 : 0으로 채움
- data section : 0
- 지역 변수 : 처음엔 0, 실행하다 함수가 썼던 값이 남아있으면 랜덤으로 이상한 값이 들어감
- heap이 참조하고 있는 범위 바깥 (segment 참조 범위 바깥)에 떨어지는 경우, segfault (out of bounds)
- QUIZ ! 초기화 하지 않은 변수 : 표준은 undefined
- Stack Segment 참조 시,,,
- 주소가 어느 방향으로 자라느냐
- 주소 공간에서 segment 공유될 수 있는가? → protection bit : 값이 바뀌지 않을 것이다 (Read-Excute) → 실행 가능; 같은 프로그램 돌아가는 게 있나 확인 후 → 같은 프로그램에 대해 code 부분의 base 주소 공유
- Fine-Grained vs. Coarse-Grained
- Segement 개수로 구분
- fine-grained가 더 많은 flexibility를 부여, 프로세스에 따라 사용하는 segment 개수가 달라 table로 관리
- segmentation table : hardware는 프로세스마다의 segment 정보를 저장함 (base & bound),, 얘를 참고해서 segmentation 만듦,
- External Fragmentation : 공간이 segmentation 별로 나뉘어 있어 원하는 크기의 segment 만큼 할당 불가한 상황
- 해결: compaction → 밀어서 공간 생성 ; BUT cost가 매우 큼
- process 중단 시키고,
- data 어딘가로 copy 하고, → code affinity 침범 : 프로세스 내의 캐시 내용 다 쓸모 없어짐
- segment register 값을 변경해야 하기 때문 → 모든 space의 base와 bound 값 다 바꿔야
- 해결: compaction → 밀어서 공간 생성 ; BUT cost가 매우 큼
- splitting : 공간 요청받으면 free list 보고 공간 떼어줌
- coalescing : 빈 공간 합치기;
- HOW? 할당되는 공간에 header를 붙여서 할당하는 공간을 추적할 장치 생성
- magic : 유효한 malloc인가
- 빈공간 크기 : header + user에 할당된 공간 크기
- HOW? 할당되는 공간에 header를 붙여서 할당하는 공간을 추적할 장치 생성
- free 공간 manage :
- Best fit : 딱 맞게 공간 주기
- worst fit : 제일 큰 사이즈 주기
- first fit : size 만족하는 애 중 가장 빨리 접근되는 애 주기
- next fit : 가장 마지막에서부터 빠르게
- segregated list : 다른 size로 free chunk 가지고 있는 다음, 필요한 만큼 줌
- slab allocator :사전에 정의된 작은 size를 미리 잡아둠 (magazine : 탄창 개념),, 다 비면 옆에 붙은 buddy allocation이 공간 계속 줌,,
- 애매한 사이즈가 별로 없음’ external fragment 안 생김 → 되도록이면 맞는 fit으로 주기 때문
- internal fragment 우려; 애매한 size를 할당해야 할 경우 생각보다 많이 비는 box를 제공해야 할 때도,,,
- 의의: coalescing 간단하게 할 수 있음 → free 시에 간편
- slab allocator :사전에 정의된 작은 size를 미리 잡아둠 (magazine : 탄창 개념),, 다 비면 옆에 붙은 buddy allocation이 공간 계속 줌,,
반응형
'OS' 카테고리의 다른 글
[운영체제] 8. paging의 문제를 해결하기 위한 첫번째 기법 : TLB ! (0) | 2024.03.25 |
---|---|
[운영체제] 7. Memory Paging (0) | 2024.03.25 |
[운영체제] 5. Memory and Address Space (0) | 2024.03.25 |
[운영체제] 4. Advanced Scheduling Schemes (0) | 2024.03.25 |
[운영체제] 3. Scheduling Basics (0) | 2024.03.25 |