운영체제 - 07

Updated:

강의

http://www.kocw.net/home/search/kemView.do?kemId=1226304

운영체제 - 메모리

1. Logical vs Physical Address

1.1 Logical

  • 프로세스마다 독립적으로 가지는 주소
  • 각 프로세스마다 0번지부터 시작
  • CPU가 보는 주소는 logical address임

1.2 Physical

  • 실제 메모리에 올라가는 주소

1.3 주소 바인딩

  • 주소를 결정하는 것
  • Symbolic Address -> Logical -> Physical
  • Symbolic은 개발자가 바라보는 줏
  • Logical은 심볼릭에서 컴파일되어 나온 주소
  • 그렇다면 logical에서 physical로 변경되는 시점은 언제인가?
1.3.1 Compile time 바인딩
  • 심볼릭에서 로지컬로 컴파일되는 시점에 물리적 주소도 함께 바인딩
  • 시작 위치 변경시 재컴파일
  • 컴파일러는 절대 코드 생성
1.3.2 Load time 바인딩
  • 프로그램이 실행될 때
  • 컴파일러가 재배치가능 코드를 생성한 경우 가능
1.3.3 Execution time (=Run time) 바인딩
  • 프로그램이 실행될 때
  • load랑 뭐가 다른가? load time 바인딩은 프로그램이 실행되면 physical 주소가 변경되지 않음. 하지만 run time은 프로그램 실행 도중에 변경이 가능
  • 물리적 주소가 바뀌므로 CPU가 주소를 참조할 때마다 바인딩 점검
  • 하드웨어적 자원이 필요 (ex: MMU)

2. Memory -Management Unit(MMU)

  • 로지컬 주소를 피지컬 주소로 매핑해 주는 하드웨어 장치
  • 사용자 프로세스가 CPU에서 수행되며 생성해내는 모든 주소값에 대해 base register(=relocation register)의 값을 더 한다.

  • limit register : 악성 프로그램이 다른 프로그램의 주소를 접근하는 것을 막기 위해 접근 가능한 최대치를 둠

3. Some 기술

3.1 Dynamic Loading

  • 프로세스 전체를 메모리에 미리 올리는 것이 아닌 해당 루틴이 불려질 때 메모리에 load하는 것
  • 메모리 이용률 향상
  • 운영체제 지원 없이 프로그램 자체에 구현 가능

3.2 Overlays

  • 다이다믹 로딩과 같음
  • 다른 것인 overlays의 단어가 생긴 이유는 옛날 메모리가 프로그램보다 작았음. 그래서 다이나믹 하게 로딩하기 위해 개발자가 수작업해야함.

3.3 Swapping

  • 프로세스 전체를 일시적으로 메모리에서 backing store로 쫒아내는 것
  • Backing store(=swap area) : 많은 사용자의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장 공간
  • 우선순위가 낮은 프로세스를 swapped out
  • 다시 원래 주소로 올리는 것은 swapped in
  • compile time, load time binding은 원래 위치로 swap in해야 함. 비어 있지 않다면 swap in이 되질 않음
  • 그래서 execution time binding 은 물리적 주소가 바뀌므로 아무 곳에나 올릴 수 있어 좋음

  • swap time은 transfer time임

3.4 Dynamic Linking

  • 링킹을 실행 시간까지 미루는 기법
3.4.1 static linking
  • 라이브러리가 내 코드에 포함되어 있음
  • 파일 크기가 커짐
  • 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비
3.4.2 Dynamic linking
  • 라이브러리가 내 코드에 포함되어 없음

  • 라이브러리를 호출하기 위해 위치를 찾기 위한 stub이라는 작은 코드가 있음
  • 라이브러리가 메모리에 있으면 루틴의 주소로 가고 없으면 디스크에서 읽어옴.
  • 운영체제의 도움이 필요

4. 물리적 메모리 할당

  • 메모리는 일반적으로 두 가지로 나뉨
  1. OS 상주 영역
  2. 사용자 프로세스 영역

4.1 연속 할당 (Contiguous allocation)

  • 프로세스가 연속적인 공간에 적재되어 메모리에 올라감
