관리 메뉴

너와 나의 스토리

OS-week4 [CH13_Address Spaces] 본문

Operating System

OS-week4 [CH13_Address Spaces]

노는게제일좋아! 2019. 3. 23. 19:08
반응형


The Abstraction: Address Spaces


출처: http://pages.cs.wisc.edu/~remzi/OSTEP/ 


keyword

- interactivity

- address space


13.1

- 여러 프로세스가 같은 메모리를 공유할 수 있다. 


13.2 Multiprogramming  and Time Sharing

- 기계를 동시에 작동시키기 위해  interactivity의 개념이 중요해졌다.

- time sharing을 구현하려면

  ㄴ 잠시 동안 한 프로세스를 작동시켜 메모리에 대한 전체 액세스 권한을 부여하고

  ㄴ 중지하고 disk같은 곳에 이것의 모든 상태를 저장해야하고 다른 프로세스의 상태를 로드 한 후 

      잠시 실행하여 시스템의 일종의 원본 공유를 구현해야한다.

  -> but! 이건 너무 느림 So, OS가 time sharing을 효과적으로 하도록 허용해야한다.


13.3 The Address Space

- 시스템에서 실행 중인 프로그램의 메모리 보기 : 주소 공간(address space)  -> os가 사용하기 쉬운 물리적 메모리 개념

- "메모리의 기본 os 개념을 이해하려면 메모리가 가상화되는 방식을 이해하는게 중요하다"

- 프로세스의 메모리 공간은 작동 중인 프로그램 의 모든 메모리 상태를 포함한다.

   ㄴ 프로그램 코드도 주소 공간에 있음

- 프로그램이 작동되는 동안  stack을 사용하여 함수 콜 체인의 위치를 추적하고 

  지역 변수를 할당하고 매개 변수를 전달하고 루틴값을 전달한다.

- heap은 동적 할당된 사용자 관리 메모리에 사용된다. 

- code는 static(정적)이다.

  ㄴ 메모리에 저장하기 쉬움

- 프로그램이 실행되는 동안 성장(or 축소) 할 수 있는 주소 공간의 두 영역을 가지고 있다. 

  ㄴ heap & stack

  ㄴ 이 두개를 주소 공간의 반대쪽 끝에 둔다. -> 서로 반대 방향으로 성장함

  ㄴ heap은 코드(at 1KB) 이후에서 시작해서 성장

      stack은 16KB에서 시작해서 아래로 성장

- 다수의 thread들이 주소 공간에서 공존할 때, 이렇게 주소 공간을 나누는 것은 좋지 않다.


- 어떻게 각각의 프로세스를 다른 주소의 메모리에 load 할 수 있을까?


요점 : How to virtualize memory

 os가 단일 실제(physical) 메모리 위에 다중 실행 프로세스를 위핸 비공개의 큰 주소 강간을 어떻게 추상화 할 수 있는가?


ㄴ os는 virtualizing memory이다.

ㄴ 프로세스들은 가상 메모리 주소에 load한다.


13.4 Goals

- vritual memory system(VM)의 주요 목표

  1. transparency(투명도)

     ㄴ 프로그램은 메모리가 가상화된 것을 인지하지 못한다.

  2. efficiency

     ㄴ 시간과 공간을 효율적으로 사용 -> 하드웨어에 의존

  3. protection

     ㄴ 한 프로세스가 작동될 때 다른 프로세스의 메모리에 접근하지 못하도록 함


- 유저 수준의 프로그램의 프로그래머가 보는 모든 주소는 가상 주소이다.

-  즉, VM 시스템은 명렁과 데이터를 가지고 있고,

   OS는 가상 메모리 참조를 가지고 있어 이를 physical 주소로 바꾼다.




    

반응형
Comments