• mmap이 뭔가? 웹 서버에서 사용했던 거

  • memset

  • 캐싱이란? 왜 캐싱을 하면 성능 차이가 많이 나는가?

  • 페이지폴트란 무엇인가? 왜 발생하지? 페이지폴트가 발생했을 때, 가상메모리 기술에서 어떤 일이 일어나길래 시간 차이가 발생하는지?

    • 폴트란 무엇인가?
  • OS가 필요한 이유?

    • 여러 프로그램이 동시에 하드웨어에 접근할때, 순서를 제어하고 충돌이 안 생기도록 하기 위해
    • 하드웨어마다 동작 방식이 약간씩 다르기에, 각 하드웨어에 접근하는 방식을 추상화시켜서 동일한 방식으로 하드웨어를 사용할 수 있도록 함으로써, 하드웨어 종류가 바뀌어도 소프트웨어 코드를 수정할 필요가 없어진다
  • 추상화란?

    • 세부사항은 보지않아도 되게끔 하여, 이해하기 쉽도록 만드는 기법
    • 문제를 푸는 데 필요한 부분만 남기는것
  • 프로세스는 메모리, 코드, CPU, I/O 등을 추상화한 것 → 즉, 프로세스는 컴퓨터를 추상화한 것

  • 스레드를 프로세스라고 부르지 않는 이유?

    스레드는 프로세스처럼 메모리 공간이 분리되어있는게 아니라, 하나의 프로세스 안(메모리 영역)에서 공유되기 때문에 프로세스라고 하지 않음. 스레드는 코어를 추상화했다고 할 수 있음

  • 물리메모리에 언제 할당하는가?

    • 요구페이징(demanding page)

      프로세스들은 이만큼 할당해달라고 하지만, 실제로는 안 쓰는 명령어들이 많아서, 필요할때 적재

      1. 페이지(들) 할당

      2. 프리 페이지 리스트로부터 페이지 얻기

      3. 페이지(들)을 0으로 채워넣기

        프로세스는 컴퓨터를 추상화한 것 → 프로세스들끼리 메모리 공간을 침범하면 안됨 → 기존에 사용하던 페이지의 내용들을 0으로 채워넣지 않고 그대로 사용하면(= 쓰레기값), 추상화 rule에서 벗어나는 행위

      4. 페이지(들)를 페이지 테이블에 매핑

  • Page fault handling

    메모리의 두 가지 타입 : anonymous & file-backed ⇒ 페이지를 두 가지 형태로 구분지을 수 있음

    • 아무 근거 없는 페이지 & 하드디스크와 연관된 페이지로 나눌 수 있다
  • handling I/O events

    1. 인터럽트
      1. 기기가 CPU에게 필요할 때 요청
    2. Polling
      1. CPU가 기기를 주기적으로 체크
      2. 인터럽트가 계속 들어오는 경우? 인터럽트 기반 입출력은, 먼저 인터럽트 핸들러를 off하므로 다음에 들어오는 인터럽트들은 무시되는 형식 → 인터럽트가 자주 발생하는 경우에는 polling 방식을 사용하는 게 좋다
    3. DMA 입출력
      1. file-backed 기반 페이지의 경우 → DMA 입출력을 통해 조금 더 효율적으로 메모리에 필요한 페이지를 적재할 수 있음
    4. 프로그램 기반 입출력
  • abstraction of storage

    file : a logical unit of storage

    • 식별자 : pathname = path + filename
    • 파일 안에서의 위치 = offset
    • 파일 = 물리 스토리지의 추상화
      • filename, offset ⇒ location in storage
    • <filename, data, metadata> ⇒ <a set of blocks>
      • indexed allocation

      • 느려서 파일시스템을 하드웨어로 만드는게 의미가 없음

        즉, 운영체제가 직접 파일시스템을 관리하므로 파일시스템 종류는 매우 다양

      • 파일 시스템 = 블록을 관리하는 기술

  • consistency : atomicity & durability

    항상 최신 데이터는 메모리에 존재. 그러나 휘발성이므로 디스크에 내용을 갱신시킬 필요가 있다. 디스크와 메모리 간 일관성을 보장해야한다.

    • 원자성 : 메모리 내 데이터는 스토리지 기기에 원자적으로 적용되어야한다.
      • 메타 데이터와 실제 데이터가 바뀔 거면 둘 다 바뀌든, 아니면 둘 다 안 바뀌도록 해야한다
    • 지속성 : 데이터는 스토리지에 있어야한다.

    <aside> 🥕

    POSIX 계열에서의 파일 시스템은 consistency를 보장하지 않는 방식 → 개발자가 consistency를 보장하도록 코드를 작성해야한다.

    </aside>