[면접을 위한 CS 전공지식 노트] 운영체제 - 메모리

Yijun Jeon·2024년 1월 29일
0

CS 전공지식

목록 보기
15/21
post-thumbnail

운영체제와 메모리

💡 운영체제 란?

운영체제(OS, Operating System)는 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스

  • 한정된 메모리나 시스템 자원을 효율적으로 분배하는 일꾼

펌웨어 : 운영체제와 유사하지만, 소프트웨어를 추가로 설치할 수 없음


메모리 계층

⭐️ 메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성됨
👉 계층 위로 올라갈수록 가격⬆️ / 용량 ⬇️ / 속도 ⬆️

  • 레지스터
    • CPU 안에 있는 작은 메모리
    • 휘발성
    • 속도 가장 빠름
    • 기억 용량 가장 적음
  • 캐시
    • L1, L2 (+L3) 캐시
    • 휘발성
    • 속도 빠름
    • 기억 용량 적음
  • 주기억장치
    • RAM
    • 휘발성
    • 속도 보통
    • 기억 용량 보통
  • 보조기억장치
    • HDD, SSD
    • 비휘발성
    • 속도 느림
    • 기억 용량 많음

캐시

💡 캐시 (cache) 란?

데이터를 미리 복사해 놓은 임시 저장소로, 장치간의 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
👉 캐시를 직접 설정할 때는 지역성의 원리 를 기반

  • 시간 지역성 : 최근 사용한 데이터에 다시 접근하려는 특성
  • 공간 지역성 : 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성

⭐️ 캐시히트와 캐시미스

  • 캐시히트 : 캐시에서 원하는 데이터를 찾음
  • 캐시미스 : 데이터가 캐시에 없어 메모리로 가서 데이터를 찾아옴
    • 시스템 버스를 기반으로 작동하기 때문에 느림

❗️ 캐시 매핑 : 캐시가 히트되기 위해 매핑하는 방법

  • CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고받을 때를 기반으로 설명
  • 매핑을 어떻게 하느냐에 따라 레지스터가 캐시 계층으로써 역할을 잘 할 수 있음

🔗 캐시 매핑 분류

  • 직접 매핑 (directed mapping)
    • 메모리 블록을 정해진 하나의 캐시 블록에만 매핑
    • 처리가 빠름
    • 충돌 발생이 잦음
  • 연관 매핑 (associative mapping)
    • 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑
    • 충돌이 적음
    • 속도가 느림
  • 집합 연관 매핑 (set associative mapping)
    • 직접 매핑과 연관 매핑을 합침
    • 순서는 일치시키지만 집합을 둬서 저장
    • 메모리 블록을 정해진 블록의 집합 내 어디든 매핑
    • 검색 효율적

🔗 웹 브라우저의 캐시

  • 쿠키 : 만료기한이 있는 키-값 저장소
  • 로컬 스토리지 : 만료기한이 없는 키-값 저장소 / 도메인 단위로 저장
  • 세션 스토리지 : 만료기한이 없는 키-값 저장소 / 탭 단위로 저장

참고 : 데이터베이스 시스템에도 메인 DB 위에 레디스(redis) 데이터베이스 계층을 캐싱 계층으로 두기도 함


메모리 관리

💡 컴퓨터 내의 한정된 메모리를 극한으로 활용해야 함!

가상 메모리

💡 가상 메모리 (virtual memory) 란?

컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여, 사용자들에게 매우 큰 메모리로 보이게 만드는 메모리 관리 기법

  • 가상 주소 (logical address) : 가상적으로 주어지는 주소
    • 페이지 테이블로 관리
      • 가상 - 실제 매핑, 프로세스 주소 정보
      • 속도 향상을 위해 TLB 사용 - 페이지 테이블에 있는 리스트 보관하는 캐시 계층
  • 실제/물리 주소 (physical address) : 실제 메모리상에 있는 주소
  • 가상 주소는 메모리관리장치 (MMU) 에 의해 실제 주소로 변환

❗️ 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 주소에 접근할 경우 페이지 폴트 발생
👉👉 스와핑

  • 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮김
  • 하드디스크의 일부분을 마치 메모리처럼 불러와 씀

페이지 (page) : 가상 메모리를 사용하는 최소 크기 단위
프레임 (frame) : 실제 메모리를 사용하는 최소 크기 단위

스레싱

💡 스레싱 (thrashing) 이란?

메모리에 너무 많은 프로세스가 동시에 올라가면 메모리의 페이지 폴트율이 높아져 스와핑이 많이 일어나서 발생하는 심각한 성능 저하 초래 현상

👉 메모리를 늘리거나, HDD를 SSD로 교체

🔗 운영체제에서 해결 방법

  • 작업 세트(working set)
    • 지역성을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드
  • PFF(Page Fault Frequency)
    • 페이지 폴트 빈도를 조절하는 방법 - 상한선 & 하한선
    • 상한선에 도달 -> 프레임을 늘림
    • 하한선에 도달 -> 프레임을 줄임

메모리 할당

💡 메모리에 프로그램을 할달할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당

🔗 연속 할당 : 메모리에 연속적으로 공간을 할당하는 것

  • 고정 분할 방식 (fixed partition allocation) : 메모리를 미리 나누어 관리
    • 융통성이 음
    • 내부 단편화 발생
  • 가변 분할 방식 (variable partition allocation) : 프로그램의 크기에 맞게 동적으로 메모리를 나눠서 사용
    • 외부 단편화 발생

      최초적합(first fit) : 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당
      최적적합(best fit) : 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당
      최악적합(worst fit) : 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당

❗️내부 단편화 (internal fragmentation) : 메모리를 나눈 크기보다 프로그램이 작아서 공간이 남는 현상
❗️외부 단편화 (external fragmentation) : 메모리보다 프로그램이 커서 들어가지 못하는 공간이 발생하는 혆상

🔗 불연속 할당 : 메모리에 연속적으로 할당하지 않음 (현대 운영체제가 사용)

  • 페이징 (paging) : 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스 할당
    • 홀의 크기가 균일해짐
    • 주소 변환이 복잡함
  • 세그멘테이션 (segmentation) : 페이지 단위가 아닌 의미 단위인 세그먼트로 나누는 방식
    • 코드 영역, 데이터 영역, 스택 영역, 힙 영역
    • 공유와 보안 측면에서 장점
    • 홀 크기가 균일하지 않음
  • 페이지드 세그멘테이션 (paged segmentation) : 두 장점을 결합
    • 의미 단위인 세그먼트
    • 동일한 크기의 페이지 단위

페이지 교체 알고리즘

💡 스와핑이 많이 일어나지 않도록 설계해야 함!

🔗 페이지 교체 알고리즘 종류

  • 오프라인(offline) 알고리즘 : 가장 먼 미래에 참조되는 페이지를 선택
    • 최적의 알고리즘 - 실현 불가능
    • 성능 비교에 대한 상한기준 제공
  • FIFO : 가장 먼저 온 페이지 교체
  • LRU (Least Recently Used) : 참조가 가장 오래된 페이지 교체
    • 각 페이지마다 계수기, 스택 필요
    • 보통 해시 테이블 & 이중 연결 리스트로 구현
  • NUR (Not Used Recently) : LRU에서 발전한 clock 알고리즘
    • 시계방향으로 돌면서 0비트를 찾고 0을 찾은 순간 해당 프로세스를 교체하고 해당 부분을 1로 바꿈
  • LFU (Least Frequently Used) : 가장 참조 횟수가 적은 페이지 교체

0개의 댓글