책/운영체제

운영체제 9. 주소공간의 개념

에린_1 2024. 3. 5. 23:53
728x90

9. 주소공간의 개념

9.1 초기 시스템

  • 운영체제는 메모리에 상주하는 루틴의 집합이었다. 물리메모리에 하나의 실행중인 프로그램(프로세스)이 존재하였고 나머지 메모리를 사용하였다.

9.2 멀티프로그래밍과 시분할

  • 여러 프로세스가 실행준비 상태에 있고 운영체제는 그들을 전환하면서 실행하였다. 이런 전환은 CPU 이용률을 증가시켰다. 당시에는 이런 효율성의 개선이 중요했다.
  • 많은 사람들이 일괄처리 방식 컴퓨팅의 한계를 인식하였다. 많은 사용자가 동시에 컴퓨터를 사용하고 현재 실행 중인 작업으로부터 즉시 응답을 원하기 때문에 대화식 이용(interactivity)의 개념이 중요하게 되었다.
  • 시분할을 구현하는 한 가지 방법은 하나의 프로세스를 짧은 시간동안 실행시키는 것이다. 해당 기간 동안 프로세스에게 모든 메모리를 접근할 권한이 주어진다. 그런후에, 이 프로세스를 중단하고 중단 시점의 모든 상태를 디스크 종류의 장치(모든 물리메모리를 포함)에 저장하고, 다른 프로세스의 상태를 탑재하고, 또 짧은 시간동안 실행시킨다.
  • 이 방법의 문제는 너무 느리게 동작하는 것이고, 특히 메모리가 커질수록 느리게 된다. 레지스터 상태를 저장하고 복원하는 것은 빠르지만 메모리의 내용 전체를 디스크에 저장하는 것은 엄청나게 느리다.

9.3 주소공간

  • 우리는 그런 위험한 행위를 하는 사용자를 염두에 두어야 한다. 그런 위험에 대비하여 운영체제는 사용하기 쉬운(easy to use) 메모리 개념을 만들어야 한다. 이 개념이 주소공간(address space)이다. 실행중인 프로그램이 가정하는 메모리의 모습이다.
  • 주소공간은 실행 프로그램의 모든 메모리 상태를 가지고 있다. 프로그램의 코드(Code, 명령어)는 반드시 메모리에 존재해야 하고, 따라서 주소 공간에 존재한다. 스택은 함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값 등을 저장하는데 사용된다. 마지막으로 힙(heap)은 동적으로 할당되는 메모리를 위해 사용된다.
  • 주소 공간을 설명할 때, 운영체제가 실행 중인 프로그램에게 제공하는 추상화(abstraction)을 설명한다. 실제로 프로그램이 물리주소 0에서 16KB 사이에 존재하는 것은 아니다. 실제로는 임의의 물리 주소에 탑재된다.
  • 운영체제가 이 일을 할 때, 우리는 운영체제가 메모리를 가상화(virtualizing memory)한다고 말한다. 왜냐하면 실행중인 프로그램은 자신의 특정 주소의 메모리에 탑재되고 매우 큰 주소공간을 가지고 있다고 생각하기 때문이다.
  • 프로세스 A가 주소 0으로부터 (우리는 이를 가상주소라고 볼 것이다.) load 연산을 수행할 때, 운영체제는 하드웨어의 지원을 통해 물리주소 0이 아니라 물리주소 320KB를 읽도록 보장한다.
  • 이것이 메모리 가상화의 열쇠이고, 현대 모든 컴퓨터 시스템의 기저를 이룬다.

9.4 목표

  • 가상 메모리 시스템의 목표는 투명성(transparency)이다. 운영체제는 실행중인 프로그램이 가상메모리의 존재를 인지하지 못하도록 가상메모리 시스템을 구현해야 한다. 프로그램은 메모리가 가상화 되었다는 사실을 인지해서는 안된다.
  • 두 번째 목표는 효율성(efficiency)이다. 운영체제는 가상화가 시간과 공간 측면에서 효율적이도록 해야 한다. 시간적으로는 프로그램이 너무 느리게 실행되서는 안되고 공간적으로는 가상화를 지원하기 위한 구조를 위해 너무 많은 메모리를 사용해서는 안된다. 시간-효율적인 가상화를 구현할 때, 운영체제는 TLB등의 하드웨어 기능을 포함하여 하드웨어의 지원을 받아야 한다.
  • 세 번째 목표는 보호(Protection)이다. 운영체제는 프로세스를 다른 프로세스로부터 보호해야 하고, 운영체제 자신도 프로세스로부터 보호해야 한다. 프로세스가 탑재, 저장 혹은 명령어 반입등을 실행할 때 어떤 방법으로든 다른 프로세스나 운영체제의 메모리 내용에 접근하거나 영향을 줄 수 있어서는 안된다. 즉, 자신의 주소공간 밖의 어느것도 접근 할 수 있어서는 안된다. 보호성질을 이용하여 우리는 프로세스들을 서로 격리(isolate) 시킬 수 있다. 각 프로세스는 잘못된 혹은 악성 프로세스로부터 안전한 자신만의 보호막 안에서 실행되어야한다.
728x90