Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Computer Science Using Java 1장 문서도 참고

CHAPTER4 컴퓨터 시스템 Computer Systems

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_1.html

이 장은 컴퓨터 시스템이 어떻게 구성되었는 가를 주메모리 중점으로 논해 본다. 대부분은 여러분도 알고 있는 것일 지도 모르지만 복습하는 기분으로 공부해 보자.

주제

  • 컴퓨터 시스템의 구성 요소 Components of a Computer System
  • 제어장치 Device Controllers
  • 주메모리 Main Memory
  • 어드레스 Addresses
  • 버추얼 메모리 Virtual Memory
  • 캐쉬 메모리 Cache Memory
  • 메모리의 내용 Contents of Memory
질문:

예를 들어 MIPS와 Pentium같이 종류가 서로 다른 컴퓨터 칩들로 만들어진 컴퓨터라도 컴퓨터 시스템 관점으로 볼때 서로 비슷하게 구성 되었겠습니까?

컴퓨터 시스템의 구성요소 Computer System Components

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_2.html

답: 주구성요소는 비슷합니다. 작동방식도 비슷하다.

그림은 데스크텀 컴퓨터가 어떻게 구성되어 있는지를 일반적인 관점에서 보여주고 있다. 시스템마다 세부적 사항들은 다를 수 있지만 일반적으로 컴퓨터는 프로세서,메모리, 콘트롤러,비디오 같은 구성요소들이 버스로 연결 되어있습니다. 물리적으로 버스는 컴퓨터의 메인 보드에 구리선으로 인쇄되어진 여러개의 병렬 선으로 연결되어 있다. 데이터 신호,클럭 신호,그리고 제어 신호들이 버스를 통해 구성요소들 사이 이리저리 전달 되어진다. 특정한 종류의 버스는 전선을 통해 전달되는 신호나 그 신호가 의미하는 바를 표준에 따라 설명하고 따라한다. 예를 들어 PCI 표준은 대부분의 PC에 사용되는 PCI 버스에 대해 설명하고 있다.

attachment:computerSystem.gif

프로세서는 머신 사이클에 따라 기계명령을 하나씩 하나씩 계속해서 수행한다. 대부분의 명령은 연산이나 논리 또는 제어 동작에 관한 것이다. 기계를 운용하기 위해서는 종종 주저장장치나 입출력장치를 제어하는 것이 필요하다. 그럴경우 기계 운용을 위해 데이터나 제어 신호는 버스를 통해 전달되고 그 전달된 데이터나 제어 신호가 되돌아 오길 기다리는 경우가 있다(시간이 걸리는 경우). 또 어떤 기계 운용은 버스를 통하지 않고 프로세서 자체내에서만 전적으로 이루어질 수 있다. 이렇게 프로세서에서만 전적으로 이루어 지는 작동(machine operation)은 굉장히 빠르다.

질문: 여러분은 다양한 컴퓨터의 구성요소가 아무때나 버스에 신호나 데이터를 전달할 수 있을거라 생각하십니까?

입출력 제어장치 Input/output Controllers

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_3.html

답 : 아니오. 다양한 전자부품들은 데이터와 신호가 섞이지 않도로 상호 협동해야 한다.

버스에 연결된 전자부품들이 상호 작동하는 방식은 버스 표준 규약(standard)를 통해 정의된다. 입출력 제어장치(io controller)는 중앙처리장치(cpu)로부터 입력과 출력 요청을 받은후에 입출력 제어장치(io controller)가 통제하는 장치에 그 장치에 맞는 특정한 신호를 보낸다. 입출력 조절기는 통제하는 장치로부터 오가는 데이터의 흐름을 관리한다. 이런 처리 방식에선 중앙처리장치(cpu)가 각각의 전자부품을 통제하는 세부사항에 관여할 필요가 없다. 입출력 제어장치가 알아서 시스템의 일부분인 입출력장치들을 관리한다.

입출력 제어장치는 대개 주회로판(motherboard)의 부품중 하나로 구성되어있다. 장비에 따라서는 자신만의 제어장치를 따로 마더보드에 설치해줘야 하는것도 있다

