반응형

프로그램을 쉽게 실행하고 프로그램 간의 메모리 공유를 가능케 하고, 장치와 상호작용을 가능케하고, 다양한 흥미로운 일을 할 수 있게 하는 소프트웨어가 있다. 시스템을 사용하기 편리하면서 정확하고 올바르게 동작시킬 책임이 있기 때문에 소프트웨어를 운영체제(operating system, OS)라고 부른다.

 

운영체제는 가상화(virtualization)라고 불리는 기법을 사용한다. 운영체제는 프로세서, 메모리, 또는 디스크와 같은 물리적 자원을 이용하고, 사용이 편리한 가상 형태의 자원을 생성하기 때문에 운영체제를 때로는 가상 머신(virtual machine)이라고 부른다.

 

가상화는 많은 프로그램들이 CPU를 공유하여, 동시에 실행될 수 있게 한다. 프로그램들이 각자 명령어와 데이터를 접근할 수 있게 한다. 프로그램들이 디스크 등의 장치를 공유할 수 있게 한다. 이러한 이유로 운영체제는 자원 관리자(resource manager) 라고도 불린다. CPU, 메모리, 및 디스크는 시스템의 자원이다. 이들 자원을 관리하는 것이 운영체제의 역할이다.

 

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <assert.h>
#include“common.h ”
int main(int argc, char *argv[])
{
   if (argc != 2) {
   printf(stderr, “usage: cpu <string>\n ”);
   exit(1);
 }
 char *str = argv[1];
 while (1) {
 Spin(1);
 printf(“%s\n ”, str);
 }
 return 0;
 }

Spin()을 호출하는 프로그램이다. Spin()은 1초 동안 실행된 후 리턴하는 함수이다.

이 프로그램을 실행하면 1초가 지나면 사용자가 전달한 입력 문자열을 출력한다. 출력 후 실행은 계속된다.

 

prompt> ./cpu A & ; ./cpu B & ; ./cpu C & ; ./cpu D &
[1] 7353
[2] 7354
[3] 7355
[4] 7356

프로세서가 하나밖에 없음에도 프로그램 4개 모두 동시에 실행되는 것처럼 보였다. 어떻게 된 일인걸까?

하드웨어의 도움을 받아 OS가 시스템에 많은 수의 가상 CPU가 존재하는 듯한 환상을 만들어낸것이다.

하나의 CPU 또는 소규모 CPU 집합을 무한개의  CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것을 CPU 가상화(virtualizing the CPU)라 한다. 

 

 

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include“common.h ”
 int main(int argc, char *argv[])
 {
 int *p = malloc(sizeof(int)); // a1
 assert(p != NULL);
 printf(“(%d) memory address of p: %08x\n ”,
 getpid() , (unsigned) p); // a2
 *p = 0; // a3
 while (1) {
 Spin(1);
 *p = *p + 1;
 printf(“(%d) p: %d\n ”, getpid() , *p); // a4
 }
 return 0;
 }

메모리 접근 프로그램이다. 메모리는 프로그램이 실행되는 동안 항상 접근된다. malloc()을 호출하여 메모리를 할당하는 코드이다. 같은 프로그램을 여러번 실행시켜보면 프로그램들은 같은 주소에 메모리를 할당받지만, 각각이 독립적으로 0020000 번지의 값을 갱신한다. 각 프로그램은 물리 메모리를 다른 프로그램과 공유하는 것이 아니라 각자 자신의 메모리를 가지고 있는 것처럼 보인다. 운영체제가 메모리 가상화(virtualizing memory)를 하기 때문에 이런 현상이 생긴다.

각 프로세스는 자신만의 가상 주소 공간을 갖는다.

 

 

 

'IT > 운영체제' 카테고리의 다른 글

CPU 스케줄링 FIFO, SJF, STCF, RR  (0) 2024.11.19
프로세스 개념  (1) 2024.11.18
[Linux] PV, VG, LV 명령어  (0) 2024.08.09
파일 시스템(File System)  (0) 2024.08.09
리눅스 Destination Host Unreachable 원인과 해결방법  (0) 2024.08.08

+ Recent posts