life is egg

22.11.11 [CS_CPU & 알고리즘] 본문

TIL

22.11.11 [CS_CPU & 알고리즘]

삶은계란진재혁 2022. 11. 11. 19:11

우선 CS (컴퓨터 사이언스..)

컴퓨터 구조 / OS / DB/네트워크... 필수로 알아야한다... 좀더 전문가가 되고싶다면 컴파일러와,,,프로그래밍언어..

 

일단 컴퓨터 구조.. 중 CPU에 대해 배웠다

 

https://www.youtube.com/watch?v=Fg00LN30Ezg 

일단 나는 예전에 봤던 유튜브가 생각나서 튜터님 강의 끝나고 이걸 다시 봤다

이해가 전보다 잘되는 느낌 ~ 9분대 부터 보면 본격적인 CPU작동 방식을 알 수 있다..

 

강의 내용 정리 + 유튜브 공부 내용 정리

더보기

CPU 구성  ALU ..+여러가지 레지스터들 + 캐시메모리,,,등으로 구성

 

CPU > Mosfet...이라는 트렌지스터로 수억개로 구성

 

 

컴퓨터 큰 구성 

-- 하드디스크  -- 램----CPU

하드에는... 프로그램들이 설치되어있다..! but 너무느려.CPU는 못참아 ~

 

CPU는 램과 소통해...벗..느려 그래서 ...캐시메모리를 사용해서 소통

 

캐시메모리는 ... L1 ~ L3으로 레벨이 나뉨... L1로갈 수록 먼저 접근하고 속도 빠르고 용량 작아

 

CPU데이터 요청시 캐시메모리 L1>L2>L3 순,,, 없으면 RAM에 있는 데이터..

 

컴퓨터에 있는 기억정치 .. 하드 램 캐시 레지스터...

용량 작고 속도 빠른순서

레지스터>캐시>램>하드

 

레지스터는 cpu내부에서 데이터를 일시적으로 저장하는 장치

 

레즈스터 종류 매우 많다 크게 범용 레지스터와 특수레지스터로 나뉜다..

 

그중 특수한 기능을한는것... [프로그램카운터,메모리 주소 레지스터,메모리 버퍼 레지스터,명령어 레지스터]

>프로그램카운터(PC) : 다음번에 수행할 메모리의 주소가 들어있음

>메모리주소레지스터(MAR) : 프로그램카운터에게 주소를 받아 메모리로 찾아가 그 주소에 맞는 데이터를 가져옴

>메모리버퍼레지스터(MBR) : 메모리주소레지스터가 가지고온 데이터or명령을 일시적 저장

  >> 이중 명령어는 명령어 레지스터(IR) 에... 데이터는 누산기레지스터에

>누산기 레지스터(AC)는.. 연산의 결과 값이나 중간 값을 일시적으로 저장

 >> 최종결과는 메모리 버퍼 레지스터를 통해 ~~메모리로 전송

 

제어장치(CU)

명령어 레지스터에 있는 명령어를 받아 해석하고.... 해석된 명령을 각시스템에게 지시..

 

ALU

산술 논리 연산을 실행

 

 

프로그렘언어  ----컴파일러가--->어셈블리 언어-----어셈블러가---->기계어...바이너리코드..컴퓨터가읽을수잇다

                                                     [LOAD/ADD/STORE] >명령어들...

 

명령어 6비트... 데이터 10비트... 총 16비트..! 프로세서가 한번에 처리할수 있는 단위 ..!

 

램은... 8비트 씩 저장 되기 때문에 ... 16비트라면 두줄이 프로세서가 한번에 처리할 수 있는 하나의 언어

32비트라면 4줄 ... 64비트라면 8줄이게쬽

 

 

...자 ... 사전 준비는 끝났으니까 어떻게 데이터를 처리하는지 알아봅자

CPU의 동작단계 인출-해석-실행-저장

 

프로그램 카운터에 가져와야할 메모리의 주소가존재

 이 주소가... 메모리 주소 레지스터에 전달... 그러면 메모리 주소 레지스터는 주소에 맞는 데이터를 가져와

메모리 버퍼 레지스터에 저장

 메모리의 데이터를 CPU로 가져 오는 과정을 인출 ..!

 

 가져온 데이터가 명령어라면 > 명령어 레지스터 >제어장치(CU)로 이동 되어 해석  이과정이 해석..!

       > 명령어 해석후,,, 해당 명령을 수행.. LOAD(10)이라면.. 10번지 주소에 있는 메모리에 저장된값 가져와서

             >메모리 버퍼 레지스터에 저장..  명령어가 아닌 데이터라면..누산기로

가져온 값이 데이터라면 >누산기 레지스터로 이동...

 

