컴퓨터구조 정리

Hank Kim·2023년 9월 16일
0

CS

목록 보기
1/1

컴퓨터구조의 큰 그림

  1. 컴퓨터가 이해하는 정보
    데이터, 명령어
    data and instruction
    데이터 숫자 문자 이미지 동영상과 같은 정적인 정보
    명령어
    컴퓨터는 명령어를 처리하는 기계
    1과2를 더하라
    1과 2가 데이터
    '안녕하세요'를 출력하라에서 안녕하세요가 데이터

  2. 컴퓨터의 네가지 핵심 부품
    cpu,메모리, 보조기억장치, 입출력장치
    메인보드에 4가지 핵심부품이 시스템버스로 연결되어있다
    메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장함
    현재 실행되는!

cpu 내부구조
alu, 레지스터, 제어장치
alu:계산기
제어장치는 제어신호를 내보내고 명령어를 해석하는 장치 cu
레지스터 작은 저장장치

제어장치가 메모리 읽기 신호를 받아서 메모리를 읽어와서 레지스터에 저장. 그다음 연산을 alu가 실행
메모리 쓰기 제어신호를 cu가 내보내서 메모리에 저장

시스템 버스
주소버스 데이터버스 제어버스
뭘 주고받느냐의 차이

운영체제도 메모리에 올라가 있다
커널영역이라는 특별한 공간에 적재되어서 운영된다
웹브라우저등 응용 프로그램은 사용자 영역

명령어의 구조

컴퓨터가 이해할 수 있는 정보는 데이터와 명령어이다
data and instruction
명령어는 연산코드와 오퍼랜드로 이루어져있다
명령어가 수행할 연산이 연산코드이고 연산에 사용할 데이터를 오퍼랜드라고 한다
하나의 명령어는 연산코드 필드 오퍼랜드 필드로 이루어진다
기계어와 어셈블리어 또한 명령어이기 때문에 연산코드와 오퍼랜드로 구성됨

push rbp //오퍼랜드개 한개인 경우
mov eax, 0 // 오퍼랜드가 2개인 경우
ret //오퍼랜드가 없는 경우

오퍼랜드는 연산에 사용할 데이터 또는 데이터가 저장된 위치.
데이터나 메모리 혹은 레지스터 주소가 온다
많은경우 메모리 주소 혹은 레지스터 이름이 담긴다.
그래서 오퍼랜드 필드를 주소 필드라고 부르기도 한다

오퍼랜드가 없으면 0-주소 명령어
오퍼랜드가 하나면 1-주소, 2개면 2주소 3개면 3주소 명령어

연산코드의 종류는
데이터 전송 move push pop
산술논리 연산 add subtract
제어흐름 변경 jump return
입출력 제어 read write

주소 지정 방식
명령어의 길이 = 32비트 컴퓨터면 32비트 버스의 크기도 32비트 cpu가 레지스터를 이용해 한번에 처리할 수 있는 데이터 크기도 32비트 주소 갯수도 2의 32승.
연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식 addressing이라고 함.
즉시 주소 지정방식은 연산에 사용할 데이터를 오펄낸드 필드에 직접 명시
직접 주소 지정 방식은 오퍼랜드 필드에 유효 주소를 명시
간접 주소 지정 방식 유효 주소가 저장된 주소를 오퍼랜드 필드에 명시
(느리다)

연산에 사용될 데이터가 레지스터에 저장되어 있는 경우
레지스터 주소 지정 방식
데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
레지스터 간접 주소 지정 방식
연산에 사용할 데이터를 메모리에 저장 레지스터는 유효 주소를 가지고 있고 오퍼랜드에는 레지스터 이름을 저장

CPU 작동원리

cpu구성은 ALU CU Register

ALU

ALU는 CU로부터 제어신호를 받고
레지스터로부터 피연산자를 받아들임
결과로 값을 레지스터에 저장하고 플래그 레지스터에 플래그를 내보냄
플래그는 예를 들어 계산결과가 음수라거나 연산결과가 레지스터 크기보다 크다 등의 추가 정보를 내보냄
대표적인 ALU의 플래그는 부호 플래그, 제로 플래그, 오버플로우 필래그, 인터럽트 플래그 등이다.
플래그 레지스터엔 각각의 상태가 존재함
플래그 레지스터에서 부호 플래그가 1이라면 연산결과가 음수
ALU내부는 계산을 위한 전자회로들이 존재 가산기 보수기 시프터 등

