전체 글 1383

39_가상 메모리 쓰레싱(Thrashing)

39_가상 메모리 쓰레싱(Thrashing) 어떤 프로세스에게 할당된 프레임 수가 명령어 집합 아키텍처(instruction set architecture)가 요구하는 최소한의 수보다 적게 되면 그 프로세스는 실행을 한 동안 일시 중단(suspend)하여야 한다. 프로세스의 모든 페이지를 포기하고 다른 프로세스들에게 넘겨 주는 스왑인(swap in), 스왑아웃(swap out) 단위의 CPU 스케줄링이 필요하다. 프레임을 충분히 할당 받지 못한 프로세스는 페이지 부재가 발생한다. 이때 페이지 교체가 발생하지만 이미 활발하게 사용되는 페이지들만으로 이루어져 있으면 어떤 페이지가 교체되든 바로 다시 필요해질 것이다. 이런 상황이 반복해서 페이지 부재가 과도하게 발생하는 것을 쓰레싱(thrashing)이라 한..

38_가상 메모리 프레임 할당 (Allocation of Frame)

38_가상 메모리 프레임 할당 (Allocation of Frame) 여러 개의 프로세스들에게 제한된 자유 메모리를 어떻게 할당할까? 각 프로세스는 몇 프레임씩 할당 받아야 할까? 다양한 할당 정책 및 종류를 알아 보자. [최소로 할당 해야 할 프레임의 수] 메모리 할당에는 다양한 제한이 존재 한다. 페이지 공유가 없으면 사용할 수 있는 자유 프레임 수보다 더 많이 할당 할 수는 없다. 또한 최소한 몇 페이지는 할당해야만 한다. 최소한의 프레임을 할당 해야만 하는 이유는 성능과 관계 된다. 각 프로세스에 할당되는 프레임 수가 줄어들면 페이지 부재율은 증가하고 프로세스 실행은 늦어지게 된다. 명령 수행을 완료되기 전에 페이지 부재가 발생하면 그 명령을 재실행되어야 한다는 점을 주의해야 한다. 하나의 명령이..

37_가상 메모리 페이지 교체(Page Replacement) - LRU 근사 페이지 교체, 계수 기반 페이지 교체 , 페이지 버퍼링 알고리즘

37_가상 메모리 페이지 교체(Page Replacement) LRU 근사 페이지 교체, 계수 기반 페이지 교체 , 페이지 버퍼링 알고리즘 [LRU 근사 페이지 교체 (LRU Approximation Page Replacement)] LRU 페이지 교체 지원을 충분히 할 수 있는 하드웨어는 거의 없다. 그러나 많은 시스템은 참조 비트(reference bit)의 형태로 어느 정도 지원하고 있다. 페이지 참조가 있을 때마다(페이지 내의 어떤 바이트라도 읽거나 쓸 때) 하드웨어가 그 페이지에 대한 참조 비트를 설정 한다. 참조 비트는 페이지 테이블에 있는 각 항목과 대응 된다. 얼마가 지나면 페이지 사용의 순서는 모르겠지만 어떤 페이지가 그 동안 사용되었고 어떤 페이지가 한번도 사용되지 않았는지를 알 수 있..

36_가상 메모리 페이지 교체(Page Replacement) - FIFO, 최적(optimal), LRU(Least Recently Used) 페이지 교체

36_가상 메모리 페이지 교체(Page Replacement) FIFO, 최적(optimal), LRU(Least Recently Used) 페이지 교체 [FIFO 페이지 교체 (FIFO Page Replacement)] FIFO 페이지 교체 알고리즘은 어떤 페이지를 교체해야 할 때 메모리에서 가장 오래된 페이지를 내보낸다. FIFO 페이지 교체 알고리즘은 이해하기도 쉽고 프로그램 하기도 쉬우나 항상 성능이 좋은 것은 아니다. 예를 들어 교체된 페이지 중 오래 전 사용된 후 더 이상 사용되지 않는 경우도 있으나 교체된 페이지가 초기화 된 후 계속 사용되는 페이지의 경우에는 다시 적재 하는 동안 부재율을 높이고 프로세스의 실행속도를 떨어뜨리기 때문이다. 그러나 FIFO 페이지 교체 알고리즘은 잘못된 실행을..

35_가상 메모리 페이지 교체(Page Replacement)

35_가상 메모리 페이지 교체(Page Replacement) 페이지 부재율에서 각 페이지는 처음 그 페이지가 접근될 때 한번만 페이지 부재가 발생한다고 가정하였다. 하지만 전체 10페이지 중 실제 5페이지만 사용하는 프로세스가 있다면 요구 페이징을 통해 전혀 사용되지 않을 5페이지를 적재하는데 필요한 입/출력을 피할 수 있다. 또한 다중 프로그래밍 정도를 높여서 프로세스 수를 2배로 늘릴 수 있다. 즉 40프레임이 있다면 10개의 페이지가 전부 필요했다면 4개의 프로세스만이 수행 될 수 있었지만(10개 중 5개가 사용되지 않으므로)실제로는 8개의 프로세스를 실행 할 수 있다. 페이지 부재 : http://sqlmvp.kr/140191934297 다중 프로그램 정도를 더 올리면 메모리 과할당(over a..