질문: 프로그램을 메모리에 저장하는 것과 데이터를 메모리에 저장하는 것에는 차이가 있습니까?

메인메모리 Main Memory

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_4.html

답: 차이가 없다. 메인메모리에 프로그램이나 데이터의 일부분이 어떤 순간에든 바이트로 저장될 수 있다.

실제에서 데이터와 명령은 메모리에 각기 다른 영역에 저장 되어진다 그렇지만 그러한 구분은 소프트 웨어를 만들고 정리하는 차원에서 구분 하는 것이지 기계가 그렇게 구분 하는 것은 아니다. 또한 대부분의 컴퓨터는 롬(rom)에 저장되는 펌웨어(firmware)처럼 영구적으로 저장되고 유지되는 특정한 영역의 메모리를 가지고 있다 그리고 특수한 목적에 영구적으로 사용되는 메모리 영역도 가지고 있다.

주저장장치 다른말로 메인메모리 또는 흔히 메모리라고 하는 것은 기계 명령(instruction)의 비트 패턴과 데이터(data)의 비트패턴을 담고있다. 메모리칩과 메모리를 조정하는 전기장치들은 이러한 비트 패턴을 저장하거나 또는 요청이 있을 경우에 저장된 비트패턴을 꺼내서 돌려주는 일만 관계한다. 그 저장된 비트패턴이 명령형태의 비트 패턴이던 또는 데이터 형태의 비트 패턴이던 상관할 바가 아니다.

메모리의 용량은 다음과 같은 단위로 자주 묘사된다:

킬로바이트 Kilobyte: 2^10 = 1024 bytes. 메가바이트 Megabyte: 2^20 = 1024 Kilobytes 기가바이트 Gigabyte: 2^30 = 1024 Megabytes 테라바이트 Terabyte: 2^40 = 1024 Gigabytes

요새 데스크텁 텀퓨터의 메모리는 256 megabytes에서 1 gigabyte가 흔히 쓰는 용량이다. 하드 디스크와 다른 보조 저장장치들은 용량이 수십 수백 gigabyte 단위에 이른다. 백업 저장장치는 terabyte까지의 용량도 갖는다.

질문: 대부분의 컴퓨터에서 주소화 할 수 있는 메모리의 최소 단위는 무었입니까?

주소 Addresses

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_5.html

답 : 바이트(byte)

주저장장치의 각각의 바이트는 주소를 가지고 있다. 대부분의 현대적인 프로세서는 32 비트 주소를 사용한다. 그렇기 때문에 2^32의 주소가 가능하다. 주저장장치를 마치 배열(array)처럼 생각해 보자.
byte [0x00000000 ... 0xFFFFFFFF] mainStorage;
주저장장치의 주소는 메모리의 내용을 가리키는 배열의 인덱스(index)로 볼 수 있습니다. 하나의 32bit 짜리 주소 인덱스(index)가 하나의(single) 바이트를 담고 있는 장소를 가리킨다. 버스의 32개의 선(wire)은 하나의 주소를 담을 수 있다.(32개이외에 신호 동기화, 칩 상태 제어 등을 위한 선들이 더있다).주소를 표시할 때 0x2000과 같이 16bit의 16진수(hexcadecimal) 방식으로 표현하는 경우도 있다. 그렇지만 0x2000 표현은 32bit 짜리 주소를 줄여서 그렇게 표현한 것이다. 실제 주소는 0x00002000이다.

1985년에 만들어진 최초의 MIPS 프로세서는 32 비트 주소를 사용 했다. 1991년부터 현재까지 최고급 MIPS 프로세서는 64 비트 주소를 사용 한다. MIPS32 칩은 임베디드 응용프로그램을 위해 만들어진 현대적인 칩이다. 임베디드 응용프로그램은 보통 64 비트를 사용할 필요가 없기 때문에 32 bit 주소를 사용한다. AMD나 intel의 최근 프로세서 칩들은 32비트짜리 주소도 있지만 64 비트 주소를 가진 제품도 있다.

