2021. 7. 19. 22:48ㆍCS/운영체제
이번 글에서는 Virtual Memory와 System call에 대해 정리해보겠습니다.
Virtual Memory : 예를 들어 PC의 메모리는 4GB인데 응용 프로그램들은 그보다 더 큰 리소스가 있다고 생각하고 돌아갈 수 있도록 운영체제가 서비스를 제공하는 것이다.
System Call : 운영체제에게 서비스를 요청하는 것. 예를 들어, c++에서 cout 했을 때 모니터에 출력해야 하는데 라이브러리를 통해 모니터에 보여주는 것 자체는 운영체제가 하는 것이다.
Virtual Machines
하드웨어는 하나만 존재하는데 각 운영체제가 하드웨어를 본인이 다 쓰고 있다고 가상적으로 생각하게 만드는 것입니다.
실제 사용 예시를 들자면,
- Java 프로그램이 수행될 때, JVM은 해당 프로그램이 마치 하드웨어를 본인만 쓰는 것처럼 만들어줍니다.
- Mac에서 Windows 프로그램을 실행할 때, Parallels를 이용합니다. 그 위에서 Windows를 설치하는 것이 VM(줄여서 VM이라 칭하겠습니다)과 같은 원리입니다.
- 컴퓨터 하드웨어 위에 Windows OS를 설치하고 사용 중 Linux도 사용하고 싶은 경우 VMware를 이용해 Linux를 설치해 사용하는 것도 그 예시입니다. (Linux는 Windows의 존재를 모른다)
즉, VM은 물리적 컴퓨터가 한 대인데 운영체제가 여러 개가 수행되는 것입니다. 컴퓨터가 여러 대가 있는 것처럼 보이게 하고 비용절감의 효과를 가져올 수 있습니다.
장점: 하드웨어는 고비용의 자원인데 실제로 사용되는 것을 보니 모든 리소스를 사용하진 않습니다. 따라서 물리적 하드웨어 위에 여러 개의 가상머신을 운영하면 CPU를 훨씬 효율적으로 이용할 수 있습니다.
단점: 컴퓨터에 운영체제 하나 올린 것과 가상머신을 돌리는 것은 엄연한 성능적 차이가 존재합니다.
JVM(Java Virtual Machine)
Java로 만든 애플리케이션은 JVM 위에서 수행되기 때문에 운영체제에 구애받지 않고 독립적입니다.
실행파일은 기계어가 포함되어 있는데 이는 CPU 언어입니다. 즉, CPU가 다르면 기계어도 다르다는 문제가 있습니다. 이처럼 호환 이슈를 해결할 수 있도록 JVM을 이용합니다.
Java를 컴파일하면 Java에서 정의한 Byte Code로 실행됩니다. 이때 실행파일을 실행시키는 주체가 JVM입니다. JVM이 Java Byte Code를 사용자 운영체제의 기계어로 번역해줍니다.
System Call
애플리케이션을 실행하는데 까지는 '하드웨어 → 운영체제(하드웨어 관리) → 애플리케이션 프로그램(하드웨어를 이용하기 위해 운영체제에게 서비스 요청)'의 구조를 지니게 됩니다.
애플리케이션은 하드웨어 자원을 이용하기 위해서 직접 접근이 어렵습니다. 따라서 운영체제에게 하드웨어에 접근할 수 있도록 서비스를 요청하는 인터페이스, 함수를 요청하는 것이 시스템 콜입니다.
보통 시스템 콜은 유저모드와 커널모드로 나누게 됩니다. 이는 I/O Protection의 이유로 나눴다고 할 수 있습니다. 애플리케이션 프로그램에서 직접 하드웨어를 제어하는 프로그램을 만들면 충분히 직접 제어할 수도 있습니다. 하지만 이를 막기위해 유저모드, 커널모드를 제공합니다. 하드웨어를 제어하는 명령어는 커널모드에서 제공하고, 혹여나 유저모드에서 관련 명령을 호출해도 수행되지 않고 Exception을 걸어 운영체제의 도움을 받습니다.
만약 shell이라는 애플리케이션에서 프로세스가 하나 더 필요하여 하나 더 생성해 달라고 운영체제에게 fork 함수를 요청합니다. 유저모드에서 커널모드로 바뀌어야 하므로 fork 함수 제일 앞 부분에 Trap이라는 매커니즘이 필요합니다. CPU가 자기 자신에게 Exception을 수행해 유저모드에서 운영체제에게 도움을 요청합니다. 이처럼 Exception 중에 시스템 콜을 호출했을 때의 Exception을 Trap이라고 합니다.
Exception Review!
- CPU가 명령어를 수행하는데 더이상 수행할 수 없는 경우 (ex, 0으로 못나누는 경우 등)
- 유저모드에서 하드웨어를 제어하는 명령어를 수행하지 못하게 하는 경우
- 참조할 수 없는 메모리를 참조할 경우
- 유저모드에서 수행되다가 운영체제에게 도움을 요청할 때 알려주는 경우 (Trap)
'CS > 운영체제' 카테고리의 다른 글
프로그램 / 프로세스 / 스레드 (0) | 2021.07.19 |
---|---|
운영체제란 (0) | 2021.06.07 |