OS 강의

김기훈·2026년 2월 12일

강의

목록 보기
3/4

강의 주소(한빛미디어)


2026/02/12

0강 ~ 1강

컴퓨터 구조를 알아야 하는 이유

  • 문제해결 능력을 배양하기 위해서 필요
    • 컴퓨터를 미지의 대상이 아닌 분석의 대상으로 인지
  • 성능 / 비용 / 용량에 대해서 고려하면서 개발 가능
    • 내가 개발한 프로그램이 어느정도의 서버를 필요로하는지 알아야 함

2026/02/15

2강. 컴퓨터 구조와 큰 그림

컴퓨터 구조

  • 컴퓨터가 이해하는 정보

    • 데이터
      • 숫자, 문자, 이미지, 동영상과 같은 정적인 정보
      • 컴퓨터와 주고받는/내부에 저장된 정보를 데이터라 통칭하기도
      • 0과 1로 숫자를 표현하는 방법
      • 0과 1로 문자를 표현하는 방법
    • 명령어
      • 컴퓨터를 실질적으로 움직이는 정보
      • 데이터는 명령어를 위한 일종의 재료
      • 명령어의 생김새와 동작 방식
  • 컴퓨터의 네 가지 핵심 부품

    • CPU
    • 메모리(주기억장치/RAM)
    • 보조기억장치
    • 입출력장치
      • 컴퓨터와 정보를 주고 받을 수 있는 장치
    • 메인보드(마더보드)
      • 컴퓨터의 핵심 4가지를 부착할 수 있는 판

메모리

  • 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
    • 어떤 프로그램이 실행되기 위해서는 메모리에 저장되어야 함
    • 메모리에는 "주소"라는 개념이 존재하기 때문에 내가 원하는 명령어/데이터가 어디에 있는지 알 수 있음
  • 프로그램이 실행되기 위해서는 메모리에 저장되어 있어야 한다.
  • 메모리는 실행되는 프로그램의 명령어와 데이터를 저장한다.
  • 메모리에 저장된 값의 위치는 주소로 알 수 있다.

CPU

  • CPU는 메모리에 저장된 명령 어를 읽어 들이고, 해석하고, 실행하는 부품
    • ALU: 계산기
    • 레지스터: CPU 내부의 작은 저장장치
    • 제어장치: 제어 신호를 내보내고, 명령어를 해석하는 장치
      • 제어 신호: 컴퓨터 부품들을 관리하고 작동시키기 위한 전기 신호
        • CPU가 메모리에 저장된 값을 읽고 싶을 땐 메모리를 향해 메모리 읽기라는 제어 신호를 보냄
        • CPU가 메모리에 어떤 값을 저장하고 싶을 땐 메모리를 향해 메모리 쓰기라는 제어 신호를 보냄
  • CPU는 메모리에 저장된 값을 읽어 들이고, 해석하고, 실행하는 장치다.
  • CPU 내부에는 ALU, 레지스터, 제어장치가 있다.
    • ALU는 계산하는 장치
    • 레지스터는 임시 저장 장치
    • 제어장치는 제어 신호를 발생시키고 명령어를 해석하는 장치

보조기억장치

  • RAM은 전원이 꺼지면 저장된 내용을 잃는다.
  • 보조기억장치는 전원이 꺼져도 보관될 프로그램을 저장하는 부품
  • 메모리는 실행할 정보를 저장하고, 보조기억장치는 보관할 정보를 저장한다.

입출력장치

  • 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품
    • 보조기억장치와 딱 잘라 구분되는 개념은 아니지만 메모리를 보조하는 특별한 입출력장치
  • 컴퓨터 외부에 연결이 되어 컴퓨터 내부와 정보를 주고받을 수 있게 함

메인보드

  • 메인보드에 연결된 부품은 버스를 통해 정보를 주고 받음
  • 버스는 컴퓨터의 부품끼리 정보를 주고받는 일종의 통로
  • 다양한 종류의 버스가 있음
  • 컴퓨터의 핵심 부품을 연결하는 버스는 시스템 버스

