itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • AppleDevloperAcademy
  • CoreData
  • SWIFT
  • crud
  • POSTECH
  • 어플
  • 독립서점
  • 세그멘테이션
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • CS
  • 연결리스트
  • SwiftUI
  • 개발자
  • nosql
  • 생활코딩
  • 킨디
  • ios
  • binding
  • 점주
  • mongodb

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

CS/운영체제

[CS - 운영체제] 메모리 (Memory)

2023. 1. 19. 19:19

페이징 (Paging)

사전 개념

  • 논리적 주소 (Logical Address)
    • 각 프로세스가 메모리에 적재되기 위한 독자적인 주소 공간인 논리적 주소 할당
    • 프로세스마다 독립적으로 할당되며 0번지부터 시작
  • 물리적 주소 (Physical Address)
    • 프로세스가 실제 메모리에 적재되는 위치
  • 주소 바인딩 (Address Binding)
    • 프로세스의 논리적 주소가 실제로 어떤 물리적 주소에 있는지 (매핑되어 있는지) 확인하는 과정

 

페이징 (Paging) 개념

  • 프로세스의 메모리와 물리적 메모리를 일정한 크기, 즉 page 단위로 미리 나누어, 물리적 메모리의 서로 다른 위치에 page 단위로 저장하는 메모리 관리 기법
    • 미리 분할해두면 메모리 할당이 빠르기 때문!
  • 모든 프로세스는 각각의 논리적 주소의 page가 물리적 주소의 어떤 page에 있는지 변환시켜주는 page table을 가짐

 

메모리 단편화 (Memory Fragmentation)

  • 내부 단편화
    • 프로세스 메모리에 단편화가 생기는 경우
    • 프로세스 메모리를 page 단위로 나누다가 맨 끝 부분이 사이즈가 딱 안맞아 떨어지고 페이지에 남는 부분이 생김
  • 외부 단편화
    • 물리적 메모리에 단편화가 생기는 경우
    • page들이 물리적 메모리에 적재될 수록, 중간 중간에 page가 들어가기 애매만 크기만큼 낭비되는 공간들이 생김

 

 

세그멘테이션 (Segmentation)

개념

  • 프로세스 메모리를 논리적 의미 단위인 segment로 나누어 물리적 메모리에 연속되지 않게 할당하는 기법
  • 일반적으로 Code, Data, Heap, Stack 등의 기능 단위로 segment를 정의하는 경우가 많음
  • 프로세스의 segment 주소를 물리 메모리의 주소로 바인딩하는 segment table 가짐

 

메모리 단편화 (Memory Fragmentation)

  • 내부 단편화
    • 프로세스 메모리를 기능 단위인 segment로 나누기 때문에 단편화가 발생하지 않음
  • 외부 단편화
    • 서로 다른 크기의 segment들이 메모리에 적재, 제거되다 보면 사이 사이 낭비되는 공간이 생김

 

Paged Segmentation

  • Segmentation 후 Paging하는 기법
  • segment를 기본으로 하되, 이를 다시 page로 나누어주는 기법
  • 프로세스 메모리 → segment 단위로 나누기 → 이를 다시 page 단위로 나누기
  • segmentation의 외부 단편화 해결 가능

 

 

가상 메모리 (Virtual Memory)

개념

  • 프로세스 전체가 물리 메모리에 적재되지 않더라도 실행 가능하게 하는 기법
  • 사용자 프로그램이 물리적 메모리보다 커도 실행 가능하다는 장점
    • → 개발자는 메모리 크기 문제 염려할 필요 없이 쉽게 프로그램 작성 가능
  • 운영체제는 가상 메모리 기법을 통해 프로그램의 논리적 영역에서 필요한 부분만 물리적 메모리에 적재, 나머지는 디스크(swap)에 적재

 

요구 페이징 (demand paging)

“CPU가 가상 메모리 기법으로 프로세스의 ‘필요한 부분’에 접근할 때, 이 부분을 page 단위로 나눈 것” 
  • ‘당장 사용될’ 주소 공간을 page 단위로 메모리에 적재하는 방법
  • CPU가 특정 page에 대한 요청을 하면, 이를 메모리에 적재
  • 메모리 사용량, 프로세스 전체를 메모리에 적재하는 입출력 오버헤드 감소
  • 유효∙무효 비트 (valid∙invalid bit)를 두어 각 page가 메모리에 존재하는지 표시
  • 유효 → 메모리에 있음, 무효 → 디스크(swap)에 있음
  •  

 

Page Fault

“근데 만약에 CPU가 무효 비트에 접근하면 어떻게 됨? 이 상황이 Page Fault”
”어라 (물리적 메모리에) 없네 ,,, 긁적 ,,, (디스크에서) 가져올게 ,,,”
  • CPU가 무효 비트(invalid bit)라고 표시된 page에 엑세스하는 상황
  • page fault가 발생하면 MMU가 page fault trap을 발생
  • 순서
    1. CPU가 page N 참조
    2. Page table에서 무효 비트임을 확인
    3. MMU에서 page fault trap 발생 (커널에 디스크에서 메모리에 실으라고 요청)
    4. 디스크에서 page N을 빈 프레임에 적재, page table 업데이트 (invalid → valid)
    5.  

 

페이지 교체 알고리즘 (Replacement Algorithm)

“Page Fault 나서 메모리로 가져오는데, 만약 자리 없으면 우짬? 누구 자리 뺏어야할 것 같은데 …”
-> 이에 대한 방법이 페이지 교체 알고리즘
  • page fault 발생 시, 디스크에서 메모리로 페이지를 적재해야 함. 이때 물리적 메모리에 자리가 부족할 경우, 메모리의 페이지를 디스크로 옮겨서 자리를 확보하는 방법이 **페이지 교체(page replacement)**라고 하고, 어떤 페이지를 교체할 것이냐 결정하는 알고리즘이 페이지 교체 알고리즘 (replacement algorithm)
  • 페이지 교체 알고리즘은 최대한 page fault가 적게 일어나도록 도와줘야 함
  • 따라서 앞으로 참조될 가능성이 적은 페이지를 선택해 교체하는 것이 성능 향상에 도움이 됨
  • 페이지 교체 알고리즘 종류
    • FIFO : 메모리에 올라온지 가장 오래된 페이지 교체
    • 최적 페이지 교체 : 앞으로 가장 오래 사용되지 ‘않을’ 페이지 교체. 구현 어려움
    • LRU (Least Recently Used) : 가장 오래 사용되지 ‘않았던’ 페이지 교체
    • LFU (Least Frequently Used) : 참조 횟수가 가장 적은 페이지 교체. 비용 대비 성능이 안좋음
저작자표시 (새창열림)

'CS > 운영체제' 카테고리의 다른 글

[CS - 운영체제] 스레드와 멀티 스레드 (Feat. 멀티 프로세스 vs 멀티 스레드)  (0) 2023.04.04
[CS - 운영체제] 프로세스와 멀티 프로세스 (Process, Multi Process)  (0) 2023.04.01
    'CS/운영체제' 카테고리의 다른 글
    • [CS - 운영체제] 스레드와 멀티 스레드 (Feat. 멀티 프로세스 vs 멀티 스레드)
    • [CS - 운영체제] 프로세스와 멀티 프로세스 (Process, Multi Process)
    itisjustK
    itisjustK

    티스토리툴바