CU

제어장치는 cpu 구성요소 중가장 정교함
제어장치는 클럭 신호를 받아들임
클럭이란 컴퓨터의 모든 부품을 움직일 수 있게 하는 시간 단위
클럭단위에 따라서 레지스터에서 데이터가 이동하는 등의 작업이 이루어짐
하지만 한 클럭마다 동작한다는것은 아님 여러 클럭에 걸쳐서 하나의 명령어가 수행될 수 있다.
IR 명령어 레지스터로부터 해석해야 할 명령어를 받아들이고 해석 후에 제어신호를 발생시켜 컴퓨터 부품들에 수행해야할 내요을 알려줌
플래그 레지스터 속 플래그 값을 받아들이고 참고함
제어버스에서 전달된 신호를 받아들임
그리고 내보내는 정보는
CPU외부에 전달하는 신호와 내부에 전달하는 신호로 나뉜다.

공통적으로 중요한 여덟개의 레지스터
프로그램 카운터 PC
명령어 레지스터 IR
메모리 주소 레지스터
메모리 버퍼 레지스터
플래그 레지스터
범용 레지스터
스택 포인터
베이스 레지스터

프로그램 카운터는 메모리에서 가져올 명령어의 주소를 저장 IP라고도 함
명령어 레지스터는 해석할 명령어를 저장하는 레지스터
제어장치는 명령어 레지스터 속 명령어를 받아들이고 해석한 뒤 제어신호를 내보냄
메모리 주소 레지스터는 메모리의 주소를 저장하는 레지스터 MAR
cpu가 읽어들이고자 하는 주소 값을 주소 버스로 보낼때 거친다
메모리 버퍼 레지스터 MBR
메모리에 쓰고 싶은 값이나 전달받은 값은 메모리 버퍼 레지스터를 거침
데이터버스로 주고받을 값은 메모리 버퍼 레지스터를 거친다

주소 1000에 저장되어있는 프로그램이 있다고 하면
프로그램 카운터가 1000을 저장함 가져오기 시작할 명령어가 1000번지에 있다
프로그램 카운터는 메모리 주소 레지스터에 1000을 저장함
그럼 cu가 메모리 읽기 신호가 제어버스로 mar값이 주소버스로 메모리에 전달됨
메모리 값은 데이터 버스를 통해서 메모리 버퍼 레지서터로 전달되고 프로그램 카운터가 증가되어 다음 명령어를 읽을 준비를 함
메모레 버퍼 레지스터에 저장된 값은 명령에 레지스터로 이동
제어장치는 명령어 레지스터의 명령어를 해석하고 제어신호 발생
프로그램 카운터는 지속적으로 증가하며 계속해서 명령어 읽어들인다.
하지만 프로그램 카운터가 항상 순차적으로 실행하는것은 아니다
jump call ret과 같이 특정 메모리 주소로 실행흐름을 이동하는 명령어가 존재

범용 레지스터
데이터와 주소를 모두 저장할 수 있다
여러개의 범용 레지스터가 cpu안에 존재

플래그 레지스터
alu연산 결과에 따른 플래그를 저장

스택 주소 지정 방식
프로그램 카운터 스택 포인터 베이스 레지스터는 주소 지정에 사용될 수 있는 특별한 레지스터
스택 주소 지정 방식은 스택과 스택 포인터를 이용한 주소 지정 방식
스택은 메모리 안에 존재 스택처럼 사용하도록 암묵적으로 약속된 메모리 속의 영역

명령어 사이클
명령어들이 일정한 주기가 반복되며 실행된다
인출 메모리에 있는 명령어를cpu로 가져온다
실행 제어장치가 ir에 담긴 값을 해석하고 제어신호 발생
간접사이클
명령어를 인출하여 가져왔더라도 바로 실행할 수없는 경우가 있음 메모리를 한번 더 접근해야해서

