ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 💻 [OS 오퍼레이팅시스템] #14 | 메모리 관리 | 메모리 관리 요구사항, 주소 종류, Buddy System, Paging, Segmentation
    CS/OS 2022. 6. 13. 10:51

     

     


    💻 용어 정리

     - 정적 static 할당 
    컴파일 타임에 실행되어 실행 전에 미리 할당 된다.

    static 변수, 전역 변수


     - 동적 dynamic 할당 
    런타임에 실행되어 요청 시에 할당된다. 

    실행 시점에야 메모리를 얼마나 사용할지 알 수 있는 상황이 있기 때문에 쓰인다(ex. 사용자의 입력으로 메모리 크기 알 수 있다던지)

    new, malloc

     

     - 메모리 관리 
    2부분으로 나뉜다.

    1) OS(monitor, kernel)

    2) User part : 다수의 프로세스로 나뉜다. 나뉘는 일은 OS가 하며 멀티프로그래밍 시스템의 핵심이다 -> memory management


    💻 메모리 관리 요구사항

     - 1) Relocation 재배치 
    다수의 프로세스 간 메인 메모리는 공유된다.

    - 프로그램이 어디에 배치될지 실행되기 전까지 알 수 없다(예측 불가능)

    - 프로그램이 할당되어도 다시 이동할 가능성이 있다. utilization을 극대화하기 위해 프로세스가 swap in, out될 수 있게 해줘야한다.

    프로세스를 메모리의 다른 영역으로 relocate 재배치 할 수도 있다.

    재배치를 위한 HW

     


     - 2) Protection 보호 
    원치 않은 다른 프로세스의 접근으로부터 보호되어야 한다.

    - 프로세스는 그 프로세스가 할당된 공간만 접근해야한다.

    - 프로그램의 위치가 예측불가능이기 때문에, 컴파일 타임에  절대 주소를 알 수 없다.

    - 동적 주소 변환을 대부분 허용한다.

    - 프로세스에 의한 모든 메모리 참조는 런타임에 체크되어야 한다. 프로세서는 실행지점에서 그러한 명령어를 중단할 수 있어야 한다.

     

     - 3) Sharing 공유 (위 보호 개념과 배타적) 
    몇몇 프로세스들이 메인 메모리의 같은 부분을 접근하는 것을 허용하는 융통성이 있어야한다.

    - 몇몇 프로세스들이 같은 프로그램을 실행중이라면, 각 프로세스들이 (각자 독립본을 갖는게 X) 같은 부분을 공유하는 것이 효과적이다.

    - kernel 코드와 데이터도 공유 주소 공간에 있고  모든 유저 프로세스에 의해 공유된다.

     

     - 4) 논리적 구성 Logical Organization 
    실제 physical 메모리와 프로그램 구성은 다르다.

    - 대부분의 프로그램은 모듈로 구성되어있고, 수정 불가능한 부분과 데이터를 수정 가능 부분으로 나뉘어져 있다.

    - Base & Bounds의 문제 : 주소 공간을 물리적 메모리에 연속적으로 매핑

    - 모듈레벨에서 sharing과 protection을 제공할 수 있고 효과적으로 주소 공간을 사용할 수 있다.

     

     - 5) 물리적 구성 Physical Organization 
    컴퓨터 메모리는 주기억장치와 보조기억장치로 나뉜다.

    두 메모리 간 information을 옮기는 작업은 시스템 책임적인 일이다.

    디스크에서 메인 메모리로 부분적재가 가능하다 (중요한 코드 등 필요한 부분만 적재)


    💻 주소 종류

     - 1) Symbolic 주소 
    소스코드에 사용된 주소. 변수 이름, 상수, 명령어 label


     - 2) Logical 주소(relative address, virtual address) 
    프로세스 내 위치를 지정(page 숫자와 offset으로 표현)

    주소 공간에서 0부터 시작

    컴파일 타임에 컴파일러가 symbolic 주소를 logical 주소로 변환한다.

     

     - 3) Physical 주소(absolute address) 
    메인 메모리 내 실제 위치를 지정

    프로그램이 메인메모리에 로드 되면 런타임에 절대 주소로 변환된다.

     

     - 주소 공간 
    메모리의 프로세스의 logical address

     

     - 주소 변환 
    페이지 사이즈와 프레임 사이즈는 반드시 2의 지수 승이여야 한다.

    만약 table 사용하면 table에 대한 overhead(추가적인 메모리 접근)이 단점이다.

    - 절대 주소(# page, offset)와 상대주소는 같다.

    - 실행 시 동적 주소 변환을 위해 하드웨어에서 기능 구현

     

     - 동적 주소 변환 

    MMU의 부분, 각 CPU의 하드웨어 레지스터들- 가상 주소를 절대 주소로 변환- 주소 공간을 physical 메모리의 어느 곳에 위치할 수 있도록 한다.- 주소 변환은 프로세스에게  transparent하다. (프로세스들은 절대 주소를 모른다)런타임에 adder사용, 가상주소 + Base주소를 해서 가상 주소로 바꾼다.


    💻 연속적인 할당

     - Fixed Partioning 고정 분할 
    1) equal size partitions

    미리 시작 전에 partition을 여러개로 나누고 프로세스 요청 오면 그때그때 partition 아무거나 할당

    장점 단점
    단순하고 직관적
    구현이 쉬움
    멀티프로그래밍 정도에 제약
    파티션의 개수 뿐 아니라 크기도 제약
    Internal Fragmentation (Utilization 감소)
    프로그램이 partition보다 커서 안들어갈 수도.
    프로그램이 partition에 비해 너무 작으면 낭비

     

    2) unequal size partitions

    여러 비균등한 partitions들 미리 할당, 요청 오면 할당해줌

    방법 1: 단일 큐가 존재해서 가장 딱 맞는 파티션 할당, 방법 2: 멀티큐가 존재하여 각 프로세스 당 딱맞는 곳에 큐에 대기

    장점 단점
    구현이 쉬움
    OS 오버헤드 적음

    Internal Fragmentation로 utilization 감소
    active 프로세스 수 고정
    size 크면 실행 불가

     

     

     - Dynamic Partioning 동적 분할 

    파티션이 미리 생성되는게 아니라 동적으로 생성된다

    프로세스에게 런타임에 메모리 할당 요청이 오면 요청한 만큼의 메모리를 할당해준다 -> Internal Fragmentation X

    Memory compaction 메모리 압축 필요 : OS가 프로세스위치를 조정하여 모든 프리 메모리 공간을 모아준다.

     

    [ 메모리의 free 블럭들을 고르는 placement 알고리즘 3가지 ]

    방법 1 First-fit : 처음부터 순회하면서 후보 고름

    방법 2 Next-fit : 마지막에 placement한 위치부터 순회

    방법 3 Best-fit : 요청한 size와 가장 잘 맞는 블럭을 찾는다 -> 다 순회하는거 cost 큼, compaction 자주 해야함

    방법 4 Worst-fit : 요청한 size와 가장 잘 안맞는 블럭을 찾는다

    장점 단점
    Internal Fragmentation X
    메모리 사용에 더 효과적
    External Fragmentation
    Compaction하는데 CPU time 낭비

     

     - Buddy System 
    메모리 요청이 오면 커널이 free-space를 나눈다. 각 블록을 buddy 블록이라고 한다.

    메모리 블럭은 2^k word 사이즈가 가능하다.

    요청한 사이즈 s가 2^(U-1) < s ≤ 2^U 이면 블럭이 할당된다. 아니라면 2^(U-1) 사이즈로 블록이 나뉜다.

    2^(U-2) < s ≤ 2^(U-1)이면 할당되고 아니라면 또 두개로 나뉜다. s보다 같거나 큰 블록을 찾을 때 까지 계속된다.

    요청된 블럭을 회수하면, 커널이 두 공간을 합친다.


    💻 불연속적 할당 (non-contiguous)

     - Paging 분산 적재 

    프로세스가 동일한 작은 고정된 사이즈의 chunk로 나뉜다.메모리도 고정된 같은 사이즈의 chunk로 나뉜다.

    장점 : 내부 단편화가 마지막 조각에만 발생된다. 외부 단편화 X

     

    * page : 프로세스 조각으로 일반적으로 4KB* frame (page frame) : 메모리 조각으로 페이지가 들어갈 수 있는 슬롯. page와 동일한 사이즈로 나뉜다.* page table (page mapping table) : PT또는 PMT라고 부름. 각 페이지의 frame 위치를 포함하며 각 프로세스 당 OS가 유지한다.

     

     - 주소 변환 Paging 
    1) logical 주소에서 왼쪽 n 비트를 페이지 넘버라고 한다

    2) 페이지 넘버를 인덱스처럼 사용하여 프로세스 페이지 테이블에서 프레임 넘버 k를 찾는다

    3) logical 주소에서 오른쪽 m 비트를 offset이라고 한다. 

    4) 절대 주소의 시작점은 k*(2^m) 절대 주소는  k*(2^m) + offset.


     

     - Segmentation 분산 적재 
    주소 공간을 segment로 나누고 각 세그먼트를 절대 주소에 독립적으로 매핑한다.

    프로세스는 가변길이의 세그먼트로 나뉜다. (code segment, heap segment, stack segment)

     

    * Segment table (segement mapping table) : 각 세그먼트의 최대 사이즈와 시작주소를 포함하며 각 프로세스당 OS가 유지한다.

    장점 단점
    dynamic partitioning처럼 내부 단편화 X
    코드 세그먼트 share와 protect가 가능
    외부 단편화 0 -> compaction 필요

     

     - 주소 변환 Sementation 

    1) logical 주소에서 왼쪽 n 비트를 세그먼트 넘버라고 한다2) 세그먼트 넘버를 인덱스처럼 사용하여 세그먼트 테이블에서 세그먼트의 절대 주소의 시작점을 찾는다.3) logical 주소에서 오른쪽 m 비트를 offset이라고 한다. offset과 세그먼트의 길이보다 같거나 크면 주소는 유효 X4) 절대 주소는 시작점 +  offset이다.

     


     

    Summary