시스템버스

  • 시스템 버스의 내부 구성

    • 주소 버스: 주소를 주고받는 통로
    • 데이터 버스: 명령어와 데이터를 주고받는 통로
    • 제어 버스: 제어 신호를 주고받는 통로
  • 메모리 값 읽어 들이기

  • 메모리 값 쓰기


2026/02/16

3강. 0과 1로 숫자를 표현하는 방법

정보 단위. 비트(bit)

  • 0과 1을 표현하는 가장 작은 정보 단위

    • n비트로 2ⁿ가지의 정보 표현 가능
    • 프로그램은 수많은 비트로 이루어져 있음
    • 다만, 평소 "이 파일은 8,920,120 비트야" 라고 표현하진 않음
    • 비트보다 더 큰 단위를 사용
      • 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트•••
      • 1024개씩 묶은 단위는 KiB / MiB / GiB •••

워드(word)

  • CPU가 한 번에 처리할 수 있는 정보의 크기 단위

    • 하프 워드 (half word): 워드의 절반 크기
    • 풀 워드 (full word): 워드 크기
    • 더블 워드 (double word): 워드의 두 배 크기

이진법 (binary)

  • 0과 1로 수를 표현하는 방법

    • 숫자가 1을 넘어가는 시점에 자리올림
    • 우리가 일상적으로 사용하는 진법은 숫자가 9를 넘어갈 때 자리올림하는 십진법 (decimal)
    • 1을 넘어가는 시점에 자리 올림을 하여 0과 1만으로 모든 수를 표현하는 방법


0과 1로 음수 표현하기

  • 2의 보수: 어떤 수를 그보다 큰 2ⁿ에서 뺀 값

    • 쉽게 푸는 방법: 모든 0과 1을 뒤집고 1 더한 값

  • 풀이

  • 의문

    • -1011₍₂₎ 를 표현하기 위한
      • 0101₍₂₎과 십진수 5를 표현하기 위한 0101₍₂₎은 똑같이 생겼는데, 어떻게 구분?
    • 외관상으로는 구분 불가 이를 구분하기 위하여 CPU내부에 플래그(flag) 라는 레지스터가 존재
      • 이 플래그 레지스터가 음수인지 양수인지 표시를 해줌 (모든 숫자가 플래그를 들고다닌다고 생각하면 됨)

십육진법

  • 이진법으로는 숫자의 길이가 너무 길어진다
    • 십진수 32== 이진수 100000
  • 그래서 컴퓨터의 데이터를 표현할 때 십육진법도 많이 사용
    • 수가 15를 넘어가는 시점에 자리올림

이진수 / 십육진수 전환


2026/02/17

4강. 0과 1로 문자를 표현하는 방법

문자 집합과 인코딩

  • 문자 집합(character set)

    • 컴퓨터가 이해할 수 있는 문자의 모음
  • 인코딩 (encoding)

    • 코드화하는 과정
    • 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
  • 디코딩 (decoding)

    • 코드를 해석하는 과정
    • 0과 1로 표현된 문자 코드로 문자로 변환하는 과정

아스키 코드

  • 초창기 문자 집합 중 하나

    • 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자
    • 7비트로 하나의 문자 표현
      • 8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트(parity bit)
    • 간단한 인코딩 가능
  • 단점

    • 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현 불가
    • 아스키 코드는 7비트로 하나의 문자를 표현하기에 128개보다 많은 문자를 표현할 수 없음
    • 8비트 확장 아스키 (extended ASCII)의 등장, 여전히 부족

한글 인코딩: 완성형 vs 조합형 인코딩

  • 한글을 위한 인코딩이 필요

    • 한글의 특징
    • 알파벳을 이어 쓰면 단어가 되는 영어
    • 초성, 중성, 종성의 조합으로 이루어진 한글
    • 완성형 인코딩 방식과 조합형 인코딩 방식이 존재

EUC-KR

  • KS X 1001 KS X 1003 문자집합 기반의 한글 인코딩 방식

  • 완성형 인코딩

  • 글자 하나 하나에 2바이트 크기의 코드 부여

    • 2바이트 == 16비트 == 4자리 십육진수로 표현
  • 2300여개의 한글 표현 가능

    • 여전히 모든 한글을 표현하기에는 부족한 수
      • 웹,뙠,휔같은한글은표현불가능
  • 디코드 사이트


