delpho

운영체제에 대하여 - 5 본문

CS

운영체제에 대하여 - 5

delpho 2022. 7. 30. 22:01

_1. 가상 메모리에 대해 설명해보세요.

 

가상 메모리는 물리적 공간의 제한을 극복하기 위해 실제 메모리 크기와 상관없이 메모리를 이용할 수 있도록 가상의 메모리 주소를 사용하는 방법입니다. 프로세스 실행할때 필요한 부분만 메모리에 적재하면서 메모리 관리가 가능합니다.

 

 

 

[ 가상 메모리 등장 배경 ]

 

  • 초창기 컴퓨터에서는 사용 가능한 RAM의 용량이, 가장 큰 실행 애플리케이션의 주소 공간보다 커야 했음.
  • 이후 컴퓨터에서는 프로그래머가 애플리케이션의 일부분만 기억장치에 올려 실행하도록 지정할 수 있게 하는 오버레이 기법을 사용하여 메모리 부족 문제를 해결하고자 했음. 하지만 이 역시 전반적인 메모리 부족 문제를 해결할 수 없었음. 오버레이를 사용하는 프로그램은 그렇지 않은 프로그램보다는 메모리를 덜 사용했지만, 애초에 시스템이 프로그램을 위한 충분한 메모리를 갖추고 있지 않은 경우에는 결국 똑같은 메모리 부족 오류가 발생했음.
  • 여기에서 더 발전한 가상 메모리 기법은 애플리케이션을 실행하는 데 얼마나 많은 메모리가 필요한지에 집중하지 않고, 대신 애플리케이션을 실행하는 데 최소한 얼마만큼의 메모리가 필요한가에 집중하여 문제를 해결하고자 함.
    • 이렇게 접근하는 방식이 가능한 이유는, 메모리 접근은 순차적이고 지역화되어 있기 때문임.
    • 그렇다면 이렇게 애플리케이션의 일부분만 메모리(기억장치)에 올려진다면, 메모리에 올라가지 않는 나머지는 어디에 위치해야 할까? ⇒ 정답은 보조 기억장치, 즉 디스크!
    • 가상 메모리의 핵심은 보조 기억장치다.

 

[ 가상 메모리 ]

  • 물리적 공간의 제한을 극복하기 위해 실제 메모리 크기와 상관없이 메모리를 이용할 수 있도록 가상의 메모리 주소를 사용하는 방법
  • 프로그램을 동작하기 위해서는 실제 프로그램 파일에 메모리에 할당되어 프로세스가 처리된다. 하지만 실제 메모리의 용량은 비싸고 제한적이다. 그래서 보조 기억장치 (HDD, SSD 등)로 메모리 확장을 하여 사용하게 된다. 메모리 용량 이상의 주소 할당 요청을 하면, 보통 덜 사용하고 있는 프로그램은 보조 기억장치로 옮겨진다. (Swap) 여유 공간을 확보한 메모리 주소에 새 할당 요청을 처리한다.  

 

  • 애플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게 됨. 즉, 디스크가 RAM의 보조 기억장치(backing store)처럼 작동하는 것임.
    • 결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것임.
  • 가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야만 함. ⇒ 바로 MMU(Memory Management Unit)!

 

[ MMU ]

  • MMU는 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행함.
  • MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행됨.
  • 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러 부분(페이지, pages)로 나누어 각 페이지를 하나의 독립된 항목으로 처리함.
  • 페이지 및 주소 번역 정보를 기억하는 작업이 가상 메모리를 구현하는 데 있어 결정적인 절차임.

 

 

[ 페이징 기법 ]

  • 컴퓨터가 메인 메모리에서 사용하기 위해 2차 기억 장치(보조 기억 장치)로부터 데이터를 저장하고 검색하는 메모리 관리 기법
  • 한정된 크기의 실제 메모리를 효율적으로 사용하는 방법 필요 → 프로세스의 일부분은 페이지 단위 또는 세그먼트 단위지만 현재는 대부분 페이지 단위 사용 (세그먼트 기법 & 페이지 기법)
  • 현재 필요한 페이지만 메모리에 올리는 것을 요구페이징이라고 한다.

 

 

[ 요구 페이징 ] 

  • CPU가 해당 페이지를 요구할 때까지 그 페이지를 메모리에 올리지 않는 방식 (즉, 한번도 접근되지 않는 페이지는 물리 메모리에 전혀 적재되지 않는다)
  • 페이지 부재(page fault)가 발생하면 그 때 트랩을 걸어 해당 페이지를 적재

 

[ 페이지 부재(page fault) ]

페이지 폴트란 어떤 페이지에 접근하려고 했을 때 해당 페이지가 실제 물리 메모리에 부재할 때 뜨는 인터럽트이며, 페이지 폴트가 발생하면 운영체제가 이를 해결한 뒤 다시 동일한 명령을 수행하는 식으로 동작함.

 

 


_2. 세마포어와 뮤텍스의 차이에 대해 설명해보세요.

