티스토리 뷰

프로그램이 실행될 때 어떤 일이 일어날까?

먼저 명령어를 실행한다. 프로세서는 명령어를 초당 수십억번 fetch(반입)->decode(해석)->execute(실행) 과정을 거친다.

명령어 작업 완료 후 프로세서는 프로그램이 완전히 종료될 때 까지 명령어를 실행한다.

이런 방식은 Von Neumann(폰 노이만) 컴퓨팅 모델의 기초이다.

 

시스템을 사용하기 편리하면서 정확하고 올바르게 동작시키기 위해 OS(운영체제)를 사용한다.

위의 과정을 실행하기 위해 가상화라는 기법을 사용한다.

운영체제는 프로세서,메모리,디스크 같은 물리적인 자원을 이용해 가상 형태의 자원을 생성한다.

가상 머신을 이용해 메모리 할당, 프로그램 실행, 파일 접근과 같은 활동을 운영체제에게 요청할 수 있도록 운영체제는 사용자에게 API를 제공한다. 보통 운영체제는 응용 프로그램이 사용 가능한 수백 개의 시스템 콜을 제공한다.

운영체제가 메모리와 장치에 접근 등 여러 작업을 진행하기 위해 시스템 콜을 제공하기 때문에 표준 라이브러리라고 부른다.

 

가상화는 많은 프로그램들이 CPU를 공유하여, 동시에 실행될 수 있게 한다. 프로그램들이 각자 명령어와 데이터를 접근할 수 있게한다. 프로그램들이 디스크 등의 장치를 공유할 수 있게 한다. 이러한 이유로 자원 관리자라고 부르기도 한다.

운영체제의 역할은 자원을 효율적으로 관리하는 것이다. 

 

자원을 어떻게 가상화 시키는가?

 

하나의 cpu는 하나의 프로그램만 실행이 가능하다. 하지만 여러 개를 동시에 출력하거나 실행하는 프로그램도 사용이 가능하다. 가상화를 이용하면 가능하다. 매우 많은 수의 가상 CPU가 존재하는 듯이 만들어 내는 것이다.

API를 이용해 운영체제와 사용자는 무엇이 필요한 지 상호작용한다.

 

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main(int argc,char * argv[]){
	int *p = malloc(sizeof(int));	//a1
    assert(p != NULL);	//p가 null이 아닐 경우 오류 출력
    printf("%(d) memory address of p : %08x\n", getpid(),(unsigned) p);	//pid와 p의 주소 출력
    *p=0;
    while(1){
    Spin(1);	//1초 동안 실행된 후 리턴하는 함수. 책에서 구현한 것
    *p=*p+1;	//p의 값 1 상승
    printf("(%d) p : %d\n",getpid(),*p);	//pid와 p의 값 출력
    }
}

 

위 코드를 실행결과는 다음과 같다.

 

(2134) memory address of p : 00200000
(2134) p : 1
(2134) p : 2
(2134) p : 3
(2134) p : 4
(2134) p : 5

 

하지만 여러 번 실행시켜 보자.

> ./mem &; ./mem &
[1] 24113
[2] 24114
(24113) memory address of p : 00200000
(24114) memory address of p : 00200000
(24113) p : 1
(24114) p : 1
(24113) p : 2
(24114) p : 2
(24113) p : 3
(24114) p : 3
(24113) p : 4
(24114) p : 4

 

동시에 실행시킨 결과이다.

프로그램들은 같은 주소(00200000)에 메모리를 할당 받지만 각각이 독립적으로 00200000의 값을 갱신한다. 각 프로그램은 물리 메모리를 다른 프로그램과 공유하는 것이 아니라 각자 자신의 메모리를 가지고 있다.

(같은 주소(00200000)를 가지고 있지만 물리적 주소를 공유해 값(p의 값)을 가지는게 아니라 각자 자신의 메모리를 가지고 있다.)

 

이러한 현상을 가상화라고 한다. 각 프로세스는 자신만의 가상 주소 공간(Virtual Address Space)을 갖는다. 운영체제는 이 가상 주소 공간(VAS)을 물리 메모리에 매핑한다. 하나의 프로그램이 수행하는 각종 메모리 연산은 다른 프로그램의 주소 공간에 영향을 미치지 않는다. 실행 중인 프로그램의 입장에서는 자기 자신만의 물리 메모리를 갖는 셈이다.  

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함