유니코드 문자 집합과 utf-8

  • 유니코드

    • 통일된 문자 집합
    • 한글, 영어, 화살표와 같은 특수 문자, 심지어 이모티콘까지
    • 현대 문자 표현에 있어 매우 중요한 위치
  • 유니코드의 인코딩 방식

    • utf-8, utf-16, utf-32 ...
  • 유니코드 테스트 가능 사이트

  • utf-8 인코딩

    • UTF (Unicode Transformation Format)== 유니코드 인코딩 방법
    • 가변 길이 인코딩: 인코딩 결과가 1바이트~4바이트
    • 인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름
    • ex

      • 한: D55C (== 1101 0101 0101 1100)
        • 11101101 10010101 10011100₍₂₎
      • 글: AEOO (== 1010 1110 0000 0000)
        • 11101010 10111000 10000000₍₂₎

2026/02/18

5강. 소스 코드와 명령어

고급 언어와 저급 언어

  • 고급 언어

    • 개발자가 이해하기 쉽게 만든 언어
  • 저급 언어

    • 컴퓨터가 이해하고 실행하는 언어
      • 기계어

        • 0과 1로 이루어진 명령어오 구성된 저급 언어
      • 어셈블리어

        • 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어

고급 언어 → 저급언어 변환

  • 컴파일 언어

    • 컴파일 언어로 작성된 소스 코드는 컴파일러에 의해 저급언어로 변환되고 (이 과정이 컴파일)
      • 컴파일의 결과로 저급 언어인 목적 코드가 생성됨
      • 컴파일러는 소스코드 전체를 확인하고 목적코드로 변환함
  • 인터프리트 언어

    • 인터프리터에 의해 한줄 씩 실행
    • 따라서 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요 없음

변환과정 확인


2026/02/19

6강.명령어의 구조

  • 명령어는 연산 코드와 오퍼랜드로 구성


오퍼랜드

  • 연산에 사용될 데이터 / 연산에 사용될 데이터가 저장된 위치(이게 더 빈번)
    • 오퍼랜드 필드 = 주소 필드

연산 코드

  • 연산코드가 담고있는 내용은 CPU마다 다름
  • 종류

    • 데이터 전송
      • MOVE: 데이터를 옮겨라
      • STORE: 메모리에 저장하라
      • LOAD (FETCH): 메모리에서 CPU로 데이터를 가져와라
      • PUSH: 스택에 데이터를 저장하라
      • POP: 스택의 최상단 데이터를 가져와라
    • 산술/논리 연산
      • ADD / SUBTRACT / MULTIPLY / DIVIDE: 덧셈/ 뺄셈/ 곱셈/ 나눗셈을 수행하라
      • INCREMENTY DECREMENT: 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
      • AND /OR / NOT: AND / OR / NOT 연산을 수행하라
      • COMPARE: 두 개의 숫자 또는 TRUE / FALSE 값을 비교하라
    • 제어 흐름 변경
      • JUMP: 특정 주소로 실행 순서를 옮겨라
      • CONDITIONAL JUMP: 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
      • HALT: 프로그램의 실행을 멈춰라
      • CALL: 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
      • RETURN: CALL을 호출할 때 저장했던 주소로 돌아가라
    • 입출력 제어
      • READ (INPUT): 특정 입출력 장치로부터 데이터를 읽어라
      • WRITE(OUTPUT): 특정 입출력 장치로 데이터를 써라
      • START IO: 입출력 장치를 시작하라
      • TEST IO: 입출력 장치의 상태를 확인하라

