ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 배경
    운영체제/메모리 관리 전략 2018. 2. 4. 15:44

    메모리는 각각 주소가 할당된 일련의 바이트로 구성된다.

    CPU PC 지시한 메모리주소로부터 명령어를 가져와 수행한다.

     

     

    기본 하드웨어

    각각의 프로세스들은 독립된 메모리 공간을 가진다.

    특정 프로세스만 접근할 있는 합법적인 메모리 주소 영역을 설정하고 프로세스가 합법적인 영역만을 접근하도록 보호하는 것이 필요하다.

     

    메모리 공간의 보호는 base 레지스터 limit 레지스터 사용한다.

    기준 레지스터는 가장 작은 합법적 물리 메모리 주소의 값을 저장하고 상한 레지스터는 주어진 영역의 크기를 저장한다.

     

     

    주소의 할당

    프로그램이 실행되기 위해서는 메모리로 올라와 프로세스가 되어야 한다.

    사용하는 메모리 관리 기법에 따라 프로세스는 디스크와 메모리 사이를 왔다갔다 있다.

    디스크에서 메모리로 들어오기를 기다리고 있는 프로세스들의 집합은 입력 이룬다.

     

    보통의 단일 태스킹의 작업 절차는 입력 큐의 프로세스 하나를 선택하여 메모리로 적재한다.

    프로세스는 실행 중에 메모리에서 명령어와 데이터를 액세스한다.

    언젠가 프로세스가 종료되면 프로세스가 사용했던 기억 공간이 사용 가능 공간이 되며 다른 프로세스를 위해 사용된다.

     

    주소는 단계에서 다양하게 표현된다.

    소스코드에서는 변수 표시되고 컴파일 코드에서는 배치 가능한 주소들로 표시되고 링커나 로더는 배치 가능한 주소를 절대 주소 표시한다.

     

     

    바인딩의 종류

    컴파일 시간 바인딩

    만일 프로세스가 메모리 내에 들어갈 위치를 컴파일 시점에 있다면

    컴파일러는 절대 코드를 생성할 있다.

    만일 위치가 바뀌어야 한다면 다시 컴파일 해야 한다.

     

    적재 시간 바인딩

    만일 프로세스가 메모리 위치를 컴파일 시점에 없다면 컴파일러는

    이진 코드를 배치 가능 코드 만들어야 한다.

     

    실행 시간 바인딩

    만일 프로세스가 실행되는 도중에 메모리 내의 세그먼트로부터

    다른 세그먼트로 옮겨질 있다면 바인딩이 실행 시간까지 지연된다.

    주소 공간 보호를 위해서 기준 레지스터와 상한 레지스터를 사용한다.

     

     

    논리 물리 주소 공간

    CPU 생성하는 주소를 일반적으로 논리 주소 하며 메모리가 취급하게 되는 주소를 물리 주소라고 한다

     

    컴파일 시간 적재 시간 바인딩에서는 물리 주소와 논리 주소가 같다.

    그러나 실행 시간 바인딩 기법에서는 논리 주소와 물리 주소가 다르다.

    이러한 경우 논리 주소를 가상 주소라고 한다.

     

    프로그램에 의해 생성된 논리 주소들의 집합을 논리 주소 공간이라 하며 논리 주소와 일치하는 물리 주소들의 집합을 물리 주소 공간이라 한다.

    이와 같은 가상 주소를 물리 주소로 변환 해주는 작업은 메모리 관리기에 의해 실행된다.

    MMU방식에서는 사용자 프로세스에 의해 생성된 모든 주소에 재배치 레지스터 값이 더해진다.

    사용자 프로그램은 논리 주소만을 다루고 실제적인 물리 주소를 결코 없다.

     

     

    동적 적재

    메모리 공간을 보다 효율적으로 사용하기 위해서는 동적 적재 해야 한다.

    동적 적재에서 루틴은 실제 호출되기 전까지는 메모리에 올라오지 않고 재배치 가능한 상태로 디스크에서 대기하고 있다.

     

    동적 적재의 장점은 루틴이 필요한 경우에만 적재된다는 것이다.

    이러한 구조는 아주 가끔 발생하면서도 많은 양의 코드를 필요로 하는 경우에 유용하다.

     

    동적 적재는 운영체제로부터 특별한 지원을 필요로 하지 않고 사용자 자신이 프로그램의 설계를 책임져야 한다.

    운영체제는 동적 적재를 구현하는 라이브러리 루틴을 제공해 수는 있다.

     

     

    동적 연결 공유 라이브러리

    동적 연결 라이브러리는 사용자 프로그램이 실행될 사용자 프로그램에 연결되는 시스템 라이브러리 이다.

    정적 연결만을 지원하는 시스템에서는 로더에 의해 시스템 라이브러리와 프로그램 코드가 이진 프로그램 이미지로 결합된다.

    동적 연결을 제공하는 시스템에서는 연결이 실행시간까지 연기된다.

    동적 연결은 주로 공유 라이브러리 사용된다.

     

    만약 동적 연결을 지원하지 않는다면 시스템 라이브러리를 부르는 모든 프로그램들은 그들의 프로그램 내에

    시스템 라이브러리 루틴을 한 부 가지고 있어야 되기에 이진 파일의 용량이 증가하게 된다.

     

    동적 연결에서는 라이브러리를 호출하는 곳마다 스텁 생긴다.

    스텁은 라이브러리를 어떻게 찾을 것인가를 알려주는 작은 코드 조각이다.

    스텁이 실행될 스텁은 필요한 라이브러리 루틴이 이미 메모리에 존재하는지 검사하며 만약 라이브러리가 메모리에 없다면 디스크로부터 가져온다.

    스텁은 이렇게 해서 라이브러리 루틴의 주소를 알아내며 자신을 루틴의 주소로 대체하게 된다.

    다음 번에 부분이 불리면 동적 연결을 필요 없이 직접 그곳의 라이브러리 루틴을 수행한다.


    '운영체제 > 메모리 관리 전략' 카테고리의 다른 글

    페이징  (0) 2018.02.04
    세그먼테이션  (0) 2018.02.04
    연속 메모리 할당  (0) 2018.02.04
    스와핑  (0) 2018.02.04

    댓글