강의노트 14-1. 가상 주소공간, 가상 메모리

|

패스트캠퍼스 컴퓨터공학 입문 수업을 듣고 중요한 내용을 정리했습니다. 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.

가상주소공간, 가상메모리

  • 모든 프로세스는 각각 4G의 가상 주소 공간 (메모리공간X) 을 부여받는다.
  • 운영체제 약 2G, 나머지 약 2G 응용프로그램의 고유 영역
  • 가상주소공간 virtual address space ≠ virtual memory
  • 개발자는 이 가상주소공간 4G가 진짜 메모리인것 처럼 사용한다.
  • 내 컴퓨터 RAM은 12G 인데 그럼 내가 실행할 수 있는 프로그램은 3개일까? -> 아니다
  • 수업 자료- 가상주소공간&가상메모리

가상주소공간(virtual address space)

가상주소공간의 구조

  • code : 기계어 (코드를 컴파일하여 기계어로 만들고 디스어셈블을 하여 어셈블리어로 바꾸어 code 영역에 넣는다(instruction))
  • data : 전역변수, static 변수의 할당의 위해 존재하는 공간
  • heap : 프로그래머의 동적 할당을 위해 존재하는 공간
  • stack : 지역 변수가 저장되는 공간
views
가상주소공간
  • page : 가상주소공간 4G를 4096byte(4K) 단위로 나눈 하나의 메모리 블록을 page라고 한다.
  • 연산을 할 때는 값을 stack으로 부터 레지스터로 가져오고 ALU로 넘겨서 연산을 수행한다. 연산 결과 값은 레지스터에 먼저 저장하고, stack 영역에 재전달 한다.
  • 레지스터의 스택포인터(SP)는 stack 프레임을 위해서 미리 공간을 확보한다.
  • 참고자료 - 어셈블리코드 해석 예시

파이썬의 가상주소공간 활용

  • 파이썬은 모든 객체를 private heap 영역에 저장하며, data영역, stack영역은 사용하지 못한다.
  • 연산을 할 때는 값을 heap으로 부터 레지스터로 가져오고, ALU로 넘겨서 연산을 수행한다. 연산 결과 값은 stack에 먼저 저장하고(operand stack), stack-register-heap 순으로 재전달 한다.
  • java도 heap 영역만 사용하며, C는 stack, heap, data 영역을 모두 사용한다.

virtual machine

  • register based machine (연산결과를 레지스터에 저장)
  • virtual stack machine (연산결과를 stack에 저장하고 이를 다시 heap으로 반환)
  • 연산결과를 임시로 저장하는 공간을 operand stack이라고 부른다.
  • 인터프린터 언어는 heap에 데이터를 저장하고, 연산은 레지스터 ALU에서 실행 후 실행 결과를 stack에 저장 해당 값을 heap에 전달하려면 다시 레지스터를 거쳐야한다.
  • 수업자료

stack vs heap

  • 가상주소공간 중 stack은 빠르고 heap은 상대적으로 느리다.
  • stack은 그냥 데이터를 쌓지만 heap은 도중에 del등을 통해서 지울 수 있다. 빈공간이 생기면 그곳에 새로운 데이터가 추가된다. (spacial locality 보장이 어려움)
  • 또한, heap은 메타데이터 정보를 함께 저장한다. 따라서 더 많은 용량을 사용하며 할당시 매번 metadata에게 여분 공간이 있는지 묻기 때문에 상대적으로 느리다.
  • heap의 최대 장점
    • 할당시점과 지우는 시점을 마음대로 저장할 수 있다.
    • 프로세스 도중에 용량을 변경할 수 있다. (stack의 경우 프로세스 실행 전에만 변경 가능하다. 용량이 넘치는 경우 stack overflow가 발생한다.)

가상메모리 (virtual memory)

  • 가상메모리 : 물리적인 RAM + 하드디스크(pagefile.sys)
  • page frame : 가상메모리(물리메모리 = RAM + 페이징파일)를 4096byte(4K) 단위로 나눈 후, 그 한 단위를 페이지 프레임이라 한다.
  • 페이지 테이블 : 가상주소공간(virtual address space) 가상메모리(virtual memory, physical memory) 를 매핑한다. 프로세스 별로 각각 하나씩 존재한다.
  • RAM의 프레임이 모두 차있을 때, 추가 요청이 들어오면 RAM에서는 교체 알고리즘에 따라서 프레임 하나를 페이징파일로 내리고, 새롭게 요청된 페이지에 비워진 프레임을 할당한다.
  • 가상메모리 운영방식 : LRU (least, recently, uses - 최근최소사용) 필요한 것만 ram으로 가져오고 오래 안쓰는건 하드디스크에 내려놓는다.

참고