명령어 주소 지정 방식

  • 명령어의 크기가 크기때문에 직접 오퍼랜드에 명령어를 추가할 수 없음

  • 주소를 지정하게 되면 원래 오퍼랜드(10번지)는 4비트의 데이터를 표현 가능했지만

    • 주소를 지정함으로써 16비트의 데이터를 표현할 수 있음
  • 레지스터에 저장하는것도 가능

  • 유효주소(effective address)

    • 연산에 사용될 데이터가 저장된 위치
  • 명령어 주소 지정 방식 (addressing modes)

    • 연산에 사용할 데이터가 저장된 위치를 찾는 방법
    • 유효 주소를 찾는 방법
    • 다양한 명령어 주소 지정 방식들
  • 즉시 주소 지정 방식 (immediate addressing mode)

    • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
    • 가장 간단한 형태의 주소 지정 방식
    • 연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름
  • 직접 주소 지정 방식 (direct addressing mode)

    • 오퍼랜드 필드에 유효 주소 직접적으로 명시
    • 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦
  • 간접 주소 지정 방식 (indirect addressing mode)

    • 오퍼랜드 필드에 유효 주소의 주소를 명시
    • 앞선 주소 지정 방식들에 비해 속도가 느림
  • 레지스터 주소 지정 방식 (register addressing mode)

    • 연산에 사용할 데이터가 저장된 레지스터 명시
    • CPU가 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름
      • 메모리는 CPU밖에 있음 / 레지스터는 CPU안에 있음
  • 레지스터 간접 주소 지정 방식 (register indirect addressing mode)

    • 연산에 사용할 데이터를 메모리에 저장
    • 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시

2026/02/20

7강.C언어의 컴파일 과정

