본문 바로가기

OS

[운영체제] 6. Memory Segmentation

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