4. hello.exe의 실행 과정

4.1 시스템 H/W 조직에 대한 이해

시스템 H/W는 다양한 컴포넌트들로 이루어져 있다. 시스템의 기본적인 이해를 위하여 각 컴포넌트에 대해서 알아보는 시간을 갖자.

 

  • 버스

컴퓨터 시스템 내의 전기적 배선군이다.

각 컴포넌트 간 바이트 정보를 전송한다.

전송되는 바이트는 워드라는 단위로 전송이 되며, 워드는 시스템의 최소 구성 단위이다.

우리가 알고 있는 32bit, 64bit의 분류 기준이 시스템의 워드 단위를 를 나타낸다.

 

  • 입출력 장치 

시스템과 외부 세계의 상호작용을 담당한다.

마우스, 키보드, 모니터, 디스크 등이 입출력 장치에 해당한다.

디스크에는 우리가 작성한 hello.exe 파일이 저장되어 있다.

 

이 장치는 입출력 버스나 컨트롤러, 어댑터를 통하여 연결되어 있다.

 

  • 메인메모리

프로세서가 프로그램을 실행하는 동안 데이터와 프로그램을 저장하는 장치이다.

메인메모리는 DRAM 칩으로 구성되어 있고, 논리적으로 0부터 시작하는 고유 주소를 가지고 있다.

 

  • 프로세서

프로세서 즉, CPU는 메인메모리에 저장된 인스트럭션의 해독(실행)을 하는 엔진이다.

프로세서의 중심에는 레지스터(워드 크기의 저장장치)와 프로그램 카운터(PC)가 있다.

CPU는 전원이 켜지면 꺼질 때 까지 PC가 가리키는 메모리의 인스트럭션을 반복하며, PC값이 다음 인스트럭션의 위치를 가리키도록 업데이트 하는 역할을 한다.

 

4.2 hello가 실행될 때의 모습

1. 입출력 장치로부터 실행 명령을 받는다.

(마우스로 실행시키거나 ./hello 와 같은 명령어)

2. 파일의 코드와 데이터를 복사하는 인스트럭션이 실행되어 디스크에서 메인 메모리로 이동한다.

3. 프로세서가 main의 기계어 인스트럭션을 실행한다.

4. "hello, world" 문자열은 메모리로 부터 레지스터 파일로 복사된다.

5. 디스플레이 장치로 문자열을 전송하고, 화면에 표시된다.

 

5. 캐시의 중요성

4.2에서 hello가 실행되는 동안의 모습을 살펴보자.

헬로를 실행하면 정보의 이동에 많은 시간이 소요되는 것을 알 수 있다.

(코드와 데이터를 복사하여 디스크에서 메인메모리로 이동, 문자열의 메모리로부터 레지스터 파일로의 복사)

이러한 것들이 앞서서 살펴본 오버헤드에 해당한다고 할 수 있다.

 

즉, 복사과정을 줄이는 것이 시스템의 성능을 올리는 방법이다.

이를 위하여 캐시라는 작은 저장장치를 사용한다.

 

프로세서는 레지스터 파일의 데이터를 읽는데 메모리보다 거의 100배 더 빨리 읽을 수 있다.

하지만 반도체 기술의 발달에 의해 프로세서-메모리간 격차가 지속적으로 증가하고 있다.

메인 메모리보다 프로세서를 향상시키는게 더 쉽고 비용이 적다.

 

이러한 격차를 줄이기 위하여 캐시 메모리라는 것을 고안했다.

캐시는 단기간에 필요로한 임시 저장정보를 저장하는데 사용한다.

또한 캐시는 레지스터 파일만큼 빠른 속도로 액세스 할 수 있는 성능을 가졌다.

 

이 캐시를 활용한다면 자신의 프로그램 성능을 10배 이상 개선할 수 있다.

 

6. 저장장치의 계층 구조

작고 빠른 캐시메모리같은 저장장치를 프로세서와 메인 메모리에 끼워 넣는 개념은 일반적인 아이디어로 여겨진다.

이는 저장장치의 계층구조를 이루는 것과 같은 원리이다.

 

계층 구조의 핵심은 한 레벨의 저장장치가 다음 하위 레벨의 저장장치의 캐시 역할을 한다는 것이다.

 

메모리가 디스크의 캐시 역할을 하는 것과 같은 원리로 말이다.

 

7. 운영체제의 하드웨어 관리.

hello 프로그램에서 입출력 장치를 이용할 때 운영체제가 제공하는 서비스를 활용하였다.

이렇듯 운영체제는 다음과 같은 역할을 한다.

 

  • 응용프로그램의 하드웨어 사용 관리
  • 단순하고 균일한 메커니즘을 통하여 하드웨어 장치의 조작

 

만약 프로그램을 잘못 짜서 하드웨어를 잘못 사용하게 되면 큰일이다. 따라서 운영체제가 이런 일들을 미연에 방지하는 것이다.

 

운영체제는 이와 같은 역할을 근본적인 추상화를 통해 달성하고 있다.

 

  • 가상메모리 - 메인 메모리와 디스크 입출력
  • 파일 - 입출력장치
  • 프로세스 - 프로세서, 메인 메모리, 입출력장치

왼쪽의 요소들이 오른쪽 요소의 추상화를 통하여 나타나는 모습들이다.

 

7.1 프로세스

프로세스는 실행중인 프로그램에 대한 운영체제의 추상화다.

우리는 단 하나의 프로그램만 실행할 수 있는 것이 아니다.

노래를 들으면서 동시에 웹 서핑을 할 수 있다.

이는 프로세서가 프로세스들을 바꿔주는 방식으로 한개의 CPU가 다수의 프로세스를 동시에 실행시키는 것처럼 보여준다.

이를 운영체제에서는 문맥 전환이라는 방법을 사용하여 수행한다.

운영체제는 프로세스가 실행하는데 필요한 모든 상태정보의 변화를 추적하고 ,그것을 컨텍스트라고 한다.

컨텍스트에는 PC, 레지스터 파일, 메인 메모리의 현재 값이 포함되어 있다.

 

7.2 쓰레드

프로세스는 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다. 이는 각 쓰레드에서 데이터의 공유가 쉽다는 장점과 프로세스보다 더 효율적이라는 장점을 가지고있다.

 

7.3 가상메모리

각 프로세스에게 부여되는 가상주소 공간이라고 하는 균일한 메모리 공간이다.

스택의 형태를 가지며 위쪽으로 갈수록 주소가 높아진다.

즉 바닥의 주소가 0이 되는 식으로 도식화 한다.

 

7.4 파일

파일은 간단하게 연속된 바이트들을 의미한다.

다만 이는 매우 간단하나 매우 강력하다.

'Computer System' 카테고리의 다른 글

1. 컴퓨터 시스템의 시작(3)  (0) 2021.02.01
1. 컴퓨터 시스템의 시작(1)  (0) 2020.12.28

+ Recent posts