인터럽트
cpu의 작업을 방해하는 신호가 인터럽트
인터럽트는 동기 인터럽트와 비동기 인터럽트가 있음
동기 인터럽트는 명령어 수행중 오류와 같은 예외적 상황을 마주친경우 exception
비동기 인터럽트는 입출력장치에 의해 발생하는 인터럽트. 완료 알림
일반적으로 이 비동기 인터럽트를 인터럽트라 칭하기도 함. 하드웨어 인터럽트라고도 한다
이 하드웨어 인터럽트가 존재하는 이유는 cpu가 주기적으로 입출력장치의 완료여부 확인하지 않도록 하기 위해서
cpu사이클을 낭비하지 않도록

하드웨어 인터럽트 처리 순서
입출력장치는 cpu에 인터럽트 요청 신호 보냄
cpu가 인터럽트 확인하고 인터럽트 플래그를 통해 받아들일수 있는지 확인
cpu가 지금까지 작업 백업
인터럽트 벡터를 이용해서 인터럽트 서비스 루틴 실행
서비스 루틴 실행 끝나면 작업을 복구하여 실행 재개

인터럽트 서비스 루틴 = 인터럽트 핸들러
인터럽트 핸들러는 해당 인터럽트를 어떻게 처리하고 동작할지에 대한 프로그램
인터럽트 핸들러는 입출력장치마다 다르다
각기 다른 인터럽트 핸들러를 구분하기 위해서 인터럽트 벡터를 이용함
인터럽트 핸들러의 시작 주소를 알 수 있다
cpu는 인터럽트 요청 보낸 대상으로부터 데이터버스를 통해서 인터럽트 벡터를 전달받음
프로그램 카운터 등 현재 프로그램을 재개하기 위해 필요한 내용은 스택에 백업함

CPU 성능향상 기법클럭, 멀티코어,멀티스레드
컴퓨터붑품들은 클럭 신호에 맞춰서 움직인다
클럭 속도가 높아지면 cpu는 더 빠르게 명령어 사이클을 반복
클럭의 단위는 hz
클럭 속도는 일정하지 않음
기본 속도와 최대 클럭 속도가 있다
고성능을 요하는 순간에 순간적으로 클럭 속도를 높인다.
최대 클럭 속도를 강제로 더 끌어올리는것을 오버클럭이라고 한다
클럭속도를 무작정 높이면 발열 문제가 심각하다

cpu의 코어와 스레드 수를 늘려서 빠르게 만들수도 있다
명령어를 실행하는 부품은 코어라는 용어로 사용됨
그래서 명령어를 실행하는 부품인 전통적 개념의 cpu, 코어를 여러 개 포함하는게 멀티코어
멀티코어 cpu 또는 멀티코어 프로세서
코어가 많아진다고 작업이 꼭 빨라지지는 않는다

스레드
스레드는 실행 흐름의 단위이다
하드웨어적 스레드가 있고 소프트웨어적 스레드가 있다
하드웨어적 스레드는 하나의 코어가 동시에 처리하는 명령어 단위이다
여러 스레드를 지원하는 스레드는 하나의 코어로도 여러개의 명령어를 동시에 실행할 수 있다
2코어 4스레드는 2개의 부품으로 4개의 명령어를 처리
하나의 코어로 여러 명령어를 동시에 처리하는 cpu를 멀티스레드 프로세서라고 함
소프트웨어적 스레드
하나의 프로그램에서 독립적으로 샐행되는 단위
프로그램이나 운영체제에서 말하는 스레드는 보통 이거다
하나의 프로그램은 실행되는 과적ㅇ에서 한 부분만 실행될수도 있지만 여러 부분이 동시에 실행될수도 있다
입력을 화면에 보여주고 맞춤법이 맞는지 검사하고 수시로 내용을 저장하는 기능
각각의 스레드로 만들어서 동시에 실행한다
프로그래밍 언어를 이용해서 소프트웨어적 스레드를 만들 수 있다

profile
JavaScript, Python Algorithm

0개의 댓글