life is egg
22.11.11 [CS_CPU & 알고리즘] 본문
우선 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를 좀 더 세부적으로 살펴보면 위와 같습니다. 단계별로 살펴보겠습니다.
- 명령어 인출(Instruction fetch) : Instrcution address calculation과 Instruction fetch, 즉 명령어 주소를 계산하고 그 주소에 가서 명령어를 가져오는 단계를 수행합니다. fetch cycle이라고 볼 수 있습니다.
- 명령어 해독(Instruction decode) : Instruction operation decoding을 통해 어떻게 수행, 행위, 동작시킬지 결정한다음
- 데이터 인출(Data fetch) : Operand address calcution과 Operand fetch. operand는 피연산자(=연산자의 대상. 예를 들어 3+4에서 피연산자는 3과 4가 됩니다). 피연산자 위치를 계산해서 불러옵니다.
- 데이터 처리(Data process) : Date operation을 해서 피연산자를 operation(=연산) 시켜줍니다.
- 데이터 저장(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 |