전처리 과정 (preprocesssing)

  • 본격적으로 컴파일하기 전에 처리할 작업들
  • 외부에 선언된 다양한 소스 코드, 라이브러리 포함 (e.g. #include)
  • 프로그래밍의 편의를 위해 작성된 매크로 변환 (e.g. #define)
  • 컴파일할 영역 명시 (e.g. #if, #ifdef,…)

컴파일 과정 (compiling)

  • 전처리가 완료 되어도 여전히 소스 코드
  • 전처리 완료된 소스 코드를 저급 언어(어셈블리 언어)로 변환

어셈블 과정 (assembling)

  • 어셈블리어를 기계어로 변환

    • 목적 코드(object file)를 포함하는 목적 파일이 됨

링킹(lingking)


2026/02/21

8강. CPU의 내부 구성 - ALU와 제어장치

  • ALU는 계산하는 장치

  • 제어장치는 제어 신호를 발생시키고 명령어를 해석하는 장치


ALU - 받아들이는 정보

  • ALU는 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들입니다.
    • 결과값을 레지스터에 저장하는 이유
      • CPU가 레지스터에 접근하는 속도가 CPU가 메모리에 접근하는 속도보다 빠르기 때문

제어장치

  • 클럭

    • 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위

2026/02/22

9강. CPU의 내부 구성 - 레지스터

  • 레지스터는 CPU 내부의 작은 임시저장장치
    • 프로그램 속 명령어 & 데이터는 실행 전후로 레지스터에 저장
    • CPU 내부에는 다양한 레지스터들이 있고, 각기 다른 역할을 가진다
    • CPU 종류마다 레지스터 종류는 다름

반드시 알아야 할 레지스터 - 1

  • 1. 프로그램 카운터

    • 메모리에서 가져올 명령어의 주소를 저장(메모리에서 읽어 들일 명령어의 주소)
    • Instruction Pointer(명령어 포인터)라고 부르는 CPU도 있음
  • 2. 명령어 레지스터

    • 해석할 명령어를 저장 (방금 메모리에서 읽어 들인 명령어)
    • 제어장치가 해석
  • 3. 메모리 주소 레지스터

    • 메모리의 주소 저장
    • CPU가 읽어 들이고자 하는 주소를 주소 버스로 보낼 때 거치는 레지스터
  • 4. 메모리 버퍼 레지스터

    • 메모리와 주고받을 값(데이터와 명령어)를 저장
    • CPU가 정보를 데이터 버스로 주고받을 때 거치는 레지스터

  • 프로그램 카운터는 가져오고자 하는 주소를 CPU로 가져왔다면 1 증가함

순차적인 실행 흐름이 끊기는 경우

  • 특정 메모리 주소로 실행 흐름을 이동하는 명령어 실행 시
    • (e.g. JUMP, CONDITIONAL JUMP, CALL, RET)
  • 인터럽트 발생 시
  • ETC...

반드시 알아야 할 레지스터 - 2

  • 5. 플래그 레지스터

    • 연산 결과 또는 CPU 상태에 대한 부가적인 정보
    • 현재 CPU가 어떤 연산을 하고 있었는지 / 상태가 어떤지 / 직 간접적으로 확인 가능
  • 6. 범용 레지스터

    • 다양하고 일반적인 상황에서 자유롭게 사용
  • 주소 지정에 사용

    • 7. 스택 포인터

      • 스택의 꼭대기 가리킴

      • 스택 주소 지정 방식
        • 스택과 스택 포인터를 이용한 주소 지정 방식
      • 스택 포인터
        • 스택의 꼭대기를 가리키는 레지스터 (스택이 어디까지 차 있는지에 대한 표시)
      • 스택은 메모리안에 존재 (메모리안에 스택처럼 사용 가능한 구역이 존재)
    • 8. 베이스 레지스터

      • 기준 주소 저장

      • 변위 주소 지정 방식
        • 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소 얻기
      • 변위 주소 지정 방식을 사용하는 명령어의 형태
      • 특정 레지스터
        • 프로그램 카운터

          • 상대 주소 지정 방식

            • 오퍼랜드 필드의 값(변위)과 프로그램 카운터의 값을 더하여 유효 주소 얻기

        • 베이스 레지스터

          • 베이스 레지스터 주소 지정 방식

            • 오퍼랜드 필드의 값(변위)과 베이스 레지스터의 값을 더하여 유효 주소 얻기
            • 기준으로부터 얼마나 떨어져 있는가가 기록됨
              • 이미지기준 200번지에서 50번지 떨어진 명령어 실행


2026/02/23

10강. 명령어 사이클과 인터럽트

명령어 사이클

  • 프로그램 속 명령어들은 일정한 주기가 반복되며 실행 이 주기를 명령어 사이클이라고 함
  • 메모리에 저장된 명령어를 실행하기 위해서는?

    • 인출 사이클

      • 가장 먼저 CPU로 갖고 와야 한다
      • 메모리에 저장된 값을 CPU내부로 가져오는 과정
    • 실행 사이클

      • 갖고 왔으면 실행해야 한다
    • 일반적으로 인출 - 실행 - 인출 - 실행 - ...
    • 하지만 CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있다
      • 추가적으로 메모리에 접근해야 하는 경우도 존재
      • 이러한 경우도 존재하기 때문에 "간접 사이클" 이 존재

    • 어떤 명령어는 인출과 실행 사이클만으로 실행되고
      • 어떤 명령어는 인출, 간접, 실행 사이클을 거쳐 실행됨

인터럽트

  • 인터럽트 (interrupt): 방해하다, 중단시키다

    • 'CPU가 꼭 주목해야 할 때', 'CPU가 얼른 처리해야 할 다른 작업이 생겼을 때' 발생
  • 종류

    • 동기(예외) 인터럽트

      • CPU가 예기치 못한 상황을 접했을 때 발생
    • 비동기(하드웨어) 인터럽트

      • 주로 입출력장치에 의해 발생
      • 알림(세탁기 완료 알림, 전자레인지 조리 알림)과 같은 역할

      • 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트 사용
      • 입출력장치는 CPU에 비해 느리다
        • 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 한다
  • 하드웨어 인터럽트의 처리 순서

      1. 입출력장치는 CPU에 "인터럽트 요청 신호"를 보냅니다.
      1. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인합니다.
      1. CPU는 인터럽트 요청을 확인하고
      • 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는 지 여부를 확인합니다.
      1. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업합니다.
      1. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다.
      1. 인터럽트 서비스 루틴 실행이 끝나면 4에서 백업해 둔 작업을 복구하여 실행을 재개합니다.
  • 처리순서 용어 정리

    • 인터럽트 요청 신호
      • CPU의 작업을 방해하는 인터럽트에 대한 요청
    • 인터럽트 플래그
      • 인터럽트 요청 신호를 받아들일지 무시할지를 결정하는 비트
    • 인터럽트 벡터
      • 인터럽트 서비스 루틴의 시작 주소를 포함하는 인터럽트 서비스 루틴의 식별 정보
    • 인터럽트 서비스 루틴
      • 인터럽트를 처리하는 프로그램
  • 인터럽트 요청 신호

    • 입출력 장치들이 CPU에게 지금 끼어들어도 되는지 질문하는 것과 같은 신호를 보냄
    • CPU가 인터럽트 요청을 받아들이려면?

      • 실행사이클이 끝나고 항상 플래그 레지스터속의 인터럽트 플래그를 확인
        • 인터럽트 플래그에는 현재 받아들일 수 있는지 없는지가 담겨있음
        • 하지만, 모든 인터럽트를 인터럽트 플래그로 막을 수 있는건 아님
  • 하드웨어 인터럽트에는 인터럽트 플래 그로 막을 수 있는 인터럽트(maskable Interrupt)와

    • 막을 수 없는 인터럽트 (non maskable interrupt)가 있음
  • 인터럽트 서비스 루틴

    • CPU가 인터럽트를 받아들이기로 했다면 인터럽트 서비스 루틴 실행
    • 인터럽트 서비스 루틴이란?
      • 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램
        • "키보드가 인터럽트 요청을 보내면 이렇게 행동해야 한다”
        • "마우스가 인터럽트 요청을 보내면 이렇게 행동해야 한다”
    • 인터럽트 서비스 루틴도 프로그램이기에 메모리에 저장
      • 인터럽트를 보내는 주체에 따라서 각기다른 인터럽트 서비스 루틴의 시작주소를 가지고 있음
  • 인터럽트 벡터

    • 각각의 인터럽트를 구분하기 위한 정보
  • 'CPU가 인터럽트를 처리한다

    • == '인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다
    • (+ 그리고 인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다)
  • 인터럽트가 발생하면 지금상태가 "스택영역"에 백업되고

    • 인터럽트 서비스 루틴이 끝나면 백업해두었던 내용을 복구한다.

결론

  • 실행 사이클이 끝나고 인터럽트 여부를 확인했는데 인터럽트가 발생했을 경우 인터럽트 사이클이 추가됨

2026/02/24

11강. 빠른 CPU를 위한 설계 기법

  • 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직인다.
  • CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행한다.

클럭

  • 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직이는가?
    • 꼭 그렇지는 않지만 일반적으로는 Yes
    • 하지만 필요이상으로 클럭을 높이면 발열이 심각해짐
  • 클럭 속도: 헤르츠(Hz) 단위로 측정
    • 헤르츠(Hz): 1초에 클럭이 반복되는 횟수
      • 클럭이 똑-딱-' 하고 1초에 한 번 반복되면 1Hz
      • 클럭이 1초에 100 번 반복되면 100Hz

코어와 멀티 코어

  • 클럭 속도를 늘리는 방법 이외에는?
    • 코어 수를 늘리는 방법 ("듀얼 코어", "멀티 코어"•··)
    • 스레드 수를 늘리는 방법 (“멀티 스레드"…··)
  • 코어(Core)

    • CPU 내에서 명령어를 실행하는 부품으로 여러 개 있을 수 있음

      • 현대적인 관점에서 “CPU"라는 용어를 재해석 해야 함
      • '명령어를 실행하는 부품?
      • 전통적으로 '명령어를 실행하는 부품'은 원칙적으로 하나만 존재
      • But 오늘날 CPU에는 '명령어를 실행하는 부품'이 여러 개 존재
      • '명령어를 실행하는 부품'을 코어라는 용어로 사용
  • 멀티코어 프로세서

    • 코어 수에 비례하여 속도가 증가하지는 않음
    • 얼마나 명령어들을 각각의 코어에 적절하게 분배하는가가 중요

스레드와 멀티 스레드

  • 실행 흐름의 단위

    • 스레드의 종류

      • 하드웨어 스레드: 하나의 코어가 동시에 처리하는 명령어 단위

        • 멀티스레드 프로세서를 실제로 설계하는 일은 매우 복잡하지만, 가장 큰 핵심은 레지스터
        • 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들을 편의상 '레지스터 세트' 라고 표기
        • 논리 프로세서 라고도 부름

      • 소프트웨어 스레드: 하나의 프로그램에서 독립적으로 실행되는 단위

        • 하나의 프로그램을 동시에 여러대에서 실행할 수 있다.
      • 1코어 1스레드 CPU도 여러 소프트웨어적 스레드를 만들 수 있다

profile
안녕하세요.

0개의 댓글