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

  • 일반 적으로 현재 개인 데스크탑의 메모리는 8GB ~ 32GB 정도이다.
  • 현재 컴퓨터의 폰노이만 구조 기반이므로, 코드는 메모리에 반드시 올라와 있어야 한다.

 

가상 메모리는 메모리가 실제 메모리보다 많아 보이게 하는 기술

  • 가상 메모리 기본 아이디어
    • 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고/쓸때만 물리 주소로 바꿔주면 된다.
    • virtual address (가상 주소) : 프로세스가 참조하는 주소
    • physical address (물리 주소) : 실제 메모리 주소
  • MMU (Memory Management Unit)
    • CPU에 코드 실행시, 가상 주소 메모리 접근이 필요할 때, 해당 주소를 물리 주소값으로 변환해주는 하드웨어 장치

 

가상 메모리와 MMU

CPU는 가상 메모리를 다루고, 실제 해당 주소 접근시 MMU 하드웨어 장치를 통해 물리 메모리에 접근

  • 하드웨어 장치를 이용해서 주소 변환이 빠르기 때문에 별도의 장치를 둔다.

페이징 시스템(paging system)

페이징 개념

  • 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리
  • 하드웨어 지원이 필요하다
  • 페이지 번호를 기반으로 가상 주소/물리 주소 매핑정보를 기록/사용

페이징 시스템 구조

  • page 또는 page frame : 고정된 크기의 block
  • paging system
    • 가상 주소 v = (p, d)
      • p : 가상 메모리 페이지
      • d : p 안에서 참조하는 위치

 

  • 페이지 크기가 4KB 예시
    • 가상 주소의 0비트에서 11비트가 변위(d)를 나타낸다.
    • 12비트 이상이 페이지 번호가 될 수 있음

 

페이징 시스템과 MMU

  • CPU는 가상 주소 접근시 MMU 하드웨어 장치를 통해 물리 메모리에 접근한다.
  • 프로세스 생성시 페이지 테이블 정보를 생성한다
    • PCB등에서 해당 페이지 테이블 접근이 가능하고, 관련 정보는 물리 메모리에 적재한다.
    • 프로세스 구동시, 해당 페이지 테이블 base주소가 별도 레지스터에 저장된다.
    • CPU가 가장 주소 접근시 MMU가 페이지 테이블의 base 주소에 접근하여 물리 주소를 가져온다.
    • 이전에 요청한 가상주소를 TLB에 저장시켜 실제 물리 메모리에서 가져오기 않는다. (캐시 기능)

요구 페이징

프로세스 모든 데이터를 메모리로 적재하지 않고, 실행중 필요한 시점에서만 메모리로 적재함

  • 선행 페이징의 반대 개념이다. 선행 페이징은 미리 프로세스 관련 모든 데이터를 메모리에 올려놓고 실행하는 개념
  • 더 이상 필요하지 않은 페이지 프레임은 다시 저장매체에 저장(페이지 교체 알고리즘 필요)

페이지 폴트(page fault)

  • 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트
  • 운영체제가 page fault가 일어나면, 해당 페이지를 물리 메모리에 올림

페이지 폴트가 자주 일어나면?

  • 실행되기 전에, 해당 페이지를 물리 메모리에 올려야 한다 → 시간이 오래걸림

페이지 폴트가 안 일어나게 하려면?

  • 향후 실행/ 참조될 코드/ 데이터를 미리 물리 메모리에 올린다 → 예측을 하는 일이므로 전혀 알 수 없다.

'운영체제' 카테고리의 다른 글

프로세스와 스레드  (0) 2021.05.12

프로세스와 스레드

프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위.

스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.

 

프로그램 → 프로세스 → 스레드

프로그램 -> 프로세스

프로그램 : 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태. 즉 실행하지 전의 상태이다.

프로세스 : 프로그램을 실행하여 컴퓨터 메모리가 올라가있는 프로그램.

프로그램은 코드 덩어리 파일, 프로그램을 실행하면 프로세스가 된다.

프로세스 간에는 각 프로세스의 데이터 접근이 불가

 

 

프로세스 -> 스레드

스레드 : 프로세스의 실행 단위이다. 한 프로세스 내에서 동작되는 여러 실행 프로그램으로 프로세스 내의 주소 공간이나 자원을 공유 할 수 있다. 프로세스 내의 다수의 스레드가 존재할 수 있다.

프로세스 내의 스레드가 하나라도 오류가 생겨 종료될경우 프로세스가 종료된다.

프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능하며 스레드들 끼리는 Heap, Data, Code 영역을 모두 공유한다.

'운영체제' 카테고리의 다른 글

가상 메모리와 페이징  (0) 2021.05.12

+ Recent posts