ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OS - 메모리
    CS/OS 2021. 2. 9. 21:04

    메모리


    메인메모리

    • 프로그램이 실행되려면 해당 부분이 메모리에 올라가 있어야 한다.
    • 다수의 프로세스들이 나누어 사용할 수 있도록, 서로의 영역을 침범하지 않도록 유지해야 한다. 이와 같은 기능을 OS에서 제공한다.

     

    프로세스 메모리 구조

    1. stack영역: 함수 호출과 관계되는 지역변수, 매개변수가 저장된다. 함수 호출 시 생성되고 함수가 끝나면 반환된다. 메모리의 높은 주소부터 할당된다. heap영역과 같은 공간을 공유한다. 
    2. heap영역: 메모리를 동적으로 할당할 때 사용하는 메모리 영역으로 동적 메모리 영역이라고 부른다. 메모리의 낮은 주소부터 할당된다. stack영역과 같은 공간을 공유한다. 
    3. data영역: 전역 변수, 정적 변수, 배열, 구조체 등이 저장된다. 프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환된다.
    4. code영역: 실행 명령을 포함하는 코드들이 들어가는 부분이다. 읽기 전용 영역이다. 

     

    메모리 구조의 순서

    • 레지스터 -> CPU 캐시 메모리 -> 메인 메모리 -> 보조기억장치 -> 외부 기억장치 순으로 CPU와 멀어진다.
    • CPU와 멀어질수록 데이터를 저장하는 용량이 커지고 접근 속도는 느려진다. 

     

    고정 분할 기법(페이징)

    • 물리적 메모리를 n개의 고정된 크기로 분할한다. 분할된 크기보다 큰 프로그램은 적재할 수 없다.

    • 분할된 고정 단위를 페이지라고 한다.
    • 내부 단편화(고정된 크기의 메모리를 할당하면서 분할된 메모리 내부에 생기는 빈 공간)가 발생한다.

     

    가변 분할 기법(세그멘테이션)

    • 매 시점 프로그램의 크기에 맞게 메모리를 분할한다. 물리적 메모리 크기보다 큰 프로그램은 실행할 수 없다.

    • 분할된 가변 크기의 단위를 세그멘테이션이라고 한다.
    • 외부 단편화(메모리의 할당과 해제가 반복되면서 메모리 사이에 생기는 할당할 수 없을 정도로 작은 크기로 생기는 빈 공간)가 발생한다.

     

    가상 메모리 기법

    • 가장 널리 사용되는 방법으로 물리적 메모리보다 더 큰 프로그램을 실행할 수 있도록 보조 기억장치의 일부를 메모리처럼 사용하는 방법이다.

    • OS는 가상 메모리의 주소를 물리적 메모리 주소로 매핑하여 주소 변환 후 프로그램을 물리적 메모리에 올린다. 사용되고 있는 부분만 메모리에 적재하고 나머지 부분은 보조 기억 장치(SWAP영역)에 저장해 두었다가 필요할 때 적재한다.
    • 페이지 교체 알고리즘: 필요한 정보가 메모리가 아닌 보조 기억 장치에 있을 경우 페이징 폴트를 발생시킨 후 메모리에 적재하는 과정. 이때 어떤 페이지를 선택하여 보조 기억 장치의 페이지와 교체할 것인지 결정하는 알고리즘.
      1. FIFO(First In First Out): 먼저 적재된 페이지를 교체한다. 
      2. LRU(Least Recently Used): 가장 오래 사용되지 않은 페이지를 교체한다.
      3. LFU(Least Frequently Used): 가장 자주 사용되지 않은 페이지를 교체한다.

     

    단편화

    • 메모리 상에서 적재되고, 해제되는 과정에서 발생하는 메모리 사이의 사용하지 못할 정도로 작은 빈 공간을 의미한다.

    • First Fit: 메모리 할당시 가장 먼저 발견한 곳에 집어 넣는다.
    • Best Fit: 메모리 할당시 사용 가능한 공간 중 가장 작은 곳에 집어 넣는다. (공간 정렬 필요)
    • Worst Fit: 메모리 할당시 사용 가능한 공간 중 가장 큰 곳에 집어 넣는다. (공간 정렬 필요)
    • 공간 효율성: Best Fit > Fist Fit > Worst Fit
    • 시간 효율성: First Fit > Best Fit = Worst Fit

     

    reference

    goodgid.github.io/OS-Info/

    velog.io/@hygoogi/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0#%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

    kyu9341.github.io/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/2020/10/04/OS_Process_Structure/

    velog.io/@goserimgoserimgo/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0

     

    'CS > OS' 카테고리의 다른 글

    [OS] CPU 작동원리  (0) 2021.08.06
    [OS]Process VS Thread  (0) 2021.07.10
    OS - 은행원 알고리즘  (0) 2021.02.20
    OS - CPU스케줄링  (0) 2021.02.16
    OS - 프로세스와 쓰레드  (0) 2021.02.15

    댓글

Designed by Tistory.