34_가상 메모리 쓰기 시 복사 (copy-on-write)

34_가상 메모리 쓰기 시 복사 (copy-on-write) 프로세스를 빠르게 시작하기 위해 첫 명령어가 포함된 페이지를 요구 페이징 하였다. 그러나 fork() 시스템 호출을 통해 프로세스를 생성할 때에는 페이지 공유 와 비슷한 기법으로 첫 요구 페이징 조차 생략하는 것이 가능하다. 이 기법을 통해 프로세스 생성 시간이 더 줄일 수 있음은 물론 새로 생성된 프로세스에 새롭게 할당되어야 하는 페이지의 수도 최소화 할 수 있다. 프로세스 연산 : http://sqlmvp.kr/140189558272 fork()를 하면 부모 프로세스의 페이지들을 실제로 자식 프로세스에 복사해 줌으로써 자식 프로세스의 주소 공간을 구성해 주고 대부분의 자식 프로세스들은 주소 공간이 마련되자마자 exec() 시스템 호출 한다...

33_가상 메모리 요구 페이징(Demand Paging)

33_가상 메모리 요구 페이징(Demand Paging) 요구 페이징은 필요한 프로그램만 메모리에 적재하는 방법으로 가상 메모리 시스템에서 많이 사용된다. 요구 페이징을 사용하는 가상메모리에서는 페이지들이 실행 과정에서 실제로 필요해질 때 적재 된다. 요구 페이징은 일부 스와핑 기법과 유사하다. 프로세스를 실행하고 싶으면 메모리로 읽어 들이며 이때 전체 프로세스를 읽어오지 않고 lazy swapper를 사용한다. lazy swapper는 그 페이지가 필요하지 않는 한 메모리에 적재 되지 않는다. 스와퍼는 전체 프로세스를 관리하는 반면 페이저(pager)는 프로세스 내의 개별 페이지들을 관리한다. 요구 페이징과 관련해서는 스와퍼 보다 페이저가 더욱 가깝다. 스왑인(swap in)시에 페이저는 프로세스가 다..

32_가상 메모리(Virtual Memory)

32_가상 메모리(Virtual Memory) 가상 메모리(Virtual Memory)는 프로세스 전체가 메모리에 올라와 있지 않아도 실행이 가능하도록 하는 기법이다. 주요 장점중의 하나는 프로그램이 물리 메모리보다 커도 된다는 것이다. 가상 메모리는 물리 메모리로부터 사용자 관점의 논리 메모리를 분리시켜 주 메모리를 균일한 크기의 저장공간으로 구성된 큰 배열로 추상화 시켜 준다. 또한 파일 공유를 쉽게 해주고 공유 메모리 구현을 가능하게 한다. 단점으로는 구현이 어렵고 잘못 사용하게 된다면 성능이 현저히 저하될 수 있다. 한 프로세스의 가상 주고 공간은 그 프로세스가 메모리에 저장되는 논리적인(또는 가상적인) 모습(View)을 말한다. 일반적으로 특정 논리 주소에서(보통 0번지)시작하여 연속적인 공간을..

31_페이지 세그먼테이션(Segmentation)

31_페이지 세그먼테이션(Segmentation) 메모리 관리에서 사용자가 바라보는 메모리 관점과 실제 물리적인 메모리의 관점을 분리되어 있다는 것은 매우 중요하다. 그렇다면 사용자는 메모리를 관리할 때 어떤 관점으로 바라보아야 하는가? 세그먼테이션(segmentation)은 사용자 관점 그대로 메모리를 관리하는 기법이다. 논리 구조 공간을 세그먼테이션 집합으로 정의하고 각 세그먼트는 이름과 길이를 가진다. 시스템에서는 논리 주소가 세그먼트 이름과 세그먼트 내에서의 변위로 나누어 진다. 사용자 프로그램이 컴파일 되면 컴파일러는 자동으로 입력 프로그램을 읽어 세그먼트들을 만들어 내며 구현을 쉽게 하기 위해 세그먼트 이름 대신 세그먼트 번호가 시스템에 의해 매겨진다. 따라서 논리주소는 으로 구성 된다. C에..

30_페이지 테이블 구조 (page table structure)

30_페이지 테이블 구조 (page table structure) 현대의 컴퓨터 환경에서는 매우 큰 주소 공간을 가진다. (2^32 ~ 2^64) 이러한 환경에서는 페이지 테이블도 커진다. 예를 들어 32bit 환경에서 페이지의 크기가 4KB(2^12)이면 페이지 테이블은 100만개(2^32/2^12)로 구성되며 각 항목은 4byte로 구성되기 때문에 각 프로세스는 페이지 테이블만해도 4MB가 필요하다. [계층적 페이지] 큰 페이지 테이블은 작은 조각으로 나누어 관리하는 것이 효율적이며 이러한 방법을 2단계 페이징 기법(two-level paging scheme)이라 한다. 2단계 페이지 기법은 페이지 자체가 다시 페이지화 되는 것으로 4KB의 크기를 가진 32bit 환경을 예로 들면 논리주소는 20bi..