[컴퓨터구조] Cpu의 내부클럭과 외부클럭(FSB)가 필요한이유..

gyxor의 이미지

메모리와 CPU의 속도 차이로 인해서 이를 맞춰주기 위해서라고 합니다.

CPU내부클럭도 Hz(해르즈) 가 단위고 외부클럭FSB도 단위가 Hz이니까 속도와

관련이 있을것으로 생각이 되는데요..

제작년에.. 기본적인 컴퓨터의 구조를 도면에 그린적이 있습니다.

그 컴퓨터는 AR 이라는 Address Register 즉, 주소지정레지스터를 두고 있는 architechture였습니다. 메모리를 읽어 오는것은 한클럭!!!에 이뤄졌습니다.

따라서 클럭은 한개만 존재했습니다. 물론 Timer나 외부Device를 위한 클럭등은 고려하지 않았습니다.

하지만 적어도 CPU와 메모리사이에서 왜.. 두개의 클럭이 필요한것인지 모르겠습니다.

요즘의 구조에서는 메모리전용 레지스터가 없다고 하더라도 순수하게 메모리에 접근해서

읽고 쓰는 소요 클럭은 1클럭 아닌가요?

첫째,

메모리를 읽고 쓰는데 한클럭!!! 에 이뤄질 수 있는데..무슨 속도를 고려해야 되는것인지

모르겠습니다. (이때의 한클럭은 CPU내부클럭의 한 클럭을 의미합니다....외부클럭은 필요없다고 생각하므로)

둘째,

또 어찌됐던 두개의 클럭을 사용해야 한다고 할때..

동기방식과 비동기 방식이 있다고 하는데요..

어떻게 서로다른 두개의 클럭을 동기화 시킬 수 있는지도 모르겠습니다.

비동기로 사용은 어떻게 가능한지 모르겠습니다.

asiawide의 이미지

10Mhz XT 의 한 클럭과 3.0Ghz 펜4 의 한 클럭의 '주기(period)'은 당연히 다르지요.

정태영의 이미지

gyxor wrote:
첫째,

메모리를 읽고 쓰는데 한클럭!!! 에 이뤄질 수 있는데..무슨 속도를 고려해야 되는것인지

모르겠습니다. (이때의 한클럭은 CPU내부클럭의 한 클럭을 의미합니다....외부클럭은 필요없다고 생각하므로)

cpu 의 미친듯한 속도를 주변 장치나 메모리 등이 따라오지 못한 것 뿐이죠...

예전엔 pci 와 cpu 가 같은 클럭으로 동작하던 시기도 있었지만...
주변기기들의 발전 속도가 cpu 의 발전 속도를 따라오지 못했고... 그걸 보완하기 방법으로써 나왔던 방법들이 cache 라던가 그런 것들이죠 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

creativeidler의 이미지

CPU는 버스를 통해 메모리와 연결되어 있습니다. 그런데 이 버스에서 데이터를 전송하는 과정이 생각보다 복잡합니다. 1클럭에 바로 이루어지는 게 아니라 CPU가 버스에 데이터 전송 요청을 하면 버스가 메모리에 그 요청을 전달해서 데이터를 전송하게 되죠. 그런데 이 버스도 클럭이 들어가야 동작을 합니다. 이 버스 클럭이 FSB 클럭인데 버스 클럭으로 보통 2~3클럭에 한 번의 데이터 전송이 일어납니다. 게다가 버스에 만원이면(다른 거 하느라고 바쁘면) 하던 거 끝날 때까지 기다리기도 하고 메모리가 바쁘면 또 더 기다리기도 합니다. 생각보다 오래 걸리죠. 아뭏든 CPU가 동작하는데도 클럭이 필요하고 버스가 동작하는데도 클럭이 필요합니다.

그럼 왜 CPU 클럭과 버스 클럭이 왜 다른가. 이건 윗분이 말씀하신 게 답입니다. 메모리의 속도가 CPU의 속도를 따라가지 못하기 때문에 버스 클럭을 높여봤자 의미가 없죠. 버스랑 통신하지 않더라도 CPU는 혼자서 다른 일도 할 수 있기 때문에 CPU 클럭을 버스에 맞춰 낮출 수는 없고 그러다보니 지금처럼 CPU 클럭과 버스 클럭이 다른 상황이 된 것이죠.

근데 보통은 버스 클럭과 CPU 클럭이 상관이 있습니다. 버스 클럭의 배수로 CPU 클럭이 결정되죠. 그래서 맞추려면 어렵지 않게 맞출 수 있습니다.

gyxor의 이미지

asiawide wrote:
10Mhz XT 의 한 클럭과 3.0Ghz 펜4 의 한 클럭의 '주기(period)'은 당연히 다르지요.

예전 CPU의 한 클럭의 주기는 지금과 비교해서 상대적으로 길기때문에 한클럭 동안 메모리의 read / write가 가능했지만
지금의 CPU는 한 클럭의 주기가 매우 짧아서 이 시간동안 메모리를 read/write 한다는게 불가능하다는 말씀이신가요?
만일 그렇다면 좀 이해가 안됩니다.
메모리를 read/write하는게 반드시 한 클럭 시간 안에 이뤄질 필요가 없는데요..
486 timing chart를 봐도 메모리 read write는 3개의 클럭에 걸쳐서 일어나고 있는데요..
즉 첫 클럭에 trigger 되고 다음 클럭에 읽어 들이고..
메모리가 아주 더디다면.. 몇클럭 정도 delay 상태로 있으면
되는것 아닌가요? 즉, period와는 무관한것 아닌가요?
내부클럭만으로도 메모리를 read/write할 수 있고 또..
외부클럭을 사용한다고해서 메모리의 속도가 빨라지는게 아니라면
왜 굳이 외부클럭 FSB를 사용하는것인지 이해가 안됩니다..
Tirin의 이미지

BUS에는 메모리만 연결되는게 아니죠.

PCI나 ISA(...)를 비롯한 온갖 괴이한 장치들이 수도 없이 연결됩니다.

이 많은 장치들이, 다들 자기 멋대로 신호를 주고 받는다고는 생각하지 않으시겠죠?

CPU에 직접 연결되는 물건이라면야 적당히 delay 주면서도 통신 할 수 있겠지만.. 현실적으로 쉽지 않겠죠. 이때 CPU와 외부 장치의 통신에 바로 FSB가 사양된다는 이야기입니다.
게다가, PC의 여러 장치들에 들어가는 clock이 FSB의 배수로 들어가기 때문에 함부로 정할 수가 없지요.

- Tirin.

jachin의 이미지

저는 비동기 방식에서의 사용에 대해 말씀해드릴께요.

버스에서 데이터를 주는 쪽을 전달자, 받는 쪽을 수신자라고 정의해놓고,
이 둘 간의 데이터 전송이 필요할 때는 전달자는 수신자가 데이터를 받을 때까지 계속 데이터를 보냅니다. 그 후에 수신자가 전달자에게 데이터를 받으면 받았다는 메시지를 보냅니다. 그럼 전달자는 다음 데이터를 준비하죠. 일반적인 Serial 통신이 비동기 식입니다.

ssehoony의 이미지

gyxor wrote:
asiawide wrote:
10Mhz XT 의 한 클럭과 3.0Ghz 펜4 의 한 클럭의 '주기(period)'은 당연히 다르지요.

예전 CPU의 한 클럭의 주기는 지금과 비교해서 상대적으로 길기때문에 한클럭 동안 메모리의 read / write가 가능했지만
지금의 CPU는 한 클럭의 주기가 매우 짧아서 이 시간동안 메모리를 read/write 한다는게 불가능하다는 말씀이신가요?
만일 그렇다면 좀 이해가 안됩니다.
메모리를 read/write하는게 반드시 한 클럭 시간 안에 이뤄질 필요가 없는데요..
486 timing chart를 봐도 메모리 read write는 3개의 클럭에 걸쳐서 일어나고 있는데요..
즉 첫 클럭에 trigger 되고 다음 클럭에 읽어 들이고..
메모리가 아주 더디다면.. 몇클럭 정도 delay 상태로 있으면
되는것 아닌가요? 즉, period와는 무관한것 아닌가요?
내부클럭만으로도 메모리를 read/write할 수 있고 또..
외부클럭을 사용한다고해서 메모리의 속도가 빨라지는게 아니라면
왜 굳이 외부클럭 FSB를 사용하는것인지 이해가 안됩니다..

예전... 486 DX 까지는 메인보드와 CPU 동작 클럭이 같았지요.
그런데 이 이상 인텔이 클럭을 올릴려고 하니 다른 주변 제품들이
인텔 CPU 의 클럭을 따라가지 못했습니다. (기술력과 비용문제로)
486 DX 50 이 나왔을 때 제폼이 가격이 너무 비싸져 버렸습니다.
그 주범이 CPU 가 아니라 보드의 칩들이 50 Mhz 을 따라 가기가 너무 벅찼거든요.
그래서 인텔은 그래? 뭐 늬들이 능력이 없음 어쩔 수 없지.
그럼 우리 따로 가자. 따로 따로 작동하다가 중간 중간 타이밍 맞춰서 통신을 하지 뭐~
그래서 486 DX2 486 DX4 라는게 나올 수 있었는데, 486 DX2 50 보다 486 DX 50 이 더 좋은 시스템입니다.
뒤의 50 은 cpu의 클럭을 의미하기 때문에 DX2 50 은 메인보드측은 25 이고 CPU 만 50 인거고 DX 50은 메인보드도 50, CPU 도 50이였죠.
이 이후로 CPU 와 메인보드는 따로 클럭을 가기로 했는데 이 후반에 보니깐 일반 PCI 나 ISA 는 램이나 글픽카드 만큼 빠르게 동작할 필요가 없다는 것에 착안해서 다시 메인보드를 노우스와 사우스로 구분해서 노우스에 램, 글픽, cpu 를 연결하고 사우스에 기타 주변장치를 연결해서 고클럭 장비의 제작 부담을 줄여 비용 절감을 노리게 된거죠.
FSB 가 있다고 해도 cpu 는 그 FSB 에 몇배로 동작하기 때문에 CPU 입장에서 램은 무지 느린 장비 입니다. 그래서 메인보드에 있던 램캐시가 cpu 로 들어가게됐죠. 그래서 느린 램과 빠른 CPU의 중간에서 적당히 조율을 램캐시가 하게 되는거져. 근데 또 cpu 클럭은 계속해서 올라가고 cpu 내의 캐시가 cpu 의 클럭에 1:1 로 작동하다보니 cpu 생산품중에 cpu 내 캐시메모리의 한계로 에러율일 높아져서 (에러율이 높으면 생산된것중 많은 부분을 판매할 수 없으니 소비자가가 상승하는건 당연하겠죠?) 다시 이걸 높은 클럭용 캐시(1차캐시) - 제작비용이 커서 작은 사이즈로, cpu 와 동클럭으로 작동 - 와 그 보다 낮은 캐시(2차캐시) - 제작비용이 1차캐시보다 싸므로 1차캐쉬보다 좀 더 크게, cpu와 메인메모리 중간 클럭으로 작동 - 로 나눠서 cpu의 에러율을 낮췄져.
결국은 제작비용대 성능비를 고려해서 최선의 선택을 하게된거죠.

cpu 에 1차 2차 (3차) 캐시를 두고도 메인메모리의 느린 속도에 못 마땅한 인텔은 prefetch 라는 기술도 넣었는데, 이건 컴파일러가 지원하는 경우는 아직 모르겠고 어셈코드로 실행하면 이용할 수 있습니다.

그래서~ 프로그래밍 하실때 1차 캐시 히트율이 높도록 코딩하시면 더 빠른 포퍼먼스를 얻을 수 있습니다. valgrind 같은 툴은 1,2차 캐시 히트율도 레포팅 해줍니다. 인텔의 프로파일러 역시 캐시 히트율을 프로파일링 해준다고 들었습니다.

정태영의 이미지

gyxor wrote:
asiawide wrote:
10Mhz XT 의 한 클럭과 3.0Ghz 펜4 의 한 클럭의 '주기(period)'은 당연히 다르지요.

예전 CPU의 한 클럭의 주기는 지금과 비교해서 상대적으로 길기때문에 한클럭 동안 메모리의 read / write가 가능했지만
지금의 CPU는 한 클럭의 주기가 매우 짧아서 이 시간동안 메모리를 read/write 한다는게 불가능하다는 말씀이신가요?
만일 그렇다면 좀 이해가 안됩니다.
메모리를 read/write하는게 반드시 한 클럭 시간 안에 이뤄질 필요가 없는데요..
486 timing chart를 봐도 메모리 read write는 3개의 클럭에 걸쳐서 일어나고 있는데요..
즉 첫 클럭에 trigger 되고 다음 클럭에 읽어 들이고..
메모리가 아주 더디다면.. 몇클럭 정도 delay 상태로 있으면
되는것 아닌가요? 즉, period와는 무관한것 아닌가요?
내부클럭만으로도 메모리를 read/write할 수 있고 또..
외부클럭을 사용한다고해서 메모리의 속도가 빨라지는게 아니라면
왜 굳이 외부클럭 FSB를 사용하는것인지 이해가 안됩니다..

실제로 메모리에서 읽어 들일때 원하는 몇 바이트만을 읽기보다는... 블럭으로 읽어서 cpu 에 캐슁을 하고...

메모리에 접근을 최소화 하도록 하고 있습니다.. 실제로 접근했던 메모리 주소 근.처.의 값들을 계속해서 접근하는 경향이 있기 때문에 상당히 효율적이죠...

위의 분들이 얘기했듯이... 메모리는 cpu 에 비해 너무나도 느리기 때문에 이런 보완책을 둔 겁니다...

실제로 요 근래의 cpu 들은 한 클럭에 단 한 개의 명령을 수행하는게 아닙니다... 파이프라인을 이용해서... 여러개의 명령어를 동시에 부분부분 수행하고 있으며... 슈퍼스칼라 방식을 이용해서 서로 데이타 의존성이 없는 명령어들도 동시에 수행하고 있지요...

486 때와는 다릅니다 ;)

아 그리고 캐쉬 메모리의 한계로 수율이 낮아진다기 보다... flip flop 하나당 필요한 게이트 수가 적지 않고... 캐쉬의 크기만큼의 flip flop 이 필요하기 때문에... 코어 사이즈가 커지게 되고... (ff 하나당 게이트가 한 6개 정도가 필요하고 그게 128K라면... 128*1024*6 개의 트렌지스터가 필요하게 되니까요) 커지게 된 만큼 불량이 날 확률이 높아지는 게 아닐까 싶습니다 =3=33

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

gyxor의 이미지

PERIOD와도 유관하군요..
비동기 방식도 잘 알겠습니다...
비동기 방식에서는 내부클럭이 Front Side Bus의 클럭의 배수가 될 필요가 없는것인지 의문이 남습니다..
결국
FSB를 위한 외부클럭이 필요한 이유는
486DX때까지는 어느정도의 delay를 감수하면서 원클럭 체제로 했지만
그 delay가 너무커지고 비용부담도 생기는 상황이 되어서
내부클럭과 외부클럭으로 나누고 ..
메모리의 read/write등을 할 동안에는 내부클럭은 idle상태로 있지 않고
다른 명령을 수행할 수 있게 되었다..(아직 원리는 확실히 모르겠지만요..)
는게 핵심이유로 생각됩니다...
마치 8237 DMA controller 를 사용해서 하드디스크의 I/O 를 수행하는동안
CPU는 다른 일을 할 수 있는 개념과 비슷한건가요 ?
이게 맞다면 FSB의 사용은 당연히 이해가 될거 같습니다.,,

jachin의 이미지

gyxor wrote:
PERIOD와도 유관하군요..
비동기 방식도 잘 알겠습니다...
비동기 방식에서는 내부클럭이 Front Side Bus의 클럭의 배수가 될 필요가 없는것인지 의문이 남습니다..
결국
FSB를 위한 외부클럭이 필요한 이유는
486DX때까지는 어느정도의 delay를 감수하면서 원클럭 체제로 했지만
그 delay가 너무커지고 비용부담도 생기는 상황이 되어서
내부클럭과 외부클럭으로 나누고 ..
메모리의 read/write등을 할 동안에는 내부클럭은 idle상태로 있지 않고
다른 명령을 수행할 수 있게 되었다..(아직 원리는 확실히 모르겠지만요..)
는게 핵심이유로 생각됩니다...
마치 8237 DMA controller 를 사용해서 하드디스크의 I/O 를 수행하는동안
CPU는 다른 일을 할 수 있는 개념과 비슷한건가요 ?
이게 맞다면 FSB의 사용은 당연히 이해가 될거 같습니다.,,
네. 맞습니다.
의문을 가지고 계시는 '메모리 응답 지연에 대해서 다른 작업을 수행'하는 것은 스레드나 작업 스케쥴링과 관련 있습니다. 전 길게 쓸 능력이 없어서 그냥 다른 분에게 패스. >_<

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.