본문 바로가기
운영체제&네트워크/운영체제

운영 체제와 가상 메모리: 이해와 활용

by GangDev 2024. 5. 30.

운영 체제란?

운영 체제(Operating System, OS)는 컴퓨터 하드웨어와 소프트웨어 리소스를 관리하며, 사용자와 컴퓨터 사이의 인터페이스 역할을 한다. 운영 체제의 주요 기능들은 다음과 같다:

  • 프로세스 관리(Process Management): 운영 체제는 프로세스의 생성과 삭제, 상태 변환 등의 관리를 담당한다. 이는 CPU 스케줄링, 프로세스 동기화, 통신 등을 포함한다.
  • 메모리 관리(Memory Management): 운영 체제는 메모리의 할당과 회수를 관리하며, 가상 메모리를 통해 물리적 메모리보다 더 큰 프로그램을 실행할 수 있게 지원한다.
  • 파일 시스템 관리(File System Management): 파일의 생성, 수정, 삭제 및 검색 등의 작업을 관리한다. 또한 디스크 공간의 할당과 회수도 담당한다.
  • 입출력 관리(I/O Management): 키보드, 마우스, 프린터 등의 입출력 장치와의 상호작용을 관리한다. 이를 통해 사용자의 입력을 받아 처리하고, 결과를 출력장치로 전달한다.
  • 보안 및 보호(Security and Protection): 시스템과 데이터의 보안을 유지하기 위해 접근 제어, 인증, 암호화 등의 기능을 제공한다.
  • 네트워킹(Networking): 네트워크 통신을 관리하고, 인터넷이나 로컬 네트워크를 통해 다른 컴퓨터와의 통신을 가능하게 한다.
  • 사용자 인터페이스(User Interface): 텍스트 기반 또는 그래픽 기반의 사용자 인터페이스를 제공하여 사용자가 쉽게 컴퓨터와 상호작용할 수 있도록 한다.

이러한 기능들을 통해 운영 체제는 컴퓨터 시스템의 효율적인 작동을 보장하고, 사용자가 컴퓨터 자원을 편리하게 이요할 수 있도록 돕는다.

운영 체제가 프로세스를 관리하는 법

운영 체제는 프로세스를 관리하는 핵심 요소다. 프로세스 관리는 프로세스의 생성에서 종료까지의 모든 과정을 커널이 담당한다. 이 과정에는 프로세스 생성, 실행, 일시 중단 및 재개, 정보 관리, 프로세스 통신, 프로세스 동기화, 프로세스 중단, 프로세스 컨텍스트 스위칭 등이 포함된다. 이러한 관리를 위해 커널 영역에 프로세스 테이블을 만들어 프로세스의 목록을 관리한다.

 

프로세스는 프로그램이 메모리에 적재되어 실행 중인 상태를 말하며, 필요한 모든 자원을 할당받는다. 이자원에는 코드 공간, 데이터 공간, 스택 공간, 힙 공간 등이 포함된다.

 

프로세스의 생명 주기는 준비 상태, 실행 상태, 블록 상태, 종료 상태 등으로 나눠진다. 프로세스는 스케줄링을 기다리는 준비 상태에서 시작하여, 스케줄링 되면 실행 상태로 전환되어 CPU에 의해 실행된다. CPU의 시간할당량이 끝나면 다시 준비 상태로 돌아가며, 입출력을 수행해야 하면 블록 상태로 전환되어 대기 큐에 삽입된다. 입출력이 완료되면 다시 준비 상태로 돌아간다. 프로세스가 종료되면, 프로세스가 차지하고 있던 메모리와 자원이 반환되고, 열어둔 파일들이 닫힌다.

 

또한, 프로세스 스케줄링과 컨텍스트 스위칭은 프로세스 관리의 중요한 부분이다. 과거에는 프로세스가 실행 단위였으나, 현대 운영 체제에서는 스레드가 실행 단위로 사용된다. 따라서 스레드 스케줄링이 중요해졌으며, 프로세스는 스레드들에게 공유 자원을 제공하는 컨테이너 역할을 한다.

 

프로세스의 주소 공간은 사용자나 개발자가 보는 관점에서는 연속적인 메모리 공간처럼 보이지만, 실제로는 물리 메모리에 흩어져 저장된다. 이는 가상 주소 공간을 통해 가능하며, 가상 주소가 실제 주소로 매핑되어 물리 메모리에서는 충돌하지 않도록 한다. 가상 메모리 운영 방식 중 하나인 LRU(Least Recently used, 최근 최소 사용) 알고리즘을 통해 필요한 데이터만 RAM으로 가져오고 오래 사용하지 않는 데이터는 하드 디스크에 저장한다.

가상 메모리 작동 원리

가상 메모리는 컴퓨터 시스템에서 물리 메모리보다 더 많은 메모리 공간을 제공하는 기술이다. 이는 프로세스가 실제 메모리보다 훨씬 큰 가상의 메모리 공간을 사용할 수 있게 해주며, 이를 통해 여러 프로세스가 메인 메모리를 안전하고 효과적으로 공유할 수 있다. 프로그래머는 이 기술 덕분에 실제 메모리 용량을 초과하는 크기의 메모리 공간을 가정하고 코드를 작성할 수 있으며, 실제로는 1GB의 메모리로 4GB 크기인 것처럼 사용할 수 있다.

 