4.1.1 고정 분할 방식
  • 메모리를 영국적으로 분할하여 나눔
  • 분할당 하나의 프로그램 적재

  • 비효율 (내부조각: 프로그램이 메모리에서 실행되는데 다 필요가 없어서 남겨지는 메모리를 말함, 외부조각 발생)
4.1.2 가변 분할 방식
  • 프로그램의 크기를 고려해서 할당
  • 분할 크기, 개수가 동적으로 변함
  • 외부조각이 발생(근데 여기서 외부조각은 고정 분할 방식과 다름). 고정분할 방식에서는 메모리 크기에 맞는 프로그램이 없어서 발생. 그러나 여기서는 프로그램이 동적으로 할당되어 수행되다가 종료가 되어 남아버린 조각을 의미함
4.1.3 Hole
  • 가용 메모리 공간
  • 프로세스가 종료되어 생기는 남은 메모리들
  • 프로세스가 도착하면 수용가능한 hole을 할당
  • 운영체제는 할당공간, 가용공간(hole) 의 정보를 유지해야함
  • Dynamic storage allocation problem : 가변 분할 방식에서 size 요청에 맞는 가장 적절한 hole을 찾는 문제
  1. first fit : size 요청한 hole 가장 먼저 찾는 것
  2. best fit : 가장 이상적인 size를 가진 hole을 가져야 함. 리스트 탐색의 단점.
  3. worst fit : 가장 큰 hole에 넣는 것. 역시 list 탐색해야 하고. 의미 없는 공간 낭비

4.1.4 compaction

  • 사용중인 메모리 영역을 한군데로 몰고 hole을 몰아 큰 block을 만드는 것
  • 매우 비용이 많이 듬
  • 최소한으로 해야함.
  • 물리적 주소가 동적으로 이동 가능할때만 (run time에서만) 가능.

4.2 불연속 할당 (Noncontiguous allocation)

  • 하나의 프로세스가 메모리 여러 영역에 분산되어 올라감
4.2.1 Paging

  • 프로세스의 가상 메모리를 동일한 사이즈의 페이지를 나눔

  • 가상메모리의 내용이 페이지 단위로 불연속하게 저장됨

  • 일부는 backing store에 일부는 물리적 메모리에 저장

    4.2.1.1 Basic method
  • 물리적 메모리와 동일한 크기로 frame을 나눔

  • 로지컬 메모리를 동일 크기로 page로 나눔(frame과 같은 크기)

  • page table을 사용하여 로지컬 주소를 피지컬 주소로 변환

  • 외부 조각 발생 안함

  • 내부 조각은 발생 가능 있음(frame으로 전체 나누다 보면 맨 마지막에 frame 크기에 안맞는 조각 생김)

    4.2.1.2 Page table
  • 메인 메모리에 상주

  • page -table base register (PTBR)가 page table 가리킴

  • page -table length register(PTLR)가 테이블 크기를 보관

  • 메모리 접근 연산에 2번의 메모리 접근이 필요

  • 1번은 page table 접근, data 접근에 1번

  • 속도 향상을 위해 associative register or translation look-aside buffer(TLB)라 불리는 lookup hardware cashe 사용

4.2.1.3 2단계 & 다단계 페이징
  • 페이지 테이블안의 엔티티 수가 많아서 공간이 낭비. 페이징 테이블을 더 두어서 공간 효율성 높임

    4.2.1.4 inverted page
    • 물리적 주소를 논리적 주소로 역으로 바꿈
    4.2.1.5 shared page
4.2.2 Segmentation

  • 페이징이랑 구조는 같음
  • 세그먼트 테이블 - base(세그먼트 물리적 주소 시작), limit(세그먼트 제한)
  • STBR ( ==PTBR), STLR(==PTLR)

  • 프로세스 안의 데이터 영역의 의미에 따라서 자름
  • data, stack, code 영역에 따라 자른다는 의미.
  • 세그먼트는 의미 단위 이기 때문에 공유와 의미에 있어서 페이징보다 효과적
  • 하지만 외부조각 문제가 발생
4.2.3 Paged Segmentation

  • 기존 차이점 : 세그먼트 테이블 엔트리가 세그먼트의 기본 주소를 가지고 있는 것이 아니라 세그먼트를 구성하는 페이지 테이블의 기본 주소를 가지고 있음