[OS] 권영진 교수님 OS 강의

Youngeui Hong·2023년 10월 2일
1

이번 주에는 권영진 교수님의 OS 특강이 있었는데 너무 좋은 시간이었다 🥹

그동안 책으로 공부할 때에는 지식을 습득하기에 급급했던 것 같은데, 근본으로 돌아가서 "그래서 OS의 이 기술이 왜 필요한가?"에 대해서 고민해볼 수 있었다.

수업에서 배운 내용을 잘 정리해보자!

OS는 왜 필요한가?

  • OS는 프로그램이 하드웨어를 사용할 수 있도록 API (Application Programming Interface), 즉, system calls를 제공한다.
  • 우리가 하드웨어를 쉽게 사용할 수 있도록 하드웨어의 복잡한 디테일을 감춰준다.
    • "하드웨어 메모리에 어떤 값을 쓰고, 어떤 레지스터에 값을 써서 하드웨어 불이 켜지게 해라." 이런 식으로 어셈블리어를 직접 작성해야 한다면 프로그램을 만들기가 너무 어려울 것이다. OS는 이렇게 복잡하게 명령을 내리지 않아도 우리가 하드웨어를 다룰 수 있도록 복잡함을 감춘 인터페이스를 제공한다.

👉🏻 결국 OS의 핵심은 Abstraction에 있다!

  • 또한 애플리케이션의 Protection과 Isolation을 돕는다.

우리는 왜 OS를 공부해야 할까?

개발자는 왜 OS에 대해 알아야 할까? 아래의 예시를 보면서 생각해보자.

아래에서 memset(addr, 1, 1 << 20)이라는 똑같은 코드를 두 번 실행했는데, 첫 번째 실행에는 1389 usec이 걸린 반면, 두 번째 실행에는 112 usec이 걸렸다. 왜 같은 코드인데 소요된 시간이 다른 걸까?

이는 바로 CPU 캐시와 관련이 있다.

mmap은 프로세스의 가상 주소 공간에 새로운 메모리 매핑을 생성하는 명령어이다. 이때 mmap을 실행한다고 해서 바로 DRAM(Dynamic Random-Access Memory, 컴퓨터의 메인 메모리)에 메모리가 할당되는 것이 아니라, memset으로 실제로 값을 할당하려고 할 때 DRAM에 메모리가 할당된다.

첫 번째 memset이 실행될 때에는 DRAM으로부터 메모리를 할당 받아오는 데에 걸리는 시간이 있는데, 두 번째 memset이 실행될 때에는 CPU Cache에 접근하므로 DRAM으로부터 메모리를 할당 받는 시간만큼 줄어든다.

개발자는 OS에 대한 지식이 있어야 이러한 차이가 발생하는 이유를 알고 또 대처할 수 있을 것이다.

OS와 Abstraction

💡 Process는 컴퓨터의 추상화이다.

  • 프로세스(Process)는 현재 실행되고 있는 프로그램의 인스턴스를 의미한다. 우리는 프로세스가 있기 때문에 하나의 컴퓨터에서 여러 개의 프로그램을 돌릴 수 있고, 마치 각각의 프로그램마다 별도의 컴퓨터의 독립적인 공간을 할당 받은 것처럼 느낄 수 있다.

💡 OS는 컴퓨터의 하드웨어 자원을 추상화하고, 이를 Process에 매핑한다.

  • 컴퓨터의 CPU는 Virtualizing CPU로 추상화된다.
  • 컴퓨터의 Memory는 Virtual address space로 추상화된다.
  • 컴퓨터의 Storage는 File로 추상화된다.

Process의 등장 배경

OS는 절대적인 지식 같은 것이 아니라, 어떤 요구사항이 있었기 때문에 그에 맞춰 만들어진 design knowledge이다.

이러한 관점에서 Process가 왜 등장하게 된 것인지 그 배경을 알아보자.

  • easy to program: 하드웨어의 복잡한 디테일을 다뤄가면서 프로그램을 만들고 싶지 않다.
  • management unit of execution: OS는 여러 개의 애플리케이션을 동시에 실행할 수 있어야 한다.
  • protection unit of execution: 애플리케이션은 독립적으로 실행될 수 있어야 한다.

💡 각각의 애플리케이션이 마치 별개의 독립적인 컴퓨터에서 돌아가는 것처럼 느낄 수 있도록 컴퓨터의 추상화를 만들자 👉🏻 Process

Process의 구성

각각의 Process마다 별도의 address space(아래 그림과 같은), virtual CPU, files가 존재한다.

Address Space의 추상화

Virtual Address와 Physical Address

Process는 각각 가상의 메모리 공간을 할당 받는데, 여기에서 사용되는 주소가 Virtual Address이고, 실제 메모리 상의 물리적인 주소가 Physical Address이다.

Virtual Address와 Physical Address의 매핑

  • CPU와 Memory 사이에는 MMU(Memory Management Unit)라는 칩이 있는데, 이 칩이 가상 메모리와 물리 메모리 간의 매핑, 페이지 테이블 관리 등을 담당한다.

  • 가상 주소와 물리 주소 간의 매핑이 어떻게 이루어지는지 아래 그림을 통해 좀더 구체적으로 살펴보자.
    • Processor(CPU)가 가상 주소를 통해 메모리 엑세스를 요청한다.
    • MMU(Memory Management Unit)은 가상 주소를 실제 물리주소로 변환한다.
    • 실제 물리주소를 찾으면 가상 메모리 주소 공간의 일부가 실제로 Main Memory에 로드된다.
    • Secondary Memory는 하드 디스크, SSD와 같은 비휘발성 저장 장치를 의미하는데, 필요한 경우 여기에서 데이터를 읽어오고 쓸 수도 있다.
    • 프로세스가 가상 메모리의 특정 페이지에 액세스하려고 할 때 해당 페이지가 메인 메모리에 로드되어 있지 않은 경우 Page fault가 발생한다.

2개의 댓글

comment-user-thumbnail
2023년 12월 19일

글을 잘쓰시네요

1개의 답글