이번 카테고리에서는 운영체제가 무엇인지, 또 어떤 개념들이 있는지에 대해서 두 차례에 걸쳐 다뤄보고자 합니다.
우선 운영체제에 대해서 자세하게 포스팅을 하기 전에, 운영체제의 기본적인 개념들을 간단하게 소개하고자 합니다.
운영체제를 이해하기 위해서는 프로그램이 동작하는 방식을 알아야합니다.
프로그램의 동작은 다음의 4단계로 간단하게 표현할 수 있습니다.
단계 1. 프로세스가 메모리로부터 instruction을 가져오는 fetch 단계
단계 2. 가져온 instruction이 무엇인지 분석하는 decode 단계
단계 3. 메모리에 접근한다거나, 연산을 수행하거나, 함수로 jump 하는 등 명령어를 수행하는 execute 단계
단계 4. 프로세서가 다음에 수행할 명령어로 이동하는 단계
운영체제는 위와 같은 프로그램 동작을 쉽게 만들어 줄 뿐만 아니라, 프로그램들이 메모리를 공유하고, 다른 device와 상호작용 하는 것을 가능하게 해줍니다.
이렇듯, OS는 시스템 동작을 정확하고 효율적으로 해주는 역할을 맡고 있는 셈이죠.
운영체제가 갖고 있는 개념들을 간단하게 소개하겠습니다.
각 특징들의 자세한 내용들은 뒤에서 다룰 예정입니다.
Virtualization
OS는 프로세서나 메모리, 디스크와 같은 물리적인 자원들을 가상의, 즉 virtrual form 으로 바꿔줍니다.
그 이유는 virtual form으로 관리를 하게 되면, 더 general하고 powerful하며, 사용하기 쉬운 형태가 되기 때문입니다.
이러한 가상화라는 특징을 갖고 있기 때문에, OS를 virtual machine이라고도 합니다.
System call
user가 OS에게 무언가를 부탁할 때에 사용되는 것이 system call 입니다.
기본적으로 user가 직접 건드리면 위험할 수 있는 부분을, system call을 이용하여 OS에게 부탁함으로써 더 안전하게 처리하는 것이죠.
따라서 OS는 user가 system call을 사용할 수 있도록, API나 standard library와 같은 인터페이스를 제공합니다.
따라서 꽤 많은 system call이 있는데, 보통 프로그램을 동작시키거나, 메모리나 device에 접근하는 system call을 제공합니다.
resource manager의 기능
OS는 CPU나 메모리, disk와 같은 자원을 관리하는 역할을 합니다.
여러 프로그램을 실행시키고 싶을 떄에는 CPU 공유를,
여러 프로그램이 동시에 instruction과 data에 접근하려고 할때에는 memory 공유를,
여러 프로그램이 device에 접근하려고 하면 disk를 공유를 할 수 있게 도와줍니다.
CPU 가상화
따라서 한정적인 CPU를 마치 굉장히 많은 CPU가 있는 것처럼 보여주는 방법을 사용하게 됩니다.
즉, 겉보기에는 프로그램이 한번에 실행되는 것 처럼 보여주는 것이죠.
마치 우리가 컴퓨터에서 워드 프로세서와 게임, 음악 스트리밍 프로그램을 다같이 사용할 수 있는 것 처럼요!
이것을 바로 CPU 가상화 (Virtualizing the CPU)라고 합니다.
Memory 가상화
실제로 저장되는 물리적 메모리는 byte로 이루어진 array라고 할 수 있습니다.
따라서, program은 모든 data 구조를 필요에 따라 메모리에서 read(load)하고, 메모리에 write(store)하게 됩니다.
하지만 우리는 이 제한된 메모리를 마치 더 큰 메모리인 것처럼 쓰기 위해서 가상화를 하게 됩니다.
우리가 test.c 라는 파일을 만들어 int a = 10; 이라고 선언한 뒤 a의 주소를 출력했을 때 나오는 것이 바로 virtual address입니다!
즉, 실제로 저장되는 physical memory아 아닌, 관리를 위해 사용되는 virtual memory인 것이죠.
주소값을 찍는 코드를 돌려보면, 두 개의 다른 프로그램에 선언된 변수임에도 불구하고, 출력했을 때의 포인터가 같을 때가 있습니다. (프로그램 A의 temp 변수의 주소가 00200000이고, 프로그램 B의 temp 변수의 주소도 00200000인 경우)
그 이유는 각 프로그램이 자신만의 메모리를 가지고 있는 것처럼 착각하게끔 OS가 가상화를 하기 때문이죠.
하지만 실제로는 메모리가 하나이므로, 물리적으로 같은 주소에 저장될 수는 없습니다.
따라서 운영체제는 address space(가상으로 사용되는 주소)를 실제 주소인 physical address로 매핑시켜줘야 합니다.
즉, 제한된 크기의 physical memory 자원을 OS에 의해서 여러 프로그램들이 공유할 수 있게 되는 것이죠.
이번 시간에는 가상화와 메모리 관리 등을 중점으로 한 운영체제의 특징과 기능들에 대해서 알아보았습니다.
다음 글에서는 동시성 문제와 Persistence 등의 개념에 대해서 간략하게 소개하겠습니다.
'운영체제' 카테고리의 다른 글
[운영체제] Direct Execution과 Limited Direct Execution (0) | 2021.01.14 |
---|---|
[운영체제] 프로세스 API (0) | 2021.01.11 |
[운영체제] 프로세스(Process)란 무엇일까? (0) | 2021.01.10 |
[운영체제] CPU 가상화의 기본 개념 (0) | 2021.01.10 |
[운영체제] 운영체제 소개와 기본 개념 (2) (0) | 2021.01.06 |