[OS] 메모리 가상화

·2023년 10월 30일

CS

목록 보기
3/11

본 강의는 중앙대학교 소프트웨어 보안 수업의 필기본이며, 잘못된 부분이 있을 경우 댓글 달아주시면 감사하겠습니다.

Completely Fair Scheduling (CFS)

  • 현재 리눅스의 CPU 스케줄러
  • timeslice 시간이 고정되지 않음.
  • -20~19라는 NICE라는 값을 통해 우선순위를부여한다. (기본값 0)
  • 유저는 NICE를 낮출 수만 있으며, 관리자 계정만 NICE를 올릴 수 있다(물론 낮출 수도 있음)

메모리 가상화

  • OS가 제공하는 메모리는 실제 메모리가 아닌, 메모리주소에 대한 가상 공간이다.
    즉, OS는 물리 메모리를 가상화한다.

커널이란?

핵심을 뜻하며, 여기서는 OS 그자체를 의미한다.

마이크로 커널 vs 모놀로식 커널

마이크로 커널

마이크로 커널은 운영 체제의 핵심 서비스 중 일부만 커널 내부에 구현하고, 다른 서비스는 사용자 공간의 서버 프로세스로 분리하여 실행한다. 이것은 모놀리식 커널과는 달리 운영 체제 서비스의 일부를 사용자 공간으로 옮기는 방식임. MacOS, Windows 등에서 사용된다.
주요 서비스를 분리하여 실행하는 만큼 커널 하나의 오류가 전체 시스템을 충돌시키지 않아 안정성이 높다.

모놀로식 커널

모놀리식 커널은 운영 체제의 핵심 기능을 모두 단일 커널 모듈로 구현하는 방식이다.
이 커널은 시스템 콜, 프로세스 관리, 파일 시스템, 네트워킹 등 모든 서비스를 한 번에 담당한다. 전통적인 운영 체제 디자인 중 하나다. (Linux, UNIX에서 사용된다)
But, 커널의 하나의 오류가 전체 시스템을 충돌시킬 수 있다. 이로 인해 안정성이 저하될 수 있다.

메모리 가상화


(OS는 메모리 최상단에 위치한다)
여러분도 아시다시피 CPU는 동시에 여러 개 프로그램을 실행하는 건 아니고, 여러 프로세스를 돌아가면서 실행한다.이를 통해 효율성을 증진시킬 수 있다. 하지만 하나의 프로세스에서 다른 프로세스의 메모리를 침범하게 되면 보안상 문제가 발생한다.
즉, 프로세스들은 자신에게 할당된 메모리만 이용해야게 해야하고, 이를 위해 유저(자발적으로 특정 메모리 주소에 접근할 수 있는 사람)는 현재 프로세스의 실제 메모리 주소를 모르게 해야한다.
이를 메모리 가상화라고 한다!

메모리 가상화를 하게 되면 각 프로세스는 자신의 주소를 알 수 없고, 0x00000으로 시작하는 가상의 주소가 부여된다. 마지막 메모리 주소는 운영체제의 bit수마다 다르다.

가상 주소 공간


각 프로세스마다 별도의 주소 공간을 할당한다.
사용자는 단지 우측 정보만 알 수 있고, OS는 우측 정보만 안다. (전체적인 물리 메모리에서 어떻게 배치되어있는지 알 수 없다. - 투명성)
프로세스 간 격리 문제를 해결 할 수 있으나(별도의 주소 공간 할당), 스레드 간 격리는 불가능하다.

각 영역에는 뭐가 있는가?

  • 힙 : malloc, new 등 동적으로 생성되는 데이터
  • 스택 : 지역변수, 함수 호출, 다시 돌아가야 할 메모리 등이 존재
  • BSS: 초기화되지 않은 변수 (초기화 된 데이터는 Data영역에 존재)

시스템 콜 (운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스)발생시

  • 시스템 콜은 프로세스 제어, 파일 조작, 장치 조작, 정보 유지보수, 통신과 보호 총 5범주로 나눌 수 있다.
  1. 유저 모드에서 커널 모드로 변경
  2. 유저 스택이 아닌 커널 스택을 쌓는다
  3. 우선 권한 레벨을 증진시킨다

메모리 가상화의 이점

  • 다른 프로세스의 영역을 침범하는 문제 예방 가능
  • 시간, 공간에 대해 효율적인 운영 가능
profile
풀스택 호소인

0개의 댓글