앞으로의 공부에 접근하는 방법

chat GPT를 적극적으로 활용하여 빠른 생산성을 확보하는 것이 우선이 될 것이다.

OS를 만들 때..

  • OS knowledge: 기술 자체에 대한 지식 - 3 easy piece 등 많은 책에 잘 설명되어 있다.
  • design knowledge: 이러이러한 요구사항을 실행하기 위해서 만들어진 소프트웨어가 OS이다.
    • 왜 이렇게 만들었을까를 이해하는 것 (설계 이유)

왜 OS를 배우는가?

  • Hardware에게 직접 어셈블리로 일일히 시그널을 주는 대신 이런 복잡함을 OS가 감추어준다.
  • 이런 감추는 방법을 모른다면…
  • 인터페이스 아래에서 OS가 어떻게 추상화를 실행하는지에 대해서 알아야 잘 일할 수 있다.

mmap

  • 가상 메모리를 할당하는 함수

  • 가상 메모리의 주소를 받고 받은 용량만큼 할당하는데…

  • 비슷한 방식으로 메모리를 할당하는데도 시간은 10배 차이가 남 (1389 , 112)

  • 이러한 현상을 해석하고 이해할 수 있어야 한다.

  • 이유는 CPU의 캐시 메모리

  • 캐시에 못 올릴 정도의 큰 용량(1gb)을 할당하였어도 (캐시 메모리를 활용하지 않아도) 속도 차이가 있다. (296, 155)

  • 가상 메모리에서 계산한 만큼 실제 메모리에서 demand page 하기 때문에(첫 번째 과정에서는) 속도 차이가 나는 것이다.

OS가 만들어진 이유

  • 하드웨어가 있기 때문에
    • 하드웨어의 디테일을 감추어주기 때문에 → 추상화(abstraction)
  • 하드웨어를 어떻게 추상화 할 것인가

OS의 핵심 역할

  • Design abstractions to use hardware
    하드웨어를 사용하기 위한 추상화를 디자인
    • Define APIs for applications to use
      application들이 사용하는 API를 정의
  • Protection & Isolation
    보호와 격리
    • Contain malicious or buggy behaviors of applications
      application의 악성 또는 버그성 행위를 보관
    • Protecting OS from malicious or buggy applications
      버그를 가지고 있거나 악성 application을 OS로부터 보호
    • Isolating one application from another
      한 application을 다른 application으로부터 격리
  • Sharing resources
    리소스 공유
    • Multiplex hardware resources
      하드웨어 자원을 다중이용

추상화란?

  • The process or outcome of making something easier to understand by ignoring some of details that may be unimportant
💡 John Ouster Talks at Google

모든 computer science 에서 가장 중요한 개념 딱 하나는? -

layers of abstraction? Problem decomposition 문제를 따로 따로 쪼개서 해결하기

OS designers’ first thought

  • No one want to write programs directly handling hardware details (easy to program)
    하드웨어의 디테일을 가려서 개발하기 쉽게
  • To utilize hardware resources, OS has to run multiple applications (management unit of execution)
    실행 유닛 관리
  • Protect applications from each other (protection unit of execution)
    실행 유닛 분리

What is the conclusion?

Building an abstraction that gives an illusion that each application runs on a single machine

Let’s call it process (= executed application)

프로세스

CPU → Virtualizing CPU
Memory -> Virtual address space
Storage -> File

하드웨어는 -> 추상화되고 이렇게 추상화 된 개념들을 묶어서 프로세스라는 개념이 된다.

즉, 프로세스는 컴퓨터의 추상화다.

So far, how process looks like?

  • Each process has its own view of machine
    • Own address space / Own virtual CPU / Own Files
      virtual memory 와는 다른 개념.
      address space 는 각 프로세스마다 개별적으로 사용하는 것
      readelf -S /bin/ls를 linux에서 쳐보면 많은 섹션 헤더가 나오는데
      .text 헤더와 .data헤더가 존재함
      DISK로부터 바이너리를 읽어서 text 영역에 우리가 짠 코드, data 영역에 data를 DRAM 에 올리는 것 = 로딩
      heap과 stack은 OS가 자체적으로 만드는 것 = anonymous memory

Abstraction of address space

  • How to associate virtual address to physical address?
    • Divide each physical memory to small chunk (called page)
      (4kb정도 되는) 작은 공간(page)으로 physical memory를 쪼갠다.
    • Create mapping from virtual to physical address
      virtual memory 와 physical memory 간 관계성을 가지고 있는 mapping function을 설계

