[OSTEP] Virtualization) 13. Address Spaces

0

OSTEP 운영체제

목록 보기
8/19
post-thumbnail
post-custom-banner

[OSTEP] 13. Address Spaces

이 포스팅은 <<Operating Systems: Three Easy Pieces>>, Remzi H. Arpaci-Dusseau & Andrea C. Arpaci-Dusseau을 읽고 개인 학습용으로 정리한 글입니다.

CH13. 주소 공간의 개념

1. 초기 시스템

  • 운영체제: 메모리에 상주하는 루틴(실제로는 라이브러리)의 집합
  • 물리 메모리에 하나의 실행 중인 프로그램(프로세스) 존재

2. 멀티프로그래밍과 시분할

멀티 프로그래밍(multi-programming):

여러 프로세스가 실행 준비 상태에 있고 운영체제는 그들을 전환하면서 실행
-> ex. 한 프로세스가 입출력을 실행하면, CPU는 다른 프로세스로 전환
-> CPU 이용률 증가 -> 효율성 개선이 중요

  • 많은 사람들이 일괄 처리 방식(batch computing)의 한계를 인식함
    (일괄 처리 방식: 최종 사용자의 개입 없이 실행을 스케줄링할 수 있는 작업을 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식)

시분할(time-sharing):

  • 많은 사용자가 동시에 컴퓨터를 사용하고, 현재 실행 중인 작업으로부터 즉시 응답을 원함
    -> 대화식 이용(interactivity)의 개념이 중요

  • 시분할의 구현:

  1. 하나의 프로세스를 짧은 시간동안 실행시킨다
  2. 해당 기간 동안 프로세스에게 모든 메모리를 접근할 권한이 주어진다
  3. 그후, 이 프로세스를 중단시키고 중단 시점의 모든 상태를 디스크 종류의 장치에 저장한다
  4. 다른 프로세스의 상태를 탑재하여 또 짧은 시간동안 실행시킨다

  • 이 방법의 문제점: 메모리가 커질수록 느리게 동작한다

목표

  • 프로세스 전환 시 프로세스를 메모리에 그대로 유지하면서, 운영체제가 시분할 시스템을 효율적으로 구현할 수 있게 하는 것

  • 세 개의 프로세스(A, B, C), 각 프로세스는 512KB 메모리에서 각기 작은 부분을 할당받음
    -> 하나의 CPU를 가정할 때, 운영체제는 실행할 한 개의 프로세스를 선택
    -> 다른 프로세스들은 준비 큐에서 실행을 기다린다

  • 여러 프로그램이 메모리에 동시에 존재하려면 보호(protection)가 중요
    -> 한 프로세스가 다른 프로세스의 메모리를 읽거나 쓸 수 있는 상황 X

3. 주소 공간

- 주소 공간(address space): 실행 중인 프로그램이 가정하는 메모리의 모습 (abstraction)

  • 주소 공간은 실행 프로그램의 모든 메모리 상태를 갖고 있다
    -> 코드(code, 명령어)
    -> 스택: 함수 호출 체인 상의 현재 위치, 지역 변구, 함수 인자와 반환값 등 저장
    -> 힙: 동적으로 할당되는 메모리를 위해 사용

  • 주소 공간 구성 요소에는 정적으로 초기화된 변수 등의 다른 것들도 있지만, 현재로선 코드, 스택, 힙 세 가지만 있다고 가정한다

  1. 프로그램 코드
  • 코드는 정적이기 때문에 메모리를 저장하기 쉽다
  • 주소 공간의 위쪽에 위치, 프로그램이 실행되며 추가 메모리를 필요로 하지 않는다
  • 코드 바로 뒤부터 시작하고, 아래 방향으로 확장된다
  • ex. 사용자가 malloc() 함수를 통해 더 많은 메모리를 요청할 때
  1. 스택
  • 주소 공간의 맨 아래에 위치, 위쪽 방향으로 확장

  • ex. 사용자가 프로시저를 호출할 때

  • 스택과 힙의 이러한 배치는 관례적임
    -> 원한다면 주소 공간을 다른 방식으로 배치할 수 있다

  • 주소 공간에 여러 스레드가 공존할 때는 이런 식으로 주소 공간을 나눌 수 없다

메모리 가상화(virtualizing memory)

  • 실제로 프로그램이 물리 주소 0~16KB 사이에 존재하는 것은 아니다.
    -> 실제로는 임의의 물리 주소에 탑재된다.
    -> 그러나, 실행 중인 프로그램은 자신이 특정 주소의 메모리에 탑재되고 매우 큰 주소 공간을 가지고 있다고 생각한다

  • ex. 프로세스 A가 주소 0(가상 주소)으로부터 load 연산을 한다
    -> 운영체제는 HW의 지원을 통해 물리 주소 0이 아니라 A가 탑재된 메모리의 물리주소를 읽도록 보장해야한다

4. 목표

  1. 투명성(transparency)
  • 운영체제는 실행 중인 프로그램이 가상 메모리의 존재를 인지하지 못하도록 가상 메모리 시스템을 구현해야
  • 프로그램은 자신이 전용 물리 메모리를 소유한 것처럼 행동해야 한다
  1. 효율성(efficiency)
  • 운영체제는 가상화가 시간적 공간적 측면에서 효율적이도록 해야
    -> 시간적: 프로그램이 너무 느리게 실행되면 안됨
    -> 공간적: 가상화를 지원하기 위한 구조를 위해 너무 많은 메모리를 사용해선 안됨

  • 효율적인 가상화를 위해, 운영체제는 TLB등의 하드웨어 기능을 포함하여 HW의 지원을 받아야

  1. 보호(protection)
  • 운영체제는 프로세스를 다른 프로세스로부터 보호해야 & 운영체제 자신도 프로세스로부터 보호해야
    -> 프로세스가 탑재/저장/명령어 반입 등을 실행할 때 다른 프로세스/운영체제의 메모리 내용에 접근하거나 영향을 줄 수 있으면 X

  • 즉, 자신의 주소 공간 밖의 어느 것도 접근할 수 있어서는 안됨
    = 프로세스들을 서로 고립(isolate)

5. 요약

  • 가상 메모리 시스템은 프로세스 전용 공간이라는 환상을 프로그램에게 제공해야한다
  • 이 공간에 프로그램 명령어 전부와 메모리 전부가 저장된다
  • HW의 도움을 받아 운영체제는 가상 메모리 주소를 물리 주소로 변환한다
  • 물리 주소는 원하는 정보를 반입하기 위해 물리 메모리에게 전달된다
  • 운영체제는 많은 프로세스를 대상으로 이러한 작업을 수행하여 프로그램과 운영체제를 보호한다
profile
Be able to be vulnerable, in search of truth
post-custom-banner

0개의 댓글