세마포어와 뮤텍스는 여러 프로세스나 쓰레드가 공유 자원에 접근하는 것을 제어하기 위한 방법입니다. 

뮤텍스는 공유된 자원에 대해 하나의 프로세스 혹은 스레드만이 접근 가능하며, 세마포어는 세마포어 변수 만큼 여러 프로세스 혹은 스레드가 접근이 가능합니다.

또, 세마포어는 현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만이 락 해제가 가능합니다.

 

 

 

[ 들어가기 전 ]

  1. 공유된 자원에 여러 개의 프로세스 혹은 스레드가 동시에 접근하면 Critical Section(여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 블록) 문제가 발생할 수 있다. 
  2. 이를 해결하기 위해 공유 자원을 한 번에 하나의 프로세스 혹은 레드만만 접근할 수 있도록 제한을 두는 동기화 방식을 취해야 한다. 동기화 도구에는 대표적으로 뮤텍스(Mutex)와 세마포어(Semaphore)가 있다.

 

[ 뮤텍스 Mutex ]

  • 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 하나의 Process 혹은 Thread만 접근 가능 (동기화 대상이 하나)
  • 임계구역(Critical Section)을 가진 스레드들의 실행시간(Running Time)이 서로 겹치지 않고 각각 단독으로 실행(상호배제_Mutual Exclution)되도록 하는 기술
  • 한 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제 기법
    • Key에 해당하는 객체를 소유한 스레드/프로세스만이 공유자원에 접근 가능

 

 

 

 

[ 세마포어 Semaphore ]

  • 공유된 자원의 데이터 혹은 임계영역(Critical Section) 등에 세마포어의 변수만큼 여러 Process 혹은 Thread가 접근가능 (동기화 대상이 하나 이상)

 

  • 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성
  • 공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근 가능
    • 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있습니다.
  • 자원을 사용하지 않는 상태가 될 때, 대기하던 프로세스가 즉시 자원을 사용하고. 이미 다른 프로세스에 의해 사용중이라는 사실을 알게 되면, 재시도 전에 일정시간 대기해야 합니다.
  • 일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 사용하게 됩니다. 

 

 

[ 차이점 ]

가장 큰 차이점은 동기화 대상의 개수

    • Mutex는 동기화 대상이 오직 1개일 때 사용하며, Semaphore는 동기화 대상이 1개 이상일 때 사용합니다.
    • Mutex자원을 소유할 수 있고, 책임을 가지는 반면 Semaphore자원 소유가 불가합니다.
    • Mutex는 상태가 0, 1 뿐이므로 Lock을 가질 수 있고, 소유하고 있는 스레드만이 이 Mutex를 해제할 수 있습니다. 반면 SemaphoreSemaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있습니다.
    • Semaphore는 시스템 범위에 걸쳐 있고, 파일 시스템 상의 파일로 존재합니다. 반면, Mutex는 프로세스의 범위를 가지며 프로세스 종료될 때 자동으로 Clean up 됩니다.

 

 


출처

https://ahnanne.tistory.com/15

 

[운영체제] 가상 메모리(Virtual Memory System)

들어가기 전.. 메모리(memory)란? 메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치임. 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치

ahnanne.tistory.com

https://velog.io/@syoung125/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%9E%AC-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%9E%80

 

[운영체제] 가상 메모리란?

메모리란?물리 메모리 크기의 한계를 극복하기 위해 나온 기술 → 물리 메모리보다 큰 프로세스를 수행하기 위해 사용 → ? 뭔소리야 🤔, 100MB 메모리 크기에서 200MB 크기의 프로세스를 어떻게

velog.io

https://heeonii.tistory.com/14

 

[운영체제] Mutex 뮤텍스와 Semaphore 세마포어의 차이

프로세스 간 메시지를 전송하거나, 공유메모리를 통해 공유된 자원에 여러 개의 프로세스가 동시에 접근하면 Critical Section(여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유

heeonii.tistory.com

https://junghyun100.github.io/Semaphore&Mutex/

 

Semaphore(세마포어)와 Mutex(뮤텍스)의 차이점은?

해당 Post는 Semaphore(세마포어)와 Mutex(뮤텍스)의 차이점를 정리한 파일이다.

junghyun100.github.io

https://beeehappy.tistory.com/53?category=901774 

 

[컴퓨터시스템] 가상메모리 (Virtual Memory)

목차 가상메모리란 무엇이고, 왜 필요한가 가상메모리 주소 공간 (Virtual Address Space, VAS) Stack Heap Data Code, Text 가상 메모리 (Virtual Memory) 실제 메모리 크기와 상관없이 메모리를 이용할 수 ..

beeehappy.tistory.com

 

'CS' 카테고리의 다른 글

보안에 대하여 - 1  (0) 2022.08.07
운영체제에 대하여 - 6  (0) 2022.08.07
운영체제에 대하여 - 4  (0) 2022.07.27
운영체제에 대하여 - 3  (0) 2022.07.27
운영체제에 대하여 - 2  (0) 2022.07.24