Abstraction of address space

  • How to map virtual to physical address?

    • 가상 주소와 물리 주소를 연결하는 함수를 OS가 만든다. : Paging

    • cpu 내의 memory management unit 이라는 하드웨어가 logical address 와 physical address를 번역

    • OS가 허용하지 않는(illegal) 메모리 영역(kernel address)에 접근하려고 할 때, page fault가 발생

    • fault handler는 SIGSEGL 이라는 signal을 보냄 → segmentation fault가 발생하고 프로세스가 죽는다.

  • 이 과정에서 OS가 만든 page table을 보고 hardware가 이 주소가 legal 한지 illegal 한지 구별한다.

  • TLB cache란? (Chat GPT 선생이 알려주심)
    TBL(Translation Lookaside Buffer) 캐시는 컴퓨터 아키텍처와 운영 체제에서 주로 사용되는 메모리 관리 기술 중 하나입니다. 이 캐시는 가상 메모리 주소와 실제 물리적 메모리 주소 간의 매핑 정보를 저장하고, 이를 사용하여 가상 주소에서 물리 주소로의 변환을 빠르게 수행합니다. 주로 가상 메모리 시스템에서 페이지 테이블을 관리하는 데 사용되며, 주요 목적은 주소 변환의 속도를 향상시키는 것입니다.

  • TBL 캐시의 주요 특징과 동작 방식에 대해 알아보겠습니다:

  • 캐시 역할:
    TBL 캐시는 주소 변환 정보를 저장하는 캐시 메모리로, 가상 주소를 물리 주소로 변환하는 작업을 빠르게 수행하기 위해 사용됩니다. 주로 CPU의 메모리 관리 유닛(MMU)에 위치하며, 페이지 테이블 엔트리의 일부를 저장하고 주소 변환이 필요할 때 이 정보를 사용합니다.

  • 속도 향상:
    TBL 캐시의 주요 목적은 가상 주소에서 물리 주소로의 변환 속도를 향상시키는 것입니다. 일반적으로 메모리 계층 구조에서 물리 메모리에 접근하는 것은 상대적으로 느리기 때문에 캐시를 사용하여 이러한 주소 변환을 가속화합니다.

  • 동작 방식:
    TBL 캐시는 주소 변환 요청이 들어올 때마다 가상 주소를 키로 사용하여 저장된 정보를 검색합니다. 캐시에 해당 정보가 있는 경우, 물리 주소로의 변환을 빠르게 수행할 수 있습니다. 그렇지 않으면 페이지 테이블을 조사하여 정보를 가져와야 합니다. 이러한 캐시 미스가 발생하면 속도가 저하됩니다.

  • 캐시 정책:
    TBL 캐시는 일반적으로 LRU(Least Recently Used), FIFO(First-In-First-Out) 등의 캐시 교체 정책을 사용하여 어떤 엔트리를 버릴지 결정합니다. 이를 통해 캐시의 효율성을 유지합니다.

TBL 캐시는 운영 체제와 하드웨어 사이의 인터페이스 역할을 하며, 가상 메모리 관리 시스템을 효과적으로 지원합니다. 이를 통해 프로세스 간의 격리, 메모리 보호, 가상 주소 공간 확장 및 물리 메모리 관리 등의 기능을 구현할 수 있습니다. 이러한 기술은 다중 프로세스 및 가상화 환경에서 매우 중요하며, 빠른 주소 변환은 시스템의 성능 향상에 기여합니다.

virtual address를 쓰게 된 이유

computer science 초기엔 프로세스에 physical address를 줬지만 프로세스가 RAM을 전부 쓰지 않는데 일단 할당해가는 상황이 발생했다. → 비효율적 상황
어떤 어플리케이션이 가상주소를 실제로 사용할 때, 실제 주소를 주겠다 → demand page

언제 physical memory를 할당하는가?


코어에서 실행중인 app이 멈춤 → 아직 할당되지 않은 주소를 참조하려고 함 → page fault handler 동작, 커널로 권한이 넘어간 후 allocate page → physical memory manager가 free page list에서 page를 얻어오고 0으로 초기화(anonymous page의 경우) → page fault handler 가 page table에 page를 mapping → app 다시 실행

0으로 초기화 하는 이유: process간 protection을 위해서
0으로 초기화 하지 않는다면 다른 process에서 사용한 값을 읽어올 수 있는 경우가 생긴다.

Page fault handling

two types of memory (file-backed or anonymous)

anonymous 메모리는 page fault 가 발생했을 때 0으로 초기화
file-backed 메모리는 page fault 가 발생했을 때 fd가 가리키는 disk의 파일로부터 파일을 가져옴


I/O 가 너무 오래 걸리는데 CPU가 이를 기다리면 비효율 적인 경우
디스크에서 메모리에 직접 쓰는 방법(DMA)
다 썼음을 CPU에 알려주는 법(interrupt)

Abstraction of storage

level of indirection

어떤 공간과 공간을 연결하는 mapping function을 만드는 것
cf) 포인터: 주소 → 값, virtual memory page table
storage도 적용할 수 있다.

file: a logical unit of storage 디스크의 일정 공간의 추상화

virtual address (location of data)와 physical address(disk)에서는
offset ————————————-- file block 이 둘은 indexing으로 연결된다.
offset은 뭘까?

indexing은 메모리와는 다르게 연결이 소프트웨어 기반으로 행해지는데 이는 디스크의 속도가 훨씬 느리기 때문에 굳이 하드웨어를 쓰지 않아도 괜찮기 때문이다. 그러나 요즘은 SSD의 발달로 디스크에서 파일을 읽어오는 속도가 매우 빨라졌기 때문에 OS 개발에 이를 지원하기 위한 방법을 바꾸어야 하는지에 대해 논의가 진행되고 있다고 한다.

그리고 disk는 데이터가 전원을 꺼도 남으니까 crash consistency를 신경써야 한다.

이러한 역할을 하는 software를 file system이라고 부른다.

How to map file to storage media?
• Divide a file to small chucks (called block)
• Create mappings from each block to a storage location (called block address)

대표적인 인덱싱 기법 (알아보기)

  • indirect index
  • file allocation table
  • extent tree
  • B tree
  • Radix tree

metadata of file = inode

  • Where are the internal nodes in the index? (memory?
    storage? or both?) -storage. memory는 데이터가 휘발되기 때문에..
  • Does hardware help for the indexing? - 느리니까 소프트웨어로 한다.
  • When to allocate physical block? - 저장을 할 때.
  • Any performance optimization for slow storage device? - storage는 느리니까 추가된 내용은 cache 메모리에 일단 기록하다가 저장을 하면 디스크에 기록

OS를 배워야 하는 이유

abstraction 은 여러 분야에서 사용할 수 있는 개념이기 때문
cf) 웹서버

  • 개개인의 user를 connection으로 abstraction 할 수 있다.
  • 유저간의 protection이 필요하다면 : process화
  • 필요없다면 : thread화
profile
Fear always springs from ignorance.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN