cpu 인출 사이클에 관해 궁금한게 있습니다

안녕하세요~

이 그림이 제가 공부하다가 본 cpu인출 사이클 내용인데요

여기선 클럭 주기를 10ns로 가정해서 설명했어요

그리고 t0,t1,t2 셋 전부 1회의 클럭 주기라고 하더라구요

제가 궁금한건 한번의 클럭이 정확히 무엇을 처리하는지에 관해서 입니다

예를들어 프로그램 카운터에 10101 이라는 값이 저장되어 있다고 가정해볼게요

MAR은 아직 아무것도 없다고 가정하구요

cpu가 다음에 처리해야할 명령어가 적재된 장소가 메모리의 10101주소라는 뜻인데,

이 상태에서 딱 1클럭이 지났다? 이러면 PC에 저장되있는 10101 에서 끝에 1이 MAR로가서

PC엔 1010있고 MAR엔 1이란 값이있고

2클럭 지나면 PC엔 101 있고 MAR엔 01 이렇게 값이 있고 이런식으로 되자않나 생각했었습니다

그런데 위에 자료로 공부하고 나니 제가 생각한게 아니라 1클럭이 지나면 10101전체가 MAR로

이동한다는걸 알았어요

클럭은 진동수니까, 10ns동안 1번만 전자를 진동시킨다는걸로 이해하고 있었는데

그러니까 당연히 1클럭당 1비트씩만 움직이는게 아닌가 생각했었거든요

이게 왜그런지 정확히 와닿지는 않은데 혹시 자세한 설명을 해주실수 있으신가요?

그리고 질문이 한가지 더 있는데…

프로그램 카운터에 있는 값은 다음 실행할 명령어가 ‘시작되는’ 위치인데

cpu가 언제 명령어가 끝나서 어디부터 어디까지만 가져와야할지 알거 아니에요?

하나의 명령어가 끝나는건 어떻게 판단하나요?

프로그래밍할때 이 명령어가 끝나는 부분을 c언어라면 세미콜론이고

파이썬이면 엔터고 이런 세미콜론, 엔터가 기계어로 바뀌면 명령어 끝나는 지표가 되나요?

32비트 컴퓨터는 한 클럭에 정보가 32비트씩 움직입니다.
64비트는 또 64비트씩이죠.

cpu입장에서는 명령어가 끝나지 않아여, 커널이 계속 실행중이거든요.
유저의 프로그램을 실행하고 종료하는건 커널이 알아서합니다.

cpu는 데이터를 옮길 때 한번에 여러 비트를 병렬적으로 전송합니다. 그림에서 보이는 버스는 사실 한 개의 선이 아니라 여러 개의 선으로 이루어져 있습니다. 그래서 한 클럭에 여러 비트를 동시에 전송할 수 있는거죠.

클럭의 의미는 전자를 진동시키는 것 보단, LOW 전압 ->HIGH 전압 으로 전환되는 것을 1 클럭이라고 보심 될것 같아요. 보통 컴퓨터 안에는 진동자 라는 것이 있는데, 여기서 나오는 전압의 진동수가 일정하기 때문에, 이를 클럭으로 활용합니다.

앗 감사합니다!! 컴퓨터의 비트 수는 단순히 접근 가능한 메모리범위에 따라 정해지는건줄 알았는데 완전 잘못알고 있었네요
그럼 만약 32비트 컴퓨터에서 33비트짜리 명령어를 실행하려고 하면 1클럭에 32가져오고 1비트남은걸 2클럭째 다 가져와서 한번에 처리한다고 할수 있겠네요!

병렬으로 전송하는 거였군요… 정말 감사합니다!
그럼 버스를 32개의 선으로 만드냐 64개로 만드냐에 따라서 32비트컴퓨터/64비트컴퓨터로 불리우는 건가요?

네 원래의 의미는 레지스터의 크기가 몇 비트냐에 따라 갈리고, 레지스터간 통신은 한번에 이루어지기 때문에 레지스터의 크기 = 버스 비트 수 라고 보심 될거 같아요. 그리고 MAR(메모리 주소 레지스터)의 크기 또한 이 비트수에 맞추어 지기 때문에 비트 수가 늘어나는 만큼 가용 메모리 수도 늘어나는거죠. 그래서 32bit cpu는 4GB의 메모리만 사용할 수 있고, 64bit는 16TB만큼 사용할 수 있죠

그리고 명령어의 크기는 이 레지스터의 크기에 맞춰져 있어요(제가 알기론). 그래서 위에서 말씀하신 레지스터 크기보다 큰 명령어는 아마 없을 거에요. 작은건 있습니다

아… 가장 근원이 그거였군요 레지스터크기가 모든걸 정했던 거군요! 얼핏 듣긴했었어도 제대로 몰라서 지금까지 그냥 외웠었어요 ㅠㅠ

그런거군요. 정말감사합니다