Study

메모리와 버스

mynameisjh 2022. 3. 27. 14:57

● 메모리

- 컴퓨터 시스템에서 데이터를 저장하는 장치

메모리의 계층 구조

 

· CPU는 메인 메모리에 들어있는 데이터를 이용한다.

그래서 용량은 적지만 메인메모리의 데이터를 복사하는 메모리가 존재한다. → 캐시메모리

​★CPU는 캐시 메모리를 참조한다.

 

 프로세서 레지스터

- CPU는 연산장치지만 저장장치는 아니다. 그러므로 연산을 하고 나온 값을 저장할 공간이 필요하다. 그러므로 프로세서 레지스터가 필요하다.

  1. 범용 레지스터 : 위의 용도로 사용한다.
  2. ​특수 레지스터 : 다른 특별한 용도.

(ex : 프로그램 실행 시 어디까지 실행했는지 정보를 저장하는 용도, flag 발생 용도 등. . .)

이렇게 각 장치들이 데이터를 주고받으려면 Bus가 필요하다.

 Bus의 종류

  1. Data Bus
  2. Address Bus
  3. Instruction Bus​

버스를 왜 3개로 나눴을까 ?

데이터의 이동이 많이 일어나면 병목현상이 일어나기 때문

※ 보조 기억 장치에서 byte 단위로 읽는다 한다면, Instruction이 엄청나게 증가하여 Instruction Bus에 과부하가 온다.

그리고 하나하나의 byte에 Address가 지정되므로 Address Bus에 Data가 집중되므로 과부하가 온다.

그러므로 보조 기억 장치에선 Block단위로 데이터를 송수신 한다.

- 보조 기억 장치에서 Block 단위로 메인 메모리에 가져간다. 이 Block이 모여서 page 단위가 된다. 캐시 메모리는 용량이 작기 때문에 수 k씩 가져오기 힘들다. 프로세서 레지스터는 용량이 캐시 메모리보다 더 작기 때문에 word 단위로 데이터를 가져온다.

※ Block의 크기는 OS마다 다르므로 명확하게 정의할 수 없다.

● 메모리의 이해

- 우리는 메모리를 그냥 사용 할 수 없다. 메모리를 사용하는 것은 사용자가 운영체제에 부탁하는 것 이다.

· Memory Binding

- 프로그램의 논리적 메모리를 실제 메모리와 연관시키는 기술

 

바인딩의 종류 

  •  Compile-time binding
  •  Load-time binding
  •  Run-time binding​

 

 

Q. 메모리에 할당하기 위한 모든 정보가 어디서 나오는가 ?

A. Compiler가 미리 알고 있어서 정보가 나온다. 그러므로 Compile-time에 엮을 수 있다.(엮는 것은 아님)

· Load-time은 어차피 Run-time 전 이고 자동화가 되므로 크게 신경 쓸 필요 없다.

· Run-time : 실행이 되어야 일어날 수 있는 일을 binding 한다.

- 특징 : 0을 넣으면 그 메모리는 존재하지 않는다. 메모리가 존재해야 그 메모리를 추상화 한다.

· 메모리가 존재하지 않으므로 이름을 붙일 수 없다.(추상화 불가능)

※ 다른 문제점

- Compile-time에 내가 사용할 메모리에 총량, 최대 값을 알 수 있다. 하지만 Run-time에선 최대치를 모른다.              = 예측 값이 없다.

★Compile-time에서 운영되는 방식과 Run-time에서 운영되는 방식이 같을 수 없다.

 

Compile-time binding
Run-time binding
결과
변수에 이름을 붙일 수 있다.
(Abstraction O)
ex) int a = 10;
→ 크기를 명확하게 알 수 있다.
변수에 이름을 불일 수 없다.
(Abstraction X)
→ 크기를 알 수 없다.
참조형으로 Heap 영역에 메모리를 잡는다.
런타임인 경우 int a = 10;
이런 식으로 할 수 없다.
= 참조형이 필요한 이유.

저장 운용 방식 : Stack Memory
저장 운용 방식 : Heap Memory

 

'Study' 카테고리의 다른 글

2022-07-18  (0) 2022.07.18
Process Memory Map / Debug  (0) 2022.03.27
운영체제(Operating System)  (0) 2022.03.27