[SW정글 54일차] OS 아키텍처의 근본

rg.log·2022년 11월 11일
0

SW 사관학교 JUNGLE

목록 보기
11/31

KAIST 전산학부 권영진 교수님 OS 강의를 통해 배운 내용을 정리해보았다.
OS를 설계한 사람의 관점에서 왜 이렇게 디자인하였는가에 대한 강의다.

OS를 왜 알아야할까?

성능 차이를 파악하고 어떻게 해야 성능을 올릴 수 있을지 감을 잡기 위해서는 OS를 알아야한다.

왼쪽 코드는 같은 함수를 2번 부르지만 각각 속도 차이를 보인다. 코드를 한 번 찬찬히 뜯어보자.

  • mmap 은 메모리의 내용을 파일이나 디바이스에 매핑하기 위해 사용하는 system call이다.
  • memset 은 메모리의 내용을 원하는 크기만큼 특정 값으로 세팅하는 함수이다.

왼쪽 코드에서 mmap으로 메모리를 1MB 할당받고, addr로 할당된 메모리 주소를 받아온다. 그 후 memset은 addr에 넣을 값을 1로 세팅한다. 자, 같은 과정을 거쳐 2번의 memset을 호출하였을 때 걸린 시간의 차이는 왜 10배나 날까?
캐시를 사용했기 때문이다. 첫 호출에서는 DRAM에서 memset을 수행하지만, 두번째는 캐시 메모리에서 memeset을 수행한다. 이전에 작업한 내역이 캐시 메모리에 저장되어 있기에 캐시 메모리에서 바로 가상 주소로 접근하므로 10배의 속도 차이가 생겨버린다.

이번에는 1MB 크기가 아닌 1GB라 생각해보자. 캐시 메모리는 1GB만큼 저장할 공간이 없기에 캐시가 통하지 않을 것으로 예측된다. 하지만.. 오른쪽 코드를 보면 2배의 차이가 나있다..!
이는 페이지 콜 매커니즘으로 인한 것이다. 가상 메모리에서 실행한 mmap은 DRAM의 물리 메모리를 전부 제공하지 않고 가상 메모리를 준다. 이 때 page fault가 발생한다. 첫 할당이기에 아직 물리 메모리는 매핑되지 않아 exception을 띄우고 memory allocation을 해주는 것이다.

왜 OS가 요구됬는가?

하드웨어에서 application을 돌리다보니까 나온 것이 OS다. OS는

  • API 제공
    application 프로그래밍을 하며 하드웨어를 사용하기 위한 API를 제공하고
  • 숨김
    하드웨어의 디테일을 숨겨준다.

결국 high level의 목적을 위해 어떤 디자인을 했느냐가 OS의 핵심이다. 예를 들면, 프로세스간의 공유(통신)를 하고 싶다면 그를 위해 어떤 디자인을 할 것인가.

OS의 핵심 역할

  • 하드웨어 사용을 위한 설계 추상화
    이해하고 사용하기 쉽도록 디테일을 숨기고 api와 같은 인터페이스를 사용한다.
  • 보호 및 격리
    우리와 같은 프로그래머가 코드를 잘못 건드려서 하드웨어를 날린다면..?! 보호와 격리는 필수다.
  • 자원의 공유
    OS는 여러 어플리케이션을 실행하기 위해서 자원은 한정적이므로 공유되야 한다.

어떻게 하드웨어 사용을 위한 설계 추상화했나

  • CPU: virtualizing CPU로 추상화
  • Memory: virtual address space로 추상화
  • Storage: File로 추상화

프로그램의 추상화는 Process

프로세스는 프로그램의 실행단위를 추상화한 것이다. 각 프로세스는 자신이 하나의 컴퓨터를 가진 것처럼 행동한다.

0개의 댓글