이렇게 데이터를 전달 시켜주면 프로그램 카운터는 +2가됨..(16비트기준임.. 알지? 메모리 두칸이 한단위 )

   >> 다시반복함 메모리 주소 레지스터 >메모리 버퍼 레지스터 > 누산기 or명령어 레지스터

 

반복해서 계산 해야될 때가 되면 누산기에 저장된값 ALU로 보내지고 제어장치 명령에 의해 ALU가 연산,,

그 연산을 다시 누산기로 보내줌 요 과정이 실행... !

 

그리고 다시 윗 과정 반복...하다가 저장하라는 명령..나오면 계산값이 메모리 버퍼 레지스터에 저장 ~

다시 메모리에 알맞은 주소로 저장 ... 요과정이 저장 

 

CPU는 이러한 단계들을 세분화 해서...진행하고 ... 이렇게 분리된 각각의 프로세스를 스레드라고 한다..

 

 

 

 

+

CPU의..성능클럭... 계속 높여 ~ 발열...및 한계도달...

그래..? 싱글코어에서 멀티코어로... 코어를 여러개... (이것도 한계는 있지만 전보다는 괜찮아...)

 

 영어버전 ..(https://velog.io/@ckstn0777/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-9htxi9jo)

Instruction Cycle를 좀 더 세부적으로 살펴보면 위와 같습니다. 단계별로 살펴보겠습니다.

  1. 명령어 인출(Instruction fetch) : Instrcution address calculation과 Instruction fetch, 즉 명령어 주소를 계산하고 그 주소에 가서 명령어를 가져오는 단계를 수행합니다. fetch cycle이라고 볼 수 있습니다.
  2. 명령어 해독(Instruction decode) : Instruction operation decoding을 통해 어떻게 수행, 행위, 동작시킬지 결정한다음
  3. 데이터 인출(Data fetch) : Operand address calcution과 Operand fetch. operand는 피연산자(=연산자의 대상. 예를 들어 3+4에서 피연산자는 3과 4가 됩니다). 피연산자 위치를 계산해서 불러옵니다.
  4. 데이터 처리(Data process) : Date operation을 해서 피연산자를 operation(=연산) 시켜줍니다.
  5. 데이터 저장(Data store) : Operand address calcution과 Operand store. 연산을 했으면 그 결과를 어디에 저장할 것인지에 대한 동작을 수행합니다.

이런 과정을 끊임없이 반복 수행합니다.

 

 

 

 

 

오늘의 알고리즘..자료구조 .. 튜터님강의.

더보기

링크 ㅎ드 리스트 구현하기 ... 근대 왜 ,,이걸 구현하는 걸 배우는거야..?

아니 .. 어떻게 쓰는걸까 ...?

 

링크드 리스트 원소 찾기... 추가

 

6번 두 링크드 리스트 합 계산 ... 별로 실용 적이지 않다

 

링크드 리스트 쓰는 결정적이유...! 삽입 & 삭제가 매우 편하다 !!

 

노드를... 접근하려면 next가 유일해..

 

index -1 일때 ... index 0일때... 예외 처리를 해줘야함..

 

인덱스 0번째라면 맨앞에다 넣는거자나 ? 그니까 헤드에 넣는다는말..

 

tip.. 연습장에서 ...손으로 그려보면서 ...생각해보기ㅣ..

 

이진탐색은 나중에 배워도 됨...

 

재귀 함수..!

..,> 재귀...이거 자바에서 배운듯한데...흠흠흠흠흠흠..

재귀는... 자기자신을 참조한것을 뜻함..

왜사용.. 간결하고 효율성 있는 코드 작성.

재귀함수 호출시.. 무한정 돌리면 안됨... 언제 끝날지 알려줘야함..

>터미널컨디션..! 이라고함

 

LISP...? 반복문이 없는 언어...?

테일리커전..? tail recursion

 

repl..? 문자열 자르기에서 언급했는데...

 

 

재귀 함수... 특정 구조가 축소되는 형식이면....재귀함수 적용해봐..~.~

 

 

튜터님이 재귀 ..도 이용하고 반복문도 이용해서 ... 홈워크 1 번문제풀었음

 

내가 이해 할수가 없을뿐..!

'TIL' 카테고리의 다른 글

22.11.15 [Java 활용편]  (0) 2022.11.15
22.11.14 [ JAVA기초2]  (2) 2022.11.15
22.11.10 [자료구조.. & python]  (0) 2022.11.10
22.11.09 [파이썬기본문법 2 & 알고리즘]  (0) 2022.11.10
22.11.08 [파이썬 기본 문법]  (0) 2022.11.08
Comments