티스토리 뷰

안녕하세요. 좋아요요정입니다!

 

우리가 열심히 자바스크립트 코드는 배우고 있는데, 코드가 어디에 저장되고, 어떻게 입출력이 되는가?

메모리는 어떻게 저장이 될까? 변수, 함수들은 어디에 저장이 되는지, 어떻게 실행이 되는지 이해하기 위해서

컴퓨터 구조에 대해 먼저 살펴보겠습니다.

 

 


컴퓨터 구조

컴퓨터란?

고대의 컴퓨터 - Fixed Program Computer라는 컨셉을 적용
   특정 목적을 위해 만들어진 컴퓨터로 추가적인 프로그래밍 적용이 불가능했었음. (예. 빠른 수학연산을 위한 계산기)
- 컴퓨터에 프로그램 기능을 추가하거나, 수정하는 등의 작업은 할 수 없었음
현대의 컴퓨터 - Stored Program Computer는 다양한 작업을 위한 프로그래밍이 가능.
  어플리케이션을 저장하여 실행할 수 있다는 특징이 있음.
- 프로그램과 데이터들을 메모리라고 불리는 저장공간에 각각 보관이 됨.

컴퓨터는 말 그대로 연산을 하는 사람입니다. 고대의 컴퓨터는 특정 목적을 위해 만들어진 컴퓨터로 추가적인 프로그래밍 적용이 불가능했지만, 현대의 컴퓨터는 사용자가 직접 코드를 작성할 수 있고, 다양한 프로그램들을 설치 및 실행할 수 있습니다.

현대의 컴퓨터의 컨셉에서 프로그램과 데이터들은 메모리라고 불리는 저장공간에 각각 보관이 됩니다.

 

 

 

IAS 컴퓨터의 구조

컴퓨터의 구조를 추상적으로 살펴보겠습니다. 컴퓨터는 크게  CPU(프로세서)와 메인 메모리, 그리고 입출력 장치로 이루어져 있습니다.

사용자를 통해 키보드나 마우스, 마이크 등의 기기로부터 입력을 받고,  컴퓨터는 정보를 받아 CPU, 메모리에서 처리한 뒤 모니터, 스피커 등의 기기로 연산 결과를 출력합니다. 

 

먼저 컴퓨터의 뇌에 해당하는 CPU에는 컨트롤 유닛과 연산로직 유닛에 대해 이야기해보겠습니다. 

 

컨트롤 유닛  

  • 모든 프로세서 시그널을 관리
  • 입력과 출력의 흐름을 관리
  • 동작을 위한 코드를 불러오기
  • 시스템상의 데이터 흐름을 관리

연산 로직 유닛

  • CPU의 한 부분으로 연산에 필요한 로직 관리
  • 더하기, 빼기, 비교
  • Logical Operation, 비트 연산 등을 실행

유닛은 각각의 역할을 가지고 있습니다.

인텔,  AMD, M1 칩 등 일상에서 CPU에 대하여는 알고 있었지만, 어떻게 작동하는지는 알지 못했는데 컨트롤 유닛과 연산로직 유닛으로 분리되어 각각의 역할을 맡고 있다는 것을 알게되니 컴퓨터와 좀 더 친해진 기분이네요.

 

 

 

 


프로그램 실행 플로우

좀 더 자세하게 어떻게 진행이 되는지 알아보겠습니다. 

사용자가 마우스 등을 활용해 프로그램을 실행합니다. 이 경우 사용자가 입력한 명령이 컴퓨터 내부로 전달됩니다.

이때 컴퓨터가 프로그램을 실행하기 위해서 4단계 작업을 거칩니다.

 

(0. 사용자가 프로그램을 실행)

  1. CPU가 코드 실행에 필요한 데이터들을 하드디스크에서 가져옵니다.
  2. 가져온 데이터를 수월히 작업하기 위해 RAM 메모리에 올려줍니다.
  3. CPU가 열심히 연산작업을 하여 결과물을 받아옵니다.
  4. 사용자에게 결과물을 반환합니다.

 

프로그램 실행 플로우에 CPU는 중요한 역할을 하고 있네요. 메모리와 디스크, 사용자의 입력출력까지. 

CPU의 성능과 코어수가 중요한 이유를 컴퓨터에 대해 이해하며 알게 되었습니다.

 

 

 


메모리

이번엔 메모리에 대해 알아보겠습니다. 위의 실행 플로우 단계를 보시면, CPU가 프로그램 실행, 연산 등의 작업에 필요한 데이터를  RAM 메모리에 올려주는 단계가 있습니다. 이 단계에서 자바스크립트 공부를 하며 배운 스코프, 변수 선언, 참조, 힙, 콜스텍 등.. 다양한 일들이 벌어집니다. 자바스크립트 개발자라면 어떻게 진행이 되고 있는 지 꼭 알고 있어야 할 메모리를 살펴보겠습니다.

 

 

