ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
            • 프로그램 크기 고려하여 할당 ==> 관리 기법 필요
            • 외부 조각 발생
        • Hole
          • = 가용 메모리 공간
          • 메모리 여러곳에 흩어져 있음
        • Dynamic Storage-Allocation Problem
          • 적절한 hole 찾기
          • first-fit(먼저 찾은거), best-fit(가장 맞는거), worst-fit(가장 큰거)
            • first fit 이 실험적으로 가장 좋다
        • Compaction
          • 외부조각 해결법
          • 메모리 몰고 hole을 모아 큰 block만들기
          • 비용이 많이든다.
      • 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들이 독자적으로 메모리에 올림

    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
Designed by Tistory.