이 수업의 어셈블리어는 MIPS32 칩을 위한 것이고 32 비트 주소를 사용한다. 64비트 MIPS 칩의 어셈블리어도 32 비트 어셈블리어와 비슷하다.

질문: 전부다 1로 표현된 32 비트 패턴을 16진수(hexcadecimal) 형태로 어떻게 표현할까요?

1111 1111 1111 1111 1111 1111 1111 1111

Virtual Memory(가상 메모리)

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_6.html

답: 0xFFFFFFFF

MIPS는 2^32 bytes의 주소 공간(address space)을 가지고 있다. gigabytes는 2^30 이다. 계산을 해보면 MIPS는 4 gigabytes 즉 2^2*2^30의 주소 공간(adress space)를 가지고 있다. 메모리 공간은 램(RAM) 과 같은 메모리 칩에 존재하는 경우가 기계를 운용하는데 가장 이상적이다 그렇지만 RAM은 gigabyte당 20만원 정도의 가격을 지불해야 한다. 4 gigabyte의 RAM을 다 장착하는데는 50만원이 든다. 쉽게 지불하기 힘든 돈일지도 모른다. 하드 디스크(hard disk)는 gigabyte당 훨씬 적은 돈이 든다. 하드 디스크는 2005년 겨울을 기준으로 100 gigabyte당 5만원 정도이다.

현대적인 컴퓨터에서는 여러분이 RAM을 얼마만큼 장착하는것과 무관하게 전체 주소공간을 하드디스크와 RAM에 나누어 저장함으로써 최대 주소 공간을 만든다. RAM과 하드 디스크와 특수한 장치 그리고 운영체제가 상호 협동하여 전체 32 bit의 주소 공간을 제공한다. 컴퓨터 사용자는 실질적인 하드웨어 RAM이 얼마가 있던 상관없이 2^32 bytes의 메인 메모리가 컴퓨터에 존재하는 것처럼 사용할 수 있다.

이처럼 버츄얼 메모리(virtual memory) 또는 가상 메모리는 RAM의 메모리와 하드 디스크를 결합해서 최대 주소 공간을 제공한다. 버츄얼(virtual) 또는 가상의 의미는 실질적으로 존재하진 않지만 존재하는것처럼 보이게 한다이다. 컴퓨터만 좋아하는 사람(geek)은 가상 사회 생활을 가지고 있다고 할 수 있다.

질문: 물리적인 RAM 메모리를 접근 하는것과 하드디스크를 접근 하는것 둘중에 어떤것이 더빠르겠습니까?

캐시 메모리 Cache Memory

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_7.html

답: 물리적인 램(RAM)에 접근하는게 더빠릅니다.

램(RAM)에 접근(access) 하는 속도와 하드 디스크에 접근 하는 속도를 비교해 보았을때 하드 디스크에 접근하는 속도가 훨씬 느리다. 물리적인 메모리와 디스크 메모리를 결합해서 주소 공간을 구현하는 방식에서는 프로그램의 수행 속도가 느려질 가능성이 크다. 그렇지만 지능적인 하드웨어와 잘짜여진 운영체제와 버추얼 메모리를 같이 사용한다면 물리적인 메모리보다 조금 속도가 느릴 뿐이다.

컴퓨터 시스템은 버추얼 메모리외에도 캐시 메모리라는것을 가지고 있다. 캐시 메모리는 프로세서 자체 내부나 또는 근접한 위치에 있는 아주 빠른 속도의 램(RAM)이다. 캐쉬 메모리는 현재 실행되고 있는 프로그램이 자주 사용하는 메모리의 영역을 복사한다. 프로세서는 캐시 메모리에 있는 데이터를 가지고 오거나 저장할때 시스템 버스를 사용할 필요가 없다. 캐시 메모리를 이용 또는 접근(access)하는 속도가 일반적인 주저장 메모리를 접근하는 속도보다 엄청나게 빠르다.

