프로세스와 메모리

  모든 프로세스는 자신만의 가상 주소 공간을 가지고 있다. 모든 프로세스들은 자신만의 주소 공간을 가지기 때문에, 특정 프로세스 내에서 쓰레드가 수행될 때 해당 쓰레드는 프로세스가 소유하고 있는 메모리에 대해서만 접근이 가능하다. (다른 프로세스에 의해 소유된 메모리는 접근 불가)

  즉, 가상메모리는 프로세스의 물리 메모리와 논리 메모리를 분리하기 위해 생겨난 것이라 볼 수 있다. 이를 이용해서 논리 메모리가 물리 메모리보다 커지는 것을 가능케 한다. (램이 1gb인 컴퓨터에서 게임,포토샵,인터넷익스플로러를 동시에 실행할 수 있는 것이 가상메모리 덕분)

가상메모리

  • 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기에 한계가 있음

  • 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있음

  • 운영체제에서 디스크 공간을 메모리처럼 활용할 수 있는 기능을 제공

    • 디스크 상에 존재하는 이러한 파일을 paging file 이라고 한다.
  • 실제 메모리보다 많이 보이게 하는 기술

  • 실제 사용하는 메모리는 작다는 점에 착안해서 고안된 기술

  • 프로세스간 공간 분리로, 프로세스 이슈가 전체 시스템에 영향을 주지 않을 수 있음

  • 가상 메모리 기본 아이디어

    • 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고/쓸대만 물리 주소로 바꿔주면 된다.
    • virtual address(가상주소) : 프로세스가 참조하는 주소
    • physical address : 실제 메모리 주소
  • MNU (Memory Management Unit)

    • cpu에 코드 실행시, 가상 메모리 접근이 필요할 때, 해당 주소를 물리 주소값으로 변환해주는 하드웨어 장치

image.png

  • [ 가상메모리 없을때 ]

프로세스 a,b가 4gb의 메모리를 점유한다고 가정하자. 가상메모리가 존재하지 않으면, 물리공간(6gb)메모리에 a가 필요한 메모리 4g를 할당 되면서, b는 공간이 모자라서 사용할 수 없게 된다.
image.png

  • [ 가상메모리 존재]

프로세스 a,b,c,가 4gb의 메모리를 점유한다고 가정하자. process가 현재 사용되는 공간 만큼만 메모리에 넣어주면서, 물리 공간에 할당과 해제를 반복하는 과정을 거친다.
image.png

가상메모리가 필요한 이유

  • 하나의 프로세스만 실행 가능한 시스템(배치 처리 시스템)에서는 크게 필요가 없다.

      1. 프로그램을 메모리로 로드
      1. 프로세스 실행
      1. 프로세스 종료(메모리 해제)
  • 여러 프로세스 동시 실행 시스템에서는 가상메모리가 필수적으로 필요하다.

      1. 메모리 용량 부족 이슈
      1. 프로세스 메모리 영역간에 침범 이슈

페이징(paging)

  • 페이징 방식에서는 가상메모리상의 주소공간을 일정한 크기의 페이지로 분할하게 되는데 실제 메모리 또한 가상메모리와 같은 크기로 페이지를 분할한다.
  • 페이지의 크기는 대부분 4Kbyte를 사용한다.
  • 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리

페이지 테이블

  • 가상 메모리의 페이지와 실제메모리의 페이지를 연결시켜주기 위한 매핑 테이블
  • 가상메모리의 페이지넘버와 실제메모리의 페이지프레임을 하나의 순서쌍으로 정의하고 있는 도표
  • 이러한 페이지 테이블이 메모리에 존재하면, 성능은 하락한다. 따라서 MMU라는 하드웨어를 통해 매핑을 시킨다. (MMU를 통해 맵핑작업을 수행해서, 메모리 접근 회수를 줄인다.)

페이징 시스템

  • PCB에 Page Table 구조체를 가리키는 주소가 들어있다.
  • Page Table에는 가상 주소와 물리주소간 매핑 정보가 있음
  • Page Table에 접근할 수 있는 가장 위의 주소를 가지고 있다가, cpu가 가상 주소에 접근하려고 하면 페이지 테이블의 가장 위의 주소에 원하는 번호에 접근해서 실제 메모리 주소에 접근한다.

image.png

페이징 시스템 구조

  • 페이지 또는 페이지 프레임 : 고정된 크기의 block(4kb)

  • paging system

    • 가상 주소 v = (p,d)
      • p : 가상 메모리 페이지 (페이지 번호)
      • d : p안에서 참조하는 위치 (변위)
    • 페이지 크기가 4kb 예
      • 가상 주소의 0비트에서 11비트가 변위를 나타냄
      • 12비트 이상이 페이지 번호가 될 수 있음

프로세스가 4gb를 사용하는 이유?

  • 32비트 시스템에서 2^32이 4GB이다.

페이지 테이블

  • 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표
  • 가상주소 v = (p,d)라면
    • p : 페이지 번호
    • d : 페이지 처음부터 얼마 떨어진 위치인지
  • paging system 동작
    • 해당 프로세스에서 특정 가상 주소 액세스를 하려면?
      • 해당 프로세스의 page table에 해당 가상 주소가 포함된 page번호가 있는지 확인
      • page 번호가 있으면 이 page가 맵핑된 첫 물리 주소를 알아내고(p')
      • p' + d가 실제 물리 주소가 된다.

image.png

'aspect'의 실제 메모리 주소를 찾는다면?

먼저 'aspect'데이터의 페이지가 page 3-2에 있는것을 cpu는 확인한다. 그리고 PCB에 존재하는 페이지 테이블에 접근해서, page 3의 물리주소가 1000h라는 것을 확인하고 물리 메모리 1000h 로 접근한다. 'page3-2'의 값에서 변위값이 3칸 떨어진것을 통해서 실제 메모리 주소는 1000h + 2인것을 알게된다.

페이지 시스템과 mmu

  • cpu는 가상주소 접근시 mmu하드웨어 장치를 통해 물리 메모리 접근

image.png

  • 프로세스 생성시, 페이지 테이블 정보 생성
    • pcb등에서, 해당 페이지 테이블 접근 가능하고, 관련 정보는 물리 메모리에 적재
    • 프로세스 구동시, 해당 페이지 테이블 base주소가 별도 레지스터에 저장
    • cpu가 가상주소 접근시, mmu 페이지 테이블 base주소를 접근해서, 물리 주소를 가져옴