메모리의 종류

메모리는 크게 컴퓨터 파워를 종료해도 데이터가 유지되는 메모리와 종료되면 초기화되는 메모리가 있습니다. 

컴퓨터 파워를 종료해도 데이터가 유지되는 메모리로는 대표적으로 HDD, SSD... 뭐  CD? 플로피 디스크? 등이 있다는데..(알지만 모르는척 우선 하기) 예, 요즘은 대표적으로 SSD, 외장하드가 있습니다.

컴퓨터를 종료하면 초기화되는 메모리로는 RAM이 있습니다. 

 

스터디에서 진행한 예제로 책장책상이 있습니다.

 

컴퓨터가 파워를 종료해도 데이터가 유지되는 메모리인 HDD 등을 책장으로 생각해보겠습니다.

책장은 정렬도 해야하고, 데이터를 찾기 위해 책장으로 이동하고, 찾아서 책상으로 가지고 오는 등의 작업을 거치기 때문에 비교적 속도가 느립니다. 대신 책장에 데이터라 저장되어있기 때문에 컴퓨터가 종료되어도 유지되죠.

 

책상은 필요한 자료들을 바로 선택해 사용하고, 책상 자체가 작업대이기 때문에 데이터를 가져오고, 이동하는 작업이 없어 실행하는 속도가 상당히 빠릅니다. 필요한 데이터가 저장된 주소만 알면, 순차적으로 찾아다닐 필요가 없고 해당 데이터 보관소로 바로 접근할 수 있기 때문이죠. 

 

CPU는 프로그램이 실행이 되면 데이터를 RAM메모리에 올려두고 작업합니다.

이   RAM메모리에 대해 조금 더 깊게 살펴보겠습니다.

 

 

 

RAM 메모리 영역

RAM 메모리는 크게 네가지 영역으로 구분할 수 있습니다. 

 

코드 영역

  • 실행할 프로그램 코드가 저장되는 영역
  • 이곳에 코드를 보관하며 CPU가 한줄 한줄씩 처리

데이터 영역

  • 프로그램의 전역 변수와 정적 변수가 저장되는 영역
  • 프로그램의 시작과 동시에 할당되고 프로그램이 종료되면 제거

힙 영역

  • 사용자가 직접 관리할 수 있고, 관리해야 하는 동적으로 할당되는 메모리 영역
  • 객체 생성시 힙 영역에 할당/해제 됨
  • 힙 영역에서는 데이터가 낮은 주소에서 높은 주소 방향으로 할당됨

스택 영역

  • 함수의 호출과 연관되는 데이터가 저장되는 영역
  • 함수를 호출하게 되면 스택 영역에 할당→ 호출이 끝나면 소멸 (이를 자바스크립트 진영에선 execution context 또는 call stack이라고 부름)
  • 스택 영역에서는 데이터가 높은 주소에서 낮은 주소로 할당

 

 

 


 

  본격적인 스터디 전 우리가 작성한 프로그램이 실행될 때 컴퓨터가 어떻게 작동하는지 알기 위해 컴퓨터 구조에 대한 이해부터 시작했습니다. 우리가 작성한 코드는 우리 혹은 사용자의 입력을 받으면 CPU의 컨트롤 유닛은 입력을 받고 프로그램이 저장된 위치에서 실행을 위한 데이터를 불러오고, RAM작업대에  실행에 필요한 코드, 전역 변수와 정적 변수, 동적으로 할당되는 힙 영역, 지역변수와 매개변수가 사용되며 함수의 호출과 연관되는 스택영역에 올려두고, 연산로직 유닛의 연산을 통해 실행에 필요한 작업을 처리한 뒤 결과물을 사용자에게 반환하는 플로우를 살펴보았습니다.

 

코드를 작성하고, 동기 비동기, 콜스택이 찬다, 힙에 저장이 된다 등의 액션은 알고 있었지만, 하드웨어인  CPU와 메모리의 구조와 역할, 프로그램의 실행 플로우를 배우게 될 수 있었습니다. 작동하는 원리를 시각적인 자료와 함께 알게 되니 이해가 더 빠르게 되었습니다.

스터디에 참여하게 되어 참 설레입니다. 스터디원분들 모두 원하는 모든 것을 이루길 바랍니다! :) (스터디를 진행하고, 강의자료를 준비해 강의해주신 hoon님께 참 감사드립니다.) 

 

컴퓨터 구조 이해하기 글은 여기서 마무리합니다. 감사합니다.

 

 

JavaScript 스터디 팀 러버덕과 함께 합니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
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
글 보관함