대부분의 프로그램은 버츄얼 메모리의 경우처럼 캐쉬메모리도 그 존재에 상관없이 작동한다. 이런 세부사항들은 어셈블리가 제공하는 추상적인 단계 밑에 있는 전자적인 것이다. 기계가 캐시 메모리가 항상 최신정보를 가지고 있고 메인 메모리와 공조(synch) 할 수 있도록 관리한다. 여러분이 실행하는 프로그램은 캐시 메모리와 버츄얼 메모리의 존재조차 알지 못한다. 프로그램은 메인 메모리만 볼 수 있을 뿐이다. 응용프로그램에서 값을 캐시 메모리에 저장하라 또는 버추얼 메모리로부터 값을 가지고 오라 같은 명령어는 없다. 응용프로그램에선 메인 메모리의 특정 주소에 있는 내용을 참조할 뿐이다. 프로그램이 읽거나 쓰려는 데이터가 실제로 어디있든간에(버추얼 메모리, 캐시메모리, 메인메모리), 하드웨어적으로 정확하게 처리해 준다.

질문: 메모리가 바이트 어레이처럼 배열 되어있다고 했습니다. 그렇다면 메모리에 데이터 아이템들을 저장하기 위해선 데이터 아이템이 꼭 1 byte 단위여야만 할까요?

메모리가 저장하는 내용 Contents of Memory

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_8.html

답: 꼭 1 byte일 필요는 없다. 대부분의 데이터와 명령은 여러 바이트 길이이고 여러 개의 메모리 주소에 걸쳐 이어서 저장된다.

메모리 시스템은 비트를 패턴으로 저장한다. 저장된 패턴은 숫자, 문자, 또는 명령 같은 것을 나타내는 것일 수 있다. 컴퓨터 전자부품은 메모리의 내용을 그것이 나타내는 것에 상관하지 않고 비트의 패턴으로만 보고 처리할 뿐이다. 프로그램이 저장된 비트 패턴이 어떻게 사용될 지를 결정한다. 예를들어 워드 프로세서 프로그램은 문자를 나타내는 비트 패턴을 처리하고 엑셀같은 스프레드 쉬이트 같은 프로그램은 숫자를 나타내는 패턴을 처리한다.

물론 대부분의 프로그램이 여러가지 형태의 데이터를 처리하고 각각의 테이터 형태가 어떻게 사용되는지 알고 있다. 때때로 프로그램은 메모리의 특정 영역을 지정해서 다양하게 사용한다. 이것은 프로그램이 소프트웨어적인 관례로 메모리의 특정 영역을 지정해서 사용하는것이지 하드웨어적으로 그렇게 영역이 한정 된것은 아니다.

패턴이 8 bit 이기만 하다면 메인 메모리에 어느 바이트도 어떤 종류의 8 bit 패턴을 담을 수 있다. 컴퓨터의 메모리 시스템에서 그 저장된 패턴이 무엇을 나타내는지 숫자인지 문자인지 그림인지 보여 주는것은 없다.

질문: 컴퓨터를 처음 켯을때, 램의 여러 장소에 다양한 패턴을 읽고 씀으로써 램을 테스트 합니다. 여러분은 그렇게 테스트하는 것이 램을 테스트하는 좋은 방법이라고 생각하십니까?

4장 끝

http://chortle.ccsu.edu/AssemblyTutorial/Chapter-04/ass04_9.html

답: 유효한 테스트라고 볼 수 있다. 메모리가 하는 일이란 비트 패턴을 담고 요청이 있을 경우 그 비트 패턴을 돌려주는 것이다. 그런 것을 테스트 한 것이고 유효하다고 볼 수 있다.

4장 끝

사용한 용어들

  • 컴퓨터 시스템의 구성요소. The components of a computer system.
  • 제어 장치 Device controllers.
  • 킬로바이트,메가바이트,기가바이트 Kilobytes, Megabytes, and Gigabytes
  • 메모리 주소 Memory addresses
  • 버추얼 메모리 Virtual memory
  • 캐시 메모리 Cache memory
퀴즈 문제를 꼭 풀어봅시다. quiz4