가상 메모리 시스템에서는 메모리가 페이지라는 일정한 크기의 블록으로 나누어진다. 각 페이지는 가상 주소 공간에 속하며, 필요에 따라 물리 메모리(RAM)에 적재되거나 디스크에 저장될 수 있다. 가상 주소와 실제 주소 간의 변환은 MMU(Memory Management Unit)와 Page Table을 통해 이루어진다. MMU는 PTBR(Page Table Base Register)을 통해 해당 프로세스의 Page Table을 요청하고, 이 Page Table을 사용하여 가상 주소를 실제 주소로 변환한다.

 

Page Fault는 가상 메모리에서 발생하는 특수한 상황으로, 프로세스가 참조하려는 페이지가 현재 메인 메모리에 없는 경우를 의미한다. 이런 상황이 발생하면, OS의 핸들러가 메모리의 빈 공간을 찾아 해당 페이지를 메인 메모리에 적재한다. 만약 메모리에 빈 공간이 없다면, LRU(Least Recently used) 정책에 따라 가장 오래 사용되지 않은 페이지를 디스크로 내보내고, 새로운 페이지를 메인 메모리에 적재한다.

 

이렇게 가상 메모리는 물리 메모리의 한계를 극복하고, 프로세스가 더 큰 메모리 공간을 사용할 수 있게 해주는 중요한 기술이다.

가상 메모리와 물리 메모리 사이의 관계

가상 메모리와 물리 메모리 사이의 관계는 운영 체제(OS)가 관리하며, 이는 사용자가 물리 메모리의 한계를 넘어서는 메모리 공간을 사용할 수 있게 해준다. 가상 메모리 시스템에서는 메모리가 페이지라는 일정한 크기의 블록으로 나누어지며, 각 페이지는 가상 주소 공간에 속한다. 필요에 따라 이 페이지들은 물리 메모리(RAM)에 적재되거나 디스크에 저장될 수 있다.

 

가상 메모리 시스템의 핵심은 가상 주소와 실제 주소 간의 변환이며, 이는 MMU(Memory Management Unit)와 Page Table을 통해 이루어진다. MMU는 Page Table을 사용하여 가상 주소를 실제 주소로 변환한다. 이 과정에서 페이지 번호를 이용해 페이지 테이블의 프레임 번호를 얻어온 뒤, 페이지 오프셋을 더하여 최종 물리적 주소를 계산한다.

 

가상 메모리는 실제 물리 메모리보다 더 큰 공간으로 확장할 수 있지만, 실제로 물리 메모리가 가직 ㅗ있는 공간 그 이상으로 데이터를 저장할 수 는 없다. 그러나 RAM이나 디스크, 레지스터 등의 공간을 프로세스들에게 동일한 메모리 공간을 제공해 줄 수 있다. 이렇게 함으로써, 사용자는 물리 메모리 정보가 아닌 OS가 제공해주는 가상 메모리 공간만 신경쓰면 된다. 이는 메모리 관리에 매우 효율적이다.

 

결론적으로, 가상 메모리와 물리 메모리 사이의 관계는 운영 체제에 의해 관리되며, 이는 사용자가 물리 메모리의 한계를 넘어서는 메모리 공간을 사용할 수 있게 해준다. 이 과정에서 가상 주소와 실제 주소 간의 변환, 그리고 필요한 페이지의 물리 메모리와 디스크 간의 이동이 핵심이다.

가상 메모리를 사용하기 좋은 상황

  • 물리 메모리 용량보다 큰 프로그램 실행: 가상 메모리는 물리 메모리 용량보다 큰 프로그램을 실행할 수 있게 해준다. 이는 프로그램이 물리 메모리보다 커도 실행이 가능하다는 것을 의미하며, 필요한 부분만 물리 메모리에 올려 실행할 수 있다.
  • 여러 프로그램 동시 실행: 가상 메모리를 사용하면 여러 프로그램을 동시에 메모리에 올릴 수 있다. 이는 물리 메모리의 용량 한계에도 불구하고 다양한 애플리케이션을 동시에 실행할 수 있게 해준다.
  • 메모리 효율성 향상: 가상 메모리는 실제로 필요한 부분만 물리 메모리에 올리고, 필요하지 않은 부분은 물리 메모리에 올리지 않는다. 예를 들어, 핮ㄴ 프로그램이 실행되며 200KB를 요구하는데 실행까지 필요한 메모리 공간이 50KB이면, 실제 물리 메모리에는 50KB만 올라가고 나머지 150KB는 나중에 필요시에 요구하게 된다. 이는 메모리 사용 효율성을 높이는 데 도움을 준다.
  • 페이지 교체 최적화: 가상 메모리 시스템에서는 페이지 교체 알고리즘을 사용하여 메모리 사용을 최적화할 수 있다. 예를 들어, LRU(Least Recently Used) 페이지 교체 알고리즘은 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체함으로써, 메모리 사용 효율성을 높일 수 있다.
  • 프로세스 간 페이지 공유: 가상 메모리는 프로세스들이 메모리를 공유하는 것을 가능하게 해준다. 이는 프로세스 간 통신을 위한 공유 메모리를 사용할 수 있게 해주며, Demanding-paging 기법을 사용하여 다른 프로세스의 각각의 페이지가 같은 프레임을 가르키도록 설정할 수 있다.

이러한 이유로 인해, 가상 메모리는 물리 메모리의 한계를 극복하고, 메모리 사용 효율성을 높이며, 여러 프로그램의 동시 실행을 가능하게 하는 등 다양한 상황에서 유용하게 사용될 수 있다.