트랜지스터로 and, or, not 논리 게이트들을 구성.
cpu에서 계산담당 모듈 = 산술논리장치(Arithmetic Logic Unit, ALC)
회로가 어떻게 정보를 저장할까?
= NAND게이트 활용해서 SR래치 만들어서 가능
레지스터 = SR래치 여러개 붙인거
여기에다가 1바이트(8비트)마다 번호 1개씩 부여해서 메모리주소로 사용
SR래치 구조를 보면 레지스터,메모리 둘다 전원 끊기면 정보가 사라지는 이유를 알 수 있음.
cpu에게 기계 명령어로 어떤 연산을 할지 알려주면된다
가만히있다가 프로세스 실행될 때 돌아간다.
유휴상태 = 돌려야할 프로세스가 없는 상태(작업관리자의 System Idle Process)
운영체제가 프로세스들을 스케줄링해서 프로세스를 대기열에 올려놓고 우선순위에 따라 실행시킨다.
스케줄링 가능한 프로세스 없을 때 system idle process 실행시킨다
전력소모를 줄이기 위해서임. 이 프로세스는 CPU가 저전력 상태로 전환되도록 해줌.
클럭속도 낮추거나, 일부 코어를 꺼버린다. 이렇게 불필요한 활동을 줄여 시스템 효율성을 높임
CPU클럭 관리 할 떄 이 상태를 C-States라고 하는데 C0 ~ C4 로 갈수록 더 깊은 유휴상태를 의미
인터럽트 : 하드웨어나 소프트웨어에서 어떤 이벤트 발생시, cpu에 신호를 보내 작업을 중단하과 해당 이벤트를 처리하도록 하는 매커니즘.
while true 같은 무한순환 코드를 실행하고 있어도 CPU가 독점하는것으로 보이진 않는다.
타이머 인터럽트를 통해 프로세스 스케줄링을 제어하므로 무한순환이 있더라도 일정 시간마다 스케줄링된 프로세스를 실행시킨다. 따라서 무한순환떄문에 실행 못하는 문제는 발생하지 않음.
덧셈 뺄셈을 위해 2의보수를 사용한다.
만약 16비트라면
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1
로 표현가능
1의보수에서는 0 = 0000, -0000 으로 표현될 수 있는데 여기서는 그런 경우가 안생겨서 좋다.
부호에 신경쓸 필요 없이, 16비트 = -8 ~ 7 까지 표현 가능
-> 회로 설계의 단순화를 위해
분기 = branch = 프로그램 실행 중 조건문,반복문에 의해 프로그램 흐름이 갈라지는 지점.
조건문, 반복문등에서 발생하는 분기의 결과를 미리 예측해서 cpu의 효율성을 높이는 기술
올바르게 예측해서 파이프라인을 미리 채워서 성능을 유지시킬 수 있다.
이 예측이 맞으면 기존에 준비한 명령어를 cpu가 바로 실행할 수 있어서 성능 향상,
틀리게되면 파이프라인이 비워지고 cpu는 올바른 경로를 다시 채우는 데 시간이 걸려서 성능 저하 생김
이 분기예측 자체에도 cpu자원이 소모되지만 이를 통해 얻는 성능 향상이 이 비용을 상쇄하고도 남는수준. 파이프라인이 효율적으로 유지되고 전체 프로그램 실행 속도가 크게 향상됨. 조건문, 반복문 많을 수록 중요함

메모리만 충분하다면 하나의 cpu코어에서도 여러개의 스레드를 만들 수 있다. cpu는 근본적으로 자신이 실행하는 명령어가 어떤 스레드에 속하고 있는지 알지 못하고, 알 필요도 없다.
(cpu는 pc레지스터 주소에 따라 메모리에서 기계명령어 꺼내서 실행할 뿐)
이것을 이해하고 있어야 하는것은 운영체제다.
작업을 분할한 후 여러스레드에 배치하면 운영체제에서 이를 스케줄링하고 실행할 수 있으므로 여러 작업 실행 가능
블로킹 입출력 시간이 길어져서 뒤의 코드에도 영향간다 -> 멀티스레드 비동기로 실행하면 됨
멀티프로세싱 번거롭고 무겁고 비용이 많이듬
그래서 멀티스레딩 많이 쓰이게 됨
동시성 작업이 필요 없다면 코어 하나당 스레드 하나가 가장 나은 선택
스레드 수가 한계에 달하면 운영체제 성능이 매우 떨어짐
(컨텍